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.
This could at least in part explain some common patterns:<p>- Non-IT companies overall have terrible IT systems because as soon as they have two systems they need some sort of integration which the vendors are likely to botch and the resident "IT person" isn't qualified to build and maintain.<p>- "Nobody was ever fired for choosing $vendor" actually makes sense when integration is a black hole for time and money. At least a single vendor is likely to have already taken care of integrating with their own products.<p>- When people start looking at which parts of an IT infrastructure to improve it's usually the oldest and most botched-together piece. But it is nearly impossible to replace because of all the botched-together custom <i>integration code</i> which was cobbled together by half a dozen barely-qualified staff.
Multi vendor is even worse than described. I worked for one of the vendors. The incentives make you fight tooth and nail for suboptimal technical decisions that direct money to you rather than the other vendors.<p>We won the internal bid for a functionality module that ended up being a standalone service called by system X. Vendor X had lost that bid. They convinced the bank that it is absolutely necessary for us to expose a JDBC driver as an interface.<p>Their engineers were actually pretty cool and we agreed to implement something which made more sense. Unfortunately this decision was blocked. We ended up exposing a simple RPC API via a JDBC driver. I think it had over a thousand methods, almost all of them empty.
I was following it up until the vendor FUD. For most of the code your part of the orgs wants to run, chances are, you aren't hiring the world's best dev/prod/designers to dedicate their lives to say your website's anti-spam comment forms -- they're going on the differentiating stuff! For the boring whizbuzz widget, the top vendors in the field will already have centuries/millennia worth of worker hours & experience behind it. And, even if you picked a wrong vendor, should be waaay less political to replace them.<p>One phrase that I've increasingly come to love is "torpedo in the hull" (<a href="https://allaboutstevejobs.com/blog/category/steve-jobs-history/" rel="nofollow">https://allaboutstevejobs.com/blog/category/steve-jobs-histo...</a>). It's tough seeing senior folks tolerate vendor-outsourcable projects going to weird internal special projects & artisinaly-managed OSS. We know most folks switch jobs every couple of years now, including those behind that fancy internal project, and inheriting unnecessary code & ops is such a drain. Why encourage planting timebombs?
A different perspective from a dev shop owner.<p>Our clients do outsource custom development primarily due to cost-saving reasons. Being non-tech companies it is very difficult to justify high IT project costs. Competing for qualified talent is no fun as well which leaves them with internal IT whose primary job is to keep existing things running and that's it.<p>For them, it is a choice of:<p>A) Outsource development of the 3 projects and actually have the 3 projects completed and bring business value<p>B) Hire 3 teams of engineers, managers, UX, whatever, and keep them salaried<p>C) Do not have the 3 projects at all<p>The budget often allows for initial development only, making option B non-viable.
This is a good example of Coase's "The Nature of the Firm" [1] as applied to services.<p>(The question, though, is why the three badly-performing services aren't replaced.)<p>[1] <a href="https://en.wikipedia.org/wiki/The_Nature_of_the_Firm" rel="nofollow">https://en.wikipedia.org/wiki/The_Nature_of_the_Firm</a>