What is real Agile software development? I've been mulling over this question ever since a reader wrote to say he sees a lot of what he calls "faux Agile."
Faux Agile can take countless forms: failing to get requirements right, waiting to test until coding is complete or, as the reader wrote, skipping regression testing after the final bug fix to make a deadline. "Real Agile dictates releasing when done and no sooner … but the [release] date was more important," he said. "This has become common practice in the Agile world and I think it's a big problem: faux Agile."
- Incremental, not sequential: If your development practice is true to the spirit of Agile, you deliver working software in small increments. You don't wait to complete one phase before another begins, nor do you work toward one big release date. Completed work, not business deadlines, drives Agile delivery. But the spirit of Agile also recognizes that business operates in a world of deadlines, calendars and dates that matter. Can you work within them and stay aligned with the values of Agile development? That is the challenge.
- Avoiding nonessential overhead: If your practice remains true to the spirit of Agile, the team is committed to minimizing as many project plans and documents as possible. Instead of talking about what you are going to do and then writing it down, just do it. Otherwise, you're wasting time on what I call work about work. The spirit of Agile favors real work -- delivering working software -- over work about work. And it also values face-to-face communication over email and other written documents.
- Collaborative: Team members continually interact with one another -- and with outside stakeholders -- as needed. In the words of Agile coach Lisa Crispin, the whole team is responsible for, and capable of, solving any problem that comes before it. Teams that stay true to the spirit of Agile are self-organizing. They divvy up work that needs to be done. Although individual members take up tasks well-suited to their respective skills, they always work in concert with the team. No one works in isolation, nor does the team itself work alone. The team can't move the project forward without significant input from business stakeholders, and from outside experts such as those specializing in user experience.
- Speaking the truth: To stay true to real Agile, the team is committed to telling the truth about everything pertinent to the project. They acknowledge gaps in essential areas of expertise, such as coding skills to script tests. They tell the truth about real productivity; that is, does the team have the capacity to do x in y amount of time? They acknowledge errors. Telling the truth is challenging because we fear admitting our shortcomings will make us appear weak. But the spirit of Agile understands that speaking up is a strength. It takes confidence to acknowledge problems and work efficiently to fix them.
That is the spirit of Agile: delivering software incrementally, avoiding nonessential overhead, being committed to collaboration and speaking the truth about all things pertinent to the project. When you stay true to real Agile, you deliver software with confidence. You are confident that it works, that it does what the business wants, that you can fix anything that's broken and respond quickly as needs change.
Are you staying true to the spirit of Agile? Did I overlook anything that's important to you? Let me know!
How to keep from becoming too Agile
Guide to Agile and continuous development
How to choose the right software development method