Learning to Lead

Written on December 1st, 2010 by

I have spent my life learning to be the best at the things I do. It is a constant and ongoing effort. I started by having an initial destination, but no way to get there. I learned to drive. Then as I discovered more destinations I wanted to visit, I learned to become a better driver. I wanted to be able to get there as soon as possible. Sometimes that meant taking new routes, driving over different terrain, or in extraordinary weather. I became a skilled driver.

Eventually, others wanted me to take people with me to my desired destinations. However, they were not the driver I was. They did not know the way. They had been told of the next grand location, but did not understand the path to get there. I was capable of figuring it out. Thus, I was asked to help them get there. Unfortunately, they quickly fell behind me and lost the path. I needed them to complete my journey. I found myself going back to look for them and point them in the right direction again. Showing them the way was not enough.

It turned out the other drivers did not know how to drive as well as I did. They could not follow me. Some of the paths I chose, they could not traverse. Not only did they need to know the way, they needed to be taught how to drive too. I do not know how to teach people to drive. I only took the time to learn how to drive myself. Since teaching people how to drive is becoming one of the things I do, I need to learn how to do it as best I can.

Leading people requires far more skill than making the journey myself. I have to understand the driving skills of each driver following me. Can they drive in rain? Can they drive on gravel? What kind of car do they drive? Is it a front-wheel drive vehicle? Is it a 4×4? This determines the route we can take. Some locations cannot be reached without teaching them new driving skills. We cannot reach an isolated mountain location with only a gravel road as an entrance unless the drivers are capable of navigating mountainous terrain on gravel roads. If they need to learn the skill, I need to know how long it will take them to learn it. Is it reasonable to reach a destination over a mountainous gravel road in three months if they do not have any experience with gravel or mountains? Perhaps I need to take them to slightly less desirous location that only requires the ability to drive on gravel. This would allow me to spend three months making the journey while teaching them about gravel roads. We can follow it up with a second journey to understand what it is like in mountains. It may require us to take six months to get to our final destination, but it may prevent a bad accident along the way. The bad accident could set us back even further if they are kept in a hospital for twelve months. There is a lot to consider when leading others to a destination I could reach myself without much fuss.

Why do I need to lead others to a common destination? I can not do everything by myself. There simply is not the time. If we are transporting resources to the new spot, I may have to make many journeys to get everything to the final location. By then, it could be too late. If I lead others, they can help transport. They could also begin to make trips without me. Maybe someday they would lead others. Our ability to overall productivity increases as I teach others my craft.

I wanted to go somewhere. I learned to get there. Others want the ability to get to the same location. I need to understand their skills along with how well they can learn new skills to plot a course we can all take to accomplish the journey in the shortest amount of time possible. Learning to lead is not easy. I suspect I will be working at it for a long time. After all, I spent 23 years learning to drive, and I am still learning new techniques to this day. The best advice I have so far is tell people where you are going, tell them how you intend to get there, and then help them get there.

Side Note: I am a software developer. I currently am leading a team of six to eight developers depending on the day. We need to learn the latest technologies and methodologies to produce quality software in a cost effective, yet timely, manner. All that being said, I have been playing a lot of Gran Turismo 5 lately on the Playstation 3. Thus, I spend a lot of time analyzing how I and others on the road drive. I thought I would combine the two to explain my latest feelings and insights. No matter where you go in life, never forget how you got there. I got to where I am in life by working hard and playing harder. I enjoy making software, but I will always make time for playing videogames.

Never

Written on October 27th, 2010 by

I grew up to the phrase, “Never say never.” I grew up reading fantasy and science fiction books and watching action movies like any other boy. However, perhaps more than the excitement, I loved the story. When I got to school, I did not stop reading or watching movies. I also began getting into role-playing games (RPG’s) on both the console and the pen-and-paper variety, think Dungeons & Dragons. While those are a little beyond the norm, I took it a step further. I paid attention in history class. I heard about Alexander the Great and Julius Caesar. I read about Napoleon and General Eisenhower. I watched documentaries on Ulysses S. Grant and Robert E. Lee. I grew up believing a person could be great. I believed I could be one of them. Then I got older.

I was expected to find a way in life. I could not continue dreaming of being the next Michael Jordan, Steve Young, or Andy Roddick. I had to grow up. I was never very keen on the idea. By this time, computers had become an avenue to more stories and dreams. I began to pursue basic web development, and then on to programming. I could not decide whether I wanted to make games that future generations could love or websites which would open the eyes of others. I began walking down that path. On the side, I kept myself grounded with history classes. They were a constant reminder of where I wanted to be. I wanted to be in the history books.

