anchor
Insights /  
A Decade of Clojure: Our Path to Efficient Development

A Decade of Clojure: Our Path to Efficient Development

January 28, 2024
6 min read
Clojure
By
Artem Barmin
Co-Founder
Alexandra Lozovyuk
Content Strategist
In this article
See more
This is some text inside of a div block.

Welcome, seasoned Clojure developers, enthusiasts, and newcomers alike! Over the past decade, our journey with Clojure has been filled with some challenges. In our previous post, we shared how we embarked on this journey.

Today, we’ll explore the technical challenges we have encountered during web app development and how Clojure has helped us overcome them. Get ready for some firsthand stories!

What makes Clojure our top choice

To kick-start today's story, let's provide a brief overview of Clojure's core features and how to how to leverage its combined strengths.

Clojure benefits development
1
Functional approach: pure functions
Clojure is a functional language and encourages to write pure functions where the result is depending only on the input parameters. Programmers can transmit it as parameters and return it from other functions. It simplifies the coding process because of the possibility to delay or customize an on-the-fly logic realization. Clojure doesn't care how many times you start the function — the result is always the same. It also simplifies a tester's life because he or she doesn't have to spend a lot of time to find the right state of inputs. Clojure's functions are extremely simple and clear, even if they perform significant tasks.
blue
Programming is more enjoyable after knowing some Clojure.
Alan Dipert
Software Engineer
2
Code-as-a-Data concept
Clojure inherited the core Lisp concept also known as "Code-as-a-Data". This makes it easy for programs to be a source of programs and for program transformations to be functions of data → data. This is in stark contrast to the common tendency to design a bespoke interface and types for every case. It eliminates the need for many verbose and complicated design patterns. Data manipulation is convenient and allows the implementation of specific business tasks. One more pros of code-is-data is that it gives programmers a recipe and toolkit for implementing their own languages with similar characteristics.
3
Immutability by default
The functional programming paradigm is strongly geared towards all "variables" being immutable (unchangeable). Clojure's immutable and persistent data structures are handy when it comes to developing large projects and matter a lot especially in the case of building multithreaded apps. Immutable structures and methods are crucial for parallel processing, where threads might need to synchronize. If data structures are immutable, change is prohibited by the compiler itself and passing data is a completely safe process.
4
REPL-driven development
Clear Clojure's design is supported by a powerful development environment known as the REPL (read, evaluate, print, loop). It provides instant feedback on what your code does without the need to manually run a complete compile-build-run cycle. REPL allows developers to get fast feedback code as they design it. It enables testing either a single expression or running the whole app (+ tests).
blue
The only risk with REPL Driven Development is you may never want to code without a REPL ever again.
John Stevenson
Developer, speaker & author
5
Dynamically typed
Clojure embodies Lisp's concepts, including dynamic typing in delivering flexibility and reducing coupling. Clojure's data types are determined at run time while statically typed languages perform type checking at compile time. Being dynamically typed, Clojure lets programmers get values into and out of programs quicker and easier. It reduces developers' time and lines of code.
6
JVM ecosystem
Clojure is a functional dialect of the Lisp programming language that runs on the Java Virtual Machine (JVM). Java has spawned several languages that use its virtual machine, including Scala, Kotlin, and Clojure. The last one was designed by Rich Hickey to be suitable in those areas where Java is suitable. Being JVM-based Clojure has access to the JVM robust infrastructure and multitude of Java libraries.
7
Extensibility
Clojure supports all the language features during macro compilation. There is no need to spend time explaining to a compiler via types, devs can work with data in Clojure without the need to drop to "native" languages. This feature is crucial for building extensible and flexible systems.
8
Portability
According to Rich Hickey, his objective was to support the portability of Clojure, "its libraries, and programmer skills". Clojure is targeting JVM and javascript (both server- and client-side); portable libraries can be written on Clojure's core.
9
Rich set of data structures
Data structures are fundamental constructs that are used to build programs. Clojure offers a diverse range of data structures working efficiently in particular use cases. They are immutable, readable, and manipulated via interfaces. Here you can find more detailed info about them.

Behind the code: Real-world challenges with Clojure

This blog is a platform where our developers share their unique experiences with Clojure projects. Today, we're excited to take you behind the scenes, revealing the significant tech challenges they've faced and conquered. From building custom DSLs to solving complex infrastructure and database issues, our team has demonstrated remarkable resilience and creativity. Each real-life story below showcases how Clojure has enabled us to deliver innovative solutions and why our engineers are proud to be part of this vibrant community.

