There's cloud development, and then there's cloud development.
Since the notion of cloud development (formerly known as Web application development) took off, thousands of developers have been intrigued with the notion of creating apps for the cloud in the cloud. After all, the accessibility, portability, and powerful collaborative capabilities of the cloud are practically perfect for developers -- or so one would think.
Yet in-cloud development hasn't taken off as many would have expected; many cloud apps are still coded, tested, and prepped on local machines and then deployed using whatever tools their public, hybrid, or private cloud has.
Part of this has been the problem of lock-in: for instance, previously if you developed on SalesForce.com's Force.com tool, you would have been expected to deploy on SalesForce, rather than something like EC2 or Google App Engine. That, happily, has loosened somewhat: today Force.com has some portability with these cloud services.
But lock-in is still prevalent, which has held back many developers from fully jumping into in-cloud development. There is also the issue of corporate inertia: yes, cloud-based offerings can offer a reduced hardware footprint and configuration setup, but if your organization already has a well-developed development infrastructure, that's going to be hard to part with, at least until machines and software become obsolete.
Today, two development methodologies are bringing a lot of street cred to cloud-based development: distributed and agile development. These concepts are pushing the envelope on existing development apps, requiring a new set of tools that can accommodate new development, testing, and deployment methods.
Spreading development far and wide
Distributed development is the natural by-product of the Internet and the phenomenon that not all coding geniuses live within commuting distance from your workplace. Distributed development is global development, which brings its own challenges with collaboration and code management. There are great applications already out there for distributed code management: git and Subversion are two such tools and are widely used in distributed environments already.
These online code management tools only tell part of the story, however. Even in a distributed development environment, programmers are still pulling down code to their local machine, modifying it, then uploading back into the repository to push it along to whatever step in the product workflow is next.
Developers can move towards a more collaborative work method by incorporating browser-based integrated development environments (IDEs) into their toolset. These interfaces enable developers to code out in browser space; examples include Ace (which absorbed Mozilla's Bespin/Skywalker projects), Coderun Studio, Codemirror, and Ymacs. Kodingen, another Bespin-based tool, was billed as another contender in this space, but the project seems to have been in hiatus since March of 2011.
Such in-browser IDEs, combined with the source code management tools mentioned above, are all well and good for distributed developers who want to work in the cloud, but they don't offer the level of administration and feedback reporting that's critical to managing agile projects. For agile development, more robust tools are needed.
Keeping development nimble
Agile development is where cloud development can really be much more than just "online." Since cloud environments can be provisioned instantly and nearly any configuration copied and activated, the possibilities for instant developments and test environments are very attractive to developers. Particularly when those virtualized cloud servers can be configured to match the customer's production servers -- whether in the cloud or actual iron.
Cloud development can also boost agile development by coordinating collaboration, whether planned sprints or emergency bug fixes. Better yet, that collaboration can be done on provisioned virtual machines that will form a homogeneous platform for developers to use, so one developer's machine won't catch a bug that might slip by on another coder's machine due to differing setups.
Deploying to the cloud is also great for agile development. Pre-releases can be pushed out to customers' test machines on their cloud almost instantly. Even if the customer isn't in a cloud environment yet, pre-releases can be posted on a public cloud somewhere for the customer to access and test remotely before accepting delivery of the gold release of the app.
There are two toolsets that can approach this level of agile management in the cloud. The first is Code2Cloud, which is coming out soon from VMware's SpringSource division, in conjunction with Tasktop. Even though it's not out yet, Code2Cloud caused quite the stir when it was announced last fall at the SpringOne G2X conference. That's because Code2Cloud is pretty much the first in-cloud offering that bridges the gap between coding, testing, and deployment in one tool.
Code2Cloud includes the SpringSource Tool Suite IDE, git, the Mylyn task management Eclipse plug-in (Tasktop's contribution), Oracle's Hudson integration tool, and a Bugzilla-compatible bug tracking service. Developers can use the built-in IDE or work locally in Eclipse with the Mylyn plug-in. The transparency is expected to be very complete; any work done in Eclipse will be immediately updated in the Code2Cloud system.
There will be some drawbacks to the all-in-one approach in Code2Cloud, besides the fact that's it's not out yet (though here's a nice demo for now). Most notably, only one language will be supported on Code2Cloud's initial release: Java. You're also locked into SpringSource's Spring Framework to boot.
The other player is an old hand in distributed and now agile development: CollabNet. CollabNet's offers a tool suite comprising TeamForge, an application development management tool formally known as SourceForge Enterprise Edition, now specifically tuned for agile methodology; Subversion Edge, a Subversion administration tool; and ScrumWorks Pro, a project-level management tool.
There's a lot this suite has to offer: TeamForge alone is a solid forge and development management tool (now known by the marketing-friendly label "application lifecycle management") with a lot of pedigree. Ditto Subversion Edge, since CollabNet invented Subversion itself back at the turn of the century. ScrumWorks Pro is tightly integrated with these other apps, so any project-level work done in ScrumWorks is instantly reflected back in TeamForge and vice-versa. The level of reporting in ScrumWorks seems impressive as well.
You can watch CollabNet's demo too, to get your own look-see.
There are differences between the CollabNet suite and Code2Cloud. For IDE work, CollabNet developers will need to use something local, such as Eclipse, Visual Studio, or TortoiseSVN. But while there's a non-cloud element to working with CollabNet tools, that means that right now a lot more languages are supported than just Code2Cloud's lone Java.
Another key difference will be pricing, but a comparison there is pointless until Code2Cloud is actually released.
Neither app, by the way, has cloud provisioning tools integrated within them. It would be great if Rightscale, Cloud.com, or Skytap could be integrated into one of these agile development apps, so provisioning and automated management of dev, test, and production virtual machines could be kicked off right within the development application itself. Skytap has partnered with HP and their application lifecycle management apps, and CollabNet has their Lab Management service, so perhaps some sort of more direct integration will be coming soon.
For now, there seems to be a good collection of online tools for general distributed developers available and a growing set of cloud-based applications for full-on agile developers, as well. The full potential of the cloud as platform is finally maturing.