Skip to content
Kumar Chandrachooda
Series

One Shop, Every Shape

In reading order.

  • 16 parts
  • ≈ 86 min total
  • 16 published
Part 1 26 Jul 2025 7 min read

One Shop, Every Shape

DevMentors built the same e-commerce shop twice - once as a monolith, once as nine services - with two gateways and two frontends. This series reads the whole estate as one artefact.

Part 2 02 Aug 2025 5 min read

The Monolith and the Swarm

DShop exists as one deployable and as nine services built from the same requirements. Read side by side, the two builds show which decisions were decisions and which were defaults.

Part 3 08 Aug 2025 6 min read

Swap the Dispatcher for a Bus

The monolith and the microservices share the same command names. Decomposition here was one substitution - resolve a local handler, or publish to a broker - and reading both dispatchers shows exactly what changes.

Part 4 15 Aug 2025 5 min read

Who Creates the Customer?

In DShop a customer is born in two steps - a record on sign-up, then a completed profile. Following both across the monolith and the swarm shows how a consistency model quietly rewrites a user flow.

Part 5 21 Aug 2025 5 min read

The Buy Path That Never Worked

The DShop monolith was abandoned with a NotImplementedException sitting directly in the order path. Reading its honest ledger is a masterclass in what an unfinished codebase confesses about itself.

Part 6 28 Aug 2025 5 min read

One Shop, Two Front Doors

DShop's gateway reads over HTTP and writes over a message bus - two dispatch mechanisms behind one controller. Reading it shows how a gateway can be a router and a publisher at the same time.

Part 7 04 Sep 2025 5 min read

A Gateway Written in YAML

DShop.Api.Next rebuilds the whole code-first gateway as Ntrada configuration - a 17-line Program.cs and a folder of YAML. Reading both side by side shows exactly what you trade when a gateway becomes data.

Part 8 10 Sep 2025 5 min read

The Header That Names the Future

DShop's gateway answers a write with 202 Accepted and a header pointing at an operation that hasn't happened yet. Reading the contract shows a clean async-REST design - and two small bugs that undercut it.

Part 9 17 Sep 2025 5 min read

The Security Inversion

DShop puts all its authorization at the gateway and none in the services behind it - then publishes every service port to the host. The compose file quietly defeats the entire security model.

Part 10 24 Sep 2025 5 min read

The Push Channel Nobody Plugged In

DShop runs a whole SignalR service to push operation results to the browser in real time - JWT handshake, per-user groups, Redis backplane. No frontend connects to it, and both UIs sleep through eventual consistency instead.

Part 11 30 Sep 2025 5 min read

Two Frontends, One API

DShop has an Angular 6 SPA and a Blazor 0.7 WASM app over the same gateway. One has the right architecture and broken plumbing; the other has naive architecture and a working shop. The contrast is the lesson.

Part 12 07 Oct 2025 5 min read

The Angular App That Forgot Its Auth Header

DShop.Web is a well-structured Angular 6 SPA whose plumbing leaks at every joint - an auth header discarded, PUT and DELETE that both GET, a paged result that starts empty. A tour of bugs that only survive because nobody ran the code.

Part 13 13 Oct 2025 6 min read

The Blazor App That Signs You Up Behind Your Back

DShop.Blazor is a Blazor 0.7 preview app whose naive choices - component classes as singletons, a silent auto-signup, a shared HttpClient - all work because of the runtime they run on. A study in patterns that are only correct by accident.

Part 14 20 Oct 2025 5 min read

A Pedagogy Ladder of Dockerfiles

DShop.Api ships three Dockerfiles - plain, multistage, and multistage.advanced - as a teaching ladder. The top rung is broken, and all three share an ENTRYPOINT that quietly defeats graceful shutdown.

Part 15 27 Oct 2025 5 min read

The Observability Stack of 2018

DShop wires Serilog, App.Metrics and Jaeger through one shared kernel, propagates a trace span on the message envelope, and hangs its Consul health check on an endpoint no controller defines. A tour of pre-OpenTelemetry observability.

Part 16 31 Oct 2025 7 min read

Cartography of an Estate

The retrospective that closes three series on DShop - the whole map drawn once, the services wired into nothing, the skew across seventeen repos, and what reading someone else's estate end to end actually teaches.