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 sitting at their lowest point in years, entry-level hiring specifically getting hit hardest, and a lot of people online arguing about 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 actually looks like from the freelance side of the table, because it’s changed the shape of my inbox in ways I didn’t expect.
The obvious change: more inbound, but from a worse mix of clients. I’m getting more cold inquiries than I did a year ago, which sounds like good news, and some of it is. But a noticeably larger share of that inbound is now companies that laid off a chunk of their in-house team and are trying to backfill the work through freelancers at a fraction of the headcount cost — not because they’ve discovered the virtues of flexible staffing, but because a hiring freeze from finance made a full-time req impossible while the work itself didn’t go away. 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 already 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 think a tighter job market for employees would push more demand toward freelancers and give me more leverage. In practice the opposite happened for a stretch of this year — a wave of recently laid-off engineers went freelance themselves, some of them quoting rates that don’t remotely account for the unpaid overhead of running an actual 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 came to me with a number in their head that was set by someone undercharging out of necessity, not by what the work actually costs to do well. I’ve had to get more explicit, earlier in a conversation, about why my rate is what it is instead of assuming the market sets a shared baseline everyone understands.
Where the squeeze has genuinely worked in my favor: anything touching AI integration. This is the one area where demand outpaces the gloom in the headlines. Companies that shed junior engineers are, almost without exception, the same companies now trying to bolt some kind of AI feature or internal agent workflow onto their existing product, and that specific work — wiring a model into an existing codebase without breaking the parts that already work — isn’t something a general layoff wave has flooded the market with people who can do reliably. I’ve picked up three contracts this year purely on that specific skill, none of which I’d have gotten purely on “React developer” or “backend developer” as a label. That’s not a universal truth for every freelancer, it’s 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 there aren’t ten other freelancers who can also do it.
What I’ve actually changed because of this, day to day. I stopped taking the first inbound inquiry at face value and now ask more upfront about why the role or project came open — “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 if 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 initial number was clearly anchored on a laid-off junior’s old salary divided by twelve, which isn’t how contract work should be priced at all, and I’ve had to walk that conversation back to what the actual deliverable requires.
The part that surprised me most: I’m turning down more work than I used to, not less. With a tighter market you’d expect a freelancer to take everything that comes in the door out of scarcity thinking. I’ve gone the other way, mostly because the bad-mix clients I mentioned earlier are disproportionately the ones with unclear 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 actually protected it, because the vague “just cover what our laid-off senior used to do” contracts were the ones dragging on past their budget every single time.
Where I land on the bigger debate: I think the “AI is replacing junior engineers” framing gets too much airtime relative to 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 “the same or more demand, distributed less evenly” — narrow, specific skills are doing fine, undifferentiated generalist labor is genuinely squeezed, and a lot of the freelance market in between is 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 than that, which is usually how these things actually turn out to be.