The Christmas App
“Daddy, how do the presents end up under the Christmas tree?”
I don’t know if a child has ever asked you that question. But I certainly had to find an answer this year. I still remember that I have been asking that question as a kid as well, and my 5-year-old daughter wonders about that too. If the mysterious Christkind was real, it for sure could use some help from modern technologies.
Letting my imagination run with it, I came up with this system for a Christmas app. As a software architect, I for sure had to draw a diagram. This software architecture diagram is an example how modern microservices architectures can look like.
Kids write down their wishes in a letter and put them in a post box or on the window sill to send them to Christkind. It’s been this way for ages, and I don’t want to change that. So modern technologies need to be invisible to them.
The Christkind can benefit from the app. It can scan the letters and send them to the microservices backend via an API Gateway to the Letters Service. It stores scanned letters reliably and makes sure to not lose a letter. This service will notify all other services about a new letter via the Message Bus.
The Addresses Service will extract the address from the letter and store it for later use. While the Wish Recognition Service will utilize a Cloud-Based AI service to extract the handwritten wishes. This is a critical step, where we might need to experiment a lot to train a proper model because we must not get a wish wrong to make every child happy. The Wishes Service persists the wishes and notifies the rest of the system.
When the Gift Production Service receives the notification, it will trigger the production of the desired toy. The underlying production process is expected to fulfill wishes from custom-built locomotives to Legos to puzzles that glow in the dark to basically everything. When this is done, another notification is sent via the Message Bus.
Finally, the Wrapping Service will request the gift and the address to trigger the wrapping process. It makes sure that the wrapping paper matches the size of the gift, the ribbon fits the colors of the wrapping paper, and that it is properly labeled.
The last mile of the wrapped gift remains a mystery. I have no clue how the Christkind pulls that trick off, so I simplified that step with a straight dotted line.
The scale of this operation is huge with a single peak load per year, so I have huge respect for the actual Christkind-process. If it asked me to design a software system for this process, I think it would look something like this.
Playing around with software architecture diagrams sometimes feels like playing with Legos. Breaking down complex problems at any scale is something I love about my job as a Software Architect. It’s fun, especially in this context because I usually always hoped to find Legos under the tree when I was a kid.
I wish you all a Merry Christmas and a healthy and successful year 2022.
PS.: In Austria, mostly Christkind (baby Jesus) delivers Christmas gifts. If you are in the realm of Santa Claus, I think that approach would work as well, but please make sure to do a load-test first.