The Job Market Is the Tightest I've Seen — What That Looks Like From the Freelance Side

The headlines this year have been consistent enough that they’ve stopped feeling like noise: software engineering job openings at their lowest point in years, entry-level hiring hit hardest, and people online arguing over how much of that is AI replacing junior work versus a broader hiring freeze that would’ve happened anyway. I don’t have a strong opinion on the macro debate — I don’t have the data to referee it, and I’m suspicious of anyone who claims certainty either way. What I do have is a close-up view of what the squeeze looks like from the freelance side, because it’s changed the shape of my inbox in ways I didn’t expect.
The most obvious change: more inbound, from a worse mix of clients. I’m getting more cold inquiries than a year ago, which sounds like good news, and some of it is. But a much larger share of it now is companies that laid off part of their in-house team and are trying to backfill the work through freelancers at a fraction of headcount cost. Not because they discovered the virtues of flexible staffing — a finance hiring freeze made a full-time req impossible while the work itself didn’t disappear. That’s a very different client to work with than someone hiring a freelancer by choice. The scope is usually vaguer, the timeline is usually “we needed this yesterday because we let the person who owned it go,” and the budget conversation is harder because they’re justifying spend to someone above them who thinks freelance cost should be lower than a salary, not comparable to one plus overhead.
The less obvious change: my own pricing conversations got harder, not easier. You’d expect a tighter job market for employees to push more demand toward freelancers and hand me leverage. The opposite happened for a stretch of this year — a wave of recently laid-off engineers went freelance themselves, some quoting rates that don’t account at all for the unpaid overhead of actually running a freelance business: invoicing, gaps between contracts, your own tooling and insurance. I don’t blame them — if I’d just lost a role I might do the same thing to stay afloat. But it meant a few prospective clients showed up with a number in their head set by someone undercharging out of necessity, not by what the work is actually worth. I’ve had to get more explicit, earlier, about why my rate is what it is.
One place where the squeeze has genuinely worked in my favor: anything touching AI integration. Companies that shed junior engineers are, almost without exception, the same companies now trying to bolt some AI feature or internal agent workflow onto an existing product. That specific work — wiring a model into an existing codebase without breaking what already works — isn’t something a general layoff wave has flooded the market with people who can do reliably. I picked up three contracts this year purely on that specific skill, none of which I’d have gotten off “React developer” or “backend developer” as a label. Not a universal truth for every freelancer — specific to what I happen to be good at — but it’s the clearest signal I’ve seen: the market isn’t uniformly bad, it’s bad for undifferentiated generalist work and fine for anything narrow enough that ten other freelancers can’t also do it.
What I’ve actually changed day to day: I stopped taking the first inquiry at face value and now ask upfront why the role or project opened up. “Internal person left” reads very differently from “we had a layoff and need someone to cover the gap on a fixed budget,” and I price and scope those two situations differently even when the described work is identical. I also stopped assuming a client’s stated budget reflects what the work is worth. More than once this year a client’s opening number was clearly anchored on a laid-off junior’s old salary divided by twelve — not remotely how contract work should be priced — and I’ve had to walk the conversation back to what the deliverable actually requires.
The part that surprised me most: I’m turning down more work than I used to, not less. A tighter market would suggest a freelancer takes everything out of scarcity thinking. I went the other way, mostly because the bad-mix clients above disproportionately have vague scope and unrealistic timelines — exactly the projects that eat the most hours relative to what they pay. Being pickier hasn’t cost me income. It’s protected it, because the vague “just cover what our laid-off senior used to do” contracts kept running past their budget, every time.
Where I land on the bigger debate: the “AI is replacing junior engineers” framing gets more airtime than the more boring explanation, which is that a lot of companies over-hired during an earlier boom, are now correcting for it, and are using AI tooling as the excuse for a decision that was mostly about balance sheets. From where I sit, the actual effect on my business isn’t “less demand for engineers,” it’s “roughly the same or more demand, distributed unevenly” — narrow, specific skills doing fine, undifferentiated generalist labor genuinely squeezed, and a lot of the freelance market in between currently priced by people who didn’t choose to be freelancers so much as land there after a layoff. None of that is the dramatic AI-takes-all-the-jobs story from the headlines. It’s messier and more specific, which is usually how these things turn out to be.