Skip to content
kc@kumarChandrachooda.com:~$ cd /blog/archive && read --section="top" 0%
Archive

Every article

Newest first, grouped by year. Search or filter by topic.

  • 556 articles
  • 99 matching
Architecture 08 Jan 2026

A Million Is Where the Wallet Breaks

Inflow's Amount value object rejects anything above one million, and the wallet balance is an Amount. Two legal credits of six hundred thousand leave a wallet that can still take money in and can never be read or spent again.

Architecture 08 Jan 2026

The Wallet That Adds Itself Up

Inflow's Wallet has no balance column - the balance is a fold over the transfer ledger, computed the same way on the write side and the read side. It is the best decision in the module, and it costs more than it looks.

Architecture 07 Jan 2026

Four Architectures in One Solution

Inflow is a modular monolith whose modules agree on their boundaries and disagree about everything inside them - a four-project onion next to a single feature-sliced assembly. Part 1 of a series reading the money-moving half of the estate.

Architecture 06 Jan 2026

Ten Hours and No Way Back

The rewrite multiplied the JWT lifetime by ten and deleted the only way to revoke a token early - one change in a JSON file, the other an absent folder, and neither visible in any diff of the domain.

Architecture 06 Jan 2026

The Rewrite Kept Every Bug

Four non-trivial defects appear at near-identical line numbers in both builds of the same product - a ground-up rewrite by the same authors relocated them rather than finding any.

Architecture 05 Jan 2026

In-Process Is Not Synchronous

Trill's monolith routes every cross-module event through an unbounded channel drained by one background service - so its flagship end-to-end test has to sleep for two seconds to observe the architecture working.

Architecture 04 Jan 2026

Eighteen Containers Become Two

Running Trill as microservices takes eighteen containers and twenty-two published ports; running the same product as a monolith takes mongo, redis and dotnet run - and only the monolith still starts from a clean clone.

Architecture 04 Jan 2026

Minimal APIs, Written by Hand

Trill's monolith implements typed Get, Post, Put and Delete extensions over IEndpointRouteBuilder on .NET 5 - the framework .NET shipped eighteen months later, complete with query binding by string replacement.

Architecture 03 Jan 2026

Every In-Process Call Pays for MessagePack

Two lines in Trill's module client serialise and immediately deserialise every cross-module message, buying a future network hop at the cost of a round trip that never leaves the heap - and there is a benchmark project defending the choice.

Architecture 02 Jan 2026

Guid.Empty Is a Mode Flag

Trill's monolith puts the envelope fields on the message itself, then uses one sentinel value to mean this-is-a-synchronous-call in three unrelated subsystems that never mention each other.

Architecture 02 Jan 2026

The Contract Checker They Built After the Drift

The Trill monolith ships a startup-time validator that compares independently declared copies of the same message and crashes the app on a mismatch - the most original idea in either build, adopted by four declarations out of twenty-two.

Architecture 01 Jan 2026

AddX, UseX, and Two Deliberate Violations

Trill's hand-rolled framework follows the ASP.NET Core registration convention with unusual discipline, then breaks it twice on purpose - and the exceptions turn out to be more instructive than the rule.

Architecture 31 Dec 2025

A Framework Instead of Twenty-Four Packages

Trill's saga microservice references twenty-four third-party packages; the same saga as a module references one - because the monolith deleted Convey and rewrote 4,600 lines of it by hand.

Architecture 31 Dec 2025

One Database, Eleven String Literals

Four physical Mongo databases collapse into one when Trill is rebuilt as a monolith - and the only thing keeping the modules apart afterwards is a private const string copied into eleven files.

Architecture 30 Dec 2025

Boundaries the Compiler Enforces

Trill's monolith makes every module type internal and gives each one an explicit friend list, so a cross-module reach is not a code-review conversation - it is a build error.

Architecture 29 Dec 2025

The Same App, Built Twice

DevMentors shipped Trill as nine microservice repos, then rebuilt the identical product as a modular monolith three months later - giving us a controlled experiment in architecture that almost never exists in public.

.NET 07 Dec 2025

Sixteen Concepts, Copied Once

When Postsale was carved out of Sales, sixteen types came with it - and every place the twins differ marks a decision the extraction forced, including one base class that stopped draining and a repository that silently depends on it.

.NET 27 Nov 2025

CRUD, Rich, Clean — And Who Actually Got Which

Testing a README's three-tier architecture claim against the source, and finding that the module nobody mentions holds the only real aggregate in the estate.

.NET 26 Nov 2025

One Domain, Three Dialects

A teaching repo that implements one airline-charter domain three ways on purpose - CRUD, CRUD-plus-rich, and Clean Architecture - and persists it three ways to match. Part 1 of a source-reading series.

Architecture 26 Nov 2025

What Strategy-First Actually Bought Them

An honest retrospective on fifteen parts of source-reading - what the decision records bought, what they could not buy, and the compliance gaps nobody wrote down.

Architecture 25 Nov 2025

Decisions With an Approver and No Date

Four decision records with a named reporter and approver, no dates, no supersession, an architecture board hosted outside version control and a README that links code by line number.

Architecture 24 Nov 2025

Broadcast Without a Filter

Two events in GroupFlights have more than one subscriber, and both are where it breaks - two handlers ask "is this mine?" and two do not, in both directions.

Architecture 24 Nov 2025

The Feature Flag That Is a Constant

A fully built cross-cutting decorator disables an entire context relationship behind a local variable that is always false - while a sibling module enforces the identical rule for real.

Architecture 23 Nov 2025

Correlation Identifier, Invented Three Times

The event interface has no members, so nothing can carry a correlation id - and three modules each rebuild the pattern as application state, one of them in a static dictionary with a TODO.

Architecture 22 Nov 2025

Splitting a Bounded Context, With the ADR Attached

ADR 04 extracts the reservation-change process out of Sales, lists ten steps and two recommendations - and nine of the ten steps are traceable to real code.