Bulkhead
One slow dependency should not be able to consume every thread you have. Bulkheads partition resources so a failure stays inside its compartment — and the hard part is sizing them, not building them.
21 patterns, written to be argued with
Not another patterns glossary. Each entry tells you when the pattern is the wrong choice, walks through working code, and links a live demo — so you can judge it before you bet a quarter on it.
One slow dependency should not be able to consume every thread you have. Bulkheads partition resources so a failure stays inside its compartment — and the hard part is sizing them, not building them.
You cannot atomically write to your database and publish to a broker. The Outbox pattern makes the message part of the transaction — and the trap is that at-least-once delivery is the ceiling, not a bug.
Protecting a service from too much traffic sounds like arithmetic. It is really a question about fairness, and the algorithm you pick decides who gets refused when the answer is no.
Replacing a legacy system by rewriting it has a poor record. The Strangler Fig replaces it incrementally behind a facade — and the reason it works is organisational as much as technical.
Ship a new version to a small slice of real traffic, compare it against a baseline on live signals, and promote or roll back on evidence — progressive delivery where the release decision is made by data, not by nerve.
The default data-access pattern as a deliberate choice, not an absence of one: what one shared model buys you, the four failure modes that eventually break it, and the signals you have outgrown it.