Transformative Development: How to Begin Application Development in the Cloud

[article]
Summary:
There is a lot of buzz in the IT industry around cloud computing and its impact on driving greater efficiency across an IT organization, but when considering adoption of cloud computing infrastructure, where should an organization begin? The application development lifecycle can be a good starting point.

There is a lot of buzz in the IT industry around cloud computing and its impact on driving greater efficiency across an IT organization. But when considering adoption of cloud computing infrastructure, where should an organization begin? The application development lifecycle can be a good starting point. Infrastructure utilization is low, labor costs are high, and the lifecycle is ripe for automation. Cloud computing can dramatically streamline the lifecycle by reducing the need to acquire dedicated infrastructure, providing preconfigured application lifecycle management environments, and providing needed resources on demand. All of this reduces cost and time to market while improving quality.

Studies [1] have shown that 30 to 50 percent of all servers in a typical IT organization are dedicated to test, with most of the servers running at 10 percent utilization or less. Paradoxically, one of the top challenges in moving applications into production is the limited availability of servers on which to test the app. Test backlog is often the single largest factor delaying new deployments. Generally, the root cause is the difficulty in properly deploying and configuring test environments on the available servers.

How Cloud Computing Helps Automate Processes
When assessing how to begin implementing a plan for transitioning their IT applications to the cloud, organizations should first identify a small number of common application infrastructure and middleware patterns on which to standardize. This effort may require buy-in from the infrastructure, development, and operations teams in order to ensure that the standard patterns meet the criteria for the bulk of the application requirements. Aiming for 100 percent coverage of the organization’s applications is not realistic. It might be good to start with applications that are not the company’s critical IT assets, both in order to achieve buy-in across the organization and to make sure that any potential issues around usability, access, and security have been worked out. An ideal starting point would be to identify applications for which conforming to one of the identified standard middleware is a reasonable price to pay in order to achieve reduced management costs and improved speed of deployment.

The next step is to capture the platform and its configuration in a set of virtual machine images and then load them into the cloud management system. These images can then be deployed in minutes. Cloud management systems that let an organization orchestrate the deployment of multiple virtual machines together are particularly well suited for this option. Next, automation scripts to configure the environments are created, typically by the deployment engineer, and linked into the catalog. The environments can then be automatically provisioned on demand from a self-service interface.

It helps to think of the construction of the virtual machines in three stages. At the lowest level are the components that are “baked into” the image. These are typically the operating system and some middleware components, such as the application server, and they change relatively infrequently. Next, are the common components that are laid down on top of the images that often have different governance processes and rates of change. These images typically include software components delivered by other teams or third-party libraries. It is useful to govern the catalog of components using a definitive software library—a secure repository that contains the master copies of all controlled software—in order to ensure only approved versions are used in production and make sure that the automation scripts link to the approved versions from the catalog.

At the highest level are the most quickly changing pieces: the applications. Cloud computing enables development organizations to rapidly deploy applications into these images, which in turn helps to facilitate and manage rapid build and test cycles, due to the short provisioning times (which can be on the order of minutes). These components, as well as the automation scripts needed for their installation and configuration, are governed by development processes, including daily integration builds, release candidates, etc. For the first time, cloud computing ensures that software, the scripts to deploy and configure the software, and the software infrastructure are deployed, tested, and kept in sync with each other.Identifying Tools for Cloud-Based Application Development
This work is not trivial, but there are technologies that can help users model the assemblage of virtual machines and the deployment of software onto those machines. In some cases, these tools can even generate scripts to automate deployment from the models. There are also prebuilt frameworks that can simplify the configuration of middleware components.

These technologies are the building blocks of cloud-based automated application deployment through the lifecycle. The process of deploying a test environment now can be reduced to a self-service request through the cloud’s web portal. The virtual machines are automatically provisioned after obtaining necessary approvals, and the dependent components are then deployed from the software library. The application, testing, or operation teams can then deploy the applications, leveraging a set of automation scripts that are tested and configuration-managed together with the application. A highly error-prone and manual process that used to take weeks can be reduced to hours or minutes through this continuous delivery process.

Once a standard set of environments is defined, the developer and tester practitioner tools can be directly integrated with the cloud catalog. Developers can then deploy applications from the desktop onto dynamically provisioned cloud servers and teams can automatically deploy applications directly from their build servers. Giving all teams easy access to the same set of environments and automations ensures that everyone is using applications with the same configuration, reducing the likelihood of defects due to misconfiguration and ensuring that defects are more easily reproduced.

The benefits outlined above can extend into the operations team as well. While not all operations teams will be able to take advantage of the same environments as the development and test teams, having access to the same definitive software library of components and the same automation scripts as the development and test organizations will help ensure the applications get deployed and configured correctly, despite differences in the underlying environments.

Automating Application Deployment and Configuration
There are many benefits to automating application deployment and configurations. Application cycle times are improved because of the ease with which test environments can be made available. Development and test teams are less inclined to “hoard” servers if they know that they can get properly configured environments on demand, thus improving utilization. Quality is also improved, as the estimated 30 percent of all defects due to misconfigured environments is greatly reduced, freeing testers and developers to focus on real quality issues. The time to set up and configure test environments often dominates the test lifecycle. By reducing deployment time from days to hours or minutes, testers can spend more time testing. Maintenance costs are also decreased, because having a standard set of virtual machine images reduces the labor required to keep all of the test servers at the appropriate operating system and middleware patch levels.

When used correctly, cloud computing can help reduce cost by consolidating servers through virtualization and increasing utilization while reducing installation, configuration, and maintenance time. It also improves quality by automating error-prone, manual tasks and speeds time to market through continuous delivery cycles. At a time when enterprises are demanding that their IT organizations deliver more value to the business with less expense, a carefully planned cloud implementation, starting with the development lifecycle, must be considered.

References

1. "Industry Developments and Models—Global Testing Services: Coming of Age,” IDC, 2008 and IBM internal reports http://www.marketresearch.com/map/prod/1939797.html

About the Author
Dr. Steve Abrams is an IBM Distinguished Engineer at IBM Rational Software where he is chief architect for cloud computing.

About the author

AgileConnection is a TechWell community.

Through conferences, training, consulting, and online resources, TechWell helps you develop and deliver great software every day.