In most other industries, it works this way. If a hire isn’t performing, they have a process called “firing” in which the person stops working for the company and they stop paying them a salary. It’s kind of like a layoff except it’s just one person. It’s also an incentive for the worker to do a decent job instead of rest-and-vest.
Defaults matter though. If getting rid of someone after a probationary period is a rare event, that's different from it being pretty common.
The more I think about this the less sense it makes. Over-hiring expensive tech workers with planned firings after a few months will burn incredible amounts of cash. If management can't effectively evaluate candidates for a single role, then why assume they will have success by increasing the number of employees? And if engineering management can't evaluate candidates, then they probably stink at onboarding as well, so that initial period will likely prove very little about the new hires. They also have to communicate their intentions up-front not only for ethical reasons but to avoid lawsuits from fired employees that almost certainly have the resources to sue for any alternative opportunities that they were screwed out of. So the company has to compensate people for their risk to even get qualified candidates, which means paying contract rates.
To be clear, internships/co-ops/summer jobs can make a lot of sense for university students. But, even new grads, if they get cut after 3 months (and it can take a while for a new grad to get into work life), they're now on the street outside their university placement resources and on-campus interview flow.
I agree with everything you are saying. The temporary nature of a college internship is mutually beneficial. That's not in the case with general employment where workers desire more stability, so employers have to sweeten the deal to bring in equivalent workers.
Maybe it's because I spent the early part of my career in New York startups, but back then firings were relatively commonplace. Not excessively common, but if you couldn't do your job, you could expect to get fired. There would be a meeting and a manager would say, "We had to let X go." Everyone would look around and make faces like "Yeah, I saw that coming," and then we'd move on. At one company, someone literally had their job replaced by a shell script. In contrast, I spent eight years at a major Bay Area tech company with over a hundred engineers, and I never saw a single person get fired. We had a couple rounds of layoffs, but no one was ever fired.
I was at a very small tech-adjacent company for almost 10 years and we definitely let people go who just weren't working out. What surprised me was how blindsided they typically were when it was blindingly obvious to everyone else there was a problem. They'd probably all have been able to find a role to coast in at a larger firm.
It makes sense that big companies are going to be slower and dumber at stuff like this, but the crazy thing is that now, even tiny startups think they should follow the same procedures as FAANGs. They're all doing three rounds of interviews, followed by a full day of coding/system design/behavioral BS, and they're all rejecting people that could potentially help their business a lot. And they're wasting a huge amount of energy and time in the process.