Product Development is a lot more like farming than it is like a manufacturing line or an engine. Manufacturing is usually incremental – lots of different parts with carefully controlled size and shape all need to be put together. Product Development on the other has is iterative. We repeat our process many times building on the previous iteration. And the key “process” isn’t writing code or specifications – it’s learning.
Three things we’ve had to learn the hard way:
- Customers don’t know what they want
- Developers don’t know how they’re going to build it
- Things change.
As a result, our approach needs to be super flexible and ready to iterate from the outset. Any other way tends to lead to things that either don’t work or nobody wants. You need to optimise for learning.
It is also an explorative process. The team usually haven’t worked together before, so they need to figure out how to collaborate effectively. They’re also learning their tools, and any codebase that may already exist. Lastly, they’re often learning the domain they’re in. Even if you’re in a bank and you’ve worked in another bank, there will still be differences that turn out to be important. Optimise for learning.
And so, each iteration should be considered to be full of assumptions. Yes, we test a lot of those up front early and often, but there will still be loads of assumptions present when you eventually launch and get your first users. You’ll need to be ready to pivot or change direction based on those findings and feedback. You need to optimise for learning.
You need to give the teams time learn the ropes. They need to firstly understand the domain. They also need to understand how to work together, and of course they need to understand what there is already and how it works and how to safely make changes, using whatever tooling and techniques are needed.
The dumbest thing you can do is rush it. You can’t speed up the seasons. Doubling the number of farm workers doesn’t make the grass grow any faster. And no amount of setting deadlines or enforcing “accountability” will make it go any faster or improve your odds. That’s just not how it works.
Give it time, manage the constraints and provide the right conditions and the “magic” will happen. The rewards follow. That’s how learning teams become earning teams.