07 October 2008

Letter from a software engineer to his boss who is a computer literate

I am no car mechanic
The Volkswagen beetle is popularly known as bug. But there is a very big difference between fixing the car and S/W. All the bug cars have a fixed/same design. So it is like, we have the fixed/bug-free code in hand, and there is a copy of modified/buggy car. The mechanic needs to find the diff and patch which is quiet mechanical compared to fixing S/W. S/W is like making each and every car with a different design, engine etc.. (It is because they do different things as opposed to cars which do the same thing). It is like different vehicles but way more in no(infinite to be precise) than flights, ships, cars, sub-marines, hower- crafts etc... put together. Then fixing it is find the flaw of the original itself. This needs skill.

I am not changing tyres
Buying a new tyre is may not be cheaper but easier than fixing the old one. Fixing bugs is not like changing flat tyres. Fixing bugs especially in source that you didn't code can be a very hard problem. It is impossible to generalize difficulty in solving bugs or adding features. So do not measure the work done by counting the number of features added or number of bugs fixed.

Train is not a type of car
Size matters but not the way it is used. Some bug fix might require just adding one char say making "<" as "<=". But the complexity might be more depending on the size of the project, reproducibility etc... That changing a smaller wheel of a train engine might be harder than changing a bigger F1 car's wheel. I think LOC of the whole project being fixed is more relevant than LOC changed.

I am also a manager
You should know how hard(!) it is to manage multiple people. But managing multiple headless people is even more difficult. Parallelism with shared data in s/w is a beast. If there are 3 people with 3 jobs, say Aswath has to dig, Billa has to drop the seed and Chiru fills the hole with sand. Managing people is easy because they learn and adapt. But software, if there is a race, Chiru might fill the hole before Billa plants the seed or even worse try to fill the hole that is not yet dug. IOW, the programmer has to think for all these people, but you manage people who can not only think for himself but for many others as well. But yes I manage people who are obedient ;) - but I do not ask them to do what they can't.

Not all tennis players are champions
Teaching Sania Mirza to get an ace against Sharapova is difficult than making her serve right without hitting the net or out. Usually performance issues are hard which you don't count at all as they are neither bugs nor features :(

Let us make Abhinav Bindhra captain of the Indian Cricket Team
Yes, you read it correctly. That is what most of the Indian-American software companies do. People from different game tries to be a captain of a very different team game. For a team to do reasonably well, the captain needs to be an expert in the same game. There are some games where the captain can be a non playing captain, but still the team would need an expert with great knowledge of the game. The games board can be run by some sports people need not from the same sport. But still sports people. As the level goes up, the need low-level knowledge fade. Remember, baseball is still different from Cricket. And some times people who are not even sportsmen are made the captain. Please play at least few games with us. Better Learn the game.