learn in public

Insertion sort: 0 comparisons, 0 swaps

I'm Thomas Ngo, a software engineer in Stanton, California. I write down what I learn about algorithms, C# and .NET, and building real software, so I understand it better and you can learn it faster.

Articles explain a topic end to end. Problem of the Day posts are my daily algorithm practice, one LeetCode problem at a time.

1044 posts since 2023 624 Problem of the Day write-ups 302 tags

Latest articles

Guides and deep dives on .NET, architecture and the tools I use at work.

  1. Building a Personal Finance App, Part 13: GDPR Data Export and Account Deletion

    14 min

    In this final part I add the two privacy features every app holding personal data should have: “download my data” and “delete my account”. They sound like a button eac...

  2. Building a Personal Finance App: Series Overview

    5 min

    For about a month, from late September to late October 2026, I built a Personal Finance app from an empty solution to a deployed, multi-service .NET 10 application. It...

  3. Adding Aspire to an Existing Blazor and Web API Solution: A Step-by-Step Guide

    30 min

    You already have a working solution: a Blazor Web App, a Web API, a Data project with your ApplicationDbContext, and a Models project with your entities. Running it lo...

  4. Building a Personal Finance App, Part 12: Building with AI Coding Agents

    13 min

    Most of this app was written with AI coding agents at the keyboard and me in the reviewer’s chair. This post is about how that worked: the files the agents read, the s...

  5. Building a Personal Finance App, Part 11: Testing and Quality Gates

    16 min

    This part is about the safety net under the Personal Finance app: the tests, linters, analyzers and CI jobs that have to pass before anything reaches Azure. It is also...

  6. Building a Personal Finance App, Part 10: RBAC and Account Isolation

    13 min

    The app is two services: a Web front end that users sign in to, and an ApiService behind it that owns the data. This part covers how I added roles and an admin dashboa...

See every post in the Journal

Problem of the Day

Daily algorithm practice, one LeetCode problem at a time, with the approach and complexity.

  1. Copy List with Random Pointer in C#
  2. Remove N-th Node From End of List in C#
  3. LeetCode: Reorder List in C#
  4. Median of Two Sorted Arrays in C#
  5. Linked List Cycle Detection in C#
  6. Merging Two Sorted Lists in C#
  7. Reverse Linked List in C#
  8. Time Based Key-Value Store in C#
  9. Search in Rotated Sorted Array in C#
  10. Find Minimum in Rotated Sorted Array in C#
See all 624 problems

Topics

The tags I write about most, with how many posts each has.

Browse all tags

About

Who's writing this.

I'm Thomas Ngo, a software engineer in Stanton, California. I build reliable, maintainable software and write down what I learn along the way.