Selected work

Three summaries of the kind of job we take. Each client stays anonymous.

Delivery runs off a spreadsheet

The client: A building-supplies distributor with four depots.

The problem

Delivery runs were planned in a shared spreadsheet that three people edited at the same time.

The hard part

The spreadsheet held rules nobody had written down. We spent the first two weeks sitting with their dispatcher and writing them out.

Built with

TypeScript, PostgreSQL

  1. Orders from the accounts package
  2. The hard partPlanning screen
  3. Driver list
  4. Nightly export

One client list for nine clinics

The client: A veterinary group with nine clinics.

The problem

Each clinic kept its own client list, so an animal seen at two clinics had two records.

The hard part

Deciding that two records are the same animal. When the owner details disagreed, the pair went to a person.

Built with

PostgreSQL, Python

  1. Nine clinic exports
  2. The hard partMatching step
  3. A person confirms
  4. One client database
match.test.tsA test from the matching step. Different owners stay as two records.
test("holds on mismatch", () => {
  const a = { owner: "Pell" };
  const b = { owner: "Pell" };
  const c = { owner: "Hale" };
  expect(match(a, b)).toBe("ask");
  expect(match(a, c)).toBe("hold");
});

An invoice run that rounded differently from finance

The client: A training provider that invoices about forty employers each month.

The problem

The new billing screen totalled invoices a few pence away from the accounts package, and finance could not sign it off.

The hard part

Rounding. The accounts package rounded each line, and we had rounded the total.

Built with

TypeScript, Vitest

  1. Course bookings
  2. The hard partInvoice calculation
  3. Billing screen
  4. Accounts export
invoice.test.tsA test that pins the rounding. Each line first, then the total.
test("rounds per line", () => {
  const lines = [
    { net: 1999, vat: 0.2 },
    { net: 1001, vat: 0.2 },
  ];
  expect(total(lines)).toBe(3600);
});

Have a system in mind?

Describe your project