When I think of my core Terraform infrastructure that I can spin up for any project, the only resource with a recurring AWS/Google/Azure cost is NAT Gateways. You can get very cost-competitive with the instances themselves with reservations and/or spot, depending on your architecture. The costs of the big clouds and the small ones is basically the same here.
The way the cost balloons out of control for most companies is for things like S3 access (applications that HEAD the bucket every 60 seconds and hit the API request cash register), or managed services like EKS, Amazon ElasticSearch, etc. It's in the "oh I don't have to learn how to manage X application" where cloud gets expensive.
Smaller providers solve that problem by not even giving you that option. It's not that AWS is expensive, it's that they give you rope to hang yourself with.
That's not a triviality - C++ has the same problem, if you have a single ezpert individual it's great, but if you have a team, and some are very green, it will be a nightmare.
Thing is though, people who well-understand AWS/Azure/Google are plentiful (but expensive) in the industry at this point.
Small startups can't afford to have junior talent.
If you can afford to full-time hire an entire hr team, an entire marketing team, an entire sales team and an entire engineering org, then you're able to pay an AWS bill.
Small startups have less than 2 million and usually a 16-24 cash or bust cycle. If they are hiring teams of people they are not a small startup.
If you are not bring in more cash than your aws bill that's a problem.
So they pay far more for the mess/waste/damage, but that somehow doesn't matter to them. Not just startups, some big corporates too.
Learning AWS does have a cost. Money I'd rather spend on learning and mastering standard, open and portable systems.
That's where Terraform comes in.
...and CloudFormation, and SAM, and CDK, and...
CDK gives you a TypeScript/JavaScript/Python/Java dependency.