Software development – don’t react to failure by putting in more process and control

Some thoughts from Heisenberg Developers that I really enjoyed reading.

Software development is a complex system of multiple poorly understood feedback loops and interactions. It is an organic process of trial and error, false starts, experiments and monumental cock-ups. Numerous studies have shown that effective creative work is best done by motivated autonomous experts. As developers we need to be free to try things out, see how they evolve, back away from bad decisions, maybe try several different things before we find one that works.

If you ask me how long a feature is going to take, my honest answer is that I really have no idea. I may have a ball-park idea, but there’s a long-tail of lower-probability possibilities, that mean that I could easily be out by a factor of 10. What about the feature itself? Is it really such a good idea? I’m not just the implementer of this software, I’m a stake holder too. What if there’s a better way to address this business requirement? What if we discover a better way half way through the estimated time? What if I suddenly stumble on a technology or a technique that could make a big difference to the business?

As soon as you ask a developer to tell you exactly what he’s going to do over the next 8 days (or worse weeks or months), you kill much of the creativity and serendipity.

The more finely grained the tasks, the more you kill autonomy and creativity.

Not all developers dislike micromanagement. Some are more attracted to the paycheck than the art.
Finely grained management is a recipe for “talent evaporation”.

“Why Developers Should Not Code” by Stefan Priebsch

Well, sometimes I get a strong feeling that there is a shortage of good programmers, because I often find myself looking at legacy code, being unable to tell what it does, at least with reasonable certainty.

One of the most important lessons good developers need to learn is: recognizing that existing code is hard to understand does not make you a poor developer. Quite on the contrary.

Snippets from a great article Why Developers Should Not Code

Now that I currently read On Writing Well the quotes above make more sense. Coding is a subset of writing. Humans write and read code so priority should be simplicity and readability.