Designing a job that repeats: every four weeks, for years
A window clean happens again and again. May 2024 was about designing a job that repeats: its frequency, its next-due date, and what happens when it is paused or skipped.

Part 6 of 39 of Building TradeYoke, the story of how the platform was built, from January 2024 to today. Previous: The customer record a window cleaner actually needs. Next: Why we published our terms and privacy notice from the start. See every part on the build timeline.
Quick answer
Quick answer: A repeating job in TradeYoke carries its own schedule (every N days, weeks or months, optionally on a weekday), a next-due date and a last-completed date, and can be paused or cancelled with a reason. Each job has a short reference such as WC-4F2A that never renames itself, even if it was created offline.
Key takeaways
- A repeating job stores its rule (every N days, weeks or months) and its next-due and last-completed dates.
- Pausing and cancelling take a reason, so the history makes sense later.
- Each job has a short derived reference, such as WC-4F2A, that never changes.
The job is the unit of work
With the round and the customer sketched out, May 2024 was about the job. A job is one piece of work for one customer at one address. For a window cleaner that is usually the same job coming back round: this address, this price, every four weeks.
One shape for every kind of job
We settled on one shape for a job, and the same shape is used across the trades that came later. It has a customer, a site address, a status, and either a single date or a repeating schedule. The repeating schedule is expressed the way people say it: every N days, weeks or months, optionally on a particular weekday. The job also carries when it is next due and when it was last completed.
Why store the rule and the dates
You can work out the next clean from the last one and the rule, so it might seem enough to store only the rule. We store both, for a practical reason. When a clean is skipped for rain, the next one should be "four weeks from when it was actually done", not four weeks from when it was supposed to be. Keeping the last-completed date separate from the rule means the schedule follows what really happened.
Pause, cancel, skip
Real rounds are full of exceptions. A customer is away for a month. Another has stopped using you. A third has asked you to skip this time. So a job can be paused or cancelled, and both ask for a reason, which is kept. A single visit can be skipped with a reason without ending the job. These reasons are not paperwork for its own sake. A year later, "paused: away until September" is the difference between a customer you meant to come back to and one you forgot.
A reference that does not rename itself
Every job gets a short reference such as WC-4F2A, made from its type and a short code. We derive it from the job's own identity rather than from a counter held in one place, which matters for the offline case: a phone with no signal can create a job without clashing with one created in the office, and the reference does not change when the two meet.
What we left for later
Payment on a visit, an invoice at the end of the month, a quote that turns into a job: all of that attaches to the job. We deliberately did the job first. The next articles, from July, are about getting real customers and jobs working end to end.
Questions people ask
How do repeating jobs work in TradeYoke?
A job carries a repeat rule (every N days, weeks or months, optionally on a weekday), a next-due date and a last-completed date. The diary projects future visits from that rule.
What happens if I pause or cancel a repeating job?
Both ask for a reason, which is kept on the job. A single visit can also be skipped with a reason without ending the job.
Try it on your own week
30 days of Essentials free, no card. Bring your customers and see it against a real week.


