Agile is essentially a fast iterative model where you can make code changes instantly and get them out for review. Because of large teams, budget constraints and fluctuating demands, development teams require dynamic, elastic, automated and self service infrastructures to achieve the benefits of agile methodology. As static resources can break the agility, many companies are looking to the cloud as a way to extend and deepen their agility.
So how cloud enhances Agile development?
The Agile approach to software development structures work into sprints, with the objective of each sprint to optimize the most important work at that time and then review and re-optimize frequently to keep software development on track and directly relevant to the business needs of the organisation. Sprints are time-boxed, usually in two to four week increments. The concept of time-boxing forces both the technical and business teams to continuously prioritize features and defects. Continuous prioritization of tasks and management of all activities within a current sprint requires transparency. In the case of distributed teams, you may need a management tool that all team members can access. With the cloud model, you can provision Agile management tools within minutes and scale globally with thousands of users without having to manage IT infrastructure.
Code Branching and Merging
As per Agile philosophy, all features should be broken down into stories of uniform size and scheduled for builds. But in practice, agile projects need to deal with features whose development efforts last longer than a build or a release. In code refactoring efforts, existing releases may need enhancements with minor changes before being used in production while a major redesign of code is going on. So code branching is necessary in all these cases. Code branching and merging is the process of juggling many versions of development builds. With cloud infrastructure, you can avoid buying or renting additional physical servers for temporary infrastructure needs.
On-Demand, Disposable Testing Environments
No matter how agile your platform is, you may still experience delays in provisioning server instances and setting up the required software such as web servers and databases. Without virtualization or the cloud, agile teams are limited to one physical server per development. When cloud instances are used, development teams have practically an unlimited number of servers available to them and they need not wait for physical servers to continue their work.
With cloud, you essentially pay for what you use. You can have your developers working during the day during which time your servers are powere on and you are paying for them. When everybody leaves the office at night, you can turn off or pause those same servers servers and not pay for them during this time. If someone needs them outside of office hours then they can easily start them again via the web portal or API.
You may also scale down costs for testing and development infrastructure in the public cloud by scheduling instances to automatically start up and shut down at certain times during the day, and avoid additional charges when resources are not in use.
Another advantage of the cloud is the ability to create multiple environments, where you can quickly build the new environment and isolate the versions of code that you are testing. You can have one environment for one developer testing a feature and another environment for another developer testing other feature. Multiple people would be working on different parts of the code and this allows them to work in parallel.
IaaS platforms offer great functionality around provisioning new instances with a full range of features and configuration options. In the hands of system administrators and agile developers, these platforms can provide the flexibility to create custom environments perfectly suited to the requirements of an application.
Testing directly on IaaS platforms allows wider and deeper testing of new software before launch, for example conducting proper load testing.
Continuous Integration and Delivery
Having a large number of virtual machines available to an agile software development group can greatly improve continuous integration and delivery. Agile teams can spawn as many instances as needed on an ad hoc basis.
Agile development groups may need a variety of project management, issue management and automated testing environments. But some of these services are available as Software as a Service (SaaS) offerings in the cloud. Agile teams can therefore combine virtualization, private clouds and the public cloud at the Infrastructure as a Service (IaaS) level.
Instant feedback is extremely important to the Agile methodology. This is achieved through continuous integration, testing but also through inputs from stakeholders. The cloud can automate feedback at all stages of a project.
For successful Agile development, organizations can rely on the cloud to provide distributed and easily accessible source code management to any number of developers. The cloud enables secure and reliable availability to source code that enterprises can easily scale up to thousands of developers without infrastructure concerns. It also provides access to production environments in just few minutes, and in some cases, a push-button control to automate deployment. Leading cloud service providers empower organizations to export code to production with minimal time investment or delays.
Combining agile methodology with cloud computing brings together the best of both worlds. The opportunity offered by cloud platforms can optimize achieving iterative software releases as well as facilitating organizations to examine quality standards and receiving user feedback routinely.
In this way the cloud augments and reinforces Agile development methodologies by providing enhanced business agility, faster time-to-market, increased productivity, high quality code and more efficient cost contract as depicted below:
|Preferred Results||Benefits in Public Cloud|
|Enhanced business agility||Promoting overall focus on business issues and reduce cost to implement and deploy a change.|
|Faster time-to-market||Minimizes time to provision new environments, release new features and also to discover and deploy bug fixes.|
|Increased productivity||Minimizes manual hours spent provisioning and managing environments.|
|Quality improvement||Boosts automation of all steps to production and improves environment consistency.|
|Low cost||Low upfront investment for procuring environments. This is very helpful for startups.|
With a focus on delivering value and flexibility, leading organizations view agile as a competitive advantage in helping deliver innovative products and services to their customers effectively. In Agile methodology, every day you are be making progress toward a clear aim, and also toward stability and deployability. The cloud has accelerated and deepened the effectiveness with which organizations can achieve this.
Starting with a public IaaS solution for development and testing environments is the first step for agile teams new to the cloud. IaaS is the best option for porting existing applications that were not designed to take advantage of horizontal scalability. From here teams can look to incorporate on-demand scalability and other cloud native functionality into production services.
- Can Cloud Computing Enhance Agile Software Development? - June 15, 2015
- Data characteristics to be considered for cloud servers - April 28, 2015