I have maintained a Jenkins server (actually, it was Hudson, the precursor). I’ve run my own database server. I’ve installed a bug tracking system, and even extended it. I’ve set up web servers (apache and nginx).
And I’ll tell you what, if I never have to do any of these again, I’ll be happy as a clam. There are so many tools out there that let you outsource your infrastructure. Often they start out free and end up charging when you reach a certain point.
By outsourcing the infrastructure to a service privder, you you let specialists focus on maintaining that infrastructure. They achieve scale that you’d be hard pressed to. They hire experts that you won’t be able to hire. They respond to vulnerabilities like it is their job (which it is).
Using one of these services also lets you punch above your weight. If you want, with AWS or GCP you can run your application in multiple data centers around the globe. With heroku, you can scale out during busy times, and you can scale in during slow times. With circleci or github or many of the other devtool offerings, you can have your ci/cd/source repository environment continually improved, without any effort on your part (besides paying the credit card bill). Specialization wins.
What is the downside? You lose control–the ability to fine tune your infrastructure in ways that the service provider may not have thought of. You have to conform to their view of the world. You also may, depending on the service provider, have performance impacted.
At a certain scale, you may need that control and that performance. But, you may or may not reach that scale.
It can be frustrating to have to workaround issues that, if you just had the appropriate level of access, you would be able to fix quickly. It’s also frustrating having to come up to speed on the docs and environment that the service provider makes available.
That said, I try to remember all the other tasks that these services are taking off my plate, and the focus allowed on the unique business differentiators.