Agile software development is based on twelve core principles, while all twelve play a role in improving how an organisation produces software two in particular are key to understanding how we should view the world and our place in it.
Customer satisfaction by early and continuous delivery of valuable software
Working software is the principal measure of progress
Taken together, these two statements mean our goal as developers should be the continual delivery of working software.
By following certain principles we can ingrain this thinking into us and the organisations we work in.
No Second Guessing
If we are to deliver software continually to users the processes we use must be automated and trusted.
Does it work?
Have we tested it?
Will it work in production?
Questions like those above must be eliminated from our thinking. Our build chains must be built to automatically verify the correctness of software as it’s produced, to automatically create builds for every environment and for the differences between these environments to be minimal and controlled.
While you’re second guessing whether you’re ready for production, your agile rivals are shipping to their customers.
While no one wants to put something into production that isn’t ready or adequate, this judgement must be a repeatable, reliable and ultimately fast process.
Looking for a Fight
It’s only natural when we start this journey towards automation of all the things, that we start by concentrating on the low hanging fruit and avoid the difficult things.
Actually if we want to reach the nirvana of a slick, streamlined delivery process, we should be doing precisely the opposite – we should concentrate on the most difficult things causing us the most pain.
Necessity is the mother of invention, if we inflict pain on ourselves by continually doing the things which we find hardest we will find a way to automate them.
Developers are very resourceful people but ultimately lazy, they will concentrate their ingenuity on making their lives easier and what makes their life easier will get software out of the door to users quicker.
Quality Above all Things
As you increase the speed at which you’re shipping software you will become ever more dependent on quality being built in.
Ensuring quality must not require conscious thought, it should be an inevitable consequence of the processes you have in place.
Every commit, merge and build must be tested, if all lights are green we are good to proceed, if anything is red then nothing moves until it’s fixed.
Pragmatism is an important skill for a developer to have but this needs to be related to what features get shipped not to the quality of the code that makes it out into the wild.
Compromising on quality is an acceptance of shipping bugs. The cost of these bugs in production will always be higher than if time were taken to address them before hand, the short term gain in shipping early will ultimately be undone by the additional time taken to sort out the mess.
Agile delivery is a fine balancing act between speed and maintaining the integrity of the product.
The only answer is automation that concentrates heavily on addressing the sticking points in the process with a serious bias towards testing at every stage to ensure quality is guaranteed.
Going to production should not be an onerous or scary prospect, it needs to be a constant option open to us whenever we feel we’ve achieved something the user can benefit from.
Words Ben Walpole