arjay@portfolio: ~/blogs/lessons-from-shipping-charityk
[ cd .. ] back to blogsJanuary 22, 2026

Lessons from Shipping CharityK

AngularASP.NET CoreAzure

CharityK started as a fairly standard full-stack build: Angular on the frontend, ASP.NET Core on the backend, SQL Server underneath, all deployed to Azure. The interesting problems showed up once real data and real usage patterns entered the picture.

The biggest win came from something unglamorous: auditing what the frontend was actually waiting on. A handful of endpoints were doing more work than the page needed — joining tables the UI never rendered, serializing fields nobody consumed. Trimming those payloads and adding targeted indexes on the SQL Server side cut page loads by roughly half.

Docker made local development and CI consistent across machines, which mattered more than I expected on a contract where I wasn’t the only person touching the codebase. Reproducible environments turned "works on my machine" from a recurring argument into a non-issue.

If I were starting over, I’d profile the real request patterns earlier instead of optimizing based on assumptions about where the bottlenecks would be. The slow part was rarely where I guessed it would be.