June 2024Transitioning to Remote-First Team StructurePost-pandemic, our team was split between office and remote workers. The hybrid model created two classes of employees and made collaboration inconsistent. We needed to decide on a...
teamremote-workcultureprocess
Read decision
March 2024Adopting Event-Driven Architecture for Order ProcessingOur synchronous order processing pipeline was becoming a bottleneck. Long-running operations blocked the checkout flow, and failures in downstream services caused cascading issues.
architectureevent-drivenkafkascalability
Read decision
January 2024Choosing TypeScript Over JavaScript for New ServicesOur team was starting development on a new set of microservices. We needed to decide whether to use TypeScript or JavaScript for the codebase.
architecturetypescriptdeveloper-experience
Read decision
November 2023Implementing Feature Flags for Safer DeploymentsOur deployment process was all-or-nothing. New features went live to all users immediately upon deployment, making rollbacks disruptive and limiting our ability to test in producti...
deploymentfeature-flagsrisk-managementtooling
Read decision
September 2023Monorepo vs Polyrepo for MicroservicesOur microservices architecture had grown to 30+ services spread across separate repositories. Coordinating changes across services was becoming increasingly difficult.
architecturemonorepodeveloper-experiencetooling
Read decision
June 2023Choosing PostgreSQL Over MongoDB for New ServicesWe were designing a new service for managing customer subscriptions with complex billing logic. The team debated between PostgreSQL and MongoDB, which we had used for other service...
databasepostgresqlarchitecture
Read decision