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
  • 136 matching
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 08 Dec 2025

What Teaching Code Owes Its Reader

The retrospective - nine declared omissions that are all defensible, a set of undeclared ones that all turned out to be live bugs, and the rule that falls out of the difference.

.NET 07 Dec 2025

Endpoints Declared as Data

A four-field record that makes it impossible to register a route without stating who may call it - the best idea in the mini-framework - and the one line it did not write, which costs every 404 in the estate.

.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 06 Dec 2025

The ADR Said UTC and One Switch Unsaid It

A decision record mandates UTC everywhere and an IClock abstraction, and thirty files honour it - then one process-global AppContext switch in shared plumbing makes every timestamp column forget it was UTC.

.NET 05 Dec 2025

Five Seconds Is a Teaching Decision

The tick that makes eventual consistency watchable in a console, the four-hop chain that takes twenty seconds because of it, and the DI-scope trap the estate is one refactor away from firing.

.NET 05 Dec 2025

Publish Then Save, Save Then Publish

One estate showing the safe ordering five times and the unsafe one once, with the phantom-event failure traceable end to end through a webhook that never retries.

.NET 04 Dec 2025

At Most Once, and Sometimes Not at All

What an in-process event dispatcher actually guarantees when there is no outbox, no dead letter, no correlation id and no drain on shutdown - and the one static field the whole thing depends on.

.NET 03 Dec 2025

A Specification That Never Specifies Anything

A textbook Specification base class whose one clever feature has zero usages, whose combinators have none either, and whose only used method recompiles an expression tree on every call - inside loops.

.NET 02 Dec 2025

CQRS Arrived as a Consequence

Because the write model exposes nothing, the read side could not go through the aggregate - so a second POCO maps the same physical table through a second DbContext. CQRS as an outcome rather than a choice.

.NET 02 Dec 2025

The Model the Scheduler Can Query

The third persistence strategy is the plainest one, and the only one a background poller can interrogate - plus what that poller costs when it has no watermark, no paging and no index.

.NET 01 Dec 2025

When Private Fields Become Column Names

Mapping a fully encapsulated aggregate to relational tables with Property of T of a string - eight tables for one aggregate, eighteen columns, seventeen of them named after private C# fields.

.NET 30 Nov 2025

The Aggregate as One Column

Sales stores four aggregate roots and twenty-five value objects in three tables, by serialising whole aggregates into jsonb - and the reflection resolver that makes reconstitution work bypasses every invariant on the way in.

.NET 30 Nov 2025

The Queries You Cannot Write

What the document strategy really costs - a promoted column, a side table, an in-memory dictionary with a TODO on it, and six update methods that look the row up without its id.

.NET 29 Nov 2025

Asserting on Events When There Are No Getters

Two test files, one estate, one deliberate contrast - and the answer to the question a fully encapsulated aggregate forces on you. Six test methods in 14,559 lines, by design.

.NET 28 Nov 2025

Make the Draft a Different Class

An offer draft and a published offer are not one entity with a status flag - they are two classes, and the transition is a method that returns the second one. What that buys, and what it silently drops.

.NET 28 Nov 2025

One Public Member, Sixteen Consequences

Postsale's aggregate has ten private fields and exactly one public member. Reservation, in the same estate, has eighteen. Following that difference all the way down to the database.

.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.