Raw Recruit
Commodore 64 - Raw Recruit
Manchester — twelve years of replacing paper with software
OneFile builds the software that apprenticeships and vocational training actually run on. A learner keeps a portfolio. They attach evidence to it — a photograph taken on site, a document, an observation written up by somebody who watched them do the thing. An assessor reads it and signs it off. And when an inspection comes, the whole trail has to be there, in order, and has to agree with itself.
All of that used to be paper. A ring binder per learner, carried out to a workplace and carried back again, and a filing cabinet somewhere holding the ones that mattered. Replacing that with something a person can carry in a pocket is the whole point of the company, and it is the sentence I would use if I had to explain the job in one line.
The company is in Manchester and has been for the whole time I have been with it. I joined in June 2014 and I am still there — twelve years, which makes it the second longest stretch on this site and the only one that has not finished yet.
June 2014 to now · Manchester · hybrid
iOS to begin with, written in Objective‑C. Cross–platform after that — JavaScript, AngularJS and Ionic — and the API work behind it in .NET and C#. Then Xamarin, and now .NET MAUI. The job title has stayed more or less still while almost everything underneath it has been replaced at least once.
What most people mean by OneFile is the web product, and it is a great deal larger than the app. It runs in a browser, it assumes a connection, and it covers the whole of what an organisation needs to run its training — far more than anybody would sensibly want to carry around on a phone.
The app is deliberately a part of that rather than a copy of it. It carries the things that have to work at the point where the work is actually happening: capturing evidence, and creating assessments and reviews. What it offers in exchange for the smaller surface is the one thing the web product cannot do at all — it works with no signal.
That trade is the whole design. The smaller surface is not a compromise, it is the point, and it is what lets the app promise something the larger product cannot. It is also why the few things it does carry are harder to build than the many it leaves out: everything in it has to survive being made on a phone that is entirely on its own, and be reconciled afterwards without anybody losing anything.
The interesting thing about twelve years on one product is that the product has outlived three of its own implementations. The thing a learner sees has been recognisably the same all the way through — their portfolio, their evidence, the assessor who signs it — while the code underneath has been rebuilt more than once.
It started native, in Objective‑C, on iOS only. That is the fastest a phone app gets and the closest you can sit to the platform, and the price is that everything is written twice the moment somebody wants it on Android. Then it became a web application in a native shell — Ionic and AngularJS — which is one codebase for both platforms and a different set of compromises: you get reach, and you give up some of the directness. Then C#, first with Xamarin and now with MAUI, which is where it lives today and which has the quiet advantage that the app and the API behind it are finally written in the same language.
None of those moves was fashion. Each one was a bet about where the platform was going, made with a product already in people’s hands and real portfolios already inside it — which is the part that makes it hard. A rewrite with no users is an exercise. A rewrite underneath live data is a migration, and the evidence a learner has already gathered has to come through it untouched, because it is their qualification and not your codebase.
Evidence is captured where the work happens, and the places where the work happens do not have signal. A building site. A commercial kitchen. A salon, a workshop, a ward, a farm. Somebody is standing in front of the thing they need to photograph, and there are no bars.
So the app is built around a working day rather than around a connection. In the morning, while there is still signal, an assessor takes down out of the main ePortfolio web product what the day is going to need — the people they are seeing, the assessments and reviews already in the diary, and the material all of that depends on. Then they go out.
For the rest of the day the phone is on its own, and it is not a lesser version of itself while it is. The items brought down that morning are worked through. Evidence is captured — photographs, video, notes written at the moment somebody actually did the thing. New assessments and reviews are created from nothing. None of it is a request queued up waiting for a network: it is all real, finished work, sitting in the phone’s own database and complete as far as the person who did it is concerned.
Then, whenever they are back in signal — the office, a car park, home that evening — the whole day goes up. What came down in the morning returns with whatever was done to it, and everything created out there is added to the web product as though it had been made there all along.
It is worth being plain about what the phone is talking to. The server is not a separate thing built for the app: it is the main ePortfolio web product itself, the same one an assessor would otherwise be sitting in front of in a browser. The app is that product’s offline subset, which means everything it sends has to land as a first–class part of it rather than as something bolted on beside it.
That last step is where the difficulty lives, and it is the standing problem of any offline–first application rather than anything peculiar to this one. A record has to have an identity before the server has ever heard of it, and another one once the server has. Keeping those two straight, and keeping every reference between records pointing at the right one, is most of what makes offline sync hard wherever it is done — and it is why the interesting work sits in the reconciliation rather than in the screens.
People assume mobile work is screens. Some of it is. But the thing that decides whether this particular app is any good is what happens at the edges — the sync that half finished, the phone that ran out of battery mid–upload, the record that was edited in two places before the two places had ever spoken, the migration that has to move a database forward a version without a single learner noticing.
It has more in common with the machines at Barcrest than it looks. Both are things where being approximately right is worthless, and where the correct failure is to stop and say so rather than to carry on and be quietly wrong. A gaming machine must never pay out when it is confused. An e–portfolio must never lose a piece of evidence, or attach it to the wrong person, and it must be able to prove afterwards what happened and when.
Before this came fourteen years at Barcrest in Ashton–under–Lyne writing gaming machines, and before that Software Creations in Manchester, where the Commodore 64 games on this site were written. The iPhone apps are what I do outside it.
The dates and job titles here are my own record. What the company does is described in my own words rather than its marketing, and nothing on this page is written on its behalf or discloses anything confidential — it describes my own work in general terms, and the engineering problems on it are ones common to the whole industry. If any of it reads wrong, tell me and I will put it right.