– Sumit Mehrotra, director of product management at Skytap (www.skytap.com), says:
Development and test teams are always squeezed for time. With the growing adoption of Agile methodology there is even more pressure on teams to release quality features at a faster pace. In fact, a 2010 survey showed that “Delivering applications faster” was one of the top application development priorities.
In such an environment, supporting multiple, older, versions of the application becomes even more challenging. Imagine a critical security vulnerability reported for your application. Traditionally to fix this type of scenario the development and test teams need to stop work on the current release, switch resources to the previous release, fix the issue, test and deploy the new release. Once completed, the development and test teams can switch back to the current release. This type of development methodology is tremendously time and resources consuming, both of which are critical assets for agile development.
Leveraging the cloud for development and test can help significantly reduce costs and cycle times by enabling development teams to quickly spin up multiple development stacks and test environments on-demand. Teams can parallelize development and conduct bug fixing and testing on multiple versions of their application. Leading software development companies are doing just that using the cloud.
Here are five practical steps/tips for achieving results at rapid speed:
Utilize Dev/Test “cook books” for faster provisioning.
Good products are built with simple components that have well defined interfaces. Just like skillful chefs, developers combine these basic “ingredients” or components to create innovative features. Provisioning the infrastructure that powers your development and testing should be componentized and compose-able. Following this approach will enable your teams to provision the entire application stacks for testing or development without starting from scratch every time. Virtualization technology, at the heart of any cloud platform, enables you to do that using Virtual Machines (VMs) as a provisioning unit.
To achieve this you can easily create a library of ready to use VMs for components of your application, e.g. for the Database tier, for the Web tier and for the Application Server tier. The components can be combined as needed to provision the entire application. Keep your library updated with the latest stable releases of these components.
Use a ‘golden’ version for each release to parallelize dev/test operations and go back to any release at any time.
Provisioning the entire application is usually the first step for any development or QA activity, whether it is setting up a development stack or setting up a test environment to run performance tests or functional tests. In addition to provisioning VMs for the individual components (tip 1), deploying an application may consist of other complex tasks, e.g. defining network connections between these components, defining the firewall policies on these connections, and so on. Provisioning the entire application correctly may take a long time. Performing these complex tasks each time from scratch takes valuable time away from innovating on the application itself.
Using cloud platforms, you can easily provision the entire application quickly, accurately and in a scalable fashion. Define the ‘golden’ version of each external release or each stable internal milestone of your entire application. Developers can use this ‘golden’ version, to provision a copy of it as their development environment at a click of the button. Similarly, test teams can provision multiple copies of any given release to parallelize the testing effort.
Collaborate on complex bugs to enable dev/test teams to resolve issues faster.
During the development cycle, precious time is lost when issues keep bouncing from one person to another for the lack of a good reproduction (repro). All of us are familiar with the dreaded ‘but it works on my machine’ syndrome. This situation is exacerbated if the teams are geographically dispersed. Consider a case where a new feature needs to be tested for stabilizing. The following steps should be taken:
a. The developer checks in code and a candidate build is generated
b. Test team provision the test environment and install the new bits. If there are setup issues, the process stops until the developer can debug and fix the issue.
c. Once the installation is done, the test team can begin a test pass. If there are any issues, the process stops again until the developer can debug and fix the issue.
This typical back and forth causes loss of productivity for development and test teams.
Cloud platforms can enable teams to work together in the same environment in real time, where bug fixes and testing can happen iteratively. Using tip 2 allows provisioning of multiple environments, ensuring that tests teams are not blocked at any time and can still retain the live repro of issues in an environment for developers to review.
Share new release builds of the product with customers to validate and iterate on new features faster.
The earlier you find issues in the development cycle the easier and cheaper is it to fix. Getting target customers involved right from the requirements stage through to beta testing is extremely valuable to discover such issues.
Traditionally, customers are invited to the product team’s location for testing because the product can be set up in a clean fashion by the product team. Additionally, it allows the product team to observe customer interaction with the product. Getting customers to visit your location and provision instances of your applications for a large number of customers, e.g. at the Beta stage, becomes prohibitive.
Cloud platforms offer virtually unlimited scale and can be accessed from anywhere in the world. Combined with Tips 1,2 and 3, this allows you to provision multiple copies of any version of your application and share them with any number of customers, and even contractors and consultants that you may have hired, from anywhere in the world. Once customer validation is done, you can easily discard the resources. Collaboration also allows you to observe the customers’ interaction with the product and to capture any issues that arise during those tests.
Automate the creation of “hotfix” repro for customer issues to get support, development, test and operations teams on the same page.
The lifecycle of the product continues well past the release date. You may need to support customers on multiple versions of the product for several years. However, it does not mean that you stop innovating on future versions of the product. A developer working on the latest and greatest release may be called upon to fix a bug in any one of the past releases. Typically a developer would need to delete their current development stack and create a development stack for the older release. Similarly, the test team will need to provision the older release of the application to effectively test the fix. This context switch is costly in terms of time and resources.
Using cloud platforms and tips 1-4, you can make this process much more efficient. The Test/SE team can automatically provision an environment for the older release (tips 1 and 2), repro the issue and hand over the live state of the repro to the developer (ti
p 3). The developer can fix the issue and test it in the environment without having to delete their current stack for the upcoming release. At the same time, the test team can verify the fix. Then, the fix can then be validated easily with the customer (tip 4).
These tips build on top of each other to reduce time spent on activities that are of little value to shipping the product. Cloud platforms provide the provisioning and collaboration primitives for dev/test teams to implement these tips as part of a software development cycle. Cloud solutions make it very easy for you to implement these tips for your agile development life cycle, without requiring any changes to your application.
Sumit Mehrotra is director of product management at Skytap, a leading provider of cloud automation solutions. He is an experienced industry veteran equipped with over 10 years in program management roles at Microsoft.