How continuous integration underpins lean, agile ways of working
Ways of Working
Written by Oludayo Fafiolu
09 February 2019
To experience the breathless pace of software development today, just think about the constant cycle of app updates on your phone. It's no different for Access Worldpay, but with greater stakes - instead of providing extra levels for Candy Crush, its releases improve and protect financial platforms trusted by some of the world's largest organizations to secure the personal data of millions of customers. So where does continuous integration fit in?
For a payments organization like Access Worldpay, the ability to respond quickly and reliably to customer demands is less a competitive advantage than a business necessity - it is simply today's operating environment. It is also the impetus that drove the team's adoption of the Agile approach to development, which it refines wherever possible to improve efficiency still further.
Team: dynamic
Ben Haswell, Engineering lead, explains that the same considerations lie behind continuous integration. This enables a large team working on a single project to work as quickly as possible by minimizing code clashes and the delays they cause each new release.
Each developer works on a small, specific task and then commits the changed code to a shared repository which holds the code for the whole project. Given that each team has five or six developers, each making changes on a potentially hourly basis, the repository can easily receive dozens of changes every day.
"Having lots of people working off the same repository means that everyone's getting the latest changes at the same time," says Ben. The alternative, he explains, is to commit multiple changes later on, "but the longer you leave your commits, the greater your chances of getting code clashes."
Clearing hurdles
Once a developer has committed a specific change to the shared repository, it goes through the build pipeline - a process with lots of hurdles, or 'stage gates', which run the change through a suite of tests to verify that the change has not damaged any other code in the repository. "Nothing can get through if it breaks any of the gates," says Ben, so passing the tests "proves that the change works - you don't have to do a whole load of heavyweight testing." This gives developers an underlying degree of confidence in their work: "you don't have to worry that the application might not start at all, or that odd behaviors are down to a fundamental breakage."
Keeping the build working - or 'green' - is key to enabling frequent releases, so should a change committed to the repository fail any of the tests, the team is alerted immediately. "Any fail is a 'stop the line' event and you'll get the team swarming to get the build back to green," says Ben.
As a result, problems are quickly identified, "and the earlier you spot a problem, the easier it is to fix," he continues. "If you batch several changes together, all at once, chances are you'll get a lot of code conflicts" which take far longer to identify and resolve. Continuous integration, therefore, is like untying a series of individual knots in a long strand of wool before it becomes a tangled mess.
Trunk-based development
The need to resolve problems quickly is particularly important because the team practices trunk-based development. Instead of developing code on different branches, every developer commits each change to the master code. "It means the master is always updated with what everybody's doing, so it's always releasable," says Ben. "You don't have people working in isolation, where a change may work on their own branch but cause problems when merged into the master code. This way, you're getting feedback as soon as possible."
Combining continuous integration and trunk-based development enables robust, reliable code to be produced by a size-able team very quickly. Given that the team releases a new version of its master code approximately every two weeks, this is essential. "If you want to be able to react quickly and release quickly, you want continuous integration. It means that whatever's on your master is valid and up to date and can be released as soon as possible."
Responsive and responsible
This swift release of updated and improved master code is essential for Access Worldpay to continue serving its customers effectively and, therefore, competing successfully in its business environment.
"When a customer wants changes made, continuous integration is absolutely fundamental to how we respond," says Ben. "Only with continuous integration can you make those changes, validate them quickly and get them to the customer promptly." Put most simply, continuous integration enables Access Worldpay to be both responsive and responsible and thereby deliver rapid, safe change.