Do you want your software development team to develop better software faster? Learn to fail fast, often and cheap. Sounds silly doesn’t it? You want to succeed not fail, right? Fail often? What’s up with that?
Agile development advocates take a lot of heat over our efforts to fail fast.
Well, the word ‘fail’ is slightly over the top. It’s not about project failures. It’s about making small mistakes and more importantly, learning from those mistakes to achieve continuous improvement.
The idea comes from lean manufacturing techniques. Achieving continuous improvement means catching mistakes quickly and taking corrective action immediately. The same principle applies to software engineering.
Objective: Learn from mistakes
The theory is that mistakes are going to happen. Clearly, you’ll try to prevent as many as you can but there will always be some mistakes. Don’t go overboard trying to prevent mistakes,though. Trying to achieve perfection can nearly paralyze you.
Once you accept the premise that the software development team is going to make some mistakes, you’ll want to make them as early in the development effort as possible. The earlier the team ‘fails’, the sooner they will learn and improve.
Also consider that early mistakes are less costly to repair than those made later. Mistakes made early in the development cycle leave plenty of time to adjust. Those made later may have to be deferred until a future release.
How do make mistakes sooner rather than later? Identify high risk areas in the development effort and work on those areas as soon as possible.
Accept that many mistakes will be made. Stories, estimates, code, tests, documents, etc. will all contain errors and omissions. Accept it and learn from it all.
Control the perfectionism
Foster a culture that embraces failure. Someone once told me that “Progress is making new mistakes.” The key word is ‘new’. Move fast. Make quick decisions. Be prepared to…
- Fail fast. Learn quickly.
- Fail often. Learn continually.
- Fail cheap. Learn inexpensively.
That’s what agile software development is about.