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
  • 152 matching
Microservices 25 Oct 2025

The Grammar of the Estate

Pacco's naming system is consistent enough to parse - exchanges are bounded contexts, queue names spell their own bindings, commands and events conjugate in snake_case, and every command has a _rejected twin. Reading the estate as a language, including its irregular verbs and the fact that no grammar-checker exists.

Microservices 24 Oct 2025

The Repo That Runs the Other Twelve

Pacco's umbrella repository contains no code, yet it decides everything about how the estate actually runs - seven compose files in deliberate layers, two PM2 manifests that quietly forget the saga service, a 460-line docker run-book, and a .rest file that is the best onboarding document in the system.

Microservices 23 Oct 2025

Thirteen Repos and a Floating Version

Pacco is thirteen sibling repositories held together by a solution file of relative paths, clone scripts with a dual-branch habit, and 284 package references that all say 0.4.* - coherence by wildcard, with a name-squatted saga library and a README that forgot a repo along the way.

Microservices 22 Oct 2025

Identity in Fifteen Files

Pacco's Identity service fits its whole auth machinery - JWT issuance, a refresh-token aggregate, Redis deny-list revocation - in about fifteen files, and most of them are right. The three that aren't teach more - a mapper bug that leaves 202 callers polling forever, a dead password check, and a refresh token that never rotates.

Microservices 22 Oct 2025

Security Theatre and Security Reality

Pacco names every control - JWT validation, a Vault, a log scrub-list, admin-only routes - and then a sign-up body chooses its own role, the signing key lives in every repo, Vault is off in Docker and anonymous callers pass every ownership check. A governance read of which shortcuts survive copy-paste.

Microservices 21 Oct 2025

The Correlation Spine

One JSON blob born at Pacco's gateway rides the Correlation-Context HTTP header into services and the message_context AMQP header across the bus, surfacing in SignalR pushes - carried by a class copy-pasted into eleven repos and a broker that forwards exactly one header.

Microservices 20 Oct 2025

The 202 That Names the Future

Pacco's async gateway answers a POST with two names - the ID a resource will have and the operation that tracks whether it ever gets it. Following both through the Redis state machine, the saga header override and the per-user SignalR push, warts and all - a five-minute memory, a 404 with three meanings, and a status API anyone can read.

Microservices 20 Oct 2025

Two Push Channels, Two Security Models

Pacco's Operations service narrates the estate twice - once over SignalR with a JWT handshake and per-user groups, once over a gRPC stream with no auth, no filtering, a per-call event-handler leak and a blocking Take. Same data, same service, two security models.

Microservices 19 Oct 2025

A Gateway in YAML and Its Twin in Code

Pacco ships a second API gateway built on Ocelot that hand-rolls everything the Ntrada YAML declares - auth bypass, async bus routes, edge-minted IDs, correlation headers - plus the estate's only circuit breakers. It is instructive, revealing, and deployed by absolutely nothing.

Microservices 18 Oct 2025

One YAML Flag Turns REST Into a Message

Pacco's Ntrada gateway is ninety lines of C# and five hundred of YAML, and swapping one route key - use downstream for use rabbitmq - turns the same HTTP surface from a proxy into a bus publisher answering 202. The two compose files disagree about which one you get.

Microservices 18 Oct 2025

Subscribing to Everything Without Referencing Anything

Pacco's Operations service listens to all eighty messages in the estate while owning zero contract classes - it reads a JSON registry and forges the CLR types at runtime with Reflection.Emit. The estate's answer to the shared-contracts problem, and the drift it cannot see.

Microservices 17 Oct 2025

Two Gateways and a Nervous System

Thirteen repositories, one umbrella that runs twelve of them, two interchangeable API gateways and a service that watches everything - the Pacco estate read as a system of systems, and the fifteen-part series it earns.

Microservices 16 Oct 2025

One Request, Four Services

