Bitbucket + Jira integration or why we moved away from Github
Every dollar counts
First and foremost, we're a startup and every dollar counts. Github charges based on the number of repositories. Bitbucket charges by the number of users. We could structure our code based on the pricing of our repository host, but that's nuts. Our code reflects our architecture and we believe firmly in using multiple discrete services. That means discrete code repositories, what makes Bitbucket cheaper than Github for us. Yes, we have more repositories than developers. Weird?
We use Jira. It's a great way to keep track of what we're working on, our priorities, blah blah, management. We do a lot of tickets a day. We try to average 2 per developer per day. We have 5 discrete phases, from In progress, to In review to In QA, to Deployment and Release. That means a lot of state transitions per day. Github _can_ integrate with Jira, but it has multi-minute delays before Jira gets all of the information. We got tired of it. Seriously. It only takes 30 seconds to break flow. Github's delay broke flow.
The code must flow
Good integration is good
Finally, we're suckers for good integration. The delay was annoying and we wanted to get around it. But then we started tagging our commits. And doing all of our commits on branches with the same name as the Jira tickets. And tagging the time it took us to write each commit. Put these together and you get Jira logging work against tickets based on our commits and tying our pull-requests (which Bitbucket helpfully provides when we push a new branch) to a ticket. This means that when code review time comes around a reviewer just reads the ticket, clicks on the PR link, comments all over the PR and then merges. The PR gets closed, the branch deleted and the merger marked as the reviewer on the ticket. Then Confluence can gather up all of the commit and ticket information into a nice dashboard that shows the time taken for an epic against the expected estimate etc.
Name your branches like you name your children: with unique identifiers tied to the feature(s) they serve.
It just works
We can't help it. Bitbucket is sucking us in. There's not a lot that it does that Github can't do. But as soon as you use one Atlassian product you start to realize how much nicer it is if you just give in and use them all. They play together so nicely.