Agile is currently a buzzword and my company also strives to be Agile. This means managers push for agility, change processes, and celebrate the achievements. As an engineer, I know everything is a tradeoff. I wonder what the cost of optimizing for Agile is?
When I discovered this article Speeding Up Your Engineering Org, Part I: Beyond the Cost Center Mentality, it enabled me to answer the question:
Agile is usually depicted as the opposite of Waterfall. To describe the difference with an extreme analogy: Waterfall is inspired by factories, where lots of specialized machines produce something with peak efficiency at an incredible throughput. Agile is inspired by a workshop, where a single craftsman with lots of tools can produce anything with low latency. The downside of the factory is that producing something different takes a lot of time to rebuild the machines: High latency. The downside of the workshop is that production is inefficient, because most tools are never used and overpowered for the job. Also, there is only a single craftsman, so there is only one thing produced at a time: Low throughput.
So now we understand that there is a continuum between agility and efficiency. Obviously, this is not about good or bad. Not about modern and old-fashioned. In the terms of the project management triangle, one optimizes for the schedule while the other optimizes for cost. The actual question is how to find the balance which is right for you. Software development is often an uncertain endeavor thus programmers tend to favor agility.
How do you become more agile (at the cost of efficiency)? Projects should be done by small teams. Instead of adding more people, empower the few with better tools and services. Instead of working on processes, improve the quality gates.
As a corollary, this results in guidelines for your process: If your team creates a product or tool (internal or external) use something like Scrum to establish a rhythm with your customers so they don't disturb development all the time. In contrast, if you provide a service or infrastructure use a process like Kanban which optimizes for latency because your users optimize for latency. If your team does not fit either, reorganize. Maybe your team only develops part of a product, because someone considers the whole too complex for a single team? Invest in better tools instead. You fight complexity by abstraction (which usually costs efficiency).
How to you become more efficient (at the cost of agility)? Add more expert specialists. Improve your processes and split tasks into smaller pieces so it is easier to become an expert specialist. Good processes also help to parallelize the work to increase throughput.