A founder came to us about a release that wouldn't ship. He had one good developer and no intention of hiring more, which we think was the right call, because the product didn't need more code.
What it needed was a deploy. Then a round of testing on real devices. Then someone to replace an integration credential that had expired. None of that was his developer's job, so all of it waited for the hours left over after his actual job, and those hours were always too few.
That's what it cost. Not a missing engineer, but a missing hour of QA and a missing hour of DevOps, repeated until the release simply stopped moving.
We do it differently now. Before we quote anything, we split the work into what's needed continuously and what's needed in bursts: release testing, deploys, store submissions, certificate and integration upkeep. The continuous part can genuinely be one person. The bursty part is where small teams get stuck, and it's the part you can borrow instead of hire.
If you're weighing a hire right now, look at last month instead of next quarter, and count how many of those blocked hours were actually about writing code.