Skip to content

Work

Work note 04 of 04

Shipping while the requirements kept moving

A legal-agreements platform built against unclear and shifting requirements, inside an ecosystem of older systems that could not be changed — where planning for the uncertainty beat trying to eliminate it.

Context
B2B platform issuing legal agreements, with an incentive structure for resellers
My role
Senior engineer, integrating into an existing ecosystem
Status
In pilot, with the first two production markets next.
Stack
  • PayloadCMS
  • TypeScript
  • Kubernetes

The system issues the legal agreements used to incentivise resellers to sell more, and it had to handle up to millions of agreements. Four things made it awkward, and only one of them was the backend:

  • the requirements were unclear and kept changing;
  • it had to fit into an ecosystem of much older applications that could not be changed, and that exchanged data in non-standard ways — one interface is a CSV-like text file in a custom format;
  • the PayloadCMS admin interface had to be customised to match the client’s branding;
  • and the backend had to stay performant at that volume.

The first attempt, and why it failed

The instinct was to plan it out properly first. That turned out to be mostly wasted effort.

Surprising facts kept surfacing that the client had not been able to produce earlier — not withheld, simply not known yet. Each one invalidated part of a plan that had been built on the assumption the picture was complete. The problem was never that the planning was done badly; it was that it had been treated as a phase with an end.

What worked instead

Planning for the uncertainty rather than trying to eliminate it:

  • staying flexible where change was likely, and committing only where it was not;
  • building basic proofs of concept early, to turn open questions into answered ones before anything was built on top of them;
  • designing for a high iteration speed, so that being wrong stayed cheap;
  • and deliberately clear communication with everyone involved — checking an interpretation with the client before building on it rather than after.

The last one is not a soft skill standing next to the engineering. On this project it was the main mechanism by which the engineering stayed pointed at the right thing.

What it generalises to

When requirements cannot be pinned down, the mistake is not the plan — it is treating planning as a phase that ends. Some uncertainty is not a failure of analysis; it is a property of the situation, and the design has to absorb it.

Ways of working either enable a team or quietly consume everything it produces. And past a certain point the communication is not overhead on top of the engineering. It is what determines whether the engineering was aimed correctly in the first place.

Have a problem that looks like one of these?

Describe what you are building and where it currently hurts. A straight answer follows — including when I am not the right fit.