Notes from production.
What I learned running .NET services, reverse proxies and databases for real users. Most posts started as an incident or a review comment. Press ⌘K to search.
Git branching and release standard
The branch structure and promotion path my team ships with across dev, UAT and prod, written as a standard anyone can follow.
3 min readProcess
Deploying a new service in UAT with Docker and Nginx
A checklist for adding a service to a shared UAT server without breaking the ones already running there.
2 min readInfrastructure
Handling forwarded headers in ASP.NET Core behind Nginx
Why your app sees the wrong scheme and client IP behind a proxy, and the few lines that fix it.
2 min read.NETInfrastructure
Defending a .NET API against DDoS attacks
Layered protection from Nginx down to the app: limits, timeouts and what to log when traffic spikes.
3 min read.NETInfrastructure
Documenting a system you inherited
How to write down an existing system so the next engineer doesn't have to reverse-engineer it.
3 min readProcess
Nginx and free SSL for a .NET app with Certbot
Nginx as a reverse proxy for .NET, first over HTTP, then with a Let's Encrypt certificate that renews itself.
6 min read.NETInfrastructure
Mastering HttpClient in .NET with Refit
Socket exhaustion, IHttpClientFactory and typed clients with Refit: the mistakes everyone makes once.
3 min read.NET
Triggers in Postgres
Row and statement level triggers, and when an invariant belongs in the database rather than the app.
2 min readDatabases
Exploring YARP, the reverse proxy for .NET
Routing, load balancing and a gateway you configure in C#, for teams that already live in .NET.
4 min read.NETInfrastructure
Cancellation tokens: a practical guide
Stop wasted work when a request is abandoned, from the controller down to the database call.
2 min read.NET
Rate limiting in .NET, from concept to code
Fixed and sliding windows, token buckets and concurrency limits, with the built-in ASP.NET Core middleware.
8 min read.NET
Popular design patterns in .NET
The patterns that actually show up in .NET codebases, with when to reach for each and when not to.
1 min read.NET
Dynamic objects in C#
What dynamic and ExpandoObject really do at runtime, and the narrow cases where they earn their place.
2 min read.NET
ViewBag, ViewData and TempData in ASP.NET MVC
Three ways to pass data to a view, how their lifetimes differ, and which one to use.
1 min read.NET