Imagine your good friend asks you to come over to his house to check out his brand new Ferrari. Being only ‘slightly’ jealous you head on over. From a distance you see his prize parked majestically in the driveway and, as expected, it looks amazing. Your friend shows off his Ferrari and tells you that you can test it out if you want.
You get in the car and try to turn it on, but are shocked to find that there is no engine! You look at your friend – he seems very happy with his decision, but you are baffled at the fact that this car won’t actually drive! So what’s the point?
A few times I have found myself at organisations who have made some impressive looking changes, and have incredible Agile rituals, but for some reason things are just not moving forward. How could this be?
Usually it is because the engine is missing.
For the past decade we have seen the Agile Process preached, but little emphasis put on its counterpart which we will refer to here as Agile Development.
In other words, there are not one, but two key components to successful Agile projects; the use of an Agile Process, and Agile Development to drive it.
Agile Process is everything that people can see from the outside. The sprints, daily standups, backlog, sprint planning, demos and all other agile rituals. The process itself can be applied to any project not just software development. However, when applying Agile processes on their own to software development projects without “Agile Development” it often leads to what some bystanders refer to as “Fragile” project delivery.
Agile Development is everything that enables a team to deliver software at the end of each sprint. This is a unique concept to software development and needs to go hand in hand with the Agile Process to help the team to truly deliver iteratively. The core elements of Agile Development are:
Agile coding practices (eg SOLID, GIT flow),
Unit testing (which is often overlooked) and
DevOps (which is often over emphasised).
All of these are vital components of your software development engine that needs to be well oiled and maintained to drive your majestic Agile Process.
Think back to your last sprint, did you actually deliver a working feature at the end of the sprint? What was holding you back?
I’ve experienced a number of reasons, but it could go something like this:
“The developers checked in their code and we just couldn’t test it all the way through to ensure it was actually working and didn’t break anything”
What Agile Development tool would prevent this from happening? Unit testing. Unit testing breaks down the testing loop from weeks to minutes. With unit tests, developers will know within minutes if they have regressed instead of waiting for testers to tell them they have regressed a week later.
What about this one:
“We can’t make the changes we need in time, as the code is hard to work with.”
Agile coding practices would mediate this. By following modern programming techniques such as SOLID, your code will become Agile. Code should never be seen as “done”. It needs to be developed in a way that it can be changed and molded, i.e. Agile.
Finally the one everyone is talking about these days:
“Deploying this change will break everything!”
This is where DevOps comes in to save the day. Automating every single step of the deployment process so as to prevent human error. When deploying as often as possible, we weed out any issues and gives us confidence that when we reach the end of the sprint, it will work, not might work.
In many instances we see Agile not working because we forget the Development part. Agile Development is the engine that will drive our Agile Process. It will allow us to deliver sprint by sprint instead of when we think it will work. If we look at why we are not delivering, chances are there will be an Agile Development technique that can meet that need.