Saturday, February 27, 2010

Software Design Lessons for Business People

At work recently, a client requested a huge, complicated (but really cool) feature. Because it was such a cool feature, I slightly underestimated in hopes that the client would approve it. When they found out about the estimate, the client was surprised it was so high - I think they even called it "absurd!" They thought the (huge, complicated) feature would take no more than 2 hours.

This isn't the first time something like this has happened. Most business people seem to think that the hard part of software development is thinking of how a feature should work. In other words, "I can think of how it works, so programming it must be easy!"

So, business people, here's a good way to think of software development. Imagine that you have a worker who only speaks Italian. You have a simple task that you want him to do. However, this particular worker does exactly what you tell him, only what you tell him, and all of what you tell him. So you have to come up with exact instructions, translate them into Italian, watch him try to perform the action, then alter the original instructions if things don't go the right way. How many times would you have to let him go through the procedure before you got it right? How many provisions would you have to create for unusual situations?

Now take that employee and make it a computer. That's software development! We have to translate requirements into exact instructions that the computer understands. Coming up with the requirements is important, but it's just the first step of a long process.