In this article, Oskar Dudycz discusses explicit types definition and how it can help make codebases closer to the business domain, more predictable and secure. He explains the lack of support for (discriminated) union types in C#, but demonstrates how to model them similarly to sealed interfaces in Java. He defines the possible states of a shopping cart and events that can happen, showcases pattern matching to rebuild the state from events, and explains how to limit changes made by other developers by making the default constructor private. This is a must-read for C# developers looking to effectively compose their business logic.