5

I'm working at a SaaS company who releases new features and bug fixes to our customers every six weeks. When we write code changes they pass through different steps (like a state machine) before reaching the production servers. The steps are different depending on if the change is done in the regular development cycle or as an emergency fix. We're currently using Harvest to manage the steps and track what code (features and bug fixes through packages) is being released to the customers and in that sense it's working well.

Unfortunately Harvest is both expensive and a pain to use from a programmer's point of view. Branching and merging is a nightmare. So we're looking into switching to Mercurial. Mercurial seems to excel in those areas. However, Mercurial doesn't seem to be made for tracking changes or manage the above mentioned process, it only does SCM.

Q: What options do we have when it comes to the release process, surely there are other SaaS companies (e.g. Google, Flickr, Facebook, LinkedIn) out there who wants quality control before releasing code to production servers?

Q: Is it a bad idea to try and build the process in Mercurial or are there other tools that we need to use together with Mercurial?

[Edit] To clarify, this is our (suggested) branch structure.

Here's the process flow we currently have in Harvest:

Hotfix <--> Test Level 1 <--> Test Level 2 <--> Master (Production)
Feature <--> Test <--> Release Test <--> Master (Production)

I'm not looking for a bug tracker, but rather a deployment tool that helps us track and deploy code that has been verified by our testers (code in release branch). If there is more than one hotfix being worked on at the same time we need to be able to test them together and if one breaks the code we need to be able to "demote" the code breaking changes back one step in the process flow. Today it's enough for the two developers to "promote" their changes to Test Level 1 and the system can be tested with both changes together. If one developer's changes breaks anything only when it's together with the other developer's code it can easily be demoted back from Test Level 1.

MdaG
  • 2,680
  • 2
  • 34
  • 46
  • By "tracking changes", do you mean "I want to know which releases change X is part of" or "for release X, what changes is part of it"? – Lasse V. Karlsen Dec 07 '10 at 10:58
  • The latter. It's also valuable to know which changes are in which state in the release process. – MdaG Dec 07 '10 at 11:10
  • Isn't that what you typically use a bug tracker to do? I'm sorry if I'm ignorant, I have no experience with Harvest. – Lasse V. Karlsen Dec 07 '10 at 11:16
  • We use a bug tracker (Test Track) today, but Harvest is able to on its' own keep track of different changes due to its' package system. We're looking to get rid of Test Track as well, but that's another issue. – MdaG Dec 07 '10 at 12:53

2 Answers2

1

However, Mercurial doesn't seem to be made for tracking changes or manage the above mentioned process, it only does SCM.

It's best to use a separate tool for issue tracking. That way you can use the best of breed for each task. Just makes sure that you select one which integrates well with your version control system.

To give some examples: jira (commercial) and trac (free) both have mercurial integration plugins. They also have customizable workflow states, allowing you to model your process.

Wim Coenen
  • 66,094
  • 13
  • 157
  • 251
  • Up until now I've disregarded Jira and Trac as mere bug trackers. Something to replace Test Track with when we've done the switch to Mercurial, but according to you either of these tools are so much more than a bug tracker? I'm going to look into them now. Thanks. :-) – MdaG Dec 07 '10 at 13:41
  • I've done my best to read up on both Jira and Trac and they both seem to be "just" bug trackers. Either of them would be a great replacement for Test Track, but the functionality I'm looking for is not mere bug tracking. I'm lacking the proper word for it. I think I'll need to update the original question with an example. – MdaG Dec 08 '10 at 08:15
  • @MdaG: so [this](http://confluence.atlassian.com/display/JIRA/How+to+create+Custom+Workflow+Elements+for+JIRA+3) is not what you are looking for? – Wim Coenen Dec 08 '10 at 09:56
  • From what I can see it's just issue tracking. I don't see how this helps with testing two issues together including the option of demoting code changes to earlier steps? Say two emergency fixes are needed after a release. The fixes has to be done on the master branch through a hotfix. As opposed to doing them in the sprint. How can we be sure that the fixes combined doesn't break anything? How can we be sure that no instance of the breaking fix reaches production? Jira only tracks them individually (and on an abstract level disconnected from where the code is actually at) from what I can see. – MdaG Dec 08 '10 at 13:12
  • Are you saying you are looking for a tool which will automatically apply/remove changes from certain branches when you change the status of the issue? I don't see how that can be done automatically - it's always possible that you need to resolve conflicts. – Wim Coenen Dec 08 '10 at 13:18
  • Correct (it's not connected to the issue though, but rather the package containing the actual code changes), yet Harvest somehow does just that. Still it might be worth switching Harvest for Mercurial + issue tracker and lose that benefit as we'll become more agile in the process and that might lessen the requested need. – MdaG Dec 08 '10 at 15:43
0

I've come to realize that what we're looking for is not an issue tracker, but rather a deployment tool to replace that aspect of Harvest. Go and Anthill Pro are two candidates.

MdaG
  • 2,680
  • 2
  • 34
  • 46