Cloud computing and virtualization let you create virtual machines and use of cloud-based services for project management, issue management and software builds with automated testing. This, in turn, encourages agile development in six key ways.
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.
How-To: Keep Cloud Projects Agile-and Simple
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.
Advice: Development, Testing Servers Among Enterprise Apps Right for the Public Cloud
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.
Follow everything from CIO.com on Twitter @CIOonline, on Facebook, and on Google +.
Read more about web-oriented architecture in CIO's Web-oriented architecture Drilldown.
Join the CIO Australia group on LinkedIn. The group is open to CIOs, IT Directors, COOs, CTOs and senior IT managers.