My First Brush With Go

I have decided to have a go at Go (pun intended!). The reasons are less important than the decision itself, so I will not discuss them in this blog. Instead, I will focus on the journey and will document the experience in a series of posts (hopefully, more to come!). Anyone who has worked with a programming language professionally knows that learning a programming language involves more than learning syntax. Here is a list of things that I feel I need to learn if I want to be productive in Go (in no particular order) -...

March 14, 2023

Unwinding the Abstraction - How does ArrayList in Java Work?

Introduction One of my all-time favourite articles is The Law of Leaky Abstractions by Joel Spolsky. In the article, Joel explains how non-trivial abstractions that make software development more manageable often break. And when they do, we need to understand how they truly work so we can fix them quickly. This is the reason I value learning from first principles. Over the years, I have often applied this learning style to learn more about the tools I use regularly....

February 14, 2023

On-call-friendly Java Logging Patterns

Introduction Logging is an essential part of any modern Java application. Logs allow us to understand the runtime behaviour of our applications. They also help us capture the context when errors occur. Without logging debugging a production issue will often be quite tricky. Throughout my career, I have found specific logging patterns more valuable than others when on-call. And some - not so much. In this blog post, I will talk about a few of them with examples....

January 28, 2023

How to Build Observable Systems - An Introduction to Observability

Introduction Recently I have been hearing about observability more and more. The promise that an observable system can help us to debug and identify performance and reliability issues in a microservice architecture sounded quite good to me. Hence I decided to read up and learn more on this topic. In this blog post I will try to summarise what I have learned about observability so far. What is Observability? Observability is a term or a concept that has its root in Physics, mainly in Control Theory....

October 19, 2020

Writing Executable Specifications With Junit5 Mockito and AssertJ

Executable Specifications are tests that can also serve as design specifications. They enable technical and business teams to get on the same page by enabling the use of a common language (in DDD-world this is also known as Ubiquitous Language). They function as documentations for the future maintainers of the code. In this article we will see an opinionated way of writing automated tests which could also function as Executable Specifications....

April 26, 2020