A minimal diagram showing features grouped by vertical slices, with entire folders being removed cleanly to illustrate delete-ability and localized change.

Delete-Driven Design: How to Write Code You Can Remove

Most design principles focus on extensibility and reuse. Delete-Driven Design flips the question: how easy is it to remove code safely? This post explains why delete-ability is the ultimate test of boundaries, abstractions, and tests—and how to design systems that accept change without fear.

January 12, 2026 · 8 min
A minimal architectural diagram showing controllers, services, and domain entities, with business logic drifting upward into services and increasing complexity.

Why Most Service Layers Make Code Worse

Service layers were meant to coordinate use cases, but in many systems they become dumping grounds for business logic. This post explains why that happens, how it leads to anemic domain models and brittle tests, and what to do instead.

January 5, 2026 · 11 min
A minimal architectural diagram showing layers becoming more complex over time, with arrows highlighting trade-offs between abstraction, simplicity, and maintainability.

The Engineering Trade-offs I Got Wrong

Most engineering mistakes don’t come from ignorance—they come from good intentions applied too early. This post reflects on real-world trade-offs around abstractions, service layers, Clean Architecture, testing, and what I’d do differently today.

December 25, 2025 · 9 min
×