Welcome to my personal blog!

I write about software architecture and development.

Trie (prefix tree)

Recently I had to do a design for a system that had a requirement to search strings in a big unstructured data source. While doing research, I learned about a neat data structure, that is perfect for the use case. Enter Trie!

Read more →

Feature flags

Feature flags (or feature toggles) are an approach in software development used to enable or disable features and code within the application without the need for a new deployment. They are typically implemented as a simple conditional if-else statements but various tools exit to support managing the flags.

Read more →

What is Contract-Driven Development

What is Contract-Driven Development
Overview # With the prevalence of microservices today, it is important to define how the interaction between the different components of an application happen. When you have a monolith application that is easy - the method signatures and interfaces define a rigid structure and any errors due to changes are caught immediately at the build/compile step. For microservices, we don’t have such an enforcement of correct communication - any error surface during integration testing which is often too late and slows down development.
Read more →

Fix Homebrew update freezing on MacOS

I recently had a problem with Homebrew on my Mac. When I tried to install something, for example brew install docker it will freeze on the command Running brew update --preinstall. Apparently there is a way to debug what happens by running brew update -d which will output the log of the update command. On my Mac it will block on rm -f /opt/homebrew/.git/TMP_FETCH_FAILURE (that is for M1 Mac, on Intel the path may be different).
Read more →

Apache Kafka Basics

Apache Kafka Basics
This post contains a brief overview of the terms and mechanisms of Kafka. Reading this won’t make you a Kafka expert, but it will allow you to grasp the basic concepts. Overview # Apache Kafka is publish/subscribe messaging software designed to handle communication between different systems. It is often described as distributed event streaming platform, and it is used to implement event-driven architectures. Its benefits are very high performance, reliability and message retention.
Read more →