Tell about the most significant tech challenge you deal with.

A couple of times I found Clojure quite useful to write a custom DSL. For example, a domain language to describe and operate advertising campaigns. This DSL has improved user experience by providing a concise and flexible way to work with the objects and processes in the data domain (campaign publications, managing ads, keywords, etc.). It used auto-complete and type hints, and on-the-fly validation according to the business logic.

What are you most proud of in your work?

I am glad to be a part of the Clojure community and to contribute to the tools developed by the deep and relevant thinkers. I'm also a bit proud of my pet projects I've built in Clojure for my own usage. Some of them proved to be quite helpful. For example, thanks to the Telegram bot for notifying and booking highly-demanded resale tickets on Ticketmaster, I attended a couple of sold-out shows!
ilya dozorenlo
Ilya Dozorenko
Team lead Clojure
at Freshcode
Tell about the most significant tech challenge you deal with.

It was a difficult infrastructure within my first project. I was faced with strange PostgreSQL errors that were appearing while the recalculation process started. Through in-depth research, it emerged that the reason was in a data wrapper that was tracking tables' proper update, the so-called materialized view. Materialized view hadn't been supported in the old PostgreSQL version.

That's why one of our developers had written that wrapper in Clojure. It was a very good solution but as it turned it was causing some transaction errors, and we needed to repatch it. There were a lot of DSL challenges within the other project but that's another story. :-)
volodymyr pavliuk
Volodymyr Pavliuk
Team lead Clojure
at Freshcode
Tell about the most significant tech challenge you deal with.

I never think of tasks as difficult or easy. But let me tell you about a recent one. We needed to fix some heatmap charts because they were showing data all wrong. I added scroll bars, changed the scaling, and recalculated the degrees to make sure the data was positioned correctly and not overlapping or getting cropped. Both the client and we were really happy with how it turned out..

What are you most proud of in your work?

I am proud to be working on a Clojure-based project related to medical science and the healthcare industry, rather than yet another online store. It’s a socially significant and scientifically relevant product, and I believe it will be both useful and effective.
artem pohosov
Artem Pohosov
Clojure developer
at Freshcode
Tell about the most significant tech challenge you deal with.

I can remember one. When I was starting my first project in Clojure I faced the task of exporting a huge number of charts to the application. I figured that it was a perfect excuse to get acquainted closely with macros and DSLs, including internal DSLs.

So, I decided to describe graphs export via internal DSLs, especially since some had already been implemented in this system. I used GraphPad software for that task. Such was my story of direct acquaintance with macros and embedded DSLs.

Today I wouldn't say it was a perfect solution but for me personally, having been a Clojure greenhorn at the time, it was a quite challenging and very valuable experience.

What result did your decision produce within the product development?

Much of the data exporting was implemented successfully. It was quite a good result.

What are you most proud of in your work?

I love the fact I've learned the Clojure language. I think almost all people who have mastered it, eventually realize how cool Clojure is. I admire its conciseness, the fact it is JVM-based, and all the related accesses. It is really interesting, and you can always count on the help. I am proud to be a part of a Clojure community.
victor lytvyn
Victor Lytvyn
Team lead Clojure
at Freshcode

What is it like to be a Clojure development company?

Freshcode embarked on its journey with Clojure in 2013, kickstarting our adventure with the development of an innovative eCommerce platform for smart buying. The decision boiled down to choosing between Clojure and Ruby on Rails, and our founder opted for Clojure due to its concise syntax, rapid development capabilities, and fresh paradigm.

I think things like macro usage in Clojure are definitely a matter of taste. You can definitely overdo it.
Cam Saul
Metabase

Curious about the experience of being a Clojure web development company and why we chose this path? Read on for firsthand insights and details. :)

"Clojure is a very narrow tech niche even for the global market. And as we know, it's always enjoyable and challenging to master something new and non-mainstream.

We at Freshcode tried to build a company culture focused on the openness toward generating new knowledge and mastering innovations. And to make Clojure one of our tech stacks was a good chance to prove it 10 years ago.

So back in 2014, we already had some expertise in functional programming and Clojure training. We decided to build on this foundation and develop it further. One thing led to another, and this synergy accelerated the growth of our Clojure team.

Now we have a big talented Clojure team and several completed Clojure-based products within different industries. Also, we've adopted internal training for our developers. So if you are a new team member or just want to change your tech stack, we at Freshcode offer accessible Clojure training."
artem barmin
Artem Barmin
Co-founder
at Freshcode
"At first sight, it seems that being the Clojure development company is quite the same as being for example Javascript or Shopify company.

