What will becoming more agile really give us and what does it need? The manifesto for agile software development gives us the values and principles that we can use to guide us towards increasing our agility. However, we should not blindly follow someone else’s ideas without knowing where we are going. Therefore I want to discuss my thoughts on agility, what it can give us, as well as some ideas where we might look to improve along the way.
The first thing to realise is that increasing agility is a journey towards a moving target. What was considered the pinnacle of agility 10 years ago is no longer the pinnacle today. Realising this simple truth we realise that anyone selling an “Agile transformation” may want to consider their phrasing of what we are doing. A transformation implies a start and an end. The problem is that the journey towards greater agility knows no end and we can always improve. With that said we can review some ideas around what being agile is all about and discuss those points. We can then look at some outcomes to focus on so we might find a guide to inform us about the direction we are going. Those outcomes can form the basis of teams and companies deciding, for themselves, what they want and how to change course to gain greater agility. It is also worth noting that there is no exhaustive guide for how how to become more agile because each situation is different. The points below are ones that I think are pretty universal.
A focus on people
The manifesto for agile software development has, as we have already seen, put a focus on people. At the end of the day we are working to sell our products or services to an end customer, who is normally a person somewhere in the world. We also have people working to create the product or service and we need to look after them to make sure that they can do their best work.
In terms of employees we need to:
- Give them the freedom and support they need to make the best decisions and do their best work.
- Provide the psychological safety to address problems and speak up so as to improve.
- Make sure that they have all the skills they need and that they can learn and progress.
In this regard I always liked the following way of thinking “Give people all the support and training so they can find their ideal job and then create the environment that they already have that job with you”. The idea is simple and makes sure that you have the best employees you can find and that you will find it easy to hire more people when needed because you will have excellent word of mouth about you as an employer.
When we consider our customers we have two major factors in play. We want to
- Earn as much money from them as possible
- Like them to come back and sell our products and services through word of mouth.
There are many good examples of this in the world and we often see how most successful companies put a strong focus on quality, customer engagement and making the customer happy. This leads to greater sales and the cycle repeats. The most simple way to deliver customer satisfaction is to be sure what your customers want. The best way to achieve that is by talking to them and asking. We then get into another core part of agility which is to create a finished product increment, put it in the hands of potential, or existing, customers and find out what the next most important bit of value that customers want is. Then we build that and the cycle repeats.
The flexibility to react
One of the key points around agility is the ability to remain flexible and change direction. We might think that we know what our customers really want and yet we will only be sure when we put some working software in their hands and see their reaction. There is a huge problem with developing new things, and that is that people don’t know what they want until they see what they don’t want because they are using it. We also have another problem that many customers don’t know what is possible and therefore cannot know what they want. As such we need to consider how we can rapidly win valuable customer feedback. We need to design measurable experiments into our product releases to learn so that we can fail fast and adjust course.
This philosophy changes how we want to write software. If you need to always remain flexible then we come back to good design principles around modularity, high cohesion and low coupling, simplicity, etc. When we design our work we need to consider not only how brilliant our solution is but also how easy it will be to change in future. As such clean and simple code will almost always win out over some really clever solution. Documenting the problem we are trying to solve and the ideas of our solution in comments is valuable and makes future refactoring easier.
Iteratively gaining feedback on a working increment of your software
Two concepts around agility are iterations and increments of software. An iteration is a step on the journey to the final product, a bit like the never ending journey of taking steps to increase your agility. Where the real difference comes in is with increments. You would ideally deliver working increments of your software on a regular basis. The more rapidly you can do so the more agile you have the potential to be. The absolute ideal state is to be in a permanently shippable state. This is the current gold standard of continuous delivery. Being able to deliver working software regularly allows you to put your software in the hands of customers, or potential customers, and see their reactions. You can gauge your progress and customer satisfaction. You can observe what you need to change to improve your product and ask customers for feedback. You can then change direction, as needed, based on that feedback.
Being outcomes focused
Objectives bring people together and are multilayered. You might have a product vision and objectives for the year, quarter and month or week. This helps to guide where we are going and ensure that we are all speaking the same language and pulling in the same direction. Just putting a lot of work into a project and delivering output will not be nearly as successful as making sure that the entire team is on the same page and working together.
I mention longer term planning like yearly or quarterly plans, it is important to consider that the longer term the plan the less detailed it should be. We should spend the most time on what we are about to work on and use longer term plans purely to guide our direction in the knowledge that they will most likely change. It is not the plan itself that is important but the act of planning. Planning lets us discuss options and possible hurdles in our path before we ever get there. Planning gives us an overall direction. Plans themselves rarely, if ever, survive first contact with reality. As general Dwight Eisenhower said “In preparing for battle I have always found that plans are useless, but planning is indispensable”. The same is true of planning an agile software project. We cannot know what reality, or changing customer demands, will throw at us, but the act of planning allows us to be more ready and able to adapt when the unexpected happens.
Some outcomes that might help to guide us
If we consider our journey towards increasing agility to be outcomes focused then it might help if I provide a list of a few outcomes that I think are helpful. I will then briefly describe why I think they are important.
- Smile.
- Sooner (Delivery).
- Safer (Delivery and interactions).
- Quality.
- Value.
As we have already discussed agility is about people and we want to put a smile on the faces of our customers and also our employees because happy customers sell our products through word of mouth and happy employees are more motivated and deliver better work. We want to deliver our products sooner to win valuable feedback and want to do so more safely with fewer errors and rollbacks or fixes. We also want to ensure that we have psychological safety so that people will address actual problems rather than ignore them because they are resigned to the consequences of speaking up. We also want to focus on quality because technical excellence enhances our ability to remain flexible and make changes going forward. Also the DORA state of DevOps report has repeatedly shown that increasing quality also increases long term development speed. The last one goes hand in hand with several other objectives here and that is to deliver value to our customers which makes them happy and keeps us focused.
In conclusion
To me agility is about a focus on people and delivering high quality and valuable software to customers quicker and more safely. If we can get there we should be in a good way. If you want to focus on other objectives that is of course totally fine. Just make sure that your objectives are well thought out and align with the manifesto for agile software development, or your amendments to it if you want to try and improve it.