The primary hindrance to agility
People tend to divide into sides on many topics, like emacs vs. vi, product-driven vs. engineering-driven vs. sales-driven, and agile vs. waterfall, because they want a clear answer. But in reality, most things aren't just one way or the other; they fall on a spectrum. It's important to understand the principles and apply them in context rather than getting caught up in polarized debates.
Yesterday, I talked to someone who was frustrated because their company talks about using agile but follows a more waterfall approach to product development. They have long-term roadmaps and extensive backlogs and use Gantt charts to track complex project delivery dates. There is no true iteration. Why do we all want to be more agile but end up using practices that go against those principles?
Before I discuss what hinders our agility, let's quickly go over the fundamental idea behind agile. The core principle of agility, the rises above the others, is "Responding to change over following a plan." As the saying goes, “No plan survives first contact with the customer.” Plans need to change in response to the market and customer feedback. To be agile, we must validate our ideas quickly, deliver working software regularly, learn from customer and market interactions, and adapt.
So now that we understand the core principles of agility, why do so many companies want to be agile, talk the talk, but fail to iterate and deliver continuously?
Interdependence
Interdependence is the crux of most complexity and mayhem. When teams lack autonomy, and the organizational structure and system architecture don't consider this (as per Conway's Law), the result is a need for armies of project managers and numerous status and alignment meetings to manage the web of dependencies.
So what’s the solution? Reduce interdependence. Work hard on rethinking the architecture. Implement better communication contracts and boundaries across teams and services. This won’t happen overnight, but the folks from Team Topologies have created a good model that can help move towards reducing interdependence.
As you progress in reducing interdependence, you’ll move more towards the agile spectrum of product development, which is about iterative learning and delivery.