Agile Development – Is it for you?
A short answer to a very broad question – Yes. For a more in depth answer keep reading.
Defining Agile
If you are in the software development world you have no doubt heard the term “agile” thrown around as much as any other word over the past few years. But what exactly is agile? Does agile mean the same thing to you as it does to me or anyone else? The chances are probably not.
I have been in a few different industries besides software development and can tell you that each one is different with it’s own set of rules and practices. One thing that is common between all of them is how to get more value out of an existing set of resources. So how is this done? Other terms come to mind here such as Lean and Six Sigma. Improving existing processes and re-engineering obsolete processes are a must to keep growing. In software development this is no different and this is where the term “agile” comes in to play.
Methodology Choices
Agile is a broad term that describes a movement. Terms like Scrum and XP are specific implementations of this movement. Each implementation has it’s own set of practices such as TDD, BDD, Stand Ups (scrums), sprints, etc. So the next question is which one do you follow? This is where the confusion comes into play.
The purists / elitists would have you believe that if you don’t adopt every process / best practice of the methodology then you are doomed to fail. This is naive and closed minded in my opinion. If you follow every process to the letter and don’t attempt to improvise or improve the processes then how can we be expected to continue to improve as an industry? At some point each group would plateau.
Each process out there fits some teams better than others since each team is different. Each team has it’s own dynamics that are unique. So how can one be expected to apply the same business model to every team? I would say it’s not possible. What is possible however is to take the best practices from any implementation / methodology that suits your team best and apply it to your team’s processes.
Test Driven Development
An example of a specific methodology would be Test Driven Development (TDD). There are many people in the agile community that swear by this concept. There are just as many that do not believe in it. I am somewhere in the middle. I believe testing your code at the unit level is imperative. Having a high level of test coverage on your code is not a bad thing. However – we do live in a world where in the end you have to deliver software. There is a delicate balance between writing production code and test code. Writing tests for the sake of writing tests however seems wasteful. A good article on this concept can be found here.
There are many that believe TDD is the Holy Grail when it comes to quality and software development. Again I think this is naive. TDD is a tool that can help you achieve a higher level of quality in the code you write. However, the code will NEVER be better than the person who wrote it. If the developer “didn’t consider that scenario” or “didn’t realize the implications” of a feature or technology then the code can be just as buggy or more so than someone who didn’t write it using TDD. TDD should NOT be used as a crutch to say “hey look at my code – it’s great code because I wrote it TDD”.
Summary
So based on the above how can we define agile? A few key concepts come to mind:
- Ability to adapt to change (both at a team and organization level)
- Providing high quality / easily maintainable code at an acceptable pace
- Consistently improving existing processes
Each one of us can choose to become more agile in our daily processes through development practices. But to do so at a team or organizational level you must be willing to adopt change. See my post here about what prevents a team from adopting change.
One other thing to keep in mind and this is where I differ from most of the elitists. You do NOT have to adopt EVERY methodology to become a better organization. You can choose what fits your team and apply it. This does not mean you are doomed to fail. It means that you are willing to accept that your team must change and you are starting the process to implement that change.