A note on this archive: an earlier version of this site was lost in a migration, with no surviving backup. This piece is a good-faith recreation of our writing from this period, not a recovered original; its date reflects the period it represents. See about this archive.
A few years back we wrote about what we called the developer dilemma: more demand for senior engineers than there were senior engineers to go around. We hoped, honestly, that it was a moment — a hot market that would cool off once everyone finished staffing up.
It didn't cool off. It got worse.
The unemployment rate for software developers is still hovering near zero. Here in Utah it has been a candidate's market for years; the only applicants you reliably see are people already fielding three other offers. Wages keep climbing past what most small and mid-sized companies budgeted for, and the gap between what a senior developer costs and what a growing company can pay has only widened.
What actually changed
The shortage is the same story. What's different is who you're competing with for the same person.
In 2015, your competition for a senior engineer was mostly the company across town. Today it's a company three time zones away that decided to go remote-first and is happy to pay your candidate to work from their kitchen table. Once a role can be done from anywhere, eventually it is — and the bidding war stops being local.
That cuts both ways. If a remote-first company can reach the engineer you wanted, you can reach talent that was never on your local map either. The companies pulling this off have mostly stopped thinking in terms of "local hire vs. outsource" and started thinking about how they bring outside developers in.
Outsourcing isn't one thing anymore
This is where a lot of teams get tripped up, so it's worth being precise.
Project outsourcing is the old model: you hand a vendor a defined scope, they deliver an outcome under their own management, and you check the result at the end. It's a fine fit for a contained build with clear edges.
Staff augmentation is a different animal. You bring in an experienced developer who works alongside your team, under your direction, in your standups and your codebase — an extra senior pair of hands, not an arm's-length vendor. For most companies fighting the shortage, this is the model that actually fits, because the problem usually isn't "we need a thing built," it's "we need more senior capacity on the team we already have."
Confusing the two is how outsourcing earned its bad reputation. You don't hand a teammate a spec and walk away.
What to do about it
If you're feeling the squeeze, three things help:
- Widen the map. If you're only recruiting within driving distance, you've already lost the candidate to the company that isn't. Decide you're open to working with developers wherever the good ones are.
- Know which model you need. A contained project and an under-staffed team are different problems. Choose augmentation or project work deliberately, not by default.
- Vet for seniority, not availability. In a tight market the temptation is to take whoever's free. The whole point of paying for senior talent is judgment — screen for it.
The dilemma hasn't gone anywhere. But the teams that treat where as an open question, instead of a constraint, are the ones still shipping while everyone else refreshes the job boards.
If you'd rather not navigate that alone, helping companies do exactly this is what we do — happy to talk it through.