(Note: this post is still in beta.) 

It’s great how easy these days is to have a work environment that supports agile process (continuous integration/delivery, [B|T]DD) almost for free.

The fact alone that all this stuff is running on someone else machine is great. But, most important, there’s no need to spend a penny or spend very little compared to having your own infrastructure and people maintaining it (even if people means just you).

Continuous Integration & Delivery

I’m using GitHub as repository, and Travis CI for continuous integration (configurable in minutes) to test and build my projects as soon as I push code to GitHub.

High standard and accessible production environment is becoming more and more available for developers and small companies too: Heroku is an example. I have Travis CI configured to automatically deploy one of my apps to the production environment as soon as I push any change to the branch master.

The Maven Release Plugin helps to automate many boring, time-consuming and easy-to-forget (indeed, especially because they are boring and time-consuming) tasks, from “checking that there are no SNAPSHOT dependencies” to “tag the code in the SCM [Github] with a version name”.

TDD (better yet, BDD) & Specs

YatSpec is a good test library to write specifications based on the features to be implemented at hand. Check this out for an example.

Another example, when I’m modifying the grammar the parser I’m implementing supports, I:

  1. improve the spec/test accordingly,
  2. implement the requirements, and
  3. push the changes to GitHub, which triggers Travis CI, which, in its turn, updates the project’s page hosted with GitHub Pages.

(Have a look here if you are interesting on publishing to pages automatically from Travis CI)

Automate Things

Why automating tasks is so important? For many reasons, being the most important the fact that this is The most important thing you need in order to continually delivery your app in production. The easier the release process, the more often a new version will be delivered.

Consider: a) It takes 3 days best case scenario vs. b) I just need to push a button. In which case are you more likely to release (or not) a new version of your product?

A Few Notes…

Here, I mentioned:

  • Github
  • Travis CI
  • Heroku
  • Maven
  • Yatspec

Technologies are really just a mean to an end, though. You can replace Maven by Gradle, Travis CI by Jenkins, Heroku by one of the many PaaS available out there. Pick the ones that suit you better, release often! and make your boss customer happy.


One thought on “Release Often & Automate Everything in the Process (beta)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s