Case Study · B2B SaaS · Research & Product Design

Workshop
OS

WorkshopOS is software for car repair shops. Today a single repair gets diagnosed by a mechanic, scribbled on paper, texted to whoever orders the parts, then typed into a spreadsheet days later. Three places, three chances to lose it. I designed one system where all of it hangs off the job itself.

Open the live prototype
The WorkshopOS work order for JOB-10482, a 2019 BMW 320d registered 191-D-12345. A ten-stage status rail runs from Booked to Completed with Awaiting parts current, an amber banner reads Blocked on 1 part, and a right-hand rail shows the assigned technician, bay and a financial summary totalling €1,188.18 including VAT at 23%.
Role
Sole designer. Research, UX, UI, and the working prototype
Type
Self-directed. Three interviews with workshop owners shaped it
Status
Working interactive prototype. Not yet usability-tested
Focus
How the information is structured, and who gets to see what
01 The problem

These shops weren't short of software. They were short of one place to put things.

A repair starts as a mechanic's diagnosis. It becomes a handwritten note. Then a WhatsApp message to whoever orders the parts. Days later somebody types it into a spreadsheet. By then the spreadsheet and the note disagree, and nobody is quite sure which one is right.

How I looked into it

I sat down with three independent workshop owners, twenty to thirty minutes each. I never asked them about software. Ask people what features they want and you get a feature list. I wanted to know how the work actually moves through a shop.

  1. Walk me through what happens when a customer brings a car in.
  2. What happens after the mechanic finds a problem?
  3. How do you know which parts need to be ordered?
  4. How does the information eventually become an invoice?

What I found

Owner 1

Keeping everyone updated

They ran the shop on spreadsheets, paper, phone calls and texts. They never once called it a software problem. What they described was having to keep everyone updated, all day long. Writing things down was never the hard part. Keeping every copy of it in agreement was.

Owner 2

The parts bottleneck

Diagnosis goes to the manager. Manager checks the shelf. Shelf check goes to a supplier. Somebody places the order. Meanwhile the mechanic stands around. Five hand-offs, and each one can go wrong: the wrong part, the same part ordered twice, or nobody remembering which car it was for.

Owner 3 · proved me wrong

Already organised

This one proved me wrong, which was the most useful thing that happened. I had assumed every workshop was drowning in spreadsheets. Theirs worked fine. The systems just didn't talk to each other.

That third conversation changed the brief. I stopped designing a replacement for spreadsheets and started designing something to cut the number of times a job has to change hands.
02 My thinking

Everything hangs off whatever you put at the centre.

If hand-offs are the problem, the system has to be built around the thing being handed off. I had three candidates. This is the one decision that shapes every screen after it, so it was worth slowing down for.

Considered

Customer-centred

Fine for a contact list. But a customer isn't a piece of work, and the floor doesn't run on customers.

Considered

Vehicle-centred

Good for service history. Misses everything happening around the car: who is on it, what it costs, whether it is stuck.

Chosen

Work Order-centred

One customer owns several cars. One car comes back many times. The job is the thing happening right now, which is what everyone is actually asking about.

So the job became the spine. Parts attach to it. Hours attach to it. The diagnosis attaches to it. When it is time to invoice, the invoice is already sitting there, built from what everyone did, instead of somebody retyping it off a note.

The decision I reversed

My first version made the admin dashboard the main event, with the mechanic's workflow tucked inside it as a section. That was wrong, and why it was wrong turned out to be the most useful thing I learned on this project. A manager opens the app asking "what's happening across the whole shop?" A mechanic opens it asking "what's happening with this car?" No single screen can answer both of those first.

So I rebuilt it as a separate experience per role, all running on the same data underneath. That is the decision that produced the permissions model further down this page.

The workshop overview: a metric strip reading 21 jobs today, 8 in progress, 4 awaiting parts, 2 completed, €1,744 invoiced today and €1,973 parts spend, above a list titled Jobs that need a decision showing vehicles with the reason each is blocked.
Across the workshop

The manager's question, answered first thing in the morning. The list leads with whatever is blocking a bay.

This vehicle

The mechanic's question, on a tablet next to the car.

Principle

A mechanic should be working on the car, not running the business.

