A B2B SaaS product with live SMB customers, running on a legacy payment system and flat-file storage. Three pieces of work over one summer, in the order they had to happen.
Payments
Integrating Stripe to replace the legacy system, which meant secure credit card transactions for the first time. The constraint that shaped the work was the cutover: real customers were transacting throughout, so the migration had to land with zero downtime rather than in a maintenance window.
Services
Billing, inventory management and workflow automation became separate backend services on Node.js and Express with a RESTful API design. Each one deploys independently and fails independently — a fault in workflow automation does not take billing with it, which in the previous shape it would have.
Storage
The flat-file layer became PostgreSQL: normalised schemas, composite indexes on the access patterns that mattered, and a rewrite of the N+1 queries the old shape had made inevitable.
The second number came from structured logging rather than from the database work. Being able to search logs by request instead of reading them by eye is most of what "resolved faster" means in practice.
