Good agile software development teams:
- Expect mistakes.
- Encourage failure.
- Fail fast.
You’re probably thinking something like “This guy is nuts” (or perhaps something not so nice). Maybe I am, but I learn fast. Part of being agile is a willingness to take small risks. We all want our projects to succeed but face it, nothing ever goes perfectly. Mistakes happen. Accept it.
There’s a world of difference between taking small risks that may result in small mistakes versus taking big risks that could endanger an entire project. Here are a few examples:
1a) Small Risk: Committing to finishing a small set of user stories by a target date.
1b) Big Risk: Agreeing to an arbitrary corporate deadline for an entire project without understanding the details.
2a) Small Risk: Trying out a technique on the stakeholders and users before embarking on a major software change.
2b) Big Risk: Assuming that the business representatives know what they want and spending three months building it.
3a) Small Risk: Trying out a new algorithm in a test environment.
3b) Big Risk: Deploying a new algorithm into production without adequate planning or testing.
Each of the “a” items includes a small risk. If something goes wrong, minimal time is wasted. Perhaps more importantly, something will be learned. That something will help the team during the remainder of the project. There will be time to regroup and recover.
Each of the “b” items includes a big risk. If something goes wrong, the project could fail. Even if the team can regroup, the amount of time and money wasted may never be recovered.
Don’t expect perfection.
Every mistake results in a bad outcome. No one likes to make mistakes. No one wants to fail. Yet, nobody is perfect so mistakes will happen. We can take steps to minimize them but we can’t entirely avoid them. Agile development teams recognize these truths.
Some software teams spend an enormous amount of time writing project plans and conducting risk assessments. They operate on the belief that with enough planning and analysis, the risks can be mitigated and projects can succeed. While there’s some truth in that, it’s also true that such approaches are costly in terms of time.
It’s not just the additional development time. They are costly in the marketplace. The cost manifests itself in lost business, lost customers, and lost opportunities.
- “Expect mistakes” means letting people take small risks. It doesn’t mean repeating the same mistakes!
- “Encourage failure” means allowing the team to experiment and learn. It doesn’t mean failing to deliver as promised!
- “Fail fast” means testing assumptions early in the project. It doesn’t mean having the entire project go down in flames!
These can be tough concepts for larger enterprises to grasp. Many such firms have an inherent fear of failure caused by the tendency to assign blame every time something goes wrong. Stop blaming and start learning. You’ll be more successful.