Writing

I write about grounded architecture and testing, practical AI-assisted engineering, and hands-on code and tooling.

I also post shorter, less formal TIL notes here.

I’m most active on Bluesky, and you can also find me on LinkedIn.

Subscribe via RSS
  • Test Naming Guidelines

    How-to

    TLDR: Below are test naming guidelines that help me write consistent, clear test names. This is quick post with the Test Naming Guidelines I have been using to make my test names consistent across multiple projects. I use also these with LLMs when writing tests or refactoring mul…

  • Continuous Deployment for Personal CLI Tools

    How-to

    Git pre-push hooks can automate local installation of your personal CLI tools, creating a development workflow where your working environment always has the latest version of your code. When developing CLI tools, for example for personal use, I often want to run the latest versio…

  • Ground Your ADRs with a Verification Section

    Opinion

    Making architectural decisions is one thing, but have you ever wondered how to make them more effective? Adding a Verification section to Architecture Decision Records (ADRs) can make the difference. This simple addition bridges the gap between theory and practice, making decisio…

  • Notes on Preparatory Refactoring

    Notes

    Notes inspired by Emily Bache's short Youtube video Design Better Code with Preparatory Refactoring in TDD | Demo. A preparatory refactoring is a refactoring to make future changes to accommodate new requirements easy. By definition, current behavior should not be changed. Instea…

  • Less Mentioned Benefits of Architecture Decision Records

    Opinion

    Teams adopt Architecture Decision Records (ADRs) to document decisions, avoid revisiting settled matters, onboard newcomers, adapt to changing circumstances, and sharpen their thinking. However, there are several other valuable benefits that often go unnoticed. A clear decision p…

  • Notes on TDD & DDD From the Ground Up Live Coding

    Notes

    Some short notes from Chris Simon's Talk TDD & DDD From the Ground Up Live Coding When choosing the right testing level, developers face an important trade-off. Higher-level tests provide better coverage for refactoring, but make it harder to pinpoint the exact location of fa…

  • Notes on 🚀 TDD, Where Did It All Go Wrong

    Notes

    My short notes on 🚀 TDD, Where Did It All Go Wrong. Still a lot of testing wisdom in this talk (re-watched 6 years after publication). Focus on behaviour Behaviour should be your primary focus when writing tests. The need for a new test should arise from new behaviour or requirem…

  • How to extract all TODOs from code using Scala-CLI

    How-to

    In recent years, Scala CLI has replaced sbt for my home and smaller work projects. Scala CLI lacks the extensive plugin ecosystem of sbt, so you need to write any additional functionalities yourself. Fortunately, writing simple scripts is a primary use case for Scala CLI, which w…

  • Slice Work into Smaller, Prioritised Deliverables instead of using Story Points

    Opinion

    Have you ever wondered if there are better ways to estimate work than using Story Points? Below is a potentially simpler, more effective method to prioritise and estimate your software development tasks that could save your team countless hours of debate and confusion. This mini-…

  • Boost Your Thinking and Writing with Mini-Essays

    Opinion

    To become a better writer consistently writing is essential. Mini-essays provide a practical approach. Mini-essays are short pieces of writing that focus on a single idea or topic. Key properties of Mini-Essays Length: Mini-essays are short, usually 100 to 300 words to avoid di…

  • DDD and FP can be friends

    Opinion

    DDD (Domain Driven Design) is not tied to a particular programming paradigm and strategic and tactical design choices apply to the architecture and code level. This article was triggered by a talk that does not align with my thinking and experience with DDD and FP over the past y…

  • FizzBuzz fun: Exploring Functional Programming Design Patterns : Monoids

    In this post, we will continue from where we left off in a previous article in this series, "FizzBuzz Fun in Scala: Combining Functions," and explore where further abstraction leads us in terms of functional programming design patterns. Our goal is to show that, despite their int…

  • Simplifying if-complexity in FizzBuzz

    In this series, I've mentioned that using an if-expression in the FizzBuzz problem can be more error-prone and complex compared to functional approaches. In this brief article, I'll demonstrate why that's the case. Let's start with a simple working implementation using ifs: // Co…

  • FizzBuzz fun in Scala: Combining functions

    Every implementation of FizzBuzz in this series, at its core, has relied on an infinitely counting lazy list. This modelling is logical, as the game can theoretically be played indefinitely. In this post, we will explore the possibility of defining a single function operating on …

  • Fizzbuzz fun in Scala: A straightforward implementation

    In previous articles of this series, I examined various implementations and meanwhile experimented with others at different levels of abstraction. However, before delving into those, I wanted to present what I believe to be the most straightforward approach, which allows for easy…

  • Software Architecture Note: On Negotiation and Limiting Accidental Complexity

    Opinion

    In this brief article, I will discuss two insights from the book Fundamentals of Software Architecture: An Engineering Approach by Mark Richards and Neal Ford: the importance of negotiation in an architect's job and an effective communication approach. I will then offer a way on …

  • FizzBuzz Functional Fun in Scala 3

    Nearly a decade ago, I wrote a post about implementing FizzBuzz in a more functional manner, which also happened to be the final entry on a blog I started that year. Now, I want to dedicate more time to writing, and rebooting my blog seems to be a good way to achieve this. What b…

  • FizzBuzz Functional Fun in Scala

    Updated with a more functional implementation of FizzBuzz November 2015 Updated with a link to an implementation using Monoids July 2016 FizzBuzz fun in Scala using Scala Streams. The straightforward implementation of FizzBuzz usually involves defining a list or array of fixed si…

  • Welcome!

    Years ago I had a blog and even one what was then called 'a homepage'. The past time I have mostly been sharing my thoughts and interests on Twitter but I have some ideas that would require more than 140 characters so I created this blog to crystallize them when ready.