Nobody loves Continuous Integration

I’ve been thinking a lot about Continuous Integration lately. I’m not sure why but it’s a topic I’ve always enjoyed talking or thinking about. I think as long as I’ve been coding, there’s always been a tool that I spent time playing with. I remember cijoe, a tool written in ruby working on top of git. I can also mention Sismo, which was written in PHP. Both tools share a common thing: they weren’t actually used by their creators in their daily jobs, in favor of a more complete tool. To some people, it might seem like time wasted. Why would you work on a tool that you’re not actually going to use for serious, real life projects? To me that’s beautiful.

Continuous Integration is a concept that’s been around for decades but lately, developers started to realize that it wasn’t a concept that only people working on more complex tools should use. Suddenly, tools started popping everywhere on the Internet. To me, we owe a lot to Travis for shipping a tool making it easy(-ish) to build projects, run tests… and contribute to open-source projects. Developing with other people is now a lot easier than it used to be. There’s a lot less pressure when you know that you can trust an impartial tool to check that you haven’t broken anything.

Two years ago, I wrote a book about Continuous Integration. It happened thanks to a tweet I randomly ran into. I contacted Apress thinking they were looking for technical reviewers and ended up authoring the project. I’m not sure why but I’ve started thinking a lot about this book recently. I already talked about the impostor syndrome I (think I) suffered from when the book was released but I moved past that feeling months ago. I realized you can’t really suffer from impostor syndrome when it’s a topic that nobody loves. I guess I was one of the few people crazy enough to write a whole book about it.

Now I somehow feel different about this book. I feel like I haven’t been truly honest with the few people that read it. I mention how amazing Continuous Integration is, how it will change the way you work and how your workflow will be filled with unicorns and rainbows as soon as you’ll have a Jenkins up and running. That’s not true.

Continuous Integration is hard. You will suffer. You will struggle to understand why your build succeeds on your machine but not on Jenkins. Or the other way around. You’ll spend some time googling cryptic errors that will resolve themselves for no reason.

But it’s worth it.

This post was written with FlowState, the most dangerous app. Focusing on what I’m writing is something I’m struggling with. Since I’m trying to write more, this is a really useful and surprisingly relaxing exercice for me. I’m posting it without much proof-reading other than fixing a bunch of typos. I also got a review from Felix, available here.