Introducing Project Klokwrk
We’ve been busy lately, on many different projects and initiatives. One of those initiatives (an old one, actually) turned into a nice open source project, for which we hope it will be interesting and useful to the community. We’ve named it Klokwrk (like ‘clockwork’, obviously… but different ☺)!
Klokwrk is an open source project, started by Damir Murat, one of our senior architects, with active contribution of the broader CROZ team. The vision behind Klokwrk could be expressed in different ways, but essentially we could put it like this:
FOR software architects and teams
WHO are building microservice systems
THE Klokwrk IS A showcase and a blueprint
THAT demonstrates how to properly set up clean technical architecture of a complex system
UNLIKE many Hello World examples that focus narrowly on just proving the concept
OUR PRODUCT represents a holistic foundation/showcase that better addresses real world challenges by leveraging DDD, Clean Architecture, CQRS & Event Sourcing principles and relaying on the power and expressiveness of Spring Boot, Axon and Groovy.
The reasoning behind Klokwork
Back in 2012 Robert C. Martin (aka Uncle Bob) published a blog titled “The Clean Architecture”, as a part of his everlasting “Clean…” series. Just as most of Uncle Bob’s other works did, this one also dealt with craftsmanship perspective of software architecture, focusing on separation of concerns as the central topic.
In it’s concluding thoughts the blog states:
Sounds easy and simple, doesn’t it? I am probably not the only one whose mind invoked a couple of deeply buried memories of troubled projects while reading these lines. Taking care of separation of concerns, dealing with dependencies in the right way, thinking about testability… etc… will for sure do good to your project. There’s no guarantee that it will make it a success. But, on the other hand, not taking care of these things will for sure make it a failure, sooner or later.
So, obviously, this has always been a topic of great importance for us at CROZ. And we’ve been following Uncle Bob’s work diligently over the years. In 2017 he also published a book on Clean Architecture which further elaborated the topic in great detail.
But, there was always something missing, at least in our everyday software factory practice. Something that would further reduce the risk of teams not adhering to good design policies such are those that Uncle Bob promoted in his material. What we missed is a great showcase example. The one that would be complete and ready to be used as a starting point in your next project. The one that would bring the initial structures and mechanisms to help you maintain a sustainable design from a clean foundation. The one that would always be compatible with current trends in software development. The one that would be well documented. The one that would be open sourced, with a broader community behind it, having all the usual benefits of an active open source project. We never found something like that. At least not something that would satisfy all the goals I just counted…. So we decided to start building it ourselves! Enter Project Klokwrk!
Project Klokwrk on GitHub
Ivan Krnić brings a deeper dive into people and technology behind Klokwrk, make sure you take a look. But, before you go and do that, let’ me answer a couple of obvious questions.
Why do something like this now?
First of all – why do something like this now? Uncle Bob’s blog was published 8 years ago, the book was published 3 years ago… What’s new for us to bring to the table?
Now more than ever it is easy to lose yourself in see of layers and abstractions, and to forget about basic principles of good and clean architecture. So, we wanted to contribute to making it easier for teams to start their projects with good and clean foundations, in line with current tech stacks.
Why open source?
This one is easy. Much of CROZ’s success over the years could be attributed to building on top of various open source projects. For example, we started with Spring Framework back in 2002, when it was first introduced by Rod Johnson in his famous book (“Expert One-on-One J2EE Design and Development”), and while it was still called Interface21. We’ve used it ever since, and it’s been the foundation of practically all our Java projects. And there are many more examples like this one. So we want to contribute back to the community in this way. Actually there’s a growing list of other projects we contributed to the open source community – take a look at our GitHub profile.
Also, by making this project a public open source thing we want to impose a certain commitment on ourselves. When you do something privately, just for yourself or a small group of people you work with, it’s easier to let the dust fall over it. Bigger commercial initiatives usually take priority, your little side project takes the back seat… and suddenly, 4 months later, you admit to yourself that the debt of bringing it all up-to-date is to high and you would need to start over… and the vicious circle starts again. This time we want to do it differently. By making Klokwrk publicly available, and open sourced, we want to take the commitment on ourselves to maintain it and keep its usefulness to the community on the highest possible level.
And, last but not least, there’s one more thing...
Our external image. We’ve always been a strong tech company, with software craftsmanship being one of our core values. But we’ve also always kept this mostly to ourselves, and to those who got engaged in projects with us or visited our events and conferences. They knew about this firsthand. Others – not so much. With Klokwrk we want to add to changed visibility of things our teams do for themselves and their customers. (Btw, Klokwrk is not the only project we’ve released into open source. Check out the broader list here for other things created by our people.)
This first release of Klokwrk is just an initial one. There’s much more to come, and each new drop will move us a step closer to fulfilment of the vision stated above. For a more detailed roadmap and overview of technologies used check out the blog by Ivan Krnić.