So their screen is stripped back on purpose. Jobs, diagnostics, repair steps, parts requests, notes, photos, status. That is the whole thing. No revenue, no staff rotas, no payroll, no settings. Those are not hidden for security reasons. They are absent because they belong to somebody else's job, and every extra row is one more thing to scroll past while you are holding a torch in your other hand.

It answers five questions and then it stops:

  1. What vehicle am I on?
  2. What's wrong?
  3. What needs repairing?
  4. What parts do I need?
  5. What's next?
03 The business

Every time a job changes hands, it costs the shop money.

Who it is for: independent mechanics and small multi-bay garages currently holding together a diagnostic tool, a pad of paper, a phone, a spreadsheet and some accounting software with nothing but memory. The pitch is deliberately narrow. Connecting those five things is the entire product, because the gaps between them are where a shop quietly loses money.

It also has to work for the person using it, not only the person buying it. The owner gets oversight. The mechanic gets speed. Plenty of shop software gets sold to an owner and then quietly resented by the floor, and I did not want to design that.

One thing I held back on: AI. I could have put it on the front of the box. But what this actually does is connect steps that were already there, and calling that AI would have made the pitch trendier and the promise vaguer.

The WorkshopOS marketing site hero: the headline Diagnose. Repair. Manage. All connected. in heavy type on a dark graphite background, beside a photograph of a technician leaning into an engine bay with a work light.
Positioning

The headline uses the words a mechanic would use. Feature detail waits until further down the page, once the plain-English promise has landed.

04 The users

Seven roles, because a garage is not one job.

The interface changes depending on who signs in. This is not a personas slide bolted on at the end. It comes straight out of the two questions I kept hearing: what is happening across the shop, and what is happening with this car.

Owner

Money, people, throughput. Everything.

Workshop Manager

The floor: jobs, bays, technicians, parts.

Service Advisor

The customer conversation and the estimate.

Parts Manager

Stock, suppliers, purchase orders, goods in.

Technician

Assigned jobs, diagnostics, parts requests, notes.

Accountant

Invoicing, payments, VAT, financial reporting.

Receptionist

Bookings, check-in, keys, phones.

Customer

Where is my car, what will it cost, approve it, pay.

The roles and permissions screen: a table of the seven roles with the number of permissions each holds and whether it lands in the admin or technician app, above a grid of permission checkboxes grouped under Jobs and workshop, Customers and vehicles, Parts and purchasing, Money and Administration.
Roles and permissions

Twenty-one permissions, set per role rather than hardcoded per person. Untick one and the navigation changes for everyone in that role straight away, no reload. It is wired up rather than drawn.

05 The constraints

The biggest constraint was hardware I could not build.

A real version of this plugs into a diagnostic scanner, speaks the car's own protocols, and pulls manufacturer data. I could not build any of that, and chasing it would have eaten the time I needed for the actual design question. So the scan is simulated. The flow runs end to end, and the product says plainly that no physical scanner is involved.

I was testing the workflow and the way the information is organised. The car electronics were somebody else's problem.

The diagnostics tab: a dark scan console showing the AutoScan Pro X1 connected to the BMW with its VIN, odometer and battery voltage, a module list with two faults on the engine control module, and three stored fault codes — P0401 exhaust gas recirculation flow insufficient at medium severity, P0302 cylinder 2 misfire at high, and B1234 climate control sensor fault at low.
Simulated scan

I styled the console like a piece of workshop equipment rather than a web dashboard. Mono type, dark field, a scan line that sweeps. It stands in for a physical tool, so it should look like one.

Fault code P0401 expanded into a recommended repair: a plain-English explanation of the fault, a card headed Replace EGR valve and gasket listing the two parts required with their stock levels, 2.5 hours of labour at €75 per hour totalling €187.50, a technician note, and a button reading Add repair to work order. Freeze frame data sits alongside.
Fault code becomes priced repair

This is the hinge the whole product turns on. The fault code already knows its repair. The repair already knows its parts. Those parts get checked against the shelf before anyone has typed a thing.

A Source part dialog for the EGR valve showing zero in stock, and three supplier offers compared side by side with trade price, delivery time and depot stock — AutoParts Direct at €295 tomorrow marked best price, Nordkamp Parts Group at €281 in four days, and Elite German Spares at €309 in two days.
Supplier comparison

"Out of stock" turns into a choice with three prices and three delivery dates on it. No ringing round.

