Wednesday, September 11, 2013

The Interplay of Failure, Learning, and Options

We talk about failures a lot.
Fail Fast!
Safe to Fail!
Learn from Failure!
One would think that  people hire us to screw things up. Why the fascination with failures? Why not talk about successes?

Admittedly, the dialog is off-base a bit. We're not really keen on failure at all. We don't like to be wrong, and would hesitate to ship a product if we knew it was the wrong thing to build, or it was built in the wrong way.

There are problems that can be solved without error by one person who thinks about them for a little while and types in the code that solves the problem.  The term for this kind of problem is uninteresting problems. These problems are smaller than one brain, or else the solution is already well-known. We tend to either shuffle this problems off on the noobies, or else we scribble down the answer and move on without any real sense of accomplishment.

Any problem that is interesting will involve experimentation and learning. Those problems cycle on steps like these:

  • Try (do your best)
  • Fail (intentionally try the stuff you're not sure about)
  • Investigate (find out what you didn't know)
  • Learn (incorporate new knowledge)
  • Exercise options: pivot, persevere, abandon, expand



It's not really the failing we value; it's the opportunity for learning and the chance to exercise options.

Pivot is a kind of success because we choose a different path, one that has greater promise. It may mean abandoning some part of our design, or rethinking our user stories, or even throwing out a bit of the architecture. It might mean accruing more design, more feature descriptions, more architecture. Either way, it's a more informed decision that we would have made before the failure. Better now than later!

Abandon means that we have succeeded in saving money and time because we learn which problem is not actually worth solving, or the solutions to the problem are too expensive to bother investing in.  Again, better to get that out of the way before we suck down too much time and money!

Persevere is what we do when we learn that our current direction has promise, or that nothing else looks more promising.  It's what people traditionally consider "success."

Expand is what happens when we know we have a great idea, and that we can leverage it in ways we hadn't expected. It may mean that we pivot in our feature descriptions or technical design to take advantage of new learning. Expanding a great idea can lead to innovations (each of which has its own try/fail/learn/... cycle).

If we don't fail early enough, then our options begin to expire. We may no longer have the choice of expanding in a promising direction, shutting down expensive time-wasting ideas, etc. In short, we have no choice but to hunker down, work harder, and hope that it comes out okay.

Too many people do the 'easy stuff' first -- the stuff that they definitely feel that they know how to do. That leaves all the risky stuff for later, when you are up against the 11th hour of the deadline and you aren't sure how to recover.

When we say we value "Failing Fast" we put the emphasis on the second word, not the first.