jeudi 12 juin 2025

Unleash Your Personal DDD Expert with Gemini Gems

It seems that we can't escape AI lately. Even at the last week's Europe 2025 DDD conference, Large Language Models managed to creep in most presentations, like the Cyrille Martraire's 'Breaking conventions for more performant models'

A key takeaway from these presentations was the importance of good prompting to get satisfying results. By telling ChatGPT or Gemini that it should create bounded contexts or domain objects as a 'DDD expert', we can achieve better outcomes.

Curious to try this out, I decided to create a 'DDD Expert' Gem in Gemini. Here are the steps I took:

Generate the DDD Expert Prompt

Gemini can generate its own custom persona. There is no added value in handcrafting it unless you require something truly exotic:

Save the persona

To easily find and reuse the DDD expert persona prompt I'm saving it as a Gemini Gem. This way, I'll always have a DDD expert AI just one click away!

Use the gem

I'm now asking my DDD gem to generate bounded contexts and suggest aggregate roots for a DnD character sheet management tool.

Looking at the full output for my request, I can see recommendations for the bounded contexts, along with their responsabilities, aggregates, domain objects and ubiquitous language. Event if the result is not perfect that's a good draft to refine my first prompt with more requirements and details.

Let's note the context map at the end explaining how my bounded contexts interacts together with events and where to use anticorruption layers. The AI now invites the user to generate the domain objects or dig further into any context.

Going deeper

You can follow the suggestion of the LLM to go deeper in a specific context: 'Can you dig deeper in the character creation context?'. In my case, the LLM explored the character creation process step by step with Java code mentioning command objects, updates to the aggregate and the need to complete the character creation and generate the CharacterCreated event transactionally.

Key takeaways

Determinism

While writing this blog post, I ran the same prompt with the persona five or six times. The result was never exactly the same, but that might be a good thing; it provides quickly provides different perspectives on how this application could be built and sparks further reflection.

Speed

For my simple use case ( with not much context or business constraints ), the chatbot generated a draft quickly. An interesting experiment would be to see how well it performs when it needs to evolve a system with already defined domain objects, aggregates, and bounded contexts. I would also like to try implementing my AI-generated design to see how practical it actually is for developers.

Reuse

Given the simplicity of creating 'Gems' in Gemini, I could imagine myself creating many of them to gain perspectives using different paradigms like evolutionary architecture, DDD, hexagonal architecture, and more.

Conclusion

Those were my thoughts while playing with Gemini, Gems, and DDD design. I hope you enjoyed the post, and feel free to point me to any resources on architecture design prompting!

vendredi 6 juin 2025

My 3-Day Dive into Domain-Driven Design – Conference Reflections from Antwerp

As I look at the central station from the window of my hotel room in Antwerpen, vivid pictures of the talks and workshops of the last two days of conference pop back into my mind.

Since I never quite found the time to finish the Big Blue Book of DDD, I chose to immerse myself by attending the conference instead.

Here is my attempt to remember and capture the most interesting tidbits of content and material from the talks I attended along with links to the slides and books mentioned. I hope it helps you!

Day 1

A Hands On Introduction to Domain Driven Design and Hexagonal Architecture - Jeremy Davis

This hands-on workshop is perfect for beginners to DDD that want to translate these design principles to running Java code. It also showcases event-driven communication and hexagonal architecture.

All instructions and code are in a fork of the workshop repository here.

Interactively designing distributed systems integration with collaborative modelling - Kenny Baas-Schewegler - Maxime Sanglan-Charlier - Krisztina Hirth

The Boing 737 MAX: When Humans and Technology Don't Mix - Kyle Kotowick

An interesting talk about the causes of the Boing 737 MAX crashes.

Day 2

A Defence of Technical Excellence - Chris Simon

A talk about storytelling, causal loop diagrams and technical quality. By showcasing different system theories in causal loops on LOOPY Chris showcases the added business value of technical quality. The distinction of technical and external quality is made. A re-examination of the concept of iron triangle comparing it to its historical roots is done.

Model Drift and Software Attractors - Barry O'Reilly

A thought provoking talk about cargo culting in the software architecture industry, the confusion between cause and effect in the structure of successful software projects. He presents alternative ways to think about software.

Books mentioned:

