com Computing Ltd Start a conversation
Case study

BookKept, in 48 hours

An email on the Tuesday. A working platform by Thursday night.

The site says one person, the output of a team. This is the case I would point at if somebody asked me to prove it.

It started with an email. A recruitment agency wrote to me about something else entirely, and buried in the reply was a description of how they handled compliance: spread across a payroll provider, an adviser, a spreadsheet and somebody's memory. Nobody held the proof in one place. They were not complaining. They thought that was normal, and for their part of the market it is.

I am not naming them, and there is nothing here from their business. The idea came from the shape of the problem rather than from anything they told me.

I started that night. The first commit is 23:16 on the Tuesday and the last one before writing this is 23:39 on the Thursday. That is 48 hours and 23 minutes end to end across three calendar days, and obviously I slept in the middle of it. Call the hands-on time somewhere around thirty-six.

0
Commits, over three days
0
API endpoints, across 38 controllers
0
Tests, green against a real database
0
Database migrations
§ 02

Thirty seconds

Made for the product's launch. It lives here now.

Built as its own document so it can be screen recorded, dropped into a deck, or embedded here without depending on the application it advertises.

§ 03

How it went, in order

Same six stages as any project. The stages did not get skipped, they got shorter.

  1. 01

    Requirements, from the law rather than from a client

    There was no brief, so the specification came from the statute: what a UK agency placing contractors must be able to evidence, and when. Key Information Documents under regulation 13A, right-to-work records, the AWR twelve-week clock, self-billing under HMRC Notice 700/62, the quarterly intermediaries return, and joint and several liability for an umbrella's PAYE.

    Out: a written scope, and a decision that the product is the join between those records rather than any one of them.

  2. 02

    Architecture, decided before the first table

    Multi-tenant from the first migration, because retrofitting tenant isolation is a rewrite. Every compliance act writes a hash-chained audit event, so the evidence cannot be edited after the fact. Compliance rules ship as dated configuration with a source URL rather than as code, because the statutory ground moves twice before 2028 and a hard-coded rule becomes a lie on a known date.

    Out: twelve written rules the whole build is held to, including one that says the system never moves money.

  3. 03

    Build, widest first

    Schema, then the domain, then the four faces on top of it: a staff desk, a client portal for approvals, a worker portal, and a public job board. Each face reads and writes the same record, so nothing is reconciled afterwards. The money side came last because it depends on everything above it: an approved week becomes both a self-billed purchase invoice and the agency's own sales invoice, on separate sequential series.

    Out: 201 endpoints, 23 screens, 41 migrations.

  4. 04

    Testing, against a real database and a real door

    612 tests, none of them against mocks where the thing being tested is the database. Two of them drive a real server over HTTP with nothing but an API key, because a test that sets the tenant itself proves nothing about the door that faces the internet.

    Testing is also where three compliance rules turned out to be wrong. I had taken them from a conversation rather than a source. One had the right duty on the wrong date by a year. Another described a legal defence that does not exist in those rules at all. A model wrote all three confidently, and only going back to the legislation caught them.

    Out: a suite that fails loudly, and a rule that compliance claims cite a source in the code beside them.

  5. 05

    Expanding, once the core held

    The first version assumed an agency would move in. Most will not, so the product grew a second shape: a compliance layer that sits beside the CRM they already run. That meant a scheduled file drop needing no developer at all, an importer that learns what their own column headings mean and remembers, scoped API keys per area, and connectors for the two CRMs in this market that publish a way in.

    Out: three ways in, only one of which needs a developer.

  6. 06

    Launch, which is a build too

    A product nobody can evaluate is not finished. So: the marketing site, an API reference with a real request and response body on every endpoint, eleven guides on the law itself, the thirty-second film above, and a demo door that opens a working agency with no account and no email address.

    Out: live at bookkept.co.uk, indexed, and open to anyone who wants to poke at it.

§ 04

What is still open

Grouped by what it is actually waiting on, because that is the useful part.

Waiting on somebody else

  • Bullhorn issues credentials per customer, not per application. I found that halfway through writing the connector. It is not a delay, it is a different design: the keys have to be held per agency, which is a schema change and a screen, so the connector is written and deliberately stopped rather than half-finished.
  • JobAdder is a partner registration a human reviews. I had recorded it as self-serve, checked, and found it was not. Applied, waiting.
  • Everyone else in this market publishes no way in at all. Vincere, Eploy, itris, Access, ETZ, RSM InTime, Sonovate. That is why the file drop exists and why it was built first.

Waiting on contact with reality

  • The JobAdder connector has never run against the live API. Its field names come from documentation. The first real call will need corrections, and I would rather say so than let somebody discover it.
  • No agency has put a real book through it. Everything here is built and tested. None of it is proven by use, and two days is not enough to learn whether it is the right thing.
  • The compliance rules need re-checking as the ground moves. Right to work changes on 1 October, umbrella regulation lands under ERA 2025, and the Make Work Pay consultation reopens the Conduct Regs. The rule packs are dated so that is a data change rather than a rewrite, but somebody still has to read the statute.
  • Two duties I had encoded turned out not to be in the instrument. A re-read on the fourth day found the product asserting a facial-image record and a supply-chain statement that could not be evidenced against SI 2026/700 as published, the draft Home Office guide, or practitioner commentary. A compliance product telling agencies a duty exists that its own migration had switched off is worse than a bug, so three public pages and four internal documents were corrected the same day. This is the argument for dated rule packs made against my own work.

Known, and deliberately parked

  • One screen is dense and needs a design decision. The talent pool works and is not right. Fixing it means deciding what a candidate row should say, which is a judgement rather than a bug.
  • The schedulers assume one instance. Fine today, wrong the moment it scales, and written down at the point in the code where somebody would otherwise find out the hard way.
  • Provider tokens use one encryption key with no rotation path. The envelope is versioned so a key id can be added later. Saying that plainly is the point: it is a known limit, not an oversight.
  • It is hosted in a United States region. For UK personal data that is a restricted transfer, and it has to move before any agency loads a real book. It is written into the privacy notice and the processing agreement rather than left to be discovered, because a clause somebody finds after signing is the expensive kind.

Two days is enough to build the thing. It is not enough to know whether it is the right thing.

Every item above was found by looking, not by waiting for somebody to complain. That is most of what the last few hours were spent on.

§ 05

Why this matters if you are hiring

The estimate you were given is probably wrong.

The claim is not that software is easy now. It is that the distance between an idea and a working system has collapsed for somebody who already knows what the system needs to be.

Nine years in banking is most of it. I have built the regulated version of nearly every piece of this before: the audit trail, the money that has to reconcile, the document that has to be issued before a date rather than after. AI does the typing. It does not do the deciding, and the deciding is where this would have gone wrong three times over.

If you have an idea sitting in a document because the build looked like six months and three people, it is worth asking again. Bring me the email you have not acted on. corey@comcomputing.im.