How to Build a Skills Matrix for a Small Shop
Why this matters
Nearly every shop that builds a skills matrix builds one too big, rates it once, and never opens it again. Six months later it is wrong in ways nobody can see, which is worse than not having one, because dispatch is now making decisions off a document that quietly stopped being true.
A matrix in a shop with three to eight field people is not an HR artifact. It is an operating instrument with two jobs: tell dispatch who can be sent to what, and tell you which single points of failure to close next. Everything that does not serve one of those two jobs is weight, and weight is what kills it. This article is about sizing it so it survives a busy week and reading the coverage math it produces. For the base build sequence, see the sibling article in References.
Step 1: Set a row budget before you list a single skill
Decide up front how many rows the sheet gets. For a shop of three to eight field people, 18 to 25 rows is the working range. Under about 15 the matrix is too coarse to drive a dispatch decision. Over about 30 it stops being maintained, which is the only failure that actually matters.
The budget forces the right conversation, which is granularity. Every skill you can name splits into three finer skills, and each of those splits again. The test for whether a row deserves to exist is a single question: would a dispatcher route a call differently based on this row alone? If two rows always move together in dispatch, they are one row. If a row has never changed how a call was assigned, delete it.
The failure mode is the 60-row matrix built by listing everything the trade contains. It is complete, it is accurate on the day it is written, and it takes ninety minutes to re-rate, so it gets re-rated never.
Step 2: Weight the rows by what your board actually produces
Pull your trailing 90 days of completed calls and mark each row with how often the work behind it comes up: daily, weekly, monthly, or seasonal. That single column changes how you read everything downstream.
A skill that appears daily and has one qualified person is an emergency. A skill that appears twice a year and has one qualified person is a scheduling note. Both are single-deep, both look identical on an unweighted sheet, and treating them the same is how shops burn their limited training capacity on the rare thing while the daily exposure sits open.
Seasonal rows deserve their own mark rather than being folded into monthly, because their risk is concentrated. A skill that runs 40 times in two months and not at all for the other ten is effectively a daily skill during those two months, and the coverage you needed had to exist before the season started, not during it.
Step 3: Use a scale where every level maps to a dispatch action
Four levels, and each one is a sentence about what you are allowed to do with that person, not an adjective about how good they are:
| Level | Meaning | What dispatch may do |
|---|---|---|
| 0 | No exposure | Do not send. Not even as a second person on a hazardous task. |
| 1 | Has seen it done | Send only as the second person with a qualified tech present. |
| 2 | Does it with support | Send alone on routine instances, with a named person reachable by phone. |
| 3 | Does it unaided, can teach it | Send alone on anything, including the ugly version. Can carry a learner. |
Level 3 folding "can teach it" into the same rung is deliberate and it is the most useful thing on the sheet. Teaching capacity is your real training bottleneck, and if it is not visible on the matrix you will keep discovering that the only person qualified for a skill is also the only person who could teach it and is also fully booked. Some shops split this into 3 and 4. Splitting is fine as long as you accept that a level-3-not-yet-teaching tech does not relieve the training constraint at all.
Rate against the level definitions with the tech in the room, and rate against the ugly version of the job, not the clean one. Nearly everyone is a 3 on the clean version. The level is set by what happens when the equipment is unusual, the access is bad, and the customer is standing there.
Step 4: Read the coverage, not the cells
The grid is not the output. The coverage count per row is the output: how many people are at level 2 or higher, and how many are at level 3.
Set a target per row, tied to the frequency column:
- Daily and weekly rows: at least two people at level 3. Nothing that touches your board every week may sit one-deep.
- Monthly rows: one at level 3, one at level 2 working toward 3.
- Seasonal rows: two at level 3 before the season opens, not during it.
- Anything with a real hazard (gas, water plus electricity, stored energy, height): two at level 3 regardless of frequency, because the cost of the single point of failure here is not a delayed call.
Now count the rows that miss their target. That count, not the grid, is the number you manage.
Step 5: Convert the thin rows into a pairing plan you can actually staff
Take the failing rows, sort by frequency, and take the top three. Not the top ten. Three is what a small shop can move in a quarter, and a plan for ten is a plan for zero.
For each of the three, name: who is moving up a level, who is teaching them, and roughly how many supervised instances it takes. Then check that against your teaching capacity, because that is where the plan usually dies. If your only level-3 on a skill is also your busiest tech, the honest options are to protect a small number of their calls for teaching, to hire the coverage, or to accept the exposure knowingly. Writing the plan without checking capacity is how you end up with the same three rows failing next quarter.
Step 6: Update on events, never on a calendar
An annual review is where matrices go to die. Update on five triggers instead, each of which takes under two minutes:
- A tech completes a supervised instance that closes a sign-off. Move the cell.
- A tech is hired, leaves, or gives notice. Re-read coverage immediately, before the exit date.
- A callback traces to a skill gap. That cell was overrated. Drop it and say why.
- You add a service line or a new equipment type. New row, everyone starts at 0, no exceptions.
- A skill has not been performed by someone in roughly six months. Flag it, do not silently keep the rating.
That last one is the trigger nobody builds and everyone needs. Field skills decay. A tech who was solid on a procedure two years ago and has not run one since is not a 3 anymore, and the matrix will keep saying they are until somebody gets sent and finds out the hard way.
A worked example: a five-tech shop reads its own sheet
Five field techs, 22 rows after the granularity pass. That is 110 cells.
The first read: 6 of 22 rows have exactly one person at level 3. That is 27% of the sheet sitting one-deep. Owners usually see that number and reach for a company-wide training push, which is the wrong move, because the frequency column has not been applied yet.
Apply it. Of those 6 single-deep rows, 3 are daily-or-weekly, 1 is seasonal, and 2 are monthly. The 3 daily-or-weekly rows are the actual exposure. The seasonal one has four months of runway before it matters. The two monthly rows are real but they are not this quarter's problem.
So the plan is three rows, not six. For each, one tech moves from level 2 to level 3, which takes roughly 3 supervised instances at the bar the shop set. Three rows times 3 instances is 9 supervised instances. At a sustainable 2 teaching calls a week that is between four and five weeks of pairing, assuming the right job type shows up when you need it, which it will not always do. Call it six to seven weeks in practice.
Now the second read, the one that changes the plan. The teaching column shows that two of those three rows have the same person as the only level 3. So all the pairing load lands on one tech, and 9 instances through one person who can realistically protect 1 teaching call a week is closer to nine weeks, not five. The fix is to sequence: close the highest-frequency row first, which promotes a second level 3 on that row, and that new level 3 can then carry the third row's pairing. Sequencing costs you nothing and cuts the elapsed time by roughly a third, because you stopped queuing everything behind one person.
Reading it the naive way and reading it the weighted way produce completely different quarters from the same grid. That is the whole argument for the frequency column.
What changes the answer
- Two-person shops. Two-deep on everything is arithmetically impossible when one of the two is the owner. The matrix's job shifts from redundancy to a documented handoff list: what a subcontractor or a peer shop would need to know to cover each row for a week.
- A heavily specialized senior tech. Some depth is worth keeping single-deep on purpose if the work is rare, high-skill, and the tech is stable. Make that a written decision with a named backup plan, not an accident you discover during their vacation.
- Fast growth. Above roughly ten field people, per-person cells stop being readable and you start tracking coverage by crew or by role instead. That is a different instrument, and it is the point where the one-page rule breaks honestly.
- A licensing or certification requirement on a row. Level 3 does not override a legal requirement to hold a license or card for that work. Keep the credential as a separate column with its expiry date, because competence and authorization are different things and the matrix should not blur them.
How to verify you got this right
The Friday test. On a random Friday, ask the person who assigns work to route three specific calls using only the matrix. If they route from memory instead, either the matrix is wrong or it is too detailed to read under pressure. Both are fixable and both are fatal if left.
The disagreement test. Show a tech their own row. If they disagree with a rating and the conversation is useful, the scale is working. If they shrug because the levels are vague adjectives, rewrite the level definitions as dispatch actions and re-rate.
The vacation test. Take your highest-rated tech, cover their column, and re-read the coverage counts. What breaks is your real exposure register, and it should match the rows you already flagged. If it surfaces rows you did not flag, your frequency column is out of date.
References
- See related: Build a Skills Matrix: Who Can Do What, Cross-Training vs Specialization Decision Matrix
- See related: Why Cross-Training Is a Risk Control, Not a Nice-to-Have, The Competency Sign-Off SOP
- OSHA guidance on ensuring employees are trained and qualified before assignment to hazardous work
- Trade-standard workforce planning practice for small field-service operations