Two years ago we decided at codecentric to move as many applications as possible to the cloud. We wanted to focus on consulting and not on server administration. Google Apps was the first step which replaced our own Exchange Server. As we are doing software development for our customers the question raised up, which development tools/infrastructure could be moved to the cloud? With this article I want to give an overview which tools are available either as software-as-a-service (SAAS) or platform-as-a-service (PAAS) model. Naturally this is only a small selection of tools that I am convinced are among the best cloud services on this planet – especially if your are doing agile projects with agile practices. I would like to get your feedback on these tools and your experience with cloud services for software development projects – naturally also about tools I do not mention as there are so many cloud applications available that I cannot know all of them.
Source Control – GitHub
One of the most important tools for software developers is a version control system for the sources, documents and other artifacts of the software. After CVS and Subversion were kind of a standard for years, distributed version control systems (DVCS) have become mainstream in the last two years. Git and Mercurial seem to be the two tools that have the biggest community. GitHub is a service that provides Git in the Cloud. More and more companies and Open Source projects are moving to GitHub – more than 3,500,000 project were managed with GitHub when this article was written. There is also an Enterprise Edition of GitHub so you can install a GitHub service inside your company network – this can be interesting for companies that have legal issues with having its sources in a Cloud. (e.g. it has to be in the European Union for some German companies)
GitHub is easy to use and has an excellent Web UI. Projects can be created and cloned easily – you can for example create a local copy of the Springframework with just on Mouse click (there is also a nice native Mac App that you have to try out). Beside the version control service based on Git, GitHub provides some useful additional functionality like a Wiki, a simple Bugtracking tool and a collaboration tool for code reviews. Especially the reviewing functionality is a big additional value for software projects. Also the wiki has some nice features – it can be viewed locally on the development machine and can be branched and merged like other sources with Git. The bugtracking will be suitable for small projects but is a little bit too lightweight for bigger teams.
An interesting alternative to GitHub is BitBucket . BitBucket has a similar function set than GitHub, but is based on Mercurial. The newest version also supports Git, so that you can chose your favorite tool with BitBucket. As it was aquired by Atlassian last year, it will be interesting to watch how they will extend the service of BitBucket and how it will be integrated with other OnDemand tools of Atlassian.
Agiles project management – Jira OnDemand and Sprint.ly
Atlassian is offering its tools as a SAAS offering called OnDemand since last summer. For users of Atlassian products this is an option to save administration and maintenance costs. Especially the frequent updates of Jira and Confluence meant a lot of work for us. For teams that are not already users of these tools it provides a quick and reasonable priced way to start. Jira OnDemand is maybe the best bugtracking tool in the cloud. It offers configurable workflows, a flexible and powerful query language (JQL) and an open plugin platform that offers lots of useful extensions which makes Jira a swiss army knife for software projects. With Greenhopper you can turn Jira into a full blown agile project management tool, that support Scrum and Kanban out-of-the-box. With Greenhopper you can manage and prioritize your product backlog, make your Spring and Release planning and track your user stories and tasks on an interactive task board. Greenhopper also generates burndown charts and can be integrated in the powerful Jira dashboards. With Jira Wallboard you can easily put Jira dashboards on a LCD screen to have a nice information radiator – we use it in our teams rooms to support communication and transparency. Jira and Greenhopper OnDemand can be used in small and big teams but in some of our teams we got feedback that it can slow down the velocity as lots of features have reduced the leightweight approach Jira had some years ago.
A new and intelligent alternative to Jira, especially for “startup-like” projects is Sprint.ly . With Sprint.ly the product (backlog) is the center of the whole application. You can create user stories, tasks, bugs and test and prioritize them by drag&drop the items in the UI. Sprint.ly also offers a task board and the ability to estimate the size of an item using t-shirt sizes (S, M, L, XL). The UI of Sprint.ly is really exciting, because of a lean but nice design and a great usability that also supports keyboard shortcuts in the lastest release. Sprint.ly also integrates with GitHub, so that a developer can for example close a ticket by just putting a special “command into the comment” of a commit to the repository. Sprint.ly supports creation of items by sending e-mails to the system and I am quite confident that with the ReST API there will be more integrations soon. The process behind Sprint.ly is agile, but neither Scrum nor Kanban – it takes the best of both worlds and offers a unique approach that helps to get things done quickly. I personally like the approach combined with this great tool, but everybody should test if Sprint.ly fits into his
A popular alternative to Sprint.ly and Jira is PivotalTracker – I have no real experience with it so maybe somebody can put a comment on this tool.
Collaboration – 37signals Suite
If you are working in big or distributed teams you know that collaboration and communication is essential for the success of a project. 37signals (Ruby on Rails inventors) has some great tools in there portfolio of web based applications. All of them set the benchmark for usability and productivity of SAAS solutions in my point of view. The 37signals Suite offers the most popular tools in one suite with one price and the ability to manage users and permissions for all tools at one place. Basecamp is a task management tool for teams, that offers to manage to-do lists and tasks for projects. In addition to that is offers a great team calendar, to manage deadlines for tasks and it is possible to collaborate and manage files on task level. Backpack the next tool in the suite that was especially designed for team collaboration and is like an intranet for projects and teams. Group calendar, news, content management and a basic document management are just some of the features it offers – everything designed for social media like communication that really helps to keep a team or project informed easily and much better than with shared drives, e-mail or even a wiki. The last tool of the suite I want to introduce is Campfire a realtime chat room for teams. The most important feature is that you don’t have to install a chat client to use it – everything runs in a normal web browser – which is a big advantage in comparison to Skype or whatever other tool that requires an installation – sometimes a big issue when you are at the client site. All tools are integrated very well and have a common user and permission management. The UI is great and easy to use with keyboard shortcuts, mail integration and open APIs that helped to integrate these tools with many other applications including a big support for mobile clients.
Continuous Integration – Cloudbees
Continuous Integration is a well established pratice, especially for agile software development. Jenkins is one of the most popular open source CI servers – we are using Jenkins because of its flexibility and the big plugin eco system. Cloudbees provides a complete Jenkins based CI environment as a PAAS solution.
The DEV environment offers services for Jenkins, Maven and source control with Git and Subversion – you can also integrate your tool (like GitHub) if you want. Besides this it offers a runtime environment for Java applications including a relational database, so that you can deploy your application directly out of the CI environment into this PAAS solution. The CloudBees platform has some unique features for elastic scalability and availability that everybody will value if you have tried to manage a big CI environment by our own.
An alternative to CloudBees is Bamboo OnDemand from Atlassian, that has a great integration into the whole Atlassian product suite and offers some nice features to integrate with Amazon Web Services, so that you can setup a test server in the Amazon cloud. Bamboo also has some Continuous Deployment features that will help teams to implement DevOps in the organization.
Automated Testing – Saucelabs
Automated testing is one of the most important practices in agile software development. You need automated regression tests to deliver software in short cycles with high quality. There are a lot of tools available that support automated testing or behaviour driven development. We are using the Robotframework and JBehave in our projects. Selenium is used by most of these tools to automate the test of browser based applications. Saucelabs offers a Selenium test environment in the cloud. Saucelabs executes your Selenium tests to test your build (e.g. the one in the Cloudbees environment) and can be integrated with every Jenkins (or other CI) server. The advantage of Saucelabs are that you can run tests and test suites in parallel which is important if you have big regression test suites and small release cycles. You can also test different browsers directly in the Saucelabs environment and Saucelabs automatically records videos of the test so that you can playback it later. The integration with GitHub makes Saucelabs a great testing tool in the cloud for every developer.
Development server – Amazon Web Services
Last but not least I want to shortly introduce Amazon Web Services which is the cloud platform of most of the mentioned solutions. Amazon has a lot of cloud service that you can use in software projects. The AWS Management Console (screenshot) is the central management application of all Amazon cloud service and gives you access to enterprise-level infrastructure services.
You can write tons of blog entries about AWS, so that I will just mention the most important once in my point of view. The Amazon Elastic Compute Cloud (EC2) offers server infrastructure as a service – so you can setup a test server with some clicks in the web ui, basically with every OS you want. Amazon Elastic Beanstalk is a platform as a service on top of Amazon EC2, that offers a Tomcat environment for Java web applications that can elastically scaled up to hundreds of servers. It is integrated into Eclipse Webtools so that a developer can use it just like a local Tomcat instance. You can add a relational database with Amazon RDS or a message queue service with Amazon SQS – almost everything is possible and available.
This blog entry gives an overview about possible tools and service for software developers and projects in the cloud. There are tools available for (agile) project management, team collaboration, continuous integrations servers, testing tools and development infrastructure. Cloud services have lots of advantages: No or low administration and server costs, flexible pricing models that are especially interesting for small companies and startups and good integration/interfaces (ReST, etc.) build into the tools. An additional advantage is that most of the tools have a great web ui and are accessible from everywhere over the internet.
My overview is far away from being complete regarding the number of tools and the categories. There are for example good tools for Application Performance Managament (AppDynamics and New Relic ) or Performance Testing (Keynote ) available as SAAS solutions that I haven’t mentioned.
What are your experience with cloud services and which tools would you recommend?