2 days at Voxxed Days Luxembourg
From June 21st to June 22nd, 2023, Voxxed Day Luxembourg was organized, it's a tech conference where we were able to discover new technologies and exchange ideas on certain practices. Here is a small sumup of some sessions I attend.
Doctolib's organization, Nicolas Martignole
The first session I attended was a 15-minute quickie by Nicolas Martignole, describing how production is organized at Doctolib.
Doctolib is organized into 3 main products: Time, which manages online appointment scheduling and everything related to it; Care, which helps doctors and medical practices manage medical follow-ups for their patients; and an administrative one, which assists and optimizes interactions, particularly with social security.
Doctolib has long been known as a monolith, a single large Ruby on Rails repository on GitHub. Today, everything is containerized and runs on multiple servers, capable of automatically adjusting the load from 1,000 virtual machines during the day to 100 at night or 5,000 during the COVID period. Everything runs on Kubernetes at AWS, in France and Frankfurt. On average, there are 20,000 to 25,000 co-existing containers on these servers. Developers have access to a lot of tools to assess the platform's real-time status. It's worth noting that the most visible indicators are business indicators, while the more technical ones come after.
On average, they have around 3 deployments in production per day, with over 350 developers organized into nearly 75 feature teams. Personal data is never passed into the monitoring tools; only cohorts and aggregated data matter. For the past 2 years, they have been using Rails engines, which allow them to isolate each part of their monolith, facilitating development and providing better organization.
At Doctolib, when developing a new feature, developers must consider the most important monitoring indicators to ensure the proper functioning of their feature. An observability team can provide advice and challenge the indicators, but it's up to the developer to define them. This approach makes developers more autonomous and responsible for their development and production run. There is always a strong focus on data usage and security. For example, they do not use DataDog's log management functions because they prefer not to take any risks in case sensitive data appears in the logs. One of DataDog's recent features apparently covers this use case, but they currently don't plan to use it.
How to handle terraform's drifts by Katia Himeur Talhi.
The second session I attended was by Katia Himeur Talhi. Katia is the co-founder of Cockpit.i. The topic of this conference was managing Terraform drifts using GitOps. Drifts refer to the differences between the desired and declared state and the actual state of the infrastructure in place. They can have various sources, including human modifications or side effects. To detect drifts, several approaches are possible: do nothing and hope for the best, use custom scripts to detect them (either homemade or tools like driftctl) with cron jobs. However, these solutions are not practical because they are not proactive (you have to launch the script, but what happens if a modification is in progress at the same time?), they require maintaining two workflows (infrastructure management and drift management), and they do not handle multi-region environments well on AWS.
The best solution is a tool like Flux, which relies on a Git repository to define the source of truth. Terraform controller enables GitOps-style management of Kubernetes and Terraform. Katia then demonstrates the tool. Unfortunately, this solution does not work with Argo.
Domain Driven Design - Getting started by Josian Chevalier
I also attended two sessions on Domain-Driven Design (DDD), one by Josian Chevalier on Wednesday and another by Cédric Pontet on Thursday. Here, it s just some key points that were pointed out during these two conferences, not a summary. The first session emphasized the importance of having a ubiquitous language, which may not be precise but is useful. It's not always easy to distinguish between business code and technical code, requiring careful consideration. There were also some useful tips for organizing event storming, a defined process to align different stakeholders on the terminology used. Instead of having one long session over several days, it is recommended to have multiple 2-3 hour sessions on a specific topic with fewer stakeholders each time. It's important to be cautious with models that, after a certain point, lose their meaning because understanding each other becomes challenging.
Domain Driven Design - Back to the sources by Cédric Po
The second conference defined the most important terms of DDD and emphasized that semantics depend on the context (the concept of a "client" can differ between different parts of the domain). Bounded contexts allow the creation of semantic contextual boundaries, defining semantic definitions within a given context. It is important to use business code as a service, keeping implementation and detail data out of the business layer. Between two bounded contexts, data integrity can be maintained using an identifier. The perception of what constitutes a "client" may differ between bounded contexts, but the client's identity does not change.
One of the main advantages of DDD is the ability to reduce coupling between different objects. There are several solutions for achieving this, including:
- Anti-corruption layer
- Open-host service
- Publisher language
- Avoiding explicit domain linkages
These concepts can be implemented in various ways, such as using a REST API or pub/sub mechanisms.
The speaker then discusses the difference between an entity and an aggregate. An entity has a unique identifier that can potentially be mutated, whereas an aggregate is immutable and doesn't exist without an associated entity. For example, an aggregate does not have its own identifier.
Overall, it was a great conference! It was our first time attending, and we enjoyed the good atmosphere, highly interesting sessions, and approachable speakers. We will happily attend again!