What comes to mind when you hear the word "Agile"? Many in the software industry associate it with rituals, documents, plans, and consultants who charge a hefty sum but do not actually get their hands dirty. But if we go back to the Agile Manifesto of 2001, we'll find that these are the exact things that the group who wrote the manifesto went against.
How did we get here? In my opinion, this is caused by two major factors: we like to be told what to do, and we repeatedly fail to accept reality as it is.
Dave Thomas already said most of this in 2014, so I'll briefly summarize: following the publication of the Agile Manifesto, an Agile Industry formed around the principles, composed of consultants who wanted to make a living. However, Agile is a mindset, and a mindset has to be attained, not bought - and so these consultants sold trainings, tools and services. This robbed the word Agile of its intended meaning, and gave rise to a new cargo cult of periodic meetings, animal personas, story points and a lot of waste.
What followers of the Agile Industry fail to do, however, is to actually be agile. To plan just as much as needed, but no more. To continuously observe reality and adapt according to changes between what we thought would happen and what did. To always be safe in the knowledge that our software actually works. To optimize for changeability.
Sadly, at this point the word Agile is already lost, as a whole generation of developers and managers have come to associate it with the aforementioned cargo cult. In its stead, I propose the word Flexibility - it has roughly the same meaning and is free of loaded context.
Holistic Software Development
How does one learn to be flexible? Much like meditation, martial arts or playing musical instruments, this is a skill that can be attained through practice. In the case of software, it is the practice of what I dub Holistic Software Development that helps us gain flexibility.
Software development isn't just about writing code. It is about continuously understanding requirements, narrowing them down to small increments that deliver tangible value, making the appropriate changes to the software without breaking existing behavior, and measuring how our users react to the changes - and repeating that process again and again and again. It is this iterative process, practiced over a long period of time, that makes our software and our software teams flexible.
The simplest way to attain flexibility in a software team is by having an engineer experienced in holistic software development pair for a while with an engineer who is not, in a small-scale mentoring and coaching process lasting several weeks. The pair work together to understand what needs to be developed, practicing together the act of refining and narrowing the requirements. They then use pair-programming and Acceptance-Test-Driven-Development to create the skeleton of the feature being developed along with a test suite that assures that it will never break.
By practicing ATDD, the simplest possible software design emerges, yielding the solution that's easiest to change in the future - whether tomorrow, next week or 6 months from now. They integrate as soon as they can with the rest of the system, making sure that other development efforts that might happen in tandem do not collide with theirs. They repeat this process until the feature is good enough to be delivered to users - whereupon they proceed to ship it, collect feedback, and move on - whether to expand the same feature or start a new one.
From One To Many
The benefit of practicing holistic software development goes beyond the individual developer. It eliminates the unhealthy culture where we're in a never-ending race against unrealistic deadlines. It defeats fear of change, because our software is always simple to change. It reduces waste, since long and complex planning and design phases are no longer needed. And it forces us to always come to terms with reality as it is, rather than how it was supposed to be. It makes us happy and serene - and happy developers do not leave their jobs.
Other developers in our organization also want to be happy and serene, so they are encouraged to also attain the same skillset. After several weeks of pairing with an experienced engineer, the less-experienced engineer is now ready to lead a pair of her own. Over time, this exponential process can help our entire organization become flexible, refine our processes and methodology, reduce developer attrition and be better at adapting to changing markets.
The Agile Industry created a false association between the word agile and the inherently rigid practices of software design, planning, strict rituals and other forms of waste. Holistic Software Development encourages flexibility by guiding us towards short iterations of refining requirements, Emergent Design via ATDD, and changing our course according to the changing reality - whether following our impact on it, or others'. Developers who practice Holistic Software Development are more likely to remain in our organization and share their knowledge and skills, thus reducing costs of hiring and onboarding, and improving our adaptability to ever-changing realities.