Skip to main content
DoneThat

AI Adoption GuideConsultingStaff

Skills-to-Project Matching Engine

Embeddings search over consultant profiles and past delivery data ranks fit scores for open project roles, using tools like Rocketlane or Operating.

Consulting processSellScopeStaffKickoffAnalyzeRecommendDeliverClose

By Don, DoneThat’s AI coach · updated

Rank fit for the open role. A staffing lead still assigns.

The engine's job is to rank consultants against an open project role from profiles plus past delivery, then hand a staffing lead a shortlist with evidence. It does not assign the seat.

Staffing from memory and a skills spreadsheet misses people who did the work and never tagged it, then spends the meeting on the same three names. Ranking is how you get a first cut you can argue with. Speed here is time-to-a-shortlist, not time-to-an-auto-placement.

Open roles, people, and assignment history already live in professional services and resource systems. Rocketlane, Operating, Kantata, Mosaic, and Planview are that class of platform: role, consultant record, current allocations, and some form of skills or history. Treat them as the place staffing data sits, not as interchangeable matching products. Do not assume any of them ships a particular ranking model. The job on top is the same: take the role, search over profiles and past delivery, and return a ranked fit list. If native search is keyword tags, you may add an embeddings pass over role text, bios, and engagement write-ups. If it already ranks, spend the effort on data quality and the human pick.

Every rank needs why. A score without the engagements that produced it will not survive a practice-lead challenge. Soft fit belongs in a consultant preference and interest matcher, not in the skills score.

Profiles only count if someone maintains them

If bios and CVs are stale, matching reproduces last year's firm.

People update profiles before a promotion packet or a painful staffing cycle, then not again. Treat the CV as ground truth and you keep sending the person who "did pricing" four years ago to every pricing role. You miss the analyst who has run three S/4 finance designs because their bio still says "generalist, open to anything."

Make maintenance an operating rule:

  • Assignment close is a profile event. Capture industry, workstream, methods, systems, actual seat (not the sold role), and primary versus supporting. That note is what you match against.
  • Skills tags are a controlled list. Free-text "Excel," "PowerPoint," and "agile" will match almost everyone. Use a firm taxonomy, and drop tags with no delivery note for a defined period.
  • Someone owns the roster. Practice ops reviews exceptions. The model cannot invent a current bio.

Until that loop exists, do not embed the CV dump in SharePoint. You will rank people as they were, not as they are.

Weight shipped work over listed skills

Past delivery is what makes this better than a filter on self-reported tags.

A consultant can list SAP, Excel, and change management. So can half the practice. Prefer closed engagement records first, then work-product or SOW metadata, then endorsed skills tied to a named engagement, then CV prose last and down-weighted. A comparable past scope retriever helps when you need to see whether this open role looks like a past one. It does not tell you who delivered that past one.

Embeddings help when role language and delivery language do not share tags. "Cutover weekend hypercare" should surface someone whose write-up says they supported go-live in R2R. That is also how generic language explodes.

"Excel" matches everyone. So do "communication" and bare "ERP" if you embed raw CVs. Require the staffing request to name the workstream, the system, the industry, and the seniority. If the request is "strong Excel, flexible, good with clients," send it back. Matching cannot rescue a vague role. Down-weight terms that appear on most CVs in the practice. The failure mode is a ranked list of generalists who look equally qualified because the model matched on the words in every bio.

Cut unavailable people before you score fit

Availability is a hard filter, not an ingredient in the fit score.

Mixing remaining hours into the same number as skill fit produces two bad lists. Fully booked stars still float to the top, and the meeting becomes an argument about pulling them. Or bench people with weak fit float up because they have hours, and you staff a poor match in the name of utilization.

Filter first: date window, percent free, location or travel, clearance, language, named-client conflict. Then rank only the people who could take the seat. Looking four to eight weeks out is a different job; pull that from a utilization and bench risk predictor, not from this week's timesheet snapshot.

The star performer is always rank 1 if you skip this filter, and often even after you apply it. The person who has done the workstream well three times will dominate similarity. That is correct as a fit ranking and a bad staffing policy. Stars get overloaded, the next tier never builds the hours that would let them rank, and the bench stays full of people the model will never prefer.

Handle stars with rules the model does not vote on: cap concurrent primary seats; require a named alternate one level down, with the stretch gap visible; keep a share of roles as development assignments and rank those inside a junior pool only. If rank 1 is the same six people every week, the engine is doing what you asked and the firm is failing the staffing policy.

Illustrative staffing: an S/4 finance workstream lead

This is an illustrative scenario, not a case study.

A PMO needs a workstream lead for an eight-week S/4 finance design, on-site two days a week, starting in three weeks. The sold work is chart of accounts design, R2R workshops, and a cutover checklist. The first staffing ticket said "SAP, finance, senior, Excel." After the coordinator sends it back, the role reads: S/4 Finance (R2R), manufacturing, workstream lead, workshop facilitation, cutover planning, senior manager or equivalent, 60 percent, travel to the Midwest plant.

The engine filters to people with enough unassigned time in that window, no conflict at this client, and travel allowed. Then it ranks. A useful shortlist has this shape, not invented scores:

  • Person A, 20 percent free: two prior S/4 finance workstreams as lead, one in manufacturing. Strongest delivery overlap, cannot take 60 percent. Show them as blocked, not as the assignment.
  • Person B, 70 percent free: one S/4 finance workstream as number two, plus a separate R2R diagnostic. Ranked on delivery overlap, not on the "SAP" tag they share with dozens of colleagues.
  • Person C, on the bench: bio still lists "Excel, SAP ECC, financial reporting." No S/4 in the delivery notes. They should rank low. If they rank high, you matched on "SAP" and "finance" in the CV.
  • Person D, manager, 80 percent free: a manufacturing finance transformation as workstream lead on ECC, no S/4. A legitimate stretch, with that gap labeled.

The staffing lead picks B for fit-with-availability, or D for development with A as a few hours a week of advice. They do not pick A because the model loved them, and they do not pick C because the CV said Excel. On the same role, stale CVs hide B's S/4 work; "Excel" in the role text piles C into the list; availability as a score term leaves A at rank 1; no stretch rule, and A is rank 1 forever.

The staffing lead still makes the assignment

A named human still assigns, including the choice to ignore rank 1. Mark which seats may be stretch before you run the model: pure rank starves juniors. If the same names absorb promotion-track work, audit concentration. The model will not notice.

If the client later adds a second workstream, do not silently restaff from this list. That is agentic re-staffing on scope change. An empty shortlist after filters is a recruiting problem. A role-specific interview question generator tests external candidates against the same role text. It does not belong on an internal staffing path.

Keep a log of what the engine ranked, who was filtered out and why, and who was assigned. The system is working when an open role produces a short list of available people, each with delivery evidence, and a named human still makes the assignment. It is failing when last year's CV decides this year's team, when Excel is a skill, or when rank 1 is always the same person.

Is this worth automating for you?

Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other.

DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.

Measure the baseline first