Testing the domain and use cases without mocks
In-memory fakes instead of mocks, tests that check state instead of calls, contracts shared between adapters, and the shape of the test pyramid in Clean Architecture.
Ports and adapters in TypeScript
An order use case with two ports, OrderRepository and PaymentGateway, an in-memory adapter, a Postgres adapter, and the composition root that wires them.
The dependency rule, without dogma
What the Clean Architecture dependency rule says, why the arrows point toward the domain, what goes in each layer, and the mistakes I see most often in TypeScript services.