Gireesh Kapila

Gireesh Kapila

Code for the joy of it, writing to make sense of it.

Get new posts in your inbox (or via RSS)

December 27, 2025

What We Lost When Everything Became an API

We made simple things complicated for no good reason..

Read more →
March 3, 2024

Why ConfigureAwait(false) Doesn't Matter in ASP.NET Core

ASP.NET Core dropped SynchronizationContext. Here's what that means for your async code.

Read more →
February 22, 2024

Why Dispose Still Matters in .NET

The Garbage Collector handles most memory in .NET, but not all of it.

Read more →
February 18, 2024

Avoid Default Constructors in Domain Models

Design your classes so that if an object exists, it is in a consistent state.

Read more →
February 8, 2024

ValueTask: When Task<T> Allocates More Than It Should

Every async method allocates a Task on the heap. Sometimes that's wasteful.

Read more →
February 1, 2024

The Transactional Outbox Pattern

How to keep your database and message broker in sync without distributed transactions.

Read more →
January 25, 2024

Object Pooling in ASP.NET Core

Reuse objects instead of creating new ones to reduce memory allocation overhead and GC pressure.

Read more →
November 15, 2023

Why You Should Use IHttpClientFactory in .NET

Disposing HttpClient doesn't close the socket. Reusing it risks stale DNS. IHttpClientFactory solves both.

Read more →
November 9, 2023

Concurrency, Multithreading, Async, and Parallelism

They overlap but aren't the same. Here's how they relate.

Read more →
November 2, 2023

On-Stack Replacement in .NET 7

Tiered compilation had a blind spot for long-running loops. OSR fixes that.

Read more →
Older posts »