Cloud computing is having a profound effect on the software application lifecycle.
Almost every phase of creating and rolling out software applications is now addressed by a growing number of cloud services: from prototyping, to development, testing & QA, continuous integration -- and all the way down to staging, deployment and post-production (monitoring and management). All of this can now be done in the cloud.
The vision is compelling. Imagine a world in which programmers can access their development environment from any computer without having to set up anything, collaborate with teams spread around the world, easily push the code to testing and QA, and then to production, where the apps will be automatically monitored and managed.
Although admittedly realizing this vision in full is several years away, we are already seeing many of the components emerging and gaining traction.
Here are some examples:
Almost every area of the development phase is now supported by cloud services. Software-as-a-Service code repositories, version control and bug tracking services such as GitHub, Beanstalk (Subversion-as-a-service) and others are now commonly used in organizations large and small.
IDEs are another story. Until recently, IDEs were last bastion of local development work, but that seems to be changing (at least there are some early indications of it). A couple of example are the Mozilla Lab's Bespin project and HerokuGarden (which although it is no longer supported by Heroku, has a following and is featured in books such as O'Reilly's Learning Rails).
Another trend in IDEs are hybrids, which introduce the notion of developing on the local machine but deploying to the cloud from within the development environment, such as the g-Eclipse project and Aptana Cloud Connect.
A new tool that was recently released and caught my attention is Mike - a service for adding and managing builds in Java for continuous integration.
Testing and QA
This is a particularly active area in the cloud, and for good reason: testing seems to be one of the earliest applications for cloud computing. Some interesting companies in this space include Sauce Labs' Sauce On-Demand, which provides functional web testing in the cloud and is based on the popular open source framework Selenium, and Skytap which provides a full-featured "QA Lab".
Mercury (now part of HP), the 800 lbs. gorilla in testing also has quite a few SaaS offerings, which are increasingly gaining traction. And IBM has launched a development and testing cloud service, which allows using various Rational products in its cloud on a pay-per-use basis.
As a "bursty" workload, and with the growing trends of continuous integration and agile development, it's not surprising that cloud testing is doing well. Developers can run massive tests on-demand and in parallel, saving significant time and shortening the development cycle.
Then, of course, there is deployment to production. This is where PaaS players such as Google AppEngine, Force.com, Stax, Heroku, Engine Yard and others come in. All of them significantly reduce the deployment of the app by pre-building and pre-configuring a stack of application infrastructure (data tier, middleware and so on).
In production, applications need to be monitored and managed. New Relic is an application performance management service running entirely in the cloud, and it can serve both applications that run in a cloud environment such as Engine Yard or AWS, as well as applications deployed in the data center. Originally, the company supported only Rails apps, but has now expanded its product to support Java as well.
RightScale is another cloud-based service that allows for a variety of management and monitoring capabilities (and in fact integrates New Relic into it).
The Future of App Development
Last week I received a call from a friend at one of the largest vendors in the technology industry. He told me they were trying to figure out the "future of application development" and asked to meet the team so they could "pick my brain". Whoa, big topic.
I spoke about a number of areas and the topic of this blog was one of them. Although this is merely a story about "tools", there is a bigger picture here. After all, in the eyes of many, the number one benefit of cloud computing is increased business agility. And a key part of business is application development.
If we take all this to its logical conclusion, we can envision a web-based environment (i.e., cloud) which developers go to and can -- with a click of a button -- streamline the entire development process on-demand, accessing the myriad of tools that today require installation and configuration on local hardware.
If you are a developer and use any of these tools, or would like to mention other tools, or have any other thoughts about the experience of development in the cloud, please leave a comment.