This page is designed to use web standards. You are using a browser that does not properly handle these standards. The website will work properly (it just won't look so hot) so you should consider upgrading. Any modern browser should work fine (Safari, Mozilla, IE, etc.)
Visit the Web Standards Project for more information.
For many years, there has been a trend in all industries to look to outsourcing as a method to “reduce costs” and “improve efficiencies.” In the software industry, this has given rise to large numbers of firms in countries where the cost of labor is low; India, Eastern block countries, Malaysia, etc. This is a popular topic in management and business books. But does it really work? Does it let a company produce better software for less? I think not. And I think it fails on several fronts.
Team building – Producing quality software requires a strong team. What makes a strong team? The question that is usually asked, is whether a team has “jelled.” To me this means are they all thinking on the same wavelength. Does the team communicate outside of the traditional methods of email, specifications, designs, memos, meetings. Do they get together for a beer or dinner after work to socialize, but end up hashing out that tricky algorithm? The thing you may see here is that all of this requires physical proximity. It is very hard to create this jelled team when you are in 4 time zones spread across the globe. As an example, I had a conference cal yesterday with all of the software managers in Swisslog; in order to make it work, I had to wake up at 5am and the guys in Australia were up at 10pm.
“But wait!” you say, “what about all of those open source projects that have people all over the globe? They can do it! Why can’t you?” Simply put, they are different. If you look at most open source projects, you will find while a large number of people may have contributed, there are usually a very small group of core contributers who do most of the work. They receive patches and suggestions from the group but do the critical work themselves. The other huge difference is that open source projects don’t have to be cost effective, everyone is working for free.
Costs – Cost is the bean counter argument for outsourcing. Why pay $120/hour for a programmer in the US when you can get 4 programmers in India for $30/hour? On the surface it seems like you an get far more work done for less money. But in reality can you? I don’t think so. From my experiences, you end up spending far more money with offshoring. The cost of the off-shored programmers is cheaper, but you end up spending more money on on-shore activities. In order to have a successful offshore, you need rock solid requirements, specifications, and designs. You also need far stronger project management. This all takes time.
Communication – So now you have a bunch of code from your offshore team, now what? You need to test it, which will inevitably find bugs. If you are in the US and working with a team in India, you generally communicate via email. I have heard the argument that since they are nearly 12 hours off that they can be productive while you sleep. That sounds good, but in reality what it means is that every email “transaction” now takes 24 hours to complete.
Obviously I am not a fan of this method of development. Can it work? I’m sure it is possible for large projects where the entire project takes place in another country, but then you are not really offshoring, you are just onshoring it in another country. I have seen multiple companies I have worked at try to make this work, and I don’t believe it can in the small/medium sized tech companies.
What do you think, am I right?
If you want to progress and grow in your career, you have to confront new challenges. When I started as a developer, the challenges were straightforward; write code at the direction of my technical lead. The scope of my decision making power was small. I could choose how to implement an algorithm, but the larger decisions were out of my hands.
As I grew, I wanted to make more of a difference in the bigger picture, but still at the technical level. I moved up to the role of technical lead. The biggest challenge was no longer the technical, it started to be people. What did the customer want? Not what did they say, but what did they need. Learning that people are not computers was hard. I couldn’t assume that my audience would understand what I understood. I had to learn people. And people are messy, illogical, emotional, greedy, and unpredictable, the antithesis of computers. It took time, but I got good at it.
This brings me to today. As a manager of technical staff, I mostly deal with people. While understanding the technology is important, understanding the problem is more important, and most important is knowing who to apply to the problems to achieve the best results. This has its easy side when you are acting in the positive direction; applying the right person to the right task. The much harder part is when you make a mistake and have the wrong person in a role. You have to be willing to make a switch. I may know it is the right thing to do, but it is hard. Seeing what is best overall may not be percieved to be best by all the individuals involved.
These challenges have forced me to grow in my job and as a person. I do hope I am making the right choices. I’ve had great teachers so I feel confident. I think if I ever stop worrying it is time to quit.
So much for my musings at 38,000 feet.

I have a favorite question to ask people on interviews for software development: “Do you see programming as an art or a science?” There is no “right” answer to the question, I want to see how they answer it. For me the answer is both. While technical competency is critical, the mark of a truly talented software developer, or more accurately, designer is a creative spirit. While a nice lead in, my interview question only partly relates to what I thought I’d write about. The last few days of crappy weather have put me in a thoughtful mood, one where I found myself settling on the topic of creativity and what makes people (or more importantly, me) happy.
Looking at software again, the aspect of development that kept me up at night, brain turning, writing notes, forcing me to go into the office early was the challenge of solving the problem. Let someone else do the execution, that is the gear turning part, the true joy comes in figuring out how to make the machine. And I’m really good at designing the software machine. The challenge and sometimes frustration comes when I have the passion but not the skill (yet) to execute what I can see in my head.
My photography is definitely at that stage. I love photography but haven’t reached the point where I can always capture what I see in my mind’s eye. I am very proud of what I have produced, have filled my house with great art that I created, and enjoy looking and having it looked at. However, it doesn’t feel like I have “got it” yet. There is something that seems just out of reach, as if it were right there that if I could just get my hands on it, everything would click. When Tiffany and I saw an exhibit of Ansel Adams it is blindingly obvious that he had that thing. Whatever that thing is.
It makes me think of when I was a kid. My father was a very talented artist; painting, drawing, doodles all over the place. It was as if his mind could not function if he didn’t keep that part of his brain busy. It is an an aspect I did not think I had inherited but maybe I have, just in different mediums.
It is cool that the desire to create seems independent of the tools. For me it can be capturing a beautiful image, creating a wonderful meal, writing an elegant email on a meaningless topic, developing a cool solution to a computer problem, building a simple, clean website, or even just a nice turn of phrase. The urge to create is a great thing and it is amazing how satisfying it is.