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

12 SOLID Interview Questions for Experienced Developers

Master SOLID principles with real C# examples, interview questions, common pitfalls, and clean architecture tips for maintainable, testable code.

September 8, 2025 · Last modified: September 19, 2025 · 31 min

Refactoring Code for Better Coupling and Cohesion

TL;DR: High cohesion means classes focus on one job. Low coupling means classes don’t depend too much on each other. When I refactor messy code, these two principles guide every decision I make. Why I Focus on Cohesion and Coupling When Refactoring After 10+ years of building enterprise applications, I’ve inherited my fair share of messy codebases. The pattern is always the same: tangled classes doing too much, components that break when you touch something seemingly unrelated, and tests that require half the application to run. ...

August 4, 2025 · Last modified: September 19, 2025 · 7 min

C# Polymorphism with Template, Strategy, Visitor

Learn how polymorphism in C# using Template Method, Strategy, and Visitor patterns makes your code flexible, maintainable, and reusable.

July 16, 2025 · Last modified: September 19, 2025 · 5 min

How Does Composition Support the SOLID Principles? (C# Examples & Best Practices)

Discover how composition helps you follow the SOLID principles in C#. See practical examples for each principle, learn why composition is more flexible than inheritance, and get actionable tips for writing robust, testable, and maintainable code.

June 30, 2025 · 4 min

Composition Over Inheritance in C#

Discover why composition is often a better choice than inheritance in C#. This article explains the drawbacks of deep inheritance, demonstrates how to use composition for flexible and maintainable code, and provides practical tips for applying these principles in real-world projects. Includes code examples and guidance for testable, scalable software design.

June 29, 2025 · Last modified: September 20, 2025 · 12 min

The Difference Between DIP, DI, and IoC

TL;DR: DIP (Dependency Inversion Principle): High-level modules should not depend on low-level modules; both depend on abstractions. DI (Dependency Injection): A technique to supply dependencies from outside a class, improving testability and flexibility. IoC (Inversion of Control): A broader concept where control of object creation and dependency resolution is delegated to a container or framework. Together, they enable decoupled, maintainable, and testable applications. DIP is a design principle, DI is a pattern, IoC is the overarching concept. I bombed this question in an interview once. ...

June 20, 2025 · Last modified: September 16, 2025 · 8 min
×