There are many Internet debates about what agile software development really is. Unfortunately, the term “agile” is misleading. The dictionary lets us down with definitions like “move quickly” or “think quickly”. Synonyms for agile lead us to fleet, graceful, nimble, spry or supple. Do any of those terms describe how your development team operates?
Agile development teams shouldn’t focus on being quick or nimble. They should focus on building great software. There’s a big difference between: 1) getting an entire software system completed quickly; and 2) delivering great software on a frequent, incremental basis.
Number 1 is about getting the software out the door as soon as possible with whatever compromises need to be made. Number 2 is about building what the customer wants in a high-quality fashion.
Every situation is unique.
There are circumstances where #1 is the right approach. For example, your company may desperately need to respond to a competitive threat. The company may need to demonstrate a new capability right now or risk losing market share. Forget the rules. Just get it done or jobs will be lost.
If we are doing our jobs well, situations like the above will be rare — not non-existent, but rare. More commonly, software developers will have a set of goals and a workable timeframe. I define “workable timeframe” as one with enough duration to accomplish a lot of great work but not necessarily enough time to achieve all of the desired goals. Compromise is always needed.
Making matters more confusing, agile is an umbrella term covering multiple development approaches including Scrum, Kanban, Lean, XP and others. Agile software development is a set of beliefs that influence and guide specific approaches like Scrum and Kanban. It is not a prescribed methodology.
Being agile is harder than it looks.
Enterprise software development is a complex and labor-intensive effort requiring many skills and multiple teams. Let’s agree that no single word can capture the essence of what we want enterprise software development to be. It’s just too complicated.
So, if the word agile doesn’t adequately describe what we want software development to be, what does?
We must recognize that developing software with agility is an enterprise-wide endeavor. Software developers cannot be agile if the corporate environment is rigid and prescriptive. With that in mind, I believe there are several key words and phrases that distinguish agile organizations:
- They are highly cohesive, loosely coupled and decentralized.
- They implement constant feedback cycles and continuous improvement.
- They are known for rapid responsiveness and swarming behavior.
- They have diverse skill sets and share a common vision.
I also like what Anders said yesterday, “…the ability and willingness to learn by experience and failure is the most important item on the path to becoming agile.” I’ll address learning by discussing actions organizations can take to facilitate learning.
It takes all of the above to fully-practice agile software development. Simply having daily standup meetings does not mean you are practicing Scrum. Simply using sticky notes on a wall to track tasks does not mean you are practicing Kanban. Simply testing the software iteratively rather than waiting until the final project phase does not make you agile.
It’s time for a more rigorous and structured definition of enterprise agile software development. Over the next several posts on this blog, I’ll offer my ideas and opinions. I hope others will join in whether they agree or not.
[The next post in this series is here.]