Recurring commitments

A PM and a courier round are the same promise

A quarterly rooftop inspection. A twice-weekly cash collection from fourteen Amish businesses. A monthly backflow test. A Monday linen delivery.

Every one of those is a promise to show up at a place, on a cadence, and do a defined thing. They differ in frequency, in what gets delivered, and in whether the crew is pinned — not in kind. So they are one object here, not two families of table that drift apart for five years.

If a design needs a separate module for “service agreements” and another for “delivery routes”, it has not found the general case yet.

This is a module. It needs customers and sites, and it generates work onto the board. If your ERP already holds the contracts, we can take the sites and the cadence and leave the paper where it is.

One object, not two families

Same screen, same cadence rules, same generated obligations. The only difference between these two is the data in them.

The agreements list: a quarterly rooftop preventive maintenance commitment and a twice-weekly courier bank run, side by side in the same table.

A rooftop PM and a bank bag run, in one list, because they are one kind of thing.

🏭

Quarterly rooftop PM

Four times a year, at eleven sites, with a twenty-one day window on each because a PM in July is not a PM you do on a fixed Tuesday. Covered equipment, a labor rate, and what is included before anything becomes billable.

🚚

Twice-weekly bank run

Tuesday and Friday, forever, at two hundred stops. Generates around twenty thousand obligations a year from one schedule line — which is exactly why it had to be a cadence rule and never rows somebody types in.

One commitment carrying two cadence rules: one that may be moved within a window and one that is fixed.

One commitment can carry more than one cadence — one movable, one fixed. Medication does not slide; a pallet does.

A window, not a date

When a heat wave lands, PM work is what gets pushed. Every shop knows this. Almost no software knows it, so the schedule becomes a wall of red and everybody learns to ignore it.

So an obligation here does not have a date. It has earliest, target and due-by — and the system knows how far each one may move before a promise is actually broken.

Deferrability is a property, not a workaround

It is on the commitment from the first day, because it cannot be retrofitted onto a year of history. A quarterly inspection might carry twenty-one days of room. A bank collection carries none.

It reads back in English

The cadence rule is authored the same way everything else is — a sentence with blanks — and it says what it will do before you save it. “Every Tuesday and Thursday.”

A breach is recorded

Not prevented, not hidden — recorded. Because that is what an argument with a customer turns on a year later, and the honest answer is usually better than the tidy one.

The cadence rule dialog reading back in plain English: it will read as every Tuesday and Thursday.

It tells you what it is going to do, before it does it.

What we owe

One screen for the question an owner actually has: what have we promised, and how much of it are we about to miss?

The obligations screen: every obligation a commitment has generated, with its window and the number of days of room left on each one.

Past due, movable and must-happen, side by side — with the room left on every promise.

Obligations are generated ahead and released into real work when they are due. So the backlog is visible months out instead of arriving as a surprise on the first of the month, and the same list answers “can we take this new contract?”

Warned before the breach, not after

Bulk rescheduling is cheap here on purpose, because it is what actually happens in July. Tick fifty, move them by four days, and see every promise that would break before you break one.

The push preview: a list of every commitment the proposed move would breach, shown before the move is confirmed.

The breach preview. This is the screen that stops a dispatcher finding out in October.

A system that lets you move work without telling you what it costs is not being flexible. It is being quiet.

Who is covered and who pays

A commitment covers sites, and sites are backed by customers, and the customer backing a site changes — a managing agent loses the contract, a chain sells forty locations to another operator.

Resolved through a joinStamped as a value
Last year’s work silently changes owner when the contract moves. Last year’s work still names who it was done for.
Revenue by customer is rewritten by a data change nobody made on purpose. Revenue by customer is what it was on the day.
Nobody notices for a year. Nothing to notice.

So every document stamps the customer, the site and the relationship between them, as values, at the moment it is created. It is a small decision that is impossible to make later.

A quarterly rooftop PM commitment showing its covered sites, its cadence and the movability window on each obligation.

Coverage, cadence and the window, on one commitment.