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.

Role
Backend engineer
Cloud
AWS
API
GraphQL
IaC
Terraform
Visit the product Index
Fig. 01. thewebcamlab.com, the platform this backoffice serves.

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.

AppSyncNestJSPostgreSQLCognitoTerraformEKS

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.