- The reflective practitioner

Breaking conventions for more performant models - Cyrille Martaire

One of my favorite talks of the conference: Cyrille introduces how conventional thinking and representations of the domain get in the way of technical performance, problem solving or business value.

He then manages to demonstrate how good prompting can turn an AI assistant into a tool to help with Domain Driven Design.

Books mentioned:

- Domain Driven Development

My AI Learning Journey - Eric Evans

Eric Evans presents LLM and AI concepts and experiments, before moving to the presentation of a 'Domain Navigator AI' fine-tuned for DDD analysis of a GitHub repository. Sadly the link to this tool was not shared.

Day 3

Situational leadership - Beija Nigl

In this workshop the situational leadership framework is presented both as a generic method of leadership and as a tool that can be adapted within the context of the architecture practice. Teams of participants are then assembled to familiarize themselves with the four types of leaderships. The drawbacks and limitations of the SL model are also discussed.

The second part of the workshop invites the participants to practice Troïka consulting, a technique to brainstorm solutions to a client's problems.

Slides: https://miro.com/app/board/uXjVIrzyUuo=/?share_link_id=555609064106

Books mentioned:

- The situational leader

Becoming a great team - Woody Zuill and Kevin Meadows

In this original workshop all participants are invited to work together on reflecting on how they want to be treated at the workplace - and improve the way they treat others as a consequence.

Collaborative tools and dynamics like mobbing, team flow and psychological safety are presented and personal experiences are shared.

I liked the optimism and benevolence of the presenters as they invited us to think on how to experiment in our ways of working and become better colleagues.

Books mentioned:

- Team Flow

Conclusion

As someone new to DDD the conference was tremendously useful to grasp the concepts and mindset while meeting passionate practitioners from Belgium and beyond. I also enjoyed the fact that the subjects of the conference could go beyond the sole scope of DDD and also cover technical leadership, problem solving, event-driven architectures and system thinking topics.

Feel free to reach for me to share your thoughts about the conference or share with me the missing slide/workshop links

mercredi 28 mai 2025

AWS Summit Amsterdam 2025 highlights

Following the Amsterdam's AWS summit I want to share a couple of great talks: - APP303: Integration Patterns for distributed systems: a reflection on coupling, events and event-driven architectures. A thoughful analysis of the types of coupling that can exist in a system and the tradeoffs of event-driven patterns. - DEV405: Best Practices for serverless developers: Among the list of best practices, I learned more about powertools, a powerful library I didn't know about

vendredi 20 mai 2022

Trouver les plus gros fichiers, supprimés ou non, d'un repository git

Lancer dans git bash ou un shell linux: git rev-list --objects --all \ | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \ | awk '/^blob/ {print substr($0,6)}' \ | sort --numeric-sort --key=2 \ | cut --complement --characters=13-40 \ | numfmt --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest

jeudi 2 décembre 2021

Load key \"id_rsa\": invalid format

Copying a Windows ssh key to a linux machine and trying to ssh from there to a server, my ssh key was always refused. I finally found this thread recommending to check the ssh key headers to ensure it is valid, and discovered it was a putty key I needed to convert to Openssh format using Putty Generator.

mardi 9 novembre 2021

How to find and automatically remove old catalina logs

Tomcat can produce daily log files, potentially filling your disk space over time.

You can list the catalina log files old than 30 days using

find /srv/apache-tomcat-8.5.14/logs/catalina.*.log -mtime +30

To remove files older than 30 days, you can run the following command:

find /srv/apache-tomcat-8.5.14/logs/catalina.*.log -mtime +30 -exec rm -f {} \;

Finally, you can make it a cron to remove old log files daily:

crontab -e

In the cron file, add the regex and command:

# every day at 6PM
0 18 * * * find /srv/apache-tomcat-8.5.14/logs/catalina.*.log -mtime +30 -exec rm -f {} \;

You can then list all crontabs using

crontab -l

NB: if you want your command to run as sudo, you need to modify the sudo crontabs instead:

sudo crontab -e

mercredi 22 septembre 2021

Snyk CLI

Today I've discovered the Snyk CLI and use it to discover vulnerable dependencies to upgrade in a maven project. Good experience. If I can make a free version run as a maven task it could be a good alternative to owasp-dependency-check.