Most of our clients arrive with a stack they're embarrassed about. Laravel feels old, Postgres feels conservative, React feels like 2018. They expect us to argue for something newer.
We almost never do.
The hiring argument
When the engagement ends, somebody else will own the code. Boring stacks have deeper hiring pools. The next senior engineer who picks up your codebase will be findable in six weeks instead of six months.
The on-call argument
Boring stacks have known failure modes. Postgres at 3am is a problem someone has solved before. Your custom event-sourcing layer at 3am is a problem nobody has solved before.
When we don't
When the problem actually demands it. We use Kafka when ordering matters across partitions. We use Rust when we need allocations to be a choice instead of a default. We use NATS when the back-pressure semantics of Redis Streams aren't enough.
Novelty has a cost. We're willing to pay it when the problem pays back.
