Once you get above a few boxes though, you might need some pricey geeks for a month or two to rig up cobbler, ceph, openstack, proxmox, or whatever-takes-ya simply because it's quicker than getting up on all that yourself right away -- but really there is no magic involved here and it's just so you can have it totally manageable as you grow.
The tooling is much more friendly these days; and to be totally honest -- provisioning probably isn't the problem you're trying to solve anyway (more likely packaging/deployment/ci is the pain after you got a bit of breathing space on perf). I've seen loads of folks coming back on prem spend months rigging up crazy vm provisioning things when their estate is basically static because they didn't realise they were solving the wrong problem.
If your ops time is spent building machines, then sort that out. Probably and more likely it's spent on getting apps running and dealing with moving traffic about and deployments and such; so that's the real thing to work on.
I think the 'complexity' argument seem so loud on HN as the opsy people are the minority here and it's not exactly a sexy/exciting/fun thing to pick up, and when it goes wrong it's brutal, especially when you can be nailing features instead.
All I'd say is -- regardless of what you're doing, getting into containers at this point makes your life quite a lot easier; you get a standard deployable unit of code you can throw into aws, or on prem depending on your workload, and it removes a lot of the anti-patters of config mgt.