The situation
A staffing firm in Norway, running for years on a setup that had grown around them: a production server nobody dared touch, candidate records spread across spreadsheets, and a business that could not afford downtime. Then the server started failing.
They asked not to be named publicly, and we keep that. The work is described exactly as it happened, and we are happy to talk through the details on a call.
What was done
- Emergency recovery first. The failing production server and database were recovered with zero data loss. Stabilise, then rebuild, in that order.
- A custom recruitment and HR system on their existing Microsoft 365. No new per-seat platform, no new place for the data to live. The infrastructure they already paid for became the system.
- ~25,000 candidate records consolidated. Years of scattered spreadsheets pulled into one searchable database: deduplicated, synced, and owned by them.
- Branded candidate documents, generated automatically. The manual paperwork step disappeared.
What got built after the rescue
The rescue was the start, not the job. The firm needed a system, and the one built for them is in daily use now. A few pieces of it are worth describing here, because they answer the questions owners ask us most often.
- Everyone got their own view, and nobody pays for seats. Recruiters, HR, sales, the board, people brought in from outside and the workers themselves each open a different screen and see only their own work. Someone from outside fills in one form and sees nothing else. No licence was ever bought for them.
- Expiry dates watch themselves. Work permits and certificates raise a flag 180, 90 and 30 days before they lapse. And if the field that says whether someone even needs a permit is empty, the system assumes they do and flags it anyway. An empty field is the one most likely to bite you.
- Workers see their own side, never the firm's. Every worker has a private link that works on a phone: where they are in the process, their pay, their documents. What the firm charges the client does not appear anywhere in that portal, and the filter is checked twice, once on the screen and again on the server.
- Email stays where it already lives. The full mail history with a candidate shows on the candidate's card, but nothing is copied into a second database. It is searched live in the mailboxes the firm already owns. That is the answer when someone asks where their data ends up.
- Fourteen documents write themselves. Offers, employment contracts, client agreements, the certificate when someone leaves, and ten more. Each one fills itself from data already in the system, stays editable, and lands as a PDF in the right folder.
- Nothing goes out without a person. The automatic reminders were delivered switched off, and stayed off until the firm had read and approved every text they send. We build it, the client switches it on.
- The database stayed where it already was. Their records lived in the SharePoint they were already paying for, and that is where the records still live. The system reads and writes the same list that had always been the backbone. Nothing was migrated into a new home, and nothing sits in two places waiting to disagree with itself.
- One screen for what needs deciding today. Seven kinds of item, sorted by how urgent they are, each row linking straight to the place it gets handled. Four rows about the same person fold into one. It is the first screen an owner opens and usually the only one they need before lunch.
- Margin, a projection, and who is not earning this week. An owner watches two things: who is sitting on the bench right now, and what the next few quarters look like. The system answers both, by name for the first and twelve to twenty-four months out for the second.
- Candidates scored against a live vacancy, with a sentence saying why. The system ranks who fits an open role and writes one line explaining the ranking for each person. A recruiter can read the reason and disagree with it, which is the point. A score with no reason behind it is a black box, and nobody should trust one of those with a placement.
- Money advanced to a worker is tracked as a debt. When the firm pays for a course, a flight or a fee on someone's behalf, one action both charges it and records it. Small thing. Every agency that has ever fronted a cost and then tried to remember who owed what will recognise it.
Why this story matters if you're reading it
Every agency switching systems is afraid of the same thing: losing data on the way over. This project is the answer we point to. The messiest possible starting point (a dying server and 25,000 records in spreadsheets) came across with nothing lost.
The short version: failing server recovered with zero data loss, ~25,000 records consolidated into one system on their own Microsoft 365, records left in the SharePoint they already paid for, fourteen documents generating themselves, a view per role, expiry dates that watch themselves, and one screen showing what needs deciding today. Client name withheld on request; details available on a call.