Creative Freedom for Developers
One of the most misunderstood areas by software organizations is how to properly manage developers. As a result, the common wisdom in many companies is that developers need to be managed for performance. And since performance in creative endeavors is really difficult to quantify, this is frequently measured using a meaningless metric, such as number of lines of code, number of function points, or even number of bugs fixed.
The big mistake is that, far from being a repetitive task at which one needs just to devote more time, software writing is a creative endeavor. Also, beyond the initial assumptions, software is an engineering artifact. That artifact is created by one developer but becomes the foundation that will be used by many others.
The main condition that a developer needs in order to create good software is the intellectual freedom to decide what is good or not. For example, it is imperative that at least one developer be entitled with making architectural decisions on a piece of software. The ideal would be to have everyone involved as soon as possible on architectural decisions.
On the other hand, one of the worst things that can happen to a team of developers is having somebody else deciding what should be technical issues based only on business goals.
For example, requiring that a group of developers use a specific technology based only on its cost may be a really bad decision, because it can have repercussions that will cost much more than the intended savings. In general, if a company has technical people and if they are any good, it should leave technical decisions to them.
Many companies shoot themselves on the foot by having smart people on board and not letting them making the technical decisions. When this happens, these company will lose twice. They will regret the decision made on purely non-technical basis (even though most managers won’t know what hit them). But they will also lose engineering talent — talented people don’t want to work in such an environment.
Without intellectual freedom, writing software is nothing more than fighting the programming environment. If a developers can’t make something better, he or she is basically required to keep doing the same mistakes over and over again.