How Do You Build a Social Media Feed? (System Design)
The home feed looks like the easiest feature in a social app: fetch posts from the accounts you follow, sort, return a page.
Every Saturday morning I will send you 1 actionable tip on .NET that you can easily implement.
The home feed looks like the easiest feature in a social app: fetch posts from the accounts you follow, sort, return a page.
Every time I show a rich domain model, someone tells me it can't work with EF Core: "EF needs public setters and a public constructor, so the anemic model is…
Nobody regrets microservices on day one. The regret shows up eighteen months later, when the team is drowning in distributed-systems problems they never needed…
I just shipped Katabench, and it's the most fun system I've ever built: it takes C# from strangers and runs it safely on servers I own.
This website ran on Netlify for years, at $19 a month. Earlier this month I moved it to Cloudflare Pages: same repo, same GitHub Actions pipeline, zero…
The most common question I get about vertical slice architecture isn't about structure. It's "where do my tests go?" The layered-architecture testing habits…
Most of what runs on your servers was never meant to be public: databases, dashboards, admin panels, internal APIs.
NATS almost never comes up when .NET developers talk about message queues, and that's a shame.
We built the system exactly the way a modular monolith is supposed to be built, and that's how I ended up with two modules I couldn't pull apart a year later.
Long-running business processes are hard to get right. Dapr Workflow lets you write them as plain C# code that survives crashes and restarts, and Aspire makes…
DRY was never about code that looks the same. It's about knowledge. Most of the tangled abstractions I've had to unwind started as a well-meaning attempt to…
For years we faked union types with marker interfaces, base classes, and the OneOf library.
When a single API call takes minutes to finish, it punishes both your users and your server.
A use case isn't a transaction. The moment it touches more than one system, you are dealing with partial failure.
Most teams reach for v2 too early because they don't have a contract evolution strategy. Here's the API change management approach I prefer: evolve contracts…
Most 'DDD-ish' code I review enforces business rules everywhere except where it should: in the model itself.
The test pyramid made sense when integration tests meant a shared database server and a 20-minute build. It doesn't match how I build .NET systems in 2026.
I resisted primary constructors for a while. They felt like a shortcut that would cost me later.
Long-running business processes don't fit neatly into a single request. Wolverine's Saga support gives you a convention-based approach to orchestrating…
The Outbox pattern guarantees reliable publishing. But what about the consumer side? The Inbox pattern ensures each incoming message is processed exactly once…
Vector search doesn't require a dedicated vector database. PostgreSQL with pgvector gives you similarity search right next to your relational data.
SignalR connections are server-local. Scale out to multiple instances and messages stop reaching the right clients.
Seven approaches to bulk-updating rows in PostgreSQL from .NET using Dapper and EF Core, from naive per-row updates to binary COPY.
Learn about five essential architecture tests that can help ensure the quality and maintainability of your .NET projects.
Passwords alone are not enough. Learn how to implement Two-Factor Authentication in .NET using TOTP, QR codes, and the Otp.NET library, with a secure setup…
Modular Monolith tells you how to split the system into modules. But it says nothing about how to organize code inside each module.
Vision models can do more than describe images. I used Ollama and Microsoft.Extensions.AI to extract structured receipt data into strongly typed C# objects…
Learn how to integrate Keycloak with your .NET 10 API using Docker, Swagger UI with OAuth 2.0 Authorization Code flow, and JWT validation.
Learn how to containerize .NET applications without writing a single line of Dockerfile. The .NET SDK has built-in support for publishing directly to container…
A practical demo of the zero-downtime migration pattern: run old + new password hash formats side-by-side, migrate users on login, and remove legacy safely.
Learn how to solve the distributed cache invalidation problem in .NET 9 by implementing a Redis Pub/Sub backplane to synchronize HybridCache instances across…
Per-aggregate ordering is what we really want. But queues with competing consumers make it surprisingly easy to break.
Looking at my contribution graph now, I can see the whole journey mapped out in squares of green. The startup dreams. The pivot to teaching.
Learn how to build a high-performance cache from scratch in .NET, moving from a simple ConcurrentDictionary to an optimized keyed-locking system.
ASP.NET Core 10 introduces native Server-Sent Events as a lightweight, HTTP-native alternative to SignalR for simple one-way real-time updates like dashboards…
See what changes in .slnx, how to convert your existing .sln, and what to watch out for in CI.
Learn how to safely parallelize EF Core queries to improve performance by using IDbContextFactory to create isolated contexts, avoiding the thread-safety…
Deciding where shared logic lives is the most critical moment in Vertical Slice Architecture adoption, as choosing incorrectly reintroduces the coupling the…
Coupling isn't just about code structure; it's about failure boundaries. Discover how to ensure your critical business logic survives when external…
With .NET 10, Microsoft introduced file-based apps, which give you the ability to write C# code in a single .cs file and run it directly, without any project…
Distributed systems don't fail cleanly: they retry, duplicate, and occasionally fail. This article shows how to design resilient message handlers in .NET using…
.NET 10 finally adds proper LeftJoin and RightJoin methods to LINQ, replacing the complex GroupJoin + DefaultIfEmpty pattern with clean, readable code that…
Discover how a simple interview question about report generation reveals the difference between optimizing code and designing scalable systems, and why the…
Learn how to properly set up a new .NET project with EditorConfig for code consistency, Directory.Build.props for centralized configuration, central package…
Learn how to deploy ASP.NET Core Minimal APIs to AWS Lambda with just one library and a single line of code.
Learn how to use PostgreSQL stored procedures and functions with EF Core to handle complex queries, atomic operations with locking, and database-specific…
Learn how to implement Role-Based Access Control (RBAC) in ASP.NET Core with custom authorization handlers, permission-based policies, and clean extension…
Learn how to coordinate work across multiple application instances using distributed locking in .NET, preventing race conditions and ensuring data consistency…
Learn how Vertical Slice Architecture organizes .NET code by business features instead of technical layers, keeping related functionality together and making…
Learn how to add semantic search to your website using Amazon S3 Vectors - a new vector database service that's 90% cheaper than alternatives.