Story about Clojure at my job

I want to share an experience I had with Clojure. In our company we need a very specific test driver software. Over many years we contracted several companies and spent much money. They all tried to make us happy, but nothing was really good. So I tried Clojure. After a single day I had a prototype, which was already better than everything we had before. On the second day we directly started using this productively. Normally this takes months or years for us to introduce such a thing.

It was no surprise, that Clojure worked so well. We all know, that Clojure is good. And it was a lucky coincidence, that we had a perfect use case for Clojure: We needed a file format for test definitions. I could use EDN. We needed a comfortable way to edit files. Calva is perfect for EDN files. User data must be checked. I could use Spec. We needed an embedded DSL for simple value transformations. I could use SCI. We needed a small internal DSL for test results (which was XML in the past). I could also use EDN. We needed a small data transformation mechanism. Clojure is very good in this. We needed to create HTML. I could use Hiccup. Clojure already has everything.

What happened then? After a few weeks I approached my boss with this new tool. He was very happy that now we have a prototype, so that we understand exactly our needs. He asked me to make a cost estimation so that we can develop the same in Python. My cost estimation was 1720 man hours. My boss agreed to that number. I considered quitting my job. But after the first job interview I quickly realised, that I don’t want to be C++ developer any more. So I stayed were I was. I got the job to write down the requirements for the tool so that we can contract the development to an external company. Interestingly it took me longer to write these requirements than the whole development of that tool took in Clojure.

And this is for me the lessons learnt. For me writing Clojure is faster than writing requirements. Instead of writing requirements and contracting someone to develop something for me, I can directly write it in Clojure. For example it is very hard to specify formally how to convert a specific data structure into nice readably HTML. You need creativity. You need to try out different formattings and compare them until you actually know, what you want. With Hiccup I can directly try out things and immediately see the result so that I can ask people for feedback. And when I know, what I need, I could write the requirements. But then I already have the implementation.

Now it is one year later. The Clojure tool became an important part of our workflow and managers are saying how important that tool is. Clojure is still not accepted. It was my job to find an external company who we could contract for the Python development. But I ignored that task. Officially I said, that I have too much other things to do, which was true. I validated the Clojure tool without reporting that to my boss. Nobody ever asked again in which language the tool is developed.

5 Likes

And when I know, what I need, I could write the requirements. But then I already have the implementation.

The Clojure tool became an important part of our workflow and managers are saying how important that tool is. Clojure is still not accepted.

Nobody ever asked again in which language the tool is developed.

This all resonates with my experience as well. Eerily familiar.