Hi there đź‘‹

Welcome to my blog where I write about backends, distributed systems, system design and software architecture.

Zero Values in Go

Most programming languages have a feature called “default values”. A default value lets you choose the initial value of a variable, a class field, or a function parameter. If the caller does not provide a value, the default is used. In TypeScript, default values look like this: class Person { constructor(private first_name: string = "John", private last_name: string = "Doe") {} getName(): string { return `${this.first_name} ${this.last_name}` } } console.log(new Person().getName()) // "John Doe" class Person { constructor(private first_name: string = "John", private last_name: string = "Doe") {} getName(): string { return `${this.first_name} ${this.last_name}` } } console.log(new Person().getName()) // "John Doe" Both constructor parameters have defaults, so new Person() works without any arguments. Without the defaults, TypeScript would not compile that call. In plain JavaScript there is no compiler to stop you, so the same code would print "undefined undefined". ...

July 16, 2026

The Specification Pattern in Go: Validation, Selection, and Composition

The Specification pattern combines business rules using boolean logic. It provides a way to encapsulate complex business logic into separate, reusable components that can be tested independently and combined flexibly. What Problem Does It Solve? The Specification pattern tests whether objects meet specific requirements. In traditional approaches, business rules are often scattered throughout entities, services, or repositories, making them difficult to test, reuse, and modify. The Specification pattern centralizes these rules into dedicated classes. ...

October 16, 2025