Don't Do It Yourself
A couple of years ago, we did everything ourselves: we hosted our email on our own server, we maintained our intranet ourselves, we hosted our code repositories internally...
We thought we had good reasons for doing this:
1. Saving Money
We thought we'd save money if we did these things ourselves instead of spending money on external services. Of course, this proved to be wrong - because doing it yourself involves your own time. And your time should be more expensive than a professional service, specialized to do only this one thing! Do you really think you can buy, install, maintain, and maybe even customize a system to host your email in a more efficient way than Google does?
2. The "Perfect" System
Every team has its own workflow and its own requirements. Of course we never found any system that really suited our needs pefectly. So we thought we'd have to do it ourselves and picked systems that we could customize to our exact needs. But we quickly learned how much work this brings with it - and the benefits rarely justify all this work.
Now, instead of searching for the "perfect" system, we're ready to make compromises for the sake of not having to deal with the topic ourselves.
In the beginning, we were anxious to host our code externally. We were afraid of data losses & security issues. We thought we'd be safer handling things like backups on our own.
Today, we have all of our code hosted on Beanstalk. We made this move after realizing one thing: the people working there do nothing else, all day long, but to make sure the service that pays their salaries is as good & safe as it can possibly be. They will do this better than we ever could.
The biggest benefit of not doing things yourself, however, is a different one: we have more time and focus to do the things we really want to do. The things we're good at. The things that are important for our business.