Clojure is boring

Clojure is boring

Colin Jones
Colin Jones

October 06, 2016

You've probably heard the sales pitch for Clojure before.

It's simple!

It's scalable!

It turns you into a genius who can machine-learn their way out of any problem!

OK, yes, people have done some pretty amazing stuff with Clojure, and it is awesome. But today I want to share how it's also become a piece of boring technology for us, and why that's a good thing.

Learning

We've been into Clojure since the early days, ever since we read the first Clojure book in our first company book club. Clojure's emphasis on functional programming, concurrency, and practicality led several of us to dive deeper. So we worked on tools for learning, open source, and internal projects, until we felt confident in proposing and using Clojure for our clients.

Applying

We built a few small services and applications for startups where 8th Light was the entire tech team. Then, when the time came to pick a technology for a critical new project inside a large existing client, Dave Moore made a strong case for Clojure. Even with a team of folks who didn't know Clojure, they replaced an existing system with a Clojure-based one in just a month, from design to deployment.

When Dave moved onto his next project, a greenfield travel-industry startup, he knew Clojure would be a great fit. Dave and the team worked quickly to build out the most important ideas: a mobile API, a web frontend, payment processing, and PDF generation. Our client was excited to see their vision coming to life.

Maintaining

Over the three years that followed, we've added feature after feature to that startup's codebase, while keeping the system responsive and reliable. We've added push notifications, email processing, integrations with 3rd-party APIs (REST and even SOAP), and numerous other time-saving affordances for busy travel professionals. Beyond the concurrency features that many folks have heard about, Clojure's flexibility, interactive development, and tooling have helped us to iterate and continuously deliver a product our clients can be proud of.

The rich JVM ecosystem assures us that for pretty much any problem space we encounter, we can focus on the business domain. We don't have to burn too much time and money thinking hard about things like HTTP servers, API client libraries, task scheduling, or database interactions. These are solved problems, so we can focus our efforts on what makes our project different from others, instead of reinventing the wheel.

Hiring

Over those years, we've had around 50 developers working on the main Clojure codebase of this project.

So to those who wonder if you can hire developers who will write Clojure: yes, just do it! Many of these folks had no prior Clojure experience, yet we've been able to consistently ramp new people up and have them contributing within days. Pair programming, code review, and a pervasive culture of learning and mentoring have helped a lot, as they do for any technology we use.

Boring

Our clients don't pay us for excitement: they pay us for reliability and flexibility in the software we build as their business needs evolve. And for us, Clojure has become boring enough for most of our use cases.

If we had an 8th Light Technology Radar, it'd be time to move Clojure into the Boring category, which would totally be better than "Adopt".