Archived
  • Node.js
  • Express
  • Stripe
  • PostgreSQL

Payments rebuild

Moving a live B2B product onto Stripe with zero downtime at cutover

Rebuilt payment processing on Stripe for a B2B SaaS product, deployed billing and inventory microservices, and migrated the data layer from flat files to PostgreSQL.

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.

30%faster API responses
40%faster incident resolution

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.