Here's a thread [0] regarding the complexity of Uber's iOS app.
Dan Luu made a far better case [1][2] for this than I could. Worth the read.
0: https://threadreaderapp.com/thread/1336890442768547845.html
1: http://danluu.com/sounds-easy/
2: https://twitter.com/danluu/status/782974159156502534?lang=en
I don't object to lots of employees in principle, but coupled with losing money every single quarter, it's a red flag for me.
That’s not unique to them. Lots of Silicon Valley companies have engineering teams seeded with folks who worked whole life at Google, Facebook, etc. They default to writing custom solutions for everything, because that’s what they were taught.
I can only speak regarding my experience at Google, but the company has been moving aggressively toward industry standards for software development, primarily at the language level.
I constantly run see internal libraries in C++ being updated to use standard C++ smart pointer types, and Java being updated to use types like java.lang.Instant instead of some internal implementation created years ago.
What does tend to be custom are the systems that get built, not only because of the huge scale of operation, but also because of Google-specific security and compliance requirements. Also, the development tools and continuous integration systems are also necessarily specific to Google (and are pretty amazing).
But even then, there is extensive use of certain externally originating systems - memcached is one that comes to mind.
Why now? What were technical reasons this wasn’t done before at Google?
Build well? These things aren't built perfectly the first time, or anywhere close. You don't always know what you're building until you've iterated on it a few times. It's just ready to forget that you didn't know when you have the benefit of hindsight.
And build well and maintain? Not a chance. This should be obvious.
Maybe we have different ideas off what a small team is. To be, 3-4 devs is a small team. In context, I could say maybe ten developers, but I would consider that a large team. At that point I'd be preparing to split into multiple teams.
In not saying they needed 21,000, but it's likely we just mean completely different things when we talk about a small team. What does it mean to you?
Every one of those localized special cases that Uber puts a team on is them defending a moat against localized competitors. For the upstart localized app, that country’s payment system, driver laws, airport rules etc more similar to the basic 5 screen app Uber seems to be.
Anytime Uber let’s it’s foot off the gas in a particular place one of those will show up, offer drivers a slightly better deal, and Uber will have to match - killing any margin.
I'm never sure how much Parkinson's Law is at play with startup hiring in general. But I guess most engineers they hire provide value to the company at least equivalent to their salary.