But when you put a little more thought into it, it appears that it might be more to it than just providing an excellent service.

What I can single out that due to being less popular than other languages and technologies, it is very rewarding to help businesses in moving their products ahead and adding new value with our experience and expertise that we've got during our almost 10 years in the industry.

The second thought that comes to my mind, there are still few who dare to use Clojure as their main technology and service. So, when they do meet, it's like a match made in heaven. I’m proud that Freshcode has chosen this path."
alex slobozhan
Alex Slobozhan
COO
at Freshcode

Clojure Development: Myths vs. Reality

For the past 10 years, Freshcode has been creating ready-to-use conceptual Clojure solutions, releasing several eCommerce, entertainment, and healthcare software products.

Here, we aim to debunk the myths that discourage some entrepreneurs from building their software products with Clojure. It's time to embrace the numerous benefits that Clojure web development offers.

Myth #1: Finding a Clojure developer is too difficultt

Finding and retaining a dedicated Clojure engineer can indeed be quite challenging compared to hiring a JS developer. However, persistence pays off. Lady Luck smiled upon us in 2020, which saw a significant increase in the adoption of Clojure for work.

Specifically, 69% of respondents reported using Clojure at work in 2020, up from about 25% a decade ago. The 2020 survey also revealed that Clojure adoption had increased among large companies with 1,000+ employees.

Myth #2: Clojure developers' salaries are too high

Actually, Clojure developers' salaries are at the top of the range according to numerous surveys such as StackOverflow and the State of JS. Overall, the average salary of functional programming engineers is higher than the industry average. However, given the speed, productivity, reliability, and numerous other development benefits, Clojure can actually save money and ensure a high-quality end result.

Therefore, the statement that Clojure developers' salaries are too high is false. On the contrary, Clojure development is a great example of how to save money, time, effort, and lines of code.

It is also worth noting that developers' salaries vary by region. For example, Clojure programmers in Eastern Europe are very reasonably priced compared to those in the US and UK marketplaces.

Myth #3: No big players use Clojure in product

Here you can be reassured by successful stories of different businesses that chose Clojure for software development. We are sure that the experience of NASA, Adobe, Apple, Facebook, Amazon, and Oracle within the Clojure implementation is relevant proof of competitiveness of the language and credibility of Clojure-based products. So, keep calm and benefit from Clojure!

Freshcode will continue to share interesting news, insights, and living stories about Clojure software development. In the next post, we are going to tell you what is Clojure good for and its business value. So, stay in touch and keep up with our blog articles and posts on the Linkedin page.

Conclution

At Freshcode, we're dedicated to our Clojure expertise. Our team of skilled engineers constantly explores new possibilities with this powerful language. We also offer internal training to help new members quickly learn and support those transitioning into Clojure development.

Our journey with Clojure has seen us build successful products and foster a strong community, enabling innovation and effective training for new talent. Today, Freshcode is one of the largest Clojure teams in Europe, with over 30 Clojure developers on staff. We look forward to sharing more insights and experiences as we continue to leverage Clojure to achieve remarkable results.

Stay tuned for more insights and stories from our experiences with Clojure development.

Build Your Team
with Freshcode
Author
linkedin
Artem Barmin
Co-Founder

12 years in software development. Co-founder of IT agency and EdTech company.

linkedin
Alexandra Lozovyuk
Content Strategist

With a passion for technology, business ideas and storytelling, bridges the gap between technical concepts and engaging narratives. Writes catchy texts and explores design and marketing trends to find the best experiences to implement.

Share your idea

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
What happens after
you fill this form?
We review your inquiry and respond within 24 hours
A 30-minute discovery call is scheduled with you
We address your requirements and manage the paperwork
You receive a tailored budget and timeline estimation

Talk to our expert

Kareryna Hruzkova

Kate Hruzkova

Elixir Partnerships

Our team scaling strategy means Elixir developers perform from day one, so you keep your product on track, on time.

We review your inquiry and respond within 24 hours

A 30-minute discovery call is scheduled with you

We address your requirements and manage the paperwork

You receive a tailored budget and timeline estimation

elixir logo

Talk to our expert

Nick Fursenko

Nick Fursenko

Account Executive

With our proven expertise in web technology and project management, we deliver the solution you need.

We review your inquiry and respond within 24 hours

A 30-minute discovery call is scheduled with you

We address your requirements and manage the paperwork

You receive a tailored budget and timeline estimation

Looking for a Trusted Outsourcing Partner?