Purchase order PO-1028 to AutoParts Direct, pending approval, listing an EGR valve and gasket against job JOB-10482 with goods, delivery and VAT totalling €402.21, an approve and reject action, and a progress rail from Raised through Approved, Sent to supplier and Received.
Purchase order

It still carries the job number it came from, so booking the part in unblocks that exact car.

The inventory dashboard: metrics for 50 part lines, 13 low stock, 2 out of stock, 7 on order, €13,966 stock value at cost and €22,961 retail value, above a table of parts with part numbers, free and reserved quantities, stock status, bin location, cost, price and margin.
The shelf, as the system sees it

Stock gets reserved against the car that needs it, so a part cannot quietly end up on the wrong vehicle. That is Owner 2's duplicate-order problem, designed out instead of warned about.

What I deliberately cut

None of these are unfinished corners. I cut each one to protect the flow that mattered most: diagnose it, repair it, get the parts, buy the parts, finish the job, send the invoice.

The responsive portal

Where the car is, what was found, what it costs including VAT, and a button to approve.

The workshop floor screen: eight bay cards showing which vehicle and technician occupies each, one bay blocked for brake tester recalibration, and a side panel listing vehicles waiting for a bay that can be dragged onto one.
The floor

Managers describe their shop as bays, so the screen shows bays. Drag a waiting car onto a free one.

06 Projected impact

These are targets, not results.

Read this part carefully. I have not run a usability test, and this has never run in a real garage. Every number below is a goal I designed towards. Not one of them is something the product has achieved, and not one came off anybody's shop floor. I have put the reasoning under each so you can disagree with it.

The bet: this works if it cuts the number of times a job has to be handed from one person to the next between diagnosis and payment.
Projected target 5 → 1

Manual handoffs per job

Why

Owner 2 walked me through five hand-offs between finding a fault and ordering the part. Wiring diagnosis straight into parts and purchasing collapses those into one system. Whether it really lands at one is exactly what a pilot would tell me.

Projected target Same day

Time from diagnosis to parts ordered

Why

The parts request is generated from the diagnosis itself, so it stops waiting on a person to turn one into the other. Plausible mechanism, still an untested claim.

Projected target ↓

"Awaiting parts" dwell time

Why

Stock levels and supplier delivery dates appear at the moment of diagnosis, so the back-and-forth that stretches this state has nowhere to happen. How much shorter, I would need real shop data to say.

Projected target ↓

Information-sync errors

Why

Wrong parts, the same part ordered twice, a job status nobody has updated. One job record that everyone reads from removes the disagreeing-spreadsheet problem Owner 1 described.

Projected target Faster

Invoice turnaround

Why

Parts and hours are already sitting on the job, so the invoice is built from what is there instead of retyped. That should shorten the gap between finishing a car and getting paid for it.

If this ever gets built for real, these five are what I would measure. Today they are hypotheses with reasoning attached, and nothing more than that.

Validation plan · what's next

The next step is to sit down and watch someone use it.

I would take the prototype back to the same three owners. Not a demo. A task:

A 2019 BMW arrives with an engine warning light. Diagnose it, identify the repair, request the parts, and prepare the job for invoicing.

Then stop talking and watch. What people say about an interface and what they do with one are two different things:

Whatever comes back changes the structure, and probably some of my better-looking screens.

A feature section from the marketing site headed A screen for hands that are already busy, describing the technician view, paired with a photograph of a technician working under a raised car with the tablet interface overlaid on it.
Marketing · feature showcase

Every claim on the marketing site sits next to the screen that backs it up, so the pitch and the product cannot drift apart.

The short version

I didn't start by designing a dashboard.

I started by asking three people how their shops actually run. The problem turned out to be hand-offs, not software. Everything after that followed from putting the job at the centre: diagnostics wired to parts, parts wired to purchasing, and a different screen for each role sitting on the same data.

That is WorkshopOS.

Central object Work Order Roles 7 · 21 permissions Surfaces Admin · Floor · Portal · Marketing Status Interactive prototype

Go and poke at it. The sign-in page lists seven demo accounts, one click each, with the password printed underneath. Sign in as the Owner and you get the whole shop. Sign out, come back as a Technician, and watch how much disappears. That is the permissions model, and it takes ten seconds to see.