Belighted is a mobile and web development company with offices in Brussels and Paris. They are the makers of Nomad Suite, a mobile tool for managing professional services companies from A to Z, in a simple yet effective way. Check out their blog post on how their team integrates HipChat with other tools to stay on top of everything their team does.
For a few months here at Belighted, we have all been committed to release what could be a new breakthrough into the service related ERP world! We crafted it using such amazing tools as AngularJS and other trending ones!
But on our way of achieving such a challenge, we needed to put in place as complete a workflow as possible in order to allow a high quality level of crafted code that maintained traceability. We also wanted to make sure our workflow was easy and lean as possible so that we could focus more on developing features and less on maintaining our work.
In order to make things as smooth as possible for everybody, we rely on a few great tools, integrated together so we can automate as many tasks as possible.
Starting a feature
As with any agile project, features of Nomad Suite are described as stories, ordered by priority on the popular Pivotal Tracker.
Therefore, the first step is to start the first story in the backlog. This lets everybody know who is working on what. Because we use HipChat for internal communication, we hooked both tools together and all stakeholders are notified.
Next, we create a new feature branch, with a clear and concise name. Some of us like to add the story ID from Pivotal to the name, but the truth is we don’t really have a strict pattern. Feature branches are extremely important to us because they allow you to experiment at will, commit, share your changes, and rollback if need be, all without disrupting the work of other and, most importantly, staging and production deployments.
On rare occasions, we do commit directly on master, but the change must then meet two conditions:
- It doesn’t need review by another developer. This is true for very small bugs, typos and some settings changes, but not much else.
- It must be trivial enough that if you get interrupted, it can be stashed or discarded, and easily applied when you come back to it.
At every push to GitHub, the team is notified on HipChat. This is a great way to let everybody interested know how the feature is progressing.
Our CI tool, Semaphore, is also notified, and will let us know if all tests are green through — you guessed it — HipChat. This allows developers to not run the entire test suite, as some tests can take a few minutes. It is perfectly OK to break a feature branch.
Once the feature is implemented, tested, and passed all their tests, the feature branch is ready to be merged into master.
Or is it? Now is the time to look at the commits, and squash the branch if necessary.
As for branch names, we don’t have explicit guidelines on commits and messages, but here are a few things we hate to see, from bad to worst:
- Incomplete (not functional) feature
- Untested feature
- Broken tests
All commits should reference the Pivotal Tracker story ID and the last one should say it finishes it, so GitHub can update the tracker for us. The story is now automatically marked as finished, but it still needs review. Time to open a Pull Request on GitHub.
Because we want to make sure this is the best code we can write, and we can all learn something from somebody else, all changes need to be reviewed by another developer. It can be anybody — the important thing, like with pair programming, is to have another pair of eyes, but we will sometimes ask someone with particular expertise to do the review.
After a little back and forth (with amended commits and forced pushes), the reviewer can finally decide to merge the feature. He is also reassured by Semaphore, which tested the branch and reports status on the Pull Request.
After the merge, Semaphore will run tests on the new master. They should all be green, so it will deploy onHeroku for us (and yes, notify HipChat). Our custom deploy script also uses the tracker-git gem, so stories will now automatically be delivered.
Time for the next story!..
Hoping this post could help people looking for an efficient way of organizing their job !
Please support our project !
Like Belighted on facebook, follow us on twitter or just visit our website.