Even though I'm strongly biased towards agreeing with Rachel here, I'm going to throw this out here anyway: in case of 3), you could technically always fire the three subpar vendors and replace them with their better competitors (assuming there are any). Replacing a vendor <i>may</i> be easier than replacing an in-house team, but then again, it may not.<p>But with vendors come different issues. They can go out of business, or get acquihired. If their product is in any way not aligned to your business needs - and it almost never is - then you have to either throw a lot of money at them so they customize their service for you, or you can alter <i>your</i> business to fit the vendor's offerings (and keep altering it as they iterate on their product). Both options are terribly inefficient compared to just asking your engineers to tweak something in your own codebase.<p>(And then your country's government and the US government decide to unfriend each other, and suddenly 95% of services you depend on <i>and their competitors</i> can't service you anymore. There's that risk too. See e.g. Venezuela.)<p>I viscerally hate the idea of a business being assembled purely from third-party services, reducing itself into a pile of contracts. I really dislike the way how our economies start turning into NPM. But everyone keeps saying there are good business reasons for that. So maybe they are. I don't have a formed rational opinion on which way is better yet.