If you're a single developer/small team with a very small product, managing servers is a chore that won't add any value to the product you're building.
So you either spend very little time on it and build servers adhoc ("snowflake" style - SSH in, install some stuff, etc), or you spend precious time doing "the right thing" - which right now is a huge universe of options (Chef/Puppet/Ansible, Docker/other containers/no containers, etc).
If you're part of a larger team, not having a properly structured infrastructure is a nightmare - specially when it comes to scaling or dealing with failures of all kinds.
What I really hate about the adhoc servers and how people keep using them is that alternatives are seen as spending lots of time on the deployment itself. But actually it's so much more - scripting your setup gives you your first disaster recovery scenario. Gives you a way to keep a list of "incidental dependencies" (things your apps don't import, but you need within some process). Gives you an audit trail of "things that changed" if you keep scripts in a repository. It's not only things you should have, it's things that you'll rarely add later on, but may save your ass at any point.
Doing it right is hard. Scaling infrastructure throughout multiple zones while keeping data as consistent as possible, deployments as easy as possible and having as few SPOFs as possible is pretty difficult (and done differently by every single team). The range of things that can go wrong is huge...
Not every product needs AZ from the start (specially for small teams or solopreneurs), in most cases you'll be doing over-engineering. And in the use cases you need AZs and do it right new tools like convox* are really easy to use and can save you a lot work. It's never been this easy to manage your own infrastructure.
During the years I've used ssh, puppet, fabric, ansible, capistrano, cloud formation, etc for managing servers and infrastructure. And I think that the main benefit of any PaaS, AWS Lambda or AWS API Gateway is (obviously) that they're time saving and abstract the internals. In fact I use them in several small projects.
So you either spend very little time on it and build servers adhoc ("snowflake" style - SSH in, install some stuff, etc), or you spend precious time doing "the right thing" - which right now is a huge universe of options (Chef/Puppet/Ansible, Docker/other containers/no containers, etc).
If you're part of a larger team, not having a properly structured infrastructure is a nightmare - specially when it comes to scaling or dealing with failures of all kinds.
TLDR; - yes, I'd say it's somewhat hard...