Continuous integration as a development practice already feels pretty magical. Imagine writing code and then deploying it to production in one seamless step, all the while knowing that your tests have run and your application is good to go. Until recently, continuous integration was one of those dev tool nice-to-haves that we hadn’t quite found time to implement.

That day changed when we came across CircleCI: Running tests is no longer a chore to remember to do and wait for before every merge to master – it’s just something that happens in the course of committing new code to your branch. We’ve only been using them for six months now and it has quickly become one of the tools we rely on daily.

CircleCI will run your tests (which have 100% code coverage like ours do, right? ;-) ) whenever you push a new commit and email you if you break something. Honestly, how many times have you deployed what seemed like a simple fix to production, forgetting to run tests first, and ended up breaking something? CircleCI makes this a thing of the past because your tests always run.

Besides being a cinch to set up, it’s the integration with GitHub that seals the deal for me. One sunny day we noticed these curious little green checkmarks next to commits in our pull requests.

Green means go!

The integration is so clean, it looks like a GitHub feature. But clicking on those glorious checkmarks reveals a deep integration with CircleCI. If the dot is yellow and the ‘Merge Pull Request’ button is grey, your tests are being run. GitHub even chides you to ‘Merge with Caution’:

Be careful, young one

Seriously, who wants to be responsible for clicking that? If it’s a red x, you know broke something. I’m particularly familiar with this state:

Seriously, this happens all the time

But if you see that green check mark, all of your tests passed and you’re good to go! It’s the best kind of magic: I don’t know how on earth they accomplished such a tight integration, but it works wonderfully for our dev flow.

Speaking of, we’ve completely switched to a Pull Request-driven development process here at Sincerely. That is, everything destined for production starts life as a branch and ends up in a Pull Request which is reviewed by one or more of your teammates. This flow enables better code collaboration (and quality!) without slowing our process by any meaningful amount. And CircleCI integration keeps us honest: GitHub makes it very clear when a PR hasn’t had its tests run yet. You’d have to be riding quite the freight train to mistakenly commit code that breaks a test in production.

Getting started with CircleCI is like the day you switched from SVN to Git. You might spend a few hours rethinking your process and getting used to your new environment, but you’ll quickly realize that you can never go back.

It’s so powerful, I’ve even caught myself and my teammates spontaneously writing unit tests. It’s a sickness I tell you.

Have you tried CircleCI? I’d love to hear your feedback. Feel free to discuss on Hacker News or follow me on Twitter.