“Hi Jakub, I’m getting back with the results of the 4Developers 2022 call for papers. Unfortunately, your talk didn’t make it to this year’s event agenda. Nevertheless, we’d like to offer you a free ticket and invite you to take part in the event (…)”

It’s so hard to cope with rejection! Good thing Lisa Barrett’s beautiful book has taught me that there’s a lot to be gained from labelling and investigating one’s emotions. 

Now I know how well-curated each day’s set of talks was, so every cloud has a silver lining.

Let me sum up a few talks I found most interesting.

Hello Multitenancy World by PaweL MLynarczyk and Marek Chrapek

When your product gains traction, you may be too busy onboarding newly signed clients to plan your long-term approach. Hello Astra — a recruitment process automation platform Paweł and Marek are working for — addresses this problem. The company has many clients, and each of them used to get its independent instance of the platform. At some point, this became hard to maintain and not cost-effective. 

In making architectural decisions, we often talk about the last responsible moment to go one way or another. The later we make a choice, the more knowledge we have to base it on. If we postpone it too much, the technical debt keeps growing, and more extra work will be needed to change course.

Paweł and Marek covered the approach to multitenancy they were able to implement in great detail. I'm sure I'll be getting back to it next time I have to consider how to handle multiple tenants in a project.

Let me sum up what they did, and I hope I get it right.

They started by moving to Kubernetes, introducing Kafka messaging for module communication and choosing the easiest module to transition to multitenancy. They then used Kubernetes Ingress rules wherever they needed to route requests depending on the tenant’s request. In the multitenant module, they used Kubernetes config maps combined with cached MongoDB connectors to route requests to dedicated client — tenant — databases. They chose separated databases over differentiating clients based on the extra database document field.

Once the talk gets published on the 4developers YouTube channel, I recommend seeing it for yourself. Many projects can benefit from a clearer idea of what multitenancy entails. The talk also covered multiple paths that the team chose not to take, some of which may be right for you, given your unique circumstances.

How to Make Your Architecture Scream with Functional Domain Modeling by BartLomiej SLota

In Java projects on Evojam, we have been using a fair amount of functional programming concepts. This is not because of the team members' backgrounds in other languages but our ongoing emphasis on readability and maintainability.

Bartek prepared and presented a handy catalogue of functional techniques applicable to everyday Java projects. He began by showing an example of a method with numerous primitive arguments, making external calls, and throwing exceptions. It was a pragmatic way to present the benefits of using dedicated types, Result (or Either) classes, and currying (partial application).

Conducting technical interviews allows gauging the popularity of functional programming among Java developers. In my experience, everyone has heard about streams and lambdas by now. Many people are aware of functional interfaces and how Java lambdas make their ad hoc implementations very concise. Surprisingly, almost no candidates have spoken to have ever written a higher-order function, i.e., accepting or returning a function.

I would argue that picking up at least some of the techniques shown by Bartek can have a bigger impact on the work of Java developers than most of the classic design patterns. By work, I mean the low-level structure and organisation of systems they build and leave for others to maintain.

Team Architecture – monoliths or microservices? by Adrian Sasin

Many effective teams are like tribes. When you hear them talking about their work, the language is indecipherable to anyone outside the team. They almost understand each other without words. For these reasons, it's not easy to be a new joiner. At least that's what was happening when we were still working in offices.

It proves tricky to reproduce the same bonds in remote teams. Adrian talked about aspects of working in the same room that we are missing under the circumstances, like trust and well-understood work organisation. I agree with the importance of keeping the cameras on. If we were to go back to the office, would we wear balaclavas to feel more comfortable?

Chameleon Leader – Getting with modern leadership by Katarzyna Suska

At this point, millennials constitute around 90% of the IT workforce. In the current market situation, where jobs seek programmers and not the other way around, employees have to be treated like clients. The way I see it, Evo has a whole team we call Operations to supply our programmers with good value work and conditions.

Kasia talked about the need to know and understand your millennial workforce just like you want to know your customers’ needs. Rather than complaining about people's lack of loyalty, we should recognise that they are loyal to themselves and their values, not their employers. Instead of being afraid they will get bored and leave, let's leverage their adaptability and focus on providing value by giving our millennials interchangeably mundane and challenging tasks.

I must say that it's funny to hear about ways of coping with millennials, agree with them — I even plan on incorporating some in my work — and at the same time realise that I am a part of this group. It made me realise that my managers have been applying similar techniques to me for quite some time.

What’s next

Next month, I'm speaking at Javeloper, a one-day, fully remote event. Yes, it’s going to be the talk that didn’t make it to the 4developers agenda. Make sure you tune in!