I recently re-watched James Cowlings excellent talk "Stepping Stones, not Milestones".
He breaks down the misconceptions of perfect projects and outlines the importance of dealing with uncertainty in engineering, especially in the context of an organization where priorities may change over time. One of the outcomes he strives for is that even if we stopped working on a project today — the business would still have value in the things we've developed up to now. This is something I personally have found very helpful.
In the talk, Cowling identifies two common failure modes in engineering projects:
-
"The never-ending plan": Teams getting stuck in the planning phase, iterating over design documents but getting nowhere.
-
"The confident road to nowhere": This is when we proceed with overconfidence, thinking we have the correct approach while dismissing others as wrong, leading to isolation.
We all recognize these. The key takeaway he makes is the importance of accepting and dealing with uncertainty, that product development should focus on creating concrete deliverables (stepping stones). These should involve shipping something that delivers real incremental value, even if it's simplified or small part the larger product. Each stepping stone should align with the strategic goal, and help to uncover "unknown unknowns", enabling us to learn and adapt.
Note[2024-09-10]: I didn't realize this at the time, but James has a blog post on the same topic. Go read that instead.