Software Engineering


Fernand Point, by some considered the “father of modern French cuisine”, writes in his book “Ma Gastronomie”:

Perfection is a lot of little things done well.

This is certainly true in regard to cooking. It is rare, albeit possible, that on little thing that’s missing or was not done right ruins the dish. More often it is a few subtle things, not enough or too little of a spice, the temperature of the oil in the frying pan slightly too low, that will make the dish less than perfect.

I find that the perfect software application also requires a lot of little things done right. That’s what makes software engineering more an art than a trade.

The outsourcing and offshoring trends of the early 2000’s were an indication that executives increasingly thought of software development as a commodity, i.e. something that is purchased in large quantities at a certain price per unit (e.g. $/hour) and the less the company has to pay per unit, the greater the savings will be.

It turns out that something went wrong with that calculation, since these trends are seeing a reversal today. Now companies are ‘in-sourcing’ because the out-sourcing turned out to be not as economical as projected.

This development was predictable, but why?

Software development is a creative process. The software engineer has to make design decisions along the way that will impact the quality of the end product. Quality is an ambiguos term, so lets be more specific. The end product is characterized by the number of lines of code, how well the code adheres to the requirements, the structure of the code, its clarity, modularity, reusability, etc. All these factors contribute to how we generally defined good code. Good code can be understood and maintained more easily.
A good programmer can write good code and be very productive.
An moderately talented programmer can write good code and be less productive, or write not so good code and be less productive. There are also programmers who write poor code and are very productive in it.
A poor programmer writes poor quality code and is a lot less productive.

Each programmer’s code contributes directly to the quality and the success of the project. In a way, each programmer owns a small portion of the project. I’like to compare a software development project to a corporation, and each developer manages a department or a subsidiary. Nobody would in his right mind think of department heads or managers in a real company as a commodity that can be bought in China at the lowest possible hourly cost. The bottom line of such a company would suffer dramatically.
Similarly, the bottom line of a software development project suffers dramatically when developers are brought on as commodities.