Key Takeaways
Building software products is often an exercise in dealing with complexity and uncertainty. You can never eliminate the fog of beforehand—that is, the limited knowledge we have before we start doing the work. You can only reduce it through action and reflecting on what you discover and learn.
The concept of friction, coined by General von Clausewitz, together with Bungay’s three-gaps model, explains why your plans will always be imperfect, your execution will always be flawed, and you will never be able to perfectly predict the results of your actions and plans. The higher the friction, the more likely it is that you will encounter surprises you will have to deal with.
The ideal response to friction does not come naturally to us. The typical response results in a fog of speculation that conceals reality and makes it even more difficult to deal with the fog of beforehand.
The best way of dealing with friction is to work with what you do know to discover what you don’t know—to start with humble plans that acknowledge how little you know and how much you expect to discover and learn. Those humble plans can then be adjusted as you gain confidence and discover and learn what’s necessary to achieve your objectives.