I graduated college and got a job. I got told, “Welcome to the Real World.” It turns out it is not much different than whatever world I was in before. People have expectations, and it is my responsibility to meet them. That means even if I do not like it. I am very independent. I do not like someone else telling me what to do. At the same time, I want people to listen to me. I used to yell louder in hopes I could drown out the others until they had to listen to me. Sometimes I still do. With my job, I wanted to write code. I wanted my code to change the world.

My boss recently shifted me into a new sort of role. I coordinate developers literally on the other side of the world as we work on an application used by people in the same city as me. The new role requires getting up before the sun because people on the other side of the world work very different times than we do here. I am told it has something to do with an 11.5 hour timezone difference. I also spend most of my days in meetings. Some days I spend the entire day in meetings. Each meeting has people asking me to get work done. I struggled to understand how I was suppose to get work done while I was constantly in meetings. I wanted to be writing the code rather than sending it off to others. I could do it better. I yelled a little bit.

I still do not know whether I want to continue pursuing the road I am on or return to the fork in the road. However, in traveling down this new road, I learned something. If I want to be great, I do not have to do the things at which I am great. I just need to continue meeting the challenges laid before me. I have to rely on the people around me to help me. I have to rely on others to point me in the right direction when I can no longer see the road. I will have to try new things. I do not know where I am going. I do not know where I will end up. The one thing I know is I can never stop trying.

We Don’t Do Software

Written on September 1st, 2010 by

I recently read this article on the need for non-software companies to recognize the impact of their internal software development. It reminded me a lot of where I work. The general culture at my workplace says, “We are in the x business. We don’t do software.” The idea being we buy software at every opportunity and only resort to developing it when we have no other options. The result is a lot of money thrown at very expensive software packages which hardly do what we want after we fight with for a year. There has been a recent move towards using open source software over in-house software, but it still suffers from the same problem. The result is we do not apply as much emphasis on developing our software development environment as we should. Afterall, why bother modernizing if you only write a handful of apps never intended to see the light of day?

The refusal to address our software problems is only making matters worse. While commercial products often do meet our basic infrastructure needs, they do not and cannot come close to making us a successful business. The result is we implement the software closest to the core of our brand in-house. As time goes on, we continue to build applications on top of past applications. However, many of our past applications are outdated or were quite possibly outdated the day they were created. We continue to incur debt. Quite frankly, we are falling behind. Old applications need renovated. Current applications need modified. New applications need developed. All the while, we use yesterday’s practices because we do not have extra time to learn modern techniques.

Nearly every business today does software. Particularly if a business provides online services or makes transactions, it needs to consider itself in the software industry. Take a look at a company’s income and see how it aligns with spending on development resources. If a large percentage of revenue comes from areas supported by in-house developers, this is a good suggestion the company is in the software business. They need to put effort into improving and supporting their development efforts because otherwise their software debt will consume company expenses.

Balancing Today with Tomorrow

Written on August 25th, 2010 by

I have spent the past six months trying to learn to balance today with tomorrow from an IT perspective. Today is about providing solutions to problems one has today. Tomorrow is about solving problems one will have in the future given their current situation and direction. The purpose of IT is to support business. While IT for IT’s sake is fun, it does not provide real value. Aligning IT to solve business problems is key to success. When business has an idea for a great new product, they need a solution to implement the product. By spending large amounts of time implementing the perfect solution which is robust, but easily adaptable to any direction the product may go, the business may miss out on its opportunity to capitalize on the full potential of the product. However, implementing the quickest solution to get to market as fast as possible can leave the product unable to adapt as customers begin to request new features. Balancing these two sides is key to the success of IT.

My company is very oriented towards today. They want a solution as soon as possible. Cleaning up the aftermath is left for tomorrow. The problem is tomorrow quickly becomes today and new problems need solutions implemented. Too often, no time is left to prepare for tomorrow. Frequently, we find ourselves wasting time today because all we thought about yesterday was yesterday’s problem. One example is the vast quantity of processes we have today with their own implementation to FTP files. FTPing a file is a fairly simple process and easy to implement. As a result, any time we needed to FTP file, we implemented it for our specific situation. As a result, we have never created a generalized process for FTPing files. Implementing a new specific solution always seemed easier than trying to make something more general and reusable. However, when looking back, we would have been better off creating a generic process to FTP files and reusing it as necessary than implementing one for each specific situation.

