We chose ZeroMQ because we'd used it before and it was fast. We didn't choose it because it was right for our use case. By November it was clear that our message volume was hitting patterns ZeroMQ wasn't designed for. By December we knew we had to migrate. By January we had.

The Cost of Familiarity

The temptation to use familiar tools is strong in a startup. Velocity often trumps deep evaluation. But as we learned, the "velocity" gained by using a familiar but wrong tool is quickly erased by the drag of technical debt.

Practical Refactoring

The migration to RabbitMQ was painful but necessary. We had to rewrite large portions of our ingestion layer while keeping the production environment stable.

The lesson: Audit your foundations every month.If a core component is struggling, don't patch it. Replace it.