How Source scores fit, not keywords

Anand Joshi·Apr 11, 2026

Keyword matching is how recruiting has worked for decades. You type “React” into a search bar and get back everyone who has “React” on their resume. The problem is obvious: you miss the Angular developer who could learn React in a week, and you surface the person who listed every framework they’ve ever touched.

Source doesn’t search for keywords. It scores for fit. That distinction is everything.

This post is a look under the hood: how the scoring model works, what it considers, and the embarrassing early failures that forced us to rethink our approach from scratch.

The problem with keyword matching

Keywords are proxies. When a hiring manager searches for “Python,” they don’t actually care about Python. They care about whether the person can build the backend system they need built. Python is a shorthand for a much richer set of requirements.

The trouble with proxies is that they’re lossy. They filter out people who could do the job but express their experience differently. They let in people who can’t do the job but have the right words on their resume. And they don’t account for context: five years of Python at Google is a completely different experience from five years of Python at a ten-person startup.

We needed a model that understood context, not just vocabulary. That’s what Source is.

How semantic scoring works

Source reads the hiring brief — not the job description — and builds a model of what success looks like. It considers the problem domain, the team composition, the stage of the company, and the specific outcomes the role needs to produce.

Then it evaluates candidates against that model. A candidate who’s built similar systems at a similar scale gets scored higher than someone with a matching keyword list but no relevant context.

The model looks at trajectory, not snapshots. It considers the progression of roles, the complexity of problems solved over time, and the environments where the candidate has thrived. Someone who went from a 5-person startup to a 50-person company to a 500-person company has a very different profile from someone who spent ten years at one large company — and the model knows which pattern is better for which role.

Source also factors in team composition. If the existing team is heavy on infrastructure engineers, it weights candidates with product engineering experience higher. If the team lacks senior leadership, it adjusts for management and mentorship ability. The model doesn’t just ask “is this person good?” It asks “is this person good for this team, right now?”

The failures that shaped it

The first version of Source was terrible. It over-indexed on pedigree — big-name companies and top-tier schools. We caught it early because the model was surfacing the same profile over and over: Stanford CS, FAANG experience, predictable trajectory.

That’s not what startups need. We retrained on actual hiring outcomes: who got hired, who stayed, who shipped. The model got stranger and better. It started surfacing candidates that a keyword search would never find.

The second major failure was recency bias. Early versions weighted recent experience too heavily, penalizing candidates who’d taken career breaks, gone to grad school, or spent time on a side project. We adjusted by treating career trajectories as arcs rather than timelines, valuing the shape of the journey over the currency of the resume.

The third failure was the hardest to catch: the model was implicitly penalizing candidates who changed industries. Someone who went from fintech to healthcare to education looked “unfocused” to the model, but in reality, they were often the most adaptable and creative hires. We fixed this by adding a separate signal for range — breadth of experience across contexts.

What Source looks like in practice

When a hiring manager creates a role in Jobsly, Rob generates a brief and feeds it to Source. Within minutes, Source returns a ranked list of candidates with explanations for each score. Not “78% match” — but “Strong fit because of X, moderate concern about Y, worth exploring Z in the interview.”

The explanations are critical. A score without context is just a number. A score with context is a decision-making tool. Hiring managers can disagree with the score, and when they do, their override feeds back into the model. Over time, Source learns the preferences and patterns of each team.

We’re not claiming Source is perfect. No model is. But it’s a fundamentally better starting point than keyword matching. It treats candidates as people with trajectories, not as bags of keywords. That’s the bar, and it’s embarrassing that the industry hasn’t cleared it until now.

Anand Joshi·Apr 11, 2026