Then Parse shut down.
I think the lesson here is, you should never trust your core product to a third party. Also, when you use cookie-cutter services, you really limit the kind of things you can do, and vendor lock-in really, really limits your options in the long run.
First, it isn't actually true: Third-party managed services (say, exotic databases) are a mere network hop away. If you really had to you could call out to your own self-managed services in EC2 or whatnot. Even on Google App Engine, which is one of the most restrictive systems, we use a multitude of services running elsewhere in "the cloud". This is occasionally a mild annoyance, but it doesn't significantly alter the value equation.
Second, it's irrelevant: Migrating our application off of GAE would be tough, sure. You can call this "lock-in" if you want, but it ranks somewhere down a distant thousandth after a long list of concerns about my product and how well it is meeting the needs of my customers. Worrying about lock-in is a premature optimization.
I recently migrated from a dedicated DC to AWS because of business reasons (ie. CAPEX vs OPEX).
Before, my PostgreSQL DBs were always perfectly in sync because they were on a dedicated, private network. Now, I often get large replication delays because the network in EC2 isn't of the same quality I had before, so I've had to spend a lot of dev time working around the delay issue with creative caching solutions.
My point is, there's trade-offs and mostly my calculations show that they're not really worth it, if you have knowledgable Ops people. Which, once you grow to a certain size, you should.
For instance, I went with running PostgreSQL instead of RDS because I have much more control over what's going on in the DB than I would with RDS.
But your point that the managed services don't require ops might be true in the short term, but what happens when something breaks? Or you experience a level of growth that expands past the capabilities of the services you've organized? There's hard practical limits to all the of SaaS offerings - mostly latency and throughput - that doesn't really come up in these discussions.
The analogy about it being like assembly programming might be more apt than I originally thought, given how not doing it yourself generally results in slower and poorly optimized solutions, but then "good enough" is often the mantra of the day at a certain scale.
As management tools mature and automatic, systemic optimizations are developed for SaaS systems, I wonder if the analogy will continue and areas where you need to manage it yourself to eke out performance and flexibility will get fewer and farther between over time.
I imagine that when Flight Navigators started disappearing from flight crews in the 1970s with the advent of GPS and other related electronic navigation systems, there were those saying "I'd never leave the ground without a flight navigator - what if the GPS stops working?!?" Should we keep an old school Flight Navigator on standby "just in case"?
I remember talking to an retired mechanic about 20 years ago, who told me he never did a road trip without taking all his tools with him so he'd be ready to fix anything on the side of the road if need be. I wonder if he is still doing that....I doubt it.
As technology gets better and better, the "Number Needed to Harm"[1] needs to be considered.
[1]https://en.wikipedia.org/wiki/Number_needed_to_harm
edit: missing word
It's basically the ultimate technical debt.
The situation I'm in is our apps currently do low enough traffic to exist in a PaaS, but they weren't built that way from the ground up and live on bare metal currently. Migrating to say, AWS, would using ElasticBeanstalk be burdening myself with technical debt I don't currently have vs using something like CloudFormation (Terraform) and CodeDeploy?
There's plenty of things that won't, for a long time, so you're fine to save the time since you won't need to re-do it later.
But if you can really see the product expanding to a large scale, you need to think a year or more into the future when planning your infrastructure.
"The first software companies had thousands of developers. The second wave of software companies had hundreds of developers. The next wave of software companies will have 1 developer."
Can't find the source, might not be the exact quote either, sorry.
This has happened with Parse, and this will happen again.
But if you have to rebuild your whole company, because everything you use runs on GAE, 1 year is almost guaranteed death for your company.
For a point of reference, when Google rolled out the High Replication Datastore, they kept around the Master/Slave datastore for years and even built a pushbutton tool to automatically migrate apps. GAE has been around since 2008; this is not an experiment like Wave.
Does DevOps or SRE's not exist in this realm?
We built it on Google App Engine. If you don't like GAE there are other PaaS providers that offer something similar. Developer life on a PaaS consists of building features day in and day out. It's not mucking with Docker, Chef, Ansible, Salt, Puppet, BOSH, apt, yum, or any other low-level systems management tools. This stuff doesn't even waste space in my brain[1]. Instead of learning this stuff, my team has been been learning about the business needs of our customers and building them out in code.
I plan never to hire a devops team. Running servers is like writing assembly language; appropriate only for companies with very specialized needs.
[1] Not quite true - I used to work on the BOSH team. It's a great tool for deploying CloudFoundry. But you shouldn't use BOSH, you should use CF, hosted by someone else.