Adding an Index Made This Query Slower
Postgres can choose a slower plan after you add an index, because the planner gains another execution path and can misjudge its cost. Here, an index o
Milan Jovanović — Software Architect and Microsoft MVP for Developer Technologies, helping engineers master .NET and software architecture through practical guidance, newsletters, and videos based on real-world enterprise experience.
46 articles from this blog
Postgres can choose a slower plan after you add an index, because the planner gains another execution path and can misjudge its cost. Here, an index o
How to use PostgreSQL row-level security (RLS) with EF Core to enforce tenant isolation in multi-tenant apps.
Four years and 210 weekly issues taught me more than the topics did. The four lessons I keep coming back to are the ones this issue walks through: con
Learn how to configure request timeouts in ASP.NET Core endpoints using built-in middleware in .NET 8, with cooperative cancellation and best practices.
Learn how to design effective SQL indexes using query patterns and EXPLAIN ANALYZE, with a case study showing performance improvement from 17ms to 0.04ms.
A system design analysis of building social media feeds, comparing fan-out on read vs. write strategies with real-world tradeoffs.
Learn how to persist a rich domain model with EF Core, overcoming common ORM limitations for full encapsulation and invariants.
A guide to deciding whether to split a monolith into microservices, featuring five key questions to evaluate before making the transition.
Akamai launched Edge Case: a free Discord community for developers building with AI/LLMs, serverless, cloud infrastructure, and WebAssembly. Inside yo
A technical guide on migrating a static website from Netlify to Cloudflare Pages, saving $228/year with zero downtime.
A guide on testing vertical slice architecture using integration tests with WebApplicationFactory and Testcontainers.
Guide to building a private network using Tailscale VPN, focusing on secure, zero-open-port connections between servers.
Guide to using NATS JetStream as a durable message queue in .NET applications, including setup and client integration.
A technical article about the pitfalls of modular monolith design, focusing on how a clean separation between modules can become irreversible over time.
Tutorial on building durable Dapr Workflows in .NET with Aspire, covering orchestration, activities, and state management.
Explores the common misunderstanding of the DRY principle in programming, emphasizing knowledge over code duplication.
C# 15 introduces union types, allowing developers to model values that can be one of several types with compile-time safety.
Guide to scaling long-running API requests using async patterns, job queues, and worker pools to improve availability.
Designing .NET applications to handle partial failures in use cases involving multiple systems, with strategies for recovery.
Explains why API versioning should be a last resort, focusing on change management and compatibility rules to evolve APIs without breaking clients.