Terydin · 2026 · Product Engineer
Talent Community 2.0
A talent pool that only existed while someone was job hunting, rebuilt into somewhere worth returning to.
The problem
Terydin places people with client companies, which means its inventory is people. Before this work, a talent signed up, searched jobs, and that was the whole product. Nothing brought them back between searches.
That is a business problem before it is a design problem. A pool that only surfaces when someone happens to be looking has to be re-acquired from scratch every time a client request lands. The people you spent money reaching last quarter are gone, and the roles you need to fill this week go to whoever you can find in a hurry.
The before screen makes it plain. Four navigation items, an empty job list, and a profile the user is told recruiters cannot see. There is nothing to do here and no reason to come back tomorrow.
- 01
The pool went cold between searches
Nothing existed for a talent who was not actively job hunting, so engagement dropped to zero the moment they stopped looking, and every client request meant re-acquiring an audience.
- 02
Applying was too easy to be meaningful
Applying took two clicks and a submit, so people applied to everything and withdrew later. One compliance role drew around sixty applications, of which roughly eight to ten were worth reading. Volume made the pool harder to judge, not easier.
- 03
Recruiters were drowning in the middle
Ranking helps least where it is most often aimed. The strong candidates at the top of a list are obvious to any recruiter without assistance. The real cost is the undecided middle, and it multiplies when hiring several openings at once.
- 04
A score you can buy is not a score
The obvious move with a training academy attached to a talent pool is to let course completion raise your ranking. It rewards engagement, it looks like a virtuous loop, and it quietly turns the score into something purchasable rather than something true.
What changed
Before
Four navigation items, an empty job list, and a banner telling the user recruiters cannot see them.
After
Application status at a glance, ranked matches, learning, invitations and a career path, with a profile that is discoverable.
Before
Suggestions with no stated basis and no ordering.
After
Every role carries a fit score, so the ordering is explained rather than asserted.
The apply journey
The whole cap and fit design only makes sense as a path, because each step is deliberately doing a little of the work of making the next one considered.
- 01
Ranked search
Roles arrive already ordered by fit, with the score on the card. A low score is not hidden and not blocked, it is simply visible before anyone invests any effort.
- 02
The role, and your fit for it
The candidate-facing rendering is written in the second person and is deliberately encouraging: a headline verdict, what you bring, and what would strengthen your fit. Beside it, the count of active applications against the cap, so the cost of applying is visible at the moment of deciding.
- 03
A three step application
Not two clicks. The friction is the feature: enough steps that applying is a decision, few enough that a serious applicant is not driven away.
- 04
Status you can actually follow
A timeline from applied through screening and interview to offer, so the answer to what is happening with my application is on the screen rather than in someone's inbox.
The decision
One model pass produces one score, an integer from 0 to 100, keyed to the pairing of a person and a role. That same number is then rendered twice: once for the candidate in the second person and deliberately encouraging, and once for the recruiter in the third person and candid, with a recommendation, the evidence and the gaps to verify.
One score behind both renderings is the load-bearing part. If the candidate and the recruiter can see different numbers for the same pairing, the first difficult conversation is about the numbers instead of about the person.
The fairness rule lives in the output schema rather than in the prompt. The gaps list is structurally prevented from citing a lack of United States, contract research or international experience, and from citing retention, flight or placement risk. For an African talent business selling into United States clinical research those are precisely the biases that would otherwise turn up in writing, and a prompt instruction is a request while a schema is a constraint.
The recruiter block is excluded from any candidate-facing data export, which is what lets the candid rendering stay candid.
- 1
The score, stated plainly
Why
Hiding the number and showing only a vague band would have been the safer product choice. It also would have made the ranking unauditable by the person it is about.
What it changed
The candidate can disagree with a specific number rather than with a feeling, and the same number is what the recruiter sees.
- 2
What you bring
Why
Evidence pulled from the profile against the role, so the score is shown its working rather than asserted.
What it changed
Turns a ranking into feedback. Even an unsuccessful application leaves the person knowing what registered.
- 3
To strengthen your fit
Why
The gaps list, and the place the fairness rule bites. It is schema-constrained so it can never cite where someone is from, or a guess about whether they will stay.
What it changed
Gives an actionable next step instead of a rejection, and makes the one part of the output most likely to encode bias the part that is hardest to.
- 4
Three of five active
Why
The cap is shown at the moment of deciding rather than discovered at the moment of being refused. The number is read from a constant, so the sentence cannot drift out of step with the limit.
What it changed
Applying becomes a choice with a visible cost, which is the whole point of the cap. Spam applying stops being free.
What it cost
Withdrawal is terminal, and re-applying after withdrawing is not possible. A two hour re-apply window with a countdown was built and then torn out. At roughly one hundred to two hundred applicants per role, re-application traffic does not manage, and standard applicant tracking systems do not permit it either. The cost is real: someone who withdraws by mistake has no way back on that role.
The cap is a blunt instrument. Five active applications is right for someone applying deliberately and wrong for someone genuinely qualified for six open roles at once. A route to a higher limit through the academy or verification was scoped and deliberately pushed to a later version rather than crammed in, which means the blunt version is what people live with in the meantime.
Free text skills never reach the global skills database. It stays a managed list, which frustrates anyone whose actual skill is not on it. The alternative destroys the thing that lets operations judge the quality of a pool without reading every CV individually, and it does so within about a week of launch.
Every one of these makes the product harder to use on purpose. That is defensible only because the alternative was a pool nobody could judge and a ranking nobody could trust.
Where it landed
The talent side went from four surfaces to a product with somewhere to be when you are not searching: announcements, a Learning Hub with academy and general tracks, Career Paths with role progressions, ranked search, recruiter invitations, a real application flow and a status timeline.
The ranking runs as a precomputed background job rather than a live search, cached for thirty days and invalidated when a profile or a job description changes, so a wrong score has a bounded life rather than an indefinite one.
The score is never a gate. A low fit produces a warning and an explicit route to apply anyway, so the model is allowed to be wrong without it costing anyone a job.
Every pain point, answered
The pool went cold between searches
Nothing existed for a talent who was not actively job hunting, so engagement dropped to zero the moment they stopped looking, and every client request meant re-acquiring an audience.
- Announcements, a Learning Hub, Career Paths and recruiter invitations give someone a reason to open the product when they are not searching. Each is a standing surface rather than a campaign, so the pool stays reachable without anyone spending to reach it again.
Applying was too easy to be meaningful
Applying took two clicks and a submit, so people applied to everything and withdrew later. One compliance role drew around sixty applications, of which roughly eight to ten were worth reading. Volume made the pool harder to judge, not easier.
- A cap of five active applications, a fit score shown before the apply button, and a three step apply flow. These are one design response, not three features: together they make applying a deliberate act rather than a reflex.
Recruiters were drowning in the middle
Ranking helps least where it is most often aimed. The strong candidates at the top of a list are obvious to any recruiter without assistance. The real cost is the undecided middle, and it multiplies when hiring several openings at once.
- The recruiter-facing rendering leads with a recommendation, the evidence behind it, and the specific gaps a human should go and verify, rather than leading with a number. It is built to be useful in the middle of the list rather than at the top of it.
A score you can buy is not a score
The obvious move with a training academy attached to a talent pool is to let course completion raise your ranking. It rewards engagement, it looks like a virtuous loop, and it quietly turns the score into something purchasable rather than something true.
- Academy completion does not move the fit score at all. It was the single biggest open question on the ranking work and the answer was no. Academy standing moved to a separate verified marker left to recruiter discretion, never a hard gate.
The handover
Every feature ships with a handover document, and writing it is part of the work rather than something that happens afterwards if there is time. Talent Community 2.0 shipped as a series of three: the scoring prototype first, then the operations side, then the talent side. The scoring document is numbered first deliberately, because both portal documents point at it instead of each restating the model, so reading order matches dependency order.
A handover document answers what the feature is, what was built, and why. Everything else is chaff and gets cut. Column pinning, pagination internals, class names, breakpoints, query key shapes: none of it changes how anyone understands or uses the feature, so none of it belongs. The test is that single question, applied line by line.
The most valuable section is always how the two sides connect, and specifically the places they do not connect but a reader would reasonably assume they do. A drill-in that does not carry its source, so the back button lands somewhere wrong. An empty state telling someone to act on a screen that has no such control. Verified status seeded from mock data because no completion source exists yet. Those are the things that cost a new engineer a day each, and they are exactly what a document written from the code rather than from the product will omit.
A handover document states, it does not debate. If product settled something, it is written as settled, with no hedging and no invitation to reopen it. Genuinely open questions go in their own section, plainly. A defect in the code is stated as the fact it is. Dressing up a settled decision as an open one reads as thoroughness and is actually just a document nobody can rely on.
How it was built
The model choice was settled by a head to head rather than by preference. Haiku 4.5 against Sonnet 4.6 on the final prompt across an eval set, tied at eleven of fourteen, missing the same three cases, at roughly a third of the cost: about four tenths of a cent against about 1.2 cents per dual-surface score. At the scale in question, a thousand people against fifty roles, that is roughly two hundred dollars one time.
Tied on quality and missing the same cases is the result that matters. It means the cheaper model was not worse in a way that would show up in someone's ranking, so the decision could be made on cost without quietly making the product worse.
Malformed model output is retried once and then treated as null, and the surfaces hide rather than render a fabricated score. Designing the failure state first is what allows the score to be shown plainly rather than hedged.
Thank you for reading all the way through. I appreciate the time. If this sounds like the kind of work you need, do get in touch. I’d love to hear what you’re building.