Distributed backoffice. Byte4Bit. AppSync, NestJS, Terraform, EKS.
TWLPro
A backoffice platform migrated to microservices on AWS, with an orchestration layer coordinating headless extractors that feed reporting, payroll, commission and payment pipelines.
The problem
The platform had to serve a backoffice with very different read shapes, and to keep pulling data out of external systems that offer no API at all.
I helped migrate it to microservices on AWS with AppSync GraphQL, NestJS Lambdas, PostgreSQL, Cognito and Terraform, and helped build the orchestration layer that coordinated Puppeteer extractors on EKS and fed the reporting, payroll, commission and payment pipelines.
One GraphQL contract for many read shapes
A backoffice asks for wildly different slices of the same data. AppSync gave the clients one surface instead of a REST endpoint per screen.
Extraction isolated from the request path
Headless browser work runs on its own schedule on EKS, so a slow or blocked extractor never becomes a slow page.
Infrastructure that can be rebuilt
Terraform means the environment is a reviewable artifact rather than a sequence of console clicks nobody remembers.
Decisions and the price I paid for them
AppSync GraphQL as the client contract
A backoffice screen usually needs a different projection of the same entities. One schema absorbed that variety without growing an endpoint per view.
Trade-off accepted
Query cost and resolver depth become things you have to watch, and a careless client can ask for something expensive.
Extractors on EKS, everything else on Lambda
Headless browser sessions are long-running and memory-hungry, which is the shape Lambda is worst at. Putting them on EKS kept the rest of the platform serverless.
Trade-off accepted
Two runtime models to operate and reason about instead of one.
Orchestration between extraction and the pipelines
Reporting, payroll, commission and payment all consume the same extracted data. A coordination layer meant they could not each invent their own scheduling.
Trade-off accepted
The orchestrator becomes a component that matters, with its own failure modes to design for.
