The Commonwealth Bank, one of Australia's leading providers of integrated financial services, has set up a private cloud that runs internal applications as a service. These applications use more than 300 Oracle databases, all of which have been consolidated into on-demand Oracle instances that can be provisioned very quickly by application development teams within a browser interface. This has reduced the lead time for development teams at the Commonwealth Bank provisioning a production quality environment from three months to two minutes.
Meanwhile, Salesforce.com R&D leverages cloud computing to vastly speed up release cycles. Major releases come every quarter, but incremental improvements are added in monthly, weekly and even daily builds. The company's cloud infrastructure helps it maintain a single, unified code base that geographically distributed development teams can use. Those teams are successfully combining agile development and continuous integration/delivery with cloud computing.
Commentary: Is Your Cloud Project Ready to be Agile?
The Commonwealth Bank and Salesforce.com R&D are only two examples of how agile software development teams are using cloud computing to accelerate development operations and achieve efficiency and effectiveness. Cloud computing and virtualization make it easy for agile development teams to seamlessly combine multiple development, test and production environments with other cloud services.
Here are six important ways cloud computing and virtualization enhance agile software development.
1. Cloud Computing Provides an Unlimited Number of Testing and Staging Servers.
When agile development is used without virtualization or clouds, development teams are limited to one physical server per development, staging and production server need. However, when virtual machines or cloud instances are used, development teams have practically an unlimited number of servers available to them. They do not need to wait for physical servers to become free to begin or continue their work.
2. It Turns Agile Development Into a Truly Parallel Activity.
You may use agile development but still experience delays in provisioning server instances and in installing necessary underlying platforms such as database software. Just as the Commonwealth Bank reduced the provisioning of an Oracle database from three months to two minutes, agile development teams can provision the servers they need quickly themselves, rather than wait for IT operations to do it for them.
Although an agile methodology aims to squeeze all the inefficiencies and delays out of software development, in practice it becomes a serial activity. Cloud computing can push it toward becoming a more parallel activity than it once was. This leads to more efficient, more effective and better utilized agile software development teams.
3. It Encourages Innovation and Experimentation.
Being able to spawn as many instances as needed enables agile development groups to innovate. If a feature or a story looks interesting, a team can spawn a development instance quickly to code it and test it out. There's no need to wait for the next build or release, as is the case when a limited number of physical servers are available. When adding cloud computing to agile development, builds are faster and less painful, which encourages experimentation.
4. It Enhances Continuous Integration and Delivery.
As stated, cloud instances and virtualization greatly enhance continuous integration and delivery. Builds and automated tests take time. Agile development groups may need to subsequently fix the code for tests that fail during the automated testing—and they need to do this again and again until the build passes all the tests.
Having a large number of virtual machines available to the agile development group in its own cloud or on the public cloud greatly enhances the speed of continuous integration and delivery.
5. It Makes More Development Platforms and External Services Available.
Agile development groups may need to use a variety of project management, issue management, and, if continuous integration is used, automated testing environments. A number of these services are available as Software as a Service (SaaS) offerings in the cloud.
- Agile development can use a combination of virtualization, private clouds and the public cloud at the Infrastructure as a Service (IaaS) level. Such offerings include Amazon Web Services, GoGrid, OpSource and RackSpace Cloud.
- Then comes the use of Platform as a Service (PaaS) instances such as the Oracle Database Cloud Service, the Google App Engine and the Salesforce.com platform force.com, all of which include databases and language environments as services.
- Finally, there are a number of SaaS services that specifically assist agile development, including Saleforce.com, the Basecamp project management portal and TestFlight, which provides hosted testing automation for Apple iOS devices.
6. It Eases Code Branching and Merging.
In theory, agile development assumes that all features can be broken down into stories of uniform size and slated for builds. In practice, agile projects may encounter features whose development efforts last longer than a build or even a release. In code refactoring efforts, current releases may need to be enhanced with minor enhancements and used in production, all while a major redesign of code is going on. Code branching is necessary in these cases. Code branching and merging involves juggling many versions of development and staging builds. With virtualization and cloud computing, you can avoid buying or renting additional physical servers for these purposes.
Overall, virtualization and cloud computing remove the dependencies of test and development servers on physical servers, whether they are virtual machines with just an operating system installed or fully configured servers with platforms such as database software, language or code libraries. Virtualization and cloud computing also become indispensable if agile teams intend to practice continuous integration and delivery methods. This moves agile development more toward a parallel activity, rather than a serial one, by eliminating the delays in provisioning. In turn,enterprises can better align innovative development projects with business goals.
Nari Kannan is CEO of appsparq, a Louisville, Kentucky-based cloud and mobile applications consulting company. He has more than 20 years of IT experience, starting as a senior software engineer at Digital and subsequently serving as vice president of engineering or CTO of six Silicon Valley startups. Connect with Kannan via email.