Michael O'Hara
I studied English and History at UT Austin — not the typical origin story for a .NET engineer. But twenty years of shipping production C# taught me that the ability to explain a design decision clearly is worth as much as the ability to implement it. This blog exists because of that conviction.
I've built claims auditing engines for major healthcare companies, optimized national-scale real estate data pipelines, and led teams through the kind of cloud modernization projects where "lift and shift" is a polite fiction. The patterns I write about here are the ones that survived all of it.
Along the way I kept running into the same problem — talented engineers doing things dangerously wrong and not knowing it. Junior developers fresh out of school, well-educated but unprepared for the actual daily work of shipping software. Mid-level developers far enough along to be productive but carrying gaps in the why behind the patterns they used every day.
Nobody teaches you that stuff. Not school, not docs, not Stack Overflow. You either get lucky with a good mentor or you learn it the hard way in production. I started writing it down so there'd be a third option.
Generics, async/await, LINQ, records, pattern matching, spans — the language features that change how you think.
Web API, minimal APIs, middleware pipelines, filters, output caching, and the full request lifecycle.
Query performance, migrations without downtime, the N+1 trap, and knowing when not to use an ORM.
SOLID, clean architecture, CQRS, decorator, repository — and knowing when simpler wins.
xUnit, NSubstitute, integration tests with WebApplicationFactory, test doubles, and what coverage actually measures.
Structured logging, health checks, exception middleware, feature flags, graceful degradation under load.
Azure, Docker, background workers, message queues, microservice boundaries, and distributed tracing.
Code reviews, mentoring, promotion prep, technical interviews, and the mid → senior → staff path.