As a counter to my company’s constant band-aid on top of a band-aid approach, I repeatedly voice a need for general solutions which can be reused. However, it is not uncommon for me to find myself in a situation where there simply is not enough time to develop a generic application over a specialized application. Sometimes, we simply do not understand the domain well enough to generalize. If we tried, we would likely spend a lot of time creating a process that really is not reusable. As a result, we would need to spend more time reworking it later.

The result is we need a mixture of today and tomorrow. When time is of the essence, we need to create a solution that meets the requirements. That being said, we also want the application to be designed to be easily changed down the road. Then, as additional requirements develop, we modify the original application to meet the expanded scenarios. The result is something akin to agile software development practices. The key is to allow time to refactor the original application. If the requirements are moderately different early on, it may be more work to adopt a common approach. However, as the area matures, the small time spent upfront will begin to be returned. Fortunately, the time spent at the beginning of the process is not too great to warrant a large risk of wasted time if the product flounders. In essence, we need to meet today’s problems by adapting yesterday’s solutions to be prepared for tomorrow.

Words of Wisdom (06.30.10)

Written on June 30th, 2010 by
  • There’s something to be said for the light rain after a large storm.
  • Some days I feel like I can tackle the world. The only problem is tackling the world takes more than a day.
  • When in doubt, follow the path before you, but when you see an opportunity for a better route, take it.
  • When looking for a particular file suffix, look from the back of the file name.
  • When tracking down cupcakes in a convoluted mess of cubicles, one feels a bit like a rat in a maze hunting cheese.
  • Mistakes are heavier when wrapped in red tape. Hence, by refining the red tape to be a finer material, we can reduce the weight of mistakes.
  • Restarting Windows is like restarting a relationship. It might fix the most recent problem, but the fundamental flaws remain.
  • You know you’ve been working too much when you attempt sign into your personal blog with your work ID.
  • Every line of code in a block should be at the same level of abstraction.
  • If an algorithm dominates a function, separate it into a helper function.

A Busy Week

Written on September 1st, 2009 by

While there are a lot of topics I would like to write on, I am trying to keep my head above water at the moment. Here is a list of things I have done in the past week:

  • Discussed a job offer from the financial services company I have interned at the past three summers
  • Worked on a website for a nearby community trying to rebuild after a tornado followed in the next year by flooding
  • Spent time looking into helping another similar community overhaul its website, but as of today it looks like they only want minor HTML skills; so, I will likely skip on the task for something requiring a little more technical know-how
  • Began talks about doing some consultant work for another web company
  • Created a Windows XP on a virtual machine for some testing purposes
  • Created an Ubuntu virtual machine for experimental development purposes
  • Played tennis at least every other day
  • Gone on two bike rides
  • Attended my job for Information Technology Services – Network Services (ITS-NS) as a student programmer
  • Gone to my two classes
  • Sat in on a class in which I am not officially enrolled
  • Met with my computer science undergraduate research advisor
  • Done some preliminary research for my research project
  • Bought tickets to the UNI vs Iowa football game coming up this Saturday
  • Got my car’s ventilation fan motor replaced by my girlfriend’s father
  • Other miscellaneous social activities including things such as watching movies, going out to eat, and bonfires
  • Laundry…

Remember how I talked about having an easy semester due to a light class load? That was a funny idea! For starters, everyone else has yet to get heavy loads of homework. This seems to be true for everyone except for my girlfriend which is mildly disappointing. Thus, friends are always asking about going and doing things since they know I am the one with very little classwork to tie me down. However, when all of their activities are staggered, it can quickly fill up a day. I am almost getting worn out. I have always found classes to be rather relaxing. All I have to do is sit there, listen, and take notes. That requires very little energy on my part. Especially when it is compared to things like tennis and bike rides. Another habit is to monitor my water consumption by ensuring I drink so much water during each class. The result is I am getting tired and pushing myself to stay properly hydrated.

I would go into more details on all of the various activities, but that would take too long if I touched on each one of them. It is also getting to be 12:30 AM, and I have a busy day ahead of me. Already on the schedule is going into work a bit late so I can scan a Non-Disclosure Agreement as well as make a business call about my job offer. Then it is work and class. I have the afternoon open to work on the community website before meeting with a couple of their representatives to discuss some things. I will return here later at night to do some laundry and get to work on one of the projects on the list. I should probably also slide in another business phone call in the afternoon. My video editing projects have been put on temporary hold as I stay caught up on web development projects. I am beginning to feel like I am already working full-time. In some ways, it is kind of nice even if it means things are a bit busy.