Do We Learn From Our Mistakes?
I like this quote from singer/songwriter Martyn Joseph:
They say we learn from our mistakes and then we carry on, sometimes I’m not sure
Everyone makes mistakes and, in theory at least, learning from your mistakes helps you grow and improve. But is this true in practice? And, just as importantly, is the software development industry learning from its mistakes?
Back in 1996 Steve McConnell published a list of software engineering classic mistakes in his book Rapid Application Development. In 2007 he (and his colleagues at Construx) conducted a survey to see what classic mistakes are being made today. Eight of the top ten mistakes happening today were written about by Steve McConnell in Rapid Application Development over ten years ago. What’s more, Steve McConnell detailed in his book pragmatic methods that anyone can apply to avoid making them. If the software development industry is learning from its mistakes it is sure hiding it very well.
Why are we, as an industry, not learning from our mistakes? Frankly I don’t know. But here are some possible theories:
Long learning cycles
The time-span for most software projects is measured in years (especially when you measure from initial concept through to several years of support). Any one individual is unlikely to experience the full life-cycle of more than 20 software development projects. What’s more they are likely to take on vastly changing roles in each project as their career progresses.
There are two possible solutions here:
- Accelerate the learning cycle (by using fast development cycles as suggested by XP or Scrum or training in an accelerated environment like Jim McCarthy’s BootCamp
- Learn from other people’s mistakes (which generally means listening to people and reading books and articles)
Always finding someone else to blame
All too often if a project goes badly people are quick to lay the blame at someone else’s door. Most people are not quite as bad as Wally in this Dilbert cartoon but frequently I hear things like:
- Designer: The functional specification was inadequate.
- Developer: It was badly designed.
- Project manager: The developers’ estimates were poor.
The obvious corollaries to these are:
- The designer accepted the functional specification. They could have rejected it or, even better, improved it.
- The developer accepted the poor designs.
- The project manager accepted the estimates. A project manager should not just blindly accept every number that is given to them.
It is always easy to blame someone else. But if you want to learn from mistakes the first step is to accept responsibility and ask yourself “What could I have done better?”
It is natural for people to look back on a project that went badly and think “I did the best I could” or “The decisions I made were the right ones given the information I had”. However you very well might be fooling yourself.
Scientists from Lund University, Sweden and New York University carried out this research that involved showing people two photos of different female faces. Participants were asked to pick the one that they felt was most attractive. After they chose one, both cards were turned face down and then they were shown the card they chose and asked to explain why they felt that face was the most appealing.
Unbeknownst to the participants a card manipulation technique was used so that the card they were shown as the one they chose was actually the card they didn’t choose. Amazingly over 80% of participants didn’t notice the switch. What’s more they went on to justify, in detail, the decision that they didn’t even make. This shows that once a decision has been made by someone they will find ways to justify it whether it was the right one or not. This fundamental ability of the human mind to post rationalise any decision can be a strong barrier to learning from your mistakes.
A lack of time for reflection
Evaluating and reflecting on what you have done is a crucial step towards self improvement. And it is a step that takes time. Many people have work and home lives that are so hectic that it is hard for them to make time for this. But without setting aside this time you could easily find that you make the same mistakes again and again.