For the most part of 2024, I worked on a project to rearchitect some old systems using latest technologies. The deepest learnings about this project presented itself when I had to articulate why we even invest in improving system architecture:
Here is a slide from a talk I did about the modernization plans - it talks about the project paradox – many more choices are available at the beginning of a project than at the end – although at the beginning of a project we have many unanswered questions.
In March, I will be presenting a talk at Monster Scale 2025. I chose the topic of what flow metrics teaches us about building resilient systems. Preparing to share the stage with some of the best speakers of the industry like Martin Kleppmann, Dominik Tornow and Gwen Shapira, I really needed to brush up on many topics:
I built a Spring Boot application to illustrate the concept of avoiding congestion using using flow metrics. Below is a screenshot that shows a server (top) that allows congestion to build up compared to a server (bottom) that uses flow metrics to detect and mitigate congestion.
In April of 2024, I took a two-day course on AWS technologies. I learnt about many things but I learnt few things well enough to build something with them. So when the course concluded, I decided to build a URL shortener based purely on serverless technologies in AWS. In doing so, I learnt many topics which were not specifically about AWS:
Shown underneath is the flow of how authentication works in Liliput using AWS Cognito, OAuth and PKCE. Check out Liliput here: liliput.mourjo.me.
For the first five years of my professional life, I worked with a Lisp called Clojure. Among the many great things about the language, what I miss most in my day-to-day is an interactive REPL. I presented the topic of bringing the interactivity of the REPL into the Java world in November 2024 at a company tech conference. Yet again, I learnt many eye-opening topics:
The diagram below highlights the need for developer-centric tools for interacting with the application, and that user interactions do not have the same needs as developer interactions.
In school I saw how direction and time allocation form the structure of learning. But what I missed in the classroom was the applicability of the things I learnt. As a software engineer, I am privileged to see the application of many theoretical topics right before my eyes. I found great results in combining the classroom method of time-bounded learning with the direction of applicability.
See anything to improve? Edit this post!