Fail Faster—Iterate Faster
A colleague and friend of mine was the first person I heard use this phrase over and over. He used it to advise me, the junior engineers we were responsible for, and just about anyone he thought could benefit from the advice.
The spirit of the phrase, "Fail faster" is simple: In order to find success, you need to get through the necessary failures quickly. Getting stuck on a failure, or giving up after a failure means you've stopped actively failing, which means you can't ever hope to succeed.
According to wikipedia, "In systems design, a fail-fast system is one which immediately reports at its interface any condition that is likely to indicate a failure." A system that continues to try to operate past a failure is likely to behave in unexpected, unwanted ways further along its execution, leaving us with a bug that will be very costly to discern.
Humans learn quickly through trial and error. Of course, the word failure is just one way to look at how we learn as a species.
If you can't get past the negative connotation of failure, then there are other ways to think about your path to success. Adam Savage has another outlook that rings familiar to builders:
You can hear him speak passionately on the topic in this Alexa Developers video.
The word "iterate" is powerful if you are already doing Scrum sprint iterations, or if you are doing Extreme Programming weekly and quarterly cycles. These time-boxes are excellent for giving teams a chance to inspect their iteration result and adapt their process to do better the next time.
In XP, you can see the practice of iterations called "cycles" are built on the Values of Communication and Feedback and the Principles of Failure, Reflection, and Improvement. In Scrum, all three pillars of Transparency, Inspection, and Adaption are enabled by iterations. And this is not the only places those frameworks allow for and encourage iterating. XP gets much more granular in its prescription for how to iterate on many software engineering practices, such as Ten-Minute Build, Continuous Integration, and Test-First Programming (TDD).
Agility means embracing how people work, which is to say we need to fail faster in order to learn and ultimately succeed. Do you embrace failure as you iterate to success?
Image by Steve Buissinne from Pixabay