AssignVehicleToOrder is the one command in Pacco that cannot finish alone - Orders calls Vehicles, then Pricing, and Pricing calls Customers, a synchronous enrichment chain on the write path of a messaging estate. At the end of it sits a deliberately bus-less calculator with a loyalty ladder, an unassigned Id and a discount logged in dollars.

Microservices 16 Oct 2025

Rich Rules, Demo-Grade Data

The series retrospective - Pacco's domain teaches real rules (state machines, priority expropriation, loyalty ladders, compensations) on top of cardboard data (bare-decimal prices, one vehicle per order, size-cube parcels, no payment, and a capacity check that ships in two halves nobody ever connects). What to steal, what to distrust, and what fourteen parts of source-reading add up to.

Microservices 15 Oct 2025

Optimistic Concurrency That Never Says No

Availability guards every save with a version-filtered ReplaceOneAsync - and discards the result, so a lost update is indistinguishable from a successful one and the integration event ships either way. Three folders away, Orders and Customers inherit the same AggregateRoot name with the versioning quietly deleted.

Microservices 14 Oct 2025

CQRS at the Transport Layer

In Pacco the CQRS split is not a diagram - it is wiring you can read. Every command arrives through two front doors, RabbitMQ subscription and controller-less HTTP dispatch, while queries ride HTTP only; commands assign their own ids in the constructor, and a marker attribute turns each service into its own runtime contract registry.

Microservices 14 Oct 2025

The Outbox With Transactions Turned Off

Every Pacco service that enables Convey's Mongo outbox also sets disableTransactions to true - the aggregate write and the outbox write are separate operations, the pattern's one guarantee switched off in configuration. Meanwhile the inbox that would absorb the resulting duplicates sits beside three handlers that throw on them.

Microservices 13 Oct 2025

Three Ways to Borrow Another Service's Data

Four Pacco services need customer data and no two agree on how to get it - Orders and Parcels keep id-only replicas fed by events, Availability phones home mid-command, and Pricing pulls the full details document to count one number. One upstream, three consistency stances, five representations of the same entity.

Microservices 12 Oct 2025

Same Fact, Two Names

Inside the Customers service a registration completes - and the rest of the estate hears that a customer was created. Three lines of EventMapper perform the best ubiquitous-language translation in Pacco, sitting on top of a lifecycle state machine with one guarded transition and four administrative jumps.

Microservices 12 Oct 2025

The Parcel That Wouldn't Leave

Order.DeleteParcel raises a ParcelDeleted event and never removes the parcel from the set, while Parcels' cancel and delete handlers detach exactly one parcel of many. Two bounded contexts maintain the same association independently, both with bugs, and end up permanently disagreeing about a fact.

Microservices 11 Oct 2025

Rejected Events and How They Rot

Convey's IRejectedEvent gives Pacco an application-level negative acknowledgement - a rejected twin for every command. Reading the four exception-to-message mappers shows the pattern decaying in four different ways, from a failed reserve announced as a failed release to rejection classes nothing ever constructs.

Microservices 10 Oct 2025

Correlation by Natural Key

Availability's ResourceReserved event carries no order id, no correlation id, no saga id - just a resource and a date. Orders finds the right order anyway, by treating (vehicleId, deliveryDate) as the correlation key, and the expropriation flow shows exactly when that key stops being unique.

Microservices 09 Oct 2025

A Checkout With No Conductor

Pacco's flagship flow reconstructed from source - a vehicle is assigned, a reservation lands, an order approves itself, and when a VIP bumps the booking the cancellation ripples through three services with no process manager in sight.

Microservices 09 Oct 2025

One Event, Five Contracts

Every transition of Pacco's Order raises the same domain event - OrderStateChanged - and a mapper switches on aggregate status to mint five distinct integration events. A content-based router keyed on state, weighed honestly.

Microservices 08 Oct 2025

The Reservation That Bumps You

Availability's Resource aggregate enforces one real business rule - a higher-priority reservation evicts yours and announces it. The invariant, the struct value object behind it, and the day-integer it becomes on disk.