Organizational Agility in the Mobile World: Continuous [App] Delivery
The highest priority in the Manifesto for Agile Software Development is, “satisfy the customer through early and continuous delivery of valuable software.”
This seems obvious. You don’t need to be Agile to agree with this assertion. As developers, our number one priority should be making software our customers can use. Further, we should try to deliver the software early because this is the best way to improve customer satisfaction.
But what is not so obvious about Agile Software Development is the notion of “continuous delivery.” What do the Agilists mean by continuous delivery? How does continuous delivery add value and lead to increased customer satisfaction?
Continuous delivery is a concept that emerged from the eXtreme Programming practice. Extreme Programming was born from Agile Manifesto author Kent Beck’s time at Chrysler and is the culmination of continuous processes around code integration, automated testing and deployment.
The basic premise behind continuous processes is to repetitively practice several common engineering routines, such as integration (combining everyone’s changes into a single base of code), build (compiling those changes), testing (verifying the change set) and deployment (distributing the result). Repetition allows an organization to hone these processes. As they say, practice makes perfect.
By repeating these processes, an organization can work out all the snags and snares in short order, quickly maturing the processes to a point where they are reliable and predictable. The frequency of each repetition determines how little change can be introduced from one revision to the next. Fewer changes between each revision make it easier to isolate the differences when troubleshooting a problem. Agile teams can easily deliver an app because they have done so many times before. And if there is a problem during the delivery process, they will find and fix it quickly since not much has changed since their last delivery.
Fostering an organizational culture around continuous processes will build muscle memory and allow teams to focus on creativity and innovation. When you eliminate the need to spend a lot of intellectual capital resolving mundane issues with merge conflicts, compilation errors, regressions and tedious deployment steps, the team can focus their talents on tackling the tougher challenges of innovative solutions, elegant designs, and durable code.
Building an organization around continuous processes requires automation. Any task that is repeated becomes process. Organizations should strive to automate as many processes as possible. Automation ensures tasks are approached the same way with each repetition, significantly reducing the risk of errors while making the processes required to continuously deliver apps more reliable and predictable.
There are several commercially available tools to help mobile developers automate their delivery processes and realize the benefits of agility. For example, source code management (SCM) tools like Git can help a team automatically merge their individual contributions to a single codebase. Further, scripting common routines for the compilation and testing of changes using tools like Appcelerator’s Titanium, SOASTA and Jenkins can enable a team to continuously integrate increments of changes on a regular basis. Lastly, automating the deployment of mobile apps using tools like Nomad, TestFlight, or Apperian’s EASE can help teams complete the continuous-delivery cycle.
Of course, all of this continuous delivery automation can be shared across projects and even across mobile development teams. Part of the organizational culture of continuous processes is a shared service commonly referred to as “DevOps.” The Development Operations discipline encompasses the procedural aspects of continuous delivery and can play an integral role in the agile development team.
In the mobile world, agile development teams can fully exploit the capabilities of continuous delivery processes and tools in order to get apps in the hands of users as frequently as possible. In turn, those users will enjoy early opportunities to use the apps, provide feedback and realize the value of working software.