Designing with types #03: Safety and Intent

In the previous installment of this series, we concluded that we can write code that is safe and that reveals intent by making illegal states unrepresentable and by encapsulating state changes. Today, we’ll try to come up with proper definitions of safety and revealing intent. Also, we’ll take a look at more examples of applying these principles in practice. ...

July 9, 2025 · 8 min · Dirk Groot

Designing with types #02: Pitfalls and Practices

In this installment of my Designing with Types series, we’ll look at how some typical backend code is set up. We’ll identify some common pitfalls and identify best practices to avoid these pitfalls. ...

June 30, 2025 · 13 min · Dirk Groot

Designing with types #01: Introduction

Ever had that sinking feeling when a bug sneaks into production, despite all your testing efforts? Yeah, we’ve all been there! While languages like Java, C#, and Kotlin come with powerful type systems, many developers aren’t using them to their full potential. In this series, we’ll explore how we can use types to catch bugs before they even have a chance to become bugs. We’ll look at practical ways to make our designs safer and easier to understand. ...

May 21, 2025 · 5 min · Dirk Groot