What playing Go has taught me about Lean Software Development

(originally published 2012-05-16)

I just recently read Lean Software Development: An Agile Toolkit by Mary and Tom Poppendieck. Very insightful and replete with wisdom derived of experience. What just struck me though was how many of the principles relate to my ongoing study and practice of the ancient Asian strategy game of Go. Maybe there’s some shared Japanese philosophy behind it all that I just happened upon. I will assume for this discussion that you have actually played Go, so if you haven’t, go out now and learn before continuing. But before I go into the overlap with Go, here’s some quick background. Here are the 7 Lean principles a la the Poppendiecks:

  1. Eliminate Waste – Build only what you need to, YAGNI
  2. Amplify Learning – Make sure that you are continually learning what to do along the way, because you most likely won’t know everything you need to know up front
  3. Decide as Late as Possible – Only make irreversible decisions at the last “responsible” moment, when you know as much as you can
  4. Deliver as Fast as Possible – Turn around small units of work that deliver visible value, enabling you to get better feedback and keep moving in the right direction
  5. Empower the Team – Enable the people closest to the work to make decisions based on the knowledge they gain from their proximity
  6. Build Integrity In – Make sure the parts work together as a cohesive whole
  7. See the Whole – Don’t allow optimization of the parts subvert the overall system

There, I saved you the trouble of reading the book. Not. This back-of-the-envelope summary hardly does the book justice, and the book only scratches the surface of these topics. All I want to do here is reflect upon some relevant aspects of Go strategy that go hand-in-hand with these Lean principles. Having learned them in one field, I am all the more certain of the underlying truths and can leverage them in another. So without further ado, here is how I would explain the Lean principles in Go terms:

  1. Eliminate Waste – Go is all about the efficient use of stones. If you play an unnecessary stone in a close game, it will haunt you. Much time is needlessly spent reinforcing groups that don’t need it, leaving other areas open to attack and foregoing opportunities to go on the offensive. There are many subtleties to the process of deciding when tenuki is appropriate, but simply remembering that it is always an option is half the battle.
  2. Amplify Learning – Go strategy needs to be responsive, particularly early on. You cannot set out a course and expect to be able to play it through to the end without correction along the way. Every move that your opponent makes may be occasion for a complete reevaluation of the board position. Even when they move exactly how you expect them to, there may be things that you see now that they did make that move that you didn’t see earlier.
  3. Decide as Late as Possible – Many of the best strategies in Go involve moves that will have positive impact regardless of the opponent’s response. Joseki are built around trees of decisions that generally have more than one acceptable outcome, at least locally. Furthermore, playing some situations out too early may lead to some things getting set in stone (pun partially intended) that limit your options severely later on down the road. Leaving ambiguity in at early stages doesn’t always feel comforting, but living with the tension of unresolved battles is an essential skill.
  4. Deliver as Fast as Possible – Being able to create a viable shape quickly enables you to move on to whatever is most important on the board. It is tragic to get stuck shoring up a dumpling for fear of losing it all, while your opponent has happily moved on to the next big point. Light shapes are quick to erect and can be sacrificed as necessary in service of the larger cause without too much heartache.
  5. Empower the Team – This one is a bit of a stretch, as your team is a bunch of stones. But it is relevant in that stones are much less effective when they are overconcentrated. Too much backup can turn a once-useful move into dead weight. The stone’s purpose is undermined by redundancy.
  6. Build Integrity In & See the Whole – I’m combining these two, because at least for the purpose of this discussion, there is so much overlap between the two. Basically, they are a reminder to make sure that your tactics work together with your strategy. Picking your joseki to supplement the overall board position, keeping an eye on ladder breakers, stuff like that are at least apparent to us middling-ranked players. Over-committing to one area of the board can throw away all the gains made elsewhere. I could go on and on about this one, and perhaps I will some day.

The application of these lessons to software development I will leave as an exercise to the reader, but the key metaphor is that your “opponent” in software development is the ever-changing set of requirements that you have to satisfy. Go is helpful in that the “projects” are short and it’s easier to ingrain the lessons through rapid repetition, so it is useful for training your brain to think certain ways. Then the only thing is maintaining those ways of thinking in a different context. I don’t have any tricks up my sleeve for doing that, except perhaps spending a few hours writing on your blog about how the two relate to each other. Not that I recommend you try it, as I hear it’s already been done. But I’m sure you can come up with something.

So now that you know the deal, Go out there and Develop something. Leanly.