The way that we develop software has shifted dramatically in the last decade or so. The long term development of monolithic applications with annual release cycles has given way to rapid developments and deployments broken down into smaller chunks. The rise of agile and DevOps feeds into a continuous development mindset.
We create fast feedback loops, iterating rapidly, and allowing the end user to guide further development. The business logic behind agile development is widely accepted. Development is driven by concrete needs and data, not guesswork, thereby reducing risk. Failing fast prevents us from going too far down a dead end.
As speed is at such a premium and delivery is more frequent than ever, it makes sense to apply the same principles we use to improve software to the processes and techniques we employ in developing it.
Be open to suggestions
You have to create an atmosphere where every team member is able to suggest possible improvements to processes. There’s a fine line to tread here, because you want to invite insight about problem areas, but you want to avoid individual criticisms or tension between teams that can lead to morale problems. Keep the focus firmly on how to do things better, rather than what is being done the wrong way.
Measure your progress
Releasing in frequent chunks gives you lots of small cycles to measure. Make sure that you collect and analyze data about your development cycles and deployments. Any proposed changes that are actioned must deliver tangible improvements. The only way to confirm that is to measure and compare with previous cycles. Hopefully, you’ll see steady improvement. But it’s also important to ensure that changes that don’t deliver can be rolled back.
Employ Root Cause Analysis
When major defects or deployment failures strike, you should take the time to investigate the root cause. Although this may seem like a burdensome investment during development, continually treating the symptoms is often a much bigger waste of time and resources in the long term. If you can identify the root causes of major defects, breakdowns, or bottlenecks, then you have the chance to eradicate them, not just for this project, but for future projects, too.
It’s important that people pitch in wherever they can add value. Spread the knowledge base by sharing tasks and build a sense of collective responsibility. The final product is a sum of every team member’s collective efforts — it’s not about skilled individuals working in isolation. The more the team buys into this idea, the more important it will become to them to improve processes right across the development cycle. You still want to play to people’s strengths, but take a measured approach, because too much specialization leads to bottlenecks.
There’s no need to set grand targets here. You can simply measure your performance and aim to improve a little in each cycle. How can you deliver better quality code? How can you test more thoroughly? How can you deploy faster? All the great benefits we derive from applying agile methodology to software development can also be applied to our development processes.