Proven in multiple domains
One of the oldest projects, “Harja”, was built for the Finnish Transport Infrastructure Agency and deployed to production over ten years ago. It provides a real-time overview of all road maintenance in Finland. The longevity of the code base is a statement about the sustainability of this tech. No major rewrites have been necessary, and we see the current architecture fully capable of handling the next 10 years. We can concentrate on value-adding activities that benefit the end users and our customer.
We built a new register of adverse reactions for Fimea, the Finnish Medicines Agency, using Clojure tech. Because of the low friction of the tech stack, our team was able to focus on smooth co-operation, customer needs and value creation. This is also a good example of how Clojure can be used in a highly regulated domain and is well-suited for interoperability with international standards and cross-border integration with the central EU database.
“The code base has been a joy to maintain, as it is as small and simple as possible, and there is very little churn in the dependencies.”Topi Pohjosaho, Senior Software Designer
We’ve implemented many more solutions for our customers using Clojure and have found it to be a delight to build with. The long-term maintenance and further development of these systems is further proof that this is not just a fun tool to start projects with but has very real benefits to our customers as well, as these systems continue to bring value to them year after year.
As Software Engineers, we love to work with a low-friction toolchain that allows us to concentrate on the real value creation. Clojure gives us just that. The robust ecosystem, built upon the rock-solid foundation of Java, is a responsible choice to build upon. Clojure has great Java interoperability, so all the vast amounts of Java libraries are available, as well as the JavaScript ecosystem in the browser. Clojure dependencies have low technical churn and high backwards compatibility, making it easy to keep the software’s dependencies up to date.
Data-oriented approach
Clojure is by design very data-oriented. The usual way to model data is by using immutable, persistent data structures that are native to Clojure and have first-class representations in the source code. It can deal well with complex and partial data, which we can often find in the real world. We can enforce data validity with schemas that can be defined once and used both in the front and backend. Declarative, data-driven ways to access relational data, such as HoneySQL, make it easy to leverage the potential of the underlying mechanisms of relational databases.
There are also a few novel database products, such as Datomic and XTDB, built with Clojure that provide bi-temporal capabilities and flexible querying, which are usually hard to implement using traditional databases. With bi-temporality, a database contains a log of changes made to the data by default, which is very useful for auditing and troubleshooting.
Clojure in the age of AI
Any toolchain today is facing the question: Can you use it with AI? Clojure’s succinct and concise syntax, sensible and safe defaults, ability to share code in front and backend and low amount of boilerplate contribute to low token usage, efficient use of the model’s context window and lower the latency. All of this makes the models work better and lowers the cost involved. The same features that make concurrent programming less error-prone make for good guardrails that lower the risk of defects. At the same time, it is easier for a human developer to review and understand the code that generative AI produces.
The Clojure community has taken the concept of Model Context Protocol and provided a unique way for AI agents to get faster feedback loops when developing applications. MCP is a concept that exposes applications in a harmonised way to AI agents. With an MCP server running in the application, coding agents can reach inside the application and explore the system, changing its behaviour without a compile and redeploy step, making the feedback cycle faster for agentic workflows.
Further reading
Our developers have written many articles about Clojure in our dev blog.
If you want to discuss whether Clojure could help in your business, drop me an email: [email protected].