The future of our products is pretty predictable.
We used to believe in Big Design Up Front. Teams spend months defining the scope of a software project and then another few months building it. By the time the product reached its users, it was outdated.
We shunned new insights and opportunities as they meant returning to the drawing board. It was common to build the wrong thing and only realize it after a year of development.
There’s an obvious lesson: gather feedback often and early to steer the ship. What we think needs building might not be what really needs building.
But a lot of us learn another lesson: the world is chaotic. We are so sure that we are building the right thing that when it turns out we are not, there is only one logical conclusion: the world must have changed.
"Our customers wanted X, but now that they have it, they want Y!"
The thing is, our customers didn't change their minds. We made wrong assumptions.
Those that learned that wrong lesson are a vocal minority. When I write about planning on social media, a few people always reply, claiming we can't predict the future. It's impossible. It's just too chaotic out there. So, let's not bother planning at all. Let's only look at the next iteration.
I used to be one of them. As a professional software developer, it often feels like the world is unpredictable. Like every week brings a new surprise. Like we are at the mercy of fate.
I've learned over the years that the opposite is true: software development is rather predictable. The environment where we build our product isn't a chaotic world. We overestimate how volatile the future of our product is.
The main causes of change are not external. It's usually not an uncontrollable force of nature that kills our plan. It's us. The killer is in the house!
"I think our product really needs a way to sync with Active Directory. Let's start working on that immediately."
Fickle stakeholders are a source of chaos. That thing they discussed today suddenly becomes this iteration's top priority. But we can manage stakeholders. A good plan forces them to make a trade-off. Do we really want to build the AD integration at the expense of our interface redesign?
"One of our customers has an urgent problem with the CSV export that needs fixing ASAP!"
Customer Success teams can be caught between a demanding client and an unresponsive team. If high-priority tickets are the only way out of this hammer and anvil, guess what they'll do?
Well-designed communication channels take away internal friction. When Customer Success knows when they can expect the answer to a Medium issue, they won't label every request as High-Priority.
"We said we were going to work on the Stripe integration, but a lot of production errors came up, and we had to drop everything. <sigh> The future is unpredictable."
Low-quality products are unreliable. When every release introduces ten bugs, progress will be tedious. That behavior is very, very predictable.
When teams improve the quality assurance process of their product, the number of “unpredictable” fires goes down overnight.
Lack of focus, ineffective communication, and low quality. These are the three main sources of chaos. They are internal and, therefore, well within our control.
Software development teams are not victims of their environment. The absolute majority of the “unpredictable” events are well within their circle of control.