A Problem with the Agile Manifesto
I have a problem with the Agile Manifesto. And while Festivus is over, I’d like to air one more grievance. One of the principles, while well intentioned, has missed the mark quite badly.
“The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.”
Agile is Still an Improvement
Most would agree that Agile has been a big improvement. Especially over the top down, command and control Waterfall methodology that was dominant prior to Agile.
To the credit of the Agile Manifesto’s authors, their approach has been nothing short of transformative in the software industry. The vast majority of software development is better executed under Agile than Waterfall.
There are of course some use cases where Waterfall is still the better approach. But in the modern business world, where most Java development happens, Agile makes more sense.
To be fair, the Agile Manifesto was written in 2001. So any critique here has the benefit of almost two decades of hindsight.
“The Most Efficient and Effective Method”
I’d contend promoting synchronous communication as the most efficient and effective method is incorrect. Granted, it may be the most efficient way to convey information. However, it is not the most effective.
For example, you could listen to a podcast at 10x speed and it would be far more efficient than listening at 1x speed. Yet if you can’t digest the information at 10x speed, then it’s not effective is it?
The combination of efficient and effective is what I’m ultimately taking issue with. My experience has been that asynchronous communication just works better for development teams.
While a synchronous exchange can certainly be beneficial, it’s usually best when it occurs after an asynchronous one. And synchronous should certainly not be used in isolation regarding topics of any complexity.
Real time conversations introduce a number of problems. Not least of which are personality differences and conversation derailment as further discussed here.
The reality is that software development is complex. Both the business and tech domains’ complexity take time for people to comprehend. Trying to do so in a synchronous conversation will not be as effective as would an asynchronous exchange.
“Face to Face Conversation”
Today’s software development teams are predominantly distributed in nature. Meaning face-to-face conversation is no longer feasible without video conferencing technology.
If we optimize for face-to-face interactions, then we’re left with two options. One, force everyone into the same office which introduces a vast array of problems. Or two, opt for a glut of Hybrid Meetings which have their own set of headaches.
We need look no further than open source software for a supernova counterexample to this face-to-face ethos. Think for a second how many lines of code running in your Production environment right now are from open source libraries. Then compare that to how many lines of code you’ve written that are running in Production.
Much of these open source libraries we all rely upon are the result of collaboration by people who’ve never met in person. Maybe never even had a face-to-face call on Skype, Zoom, or whatever.
If open source can yield such wonderful software without “jumping on a call” every time an obstacle arises, maybe that’s a clue as to how important face-to-face conversation really is.
Frequent communication is important to be sure. I’d just contend that asynchronous communication tends to work better as the first option for development teams. And that much of the push for frequent face-to-face communication is a suboptimal relic of a bygone era where everyone worked in the same building.
Summary
Agile has been transformative to software delivery. However, there is a problem with the Agile Manifesto.
Specifically with the principle that face-to-face conversation is the most efficient and effective way to relay information.
Granted this may be the most efficient way to communicate, yet it is not the most effective. Especially given the highly distributed development teams that are commonplace today.
What asynchronous communication may lack in efficiency it more than makes up for in effectiveness.