Why's that company so big? I could do that in a weekend
danluu.com
danluu.com
Recently a junior engineer said this to me about Uber, and I helped him to understand - His logic was "it's just a taxi app".
There were loads of Taxi apps before Uber and loads of them after Uber. Yet none of them were uber?
Sure that a medium complexity CRUD app can do the pickup and scheduling, and spit out some json to the app.
But what if you have 100,000 journeys taking place simultaneously, and you must track their positions so that you can render the journey map on the invoice?
Can you do live traffic planning and re-route around the busy traffic on the fly?
Does your weekend include the full billing system? This is a mandatory requirement for a business.
Can you spot busy periods and increase the fares according to the laws of supply and demand? All online in realtime? Can you continuously A/B test this to optimise profits?
Can you deal with the fact that maps and roads are always changing?
All of these and more are the things that make Uber, Uber, otherwise you're just one of those shitty taxi apps that failed.
Still think you can build it in a weekend?
The success of many companies, and probably all of the unicorns, has nothing to do with technology. The tech is necessary, of course, but so are desks and an accounting department.
Internalizing that has been difficult for me as an engineer.
The root cause of the development bandwidth problem was that we wasted vast amounts of time and energy on building misfeatures. And we built so many misfeatures because we had way too much development capacity in relation to our product planning capacity. So the BAs didn't have enough time to fully develop ideas before sending them to engineering, and were instead stuck throwing things over the wall when they were still half baked. All these half-baked ideas took time to build, and then they took time to fix after they bombed on the market, and they slowed everything else down since every new feature is something you have to ensure still works when you make a change in that part of the software. Day in, day out, we were taking on technical debt to cover our design debt bills.
So then we tried Agile, and man oh man did that make things worse. 'Cuz now instead of just lobbing things over the wall, the BAs had to be actively involved in every sprint. There goes any opportunity to sit down and concentrate, because now you've got a nattering horde of 20 developers all trying to get clarification on last week's decisions, which leaves less time to make this week's decisions, which means next sprint things will be even more sketchy and ill-defined.
The correct solution would have been to hire more business analysts, and they key thing we needed from those business analysts wasn't instructions on what to build. It was instructions on what _not_ to build.
This is 100% true and unfortunately gets distorted from the financial backers who pump them up for unicorn status. Quite a dichotomy:
"Software is eating the world!"
"The hard thing isn’t setting up an organizational chart. The hard thing is getting people to communicate within the organization that you just designed."
I expected him to go off and actually attempt building it, that way he would get some more experience.
And he did! He went off that weekend and wrote a proof of concept route planner, it was great to see him learn something new and complex
I think a big part of the disconnect being discussed originates in the myth that CRUD-based apps are fundamentally easy. This simply isn't true. The challenges of building a modern, complex, scalable CRUD app with good UX and a maintainable code base are not 'less than' challenges rooted in algorithms or bit bashing. Doing it well enough and fast enough to be competitive in the market is HARD.
Uber and Lyft are not just taxi apps. They are massively polished. When I use them I am astounded at how good they've gotten the UX and then I shudder at how hard that must have been across two mobile platforms and in the presence of very unreliable networks. I've ordered an Uber with no cell Internet using barely usable coffee shop wifi from a block away.
Then you have scaling, which brings up or creates issues you just do not see at smaller scales. Big O type considerations and weird edge cases that only come up once every billion transactions start mattering.
Then there is all the big data stuff. These services do tons of route optimization and analytics.
So yeah marketing, sales, fund raising, management, etc. also matter but tech often matters as much or more. It's just that junior engineers usually only see the tops of icebergs. This is why despite decades of pure biz people saying "tech doesn't matter" you still rarely see founding teams succeed without at least some tech founders but you do occasionally see even lone tech founders make it. (But those tech founders do have to know or be willing to learn the non tech stuff!)
> Internalizing that has been difficult for me as an engineer.
After I got over that particular hurdle, I would still think:
Ok, so "build it and they will come" is not a thing, got it. But still, engineering is most important by far. Without sales, support, marketing, or legal, you still have a product, just one that is adopted slower. Without engineering you don't even have a product to sell in the first place.
And that's true. But in the end it's just splitting hairs. It doesn't matter. Over the longer term, no successful, scalable business is ever going to exist solely as an engineering team. Every job function has a purpose[0] and gets you where you want to go faster; in some cases, lack of certain non-engineering job functions will make it impossible to even do certain things.
So sure, you can bootstrap a product with just a few engineers and nothing else, but unless you're ok with it being a niche-market product that you spend all your waking hours working on, an engineering-only org is never going to cut it.
[0] With the obvious exception of those people hired to satisfy the latest management fad du jour, or to give the CEO's deadbeat nephew something to do with his time.
Execs love to think this but it's just not true. Top heavy companies waste money. It's true that tech of not the only ingredient but for a tech company it's critical. Good tech is not a commodity. Top-tier engineers are worth as much as a good CEO. That is if you want to remain lean.
I suspect this is because everyone wants to not only feel as part of something but they want to make an important contribution. I venture to guess accountants at Google do not feel they make a difference to search. The culmination of parts is what makes the company whole and all those parts are required.
Its hard to accept you are not as important as you wish you were. Its a great step in the maturation process of one's professional career though.
Have you considered broadening your personal definition of technology past computing and engineering?
From Wikipedia:
> Technology can be the knowledge of techniques, processes, etc. or it can be embedded in machines, computers, devices and factories, which can be operated by individuals without detailed knowledge of the workings of such things.
Technology is the creation of systems. Those systems run as much on the users of that technology, and the members of the organisation supporting it, as they do inside of microprocessors.
Technology exists largely to accelerate the pace of development and of course, it's never a sole driver of any business. There is no reason why you can't create a small-scale uber with call centres and excel spreadsheets but I doubt it would reach the scale and impact of what Uber is today. Granted that, it's hundred times easier to figure out to technology than business, I won't trivialise role of engineering because it's something allows a business to near its global maximum.
The feeling that the CEO I was working with was doing mundane tasks was astonishingly - he even said that he could to his whole job using his smartphone.
But after trying to do the business stuff myself I realized that no one in all of this process is irreplaceable - finding a good software developer may not be easy, but it's also not easy to find a good CEO. This is important to realize that software developers shouldn't see themselves as some type of elite.
The main problem is that junior devs don't realize that 90% of business is based on networking and being friends with people who are in middle management and want to increase their reputation in their big corp. You don't get big clients because you're a genius hacker, most of the time those B2B applications are simple CRUD apps. You won't get that $500k because you simply didn't play golf with the key partners. I'm not even exaggerating, I've seen that the best deals are made in ones "spare time".
Maybe startups are another breed than the software companies I know, but don't drink the cool aid and don't assume that technology is your main differentiator. It's working with people all along.
I think it isn't even about scaling high-performance systems, it even starts with the mindset of those who think that software developers are entitled in some way, usually junior devs and people who never did any real business work.
Most of the unicorns are founded with engineering talent coming straight from Stanford, MIT, Harvard, UCB, Waterloo etc. you name it.
Making a company successful is as much about economics of scale than raw engineering and of course, both are closely related in this day and age. Engineering shapes what and how your products feels like in real-time (= understand very short code-to-production lifecycle).
It might not be politically correct to say but I am not here to make you feel better. Anyone who has actually been in a team at a company that has exponentially grown will tell you the same: your chances to ever survive that "first wave" of users is directly proportional to your ability to hire the best, which of course is a lot easier when they are your current or former classmates.
That's not to say there aren't companies founded by people not going to the schools mentioned above or that engineering talent is only available at these places. It is obviously not the case.
However, the density of talent at top-schools is absurdly high. And this is a game changer for most early stage companies and even more so for soon-to-be-unicorns.
The weird thing is though, I still actively encourage new devs to make this mistake in certain circumstances. For one thing, telling them no isn't going to help, we have no shared context, and the math of their productivity versus mine works against me spending too much time convincing them.
If the problem has a logistical or bureaucratic component, once in a while the stars align and they manage to pull off something the department has been trying to do for years but always runs into a wall. Some people in an organization will assume something is true if they hear it from enough independent parties. I know if three people ask me the same question about a block of our code, I start looking at that code suspiciously. Clearly something is wrong with it. Sending the 5th guy to ask some IT guy or product manager he same question, especially in the way a new person tends to formulate questions, sometimes knocks the cobwebs off and the person decides to change their behavior or volunteer to do something they have resisted doing before.
A week of junior dev time for a 5% chance to clear out a bag of tech debt is a good investment IMO. And if it doesn't work they learn something about why things are the way they are.
I had a senior coworker who used to laugh and say "You're new here aren't you?" and I started giving him grief for doing it. Sometimes the new guy is the only one who can get things changed.
Additionally, the new guy will be much happier when he's treated the way you suggest. I know I would have appreciated that instead of the bs I got at my first proper job in the beginning.
Isn't ignoring regulations the most often quoted reason for Uber's success?
For example, if public opinion weren't on their side, perhaps due to, say, Uber rides being as dangerous as they're sometimes claimed to be rather than as safe as statistics show them to be, some of those "little" city lawsuits could have blown up much worse.
Remember, their core product was not violating regulations: it was filling empty spots for legit black limo drivers, and was more expensive than taxis but still competitive because of the quality of service.
Getting regulations to ignore you is the hard part.
If you invent an app in a few hours, then get fined out of existence your app sucks.
If you invent an app in a few hours, then it crashes under high load, your app sucks.
If you invent an app in a few hours and your code sucks and you can't adapt it later, your app sucks.
They employ over 2000 engineers (just devs, excluding support staff, etc.). They use micro-services designed to the point where teams can't reuse pre-existing services. They are rewriting the same functionality over and over, and over and over again, as separate teams don't even have a clue what has already been written. Pick a piece of functionality you need. There are straight up 20 different APIs that do the exact same thing, but good luck figuring out which one you should be using - oh wait, why bother when you can just write the 21st version of the same thing. They are at the point where they have no clue what their repositories contain. In the video, he can't even provide an accurate number of deployed micro-services. THEY CANNOT EVEN ASSESS WHAT THEY ARE RUNNING IN PRODUCTION. They're literally drowning, and cannot recover.
The point of the article is wrong. It's not about what can be done in one weekend, it's what can be done in 12-24 months by a competent team. Yes, Uber operates internationally which comes with a very crazy set of challenges. 2000 engineers worth of challenge? Not even remotely close. You should need fewer than 100 people who really know what they're doing, and another 300-400 people who can follow the lead of the first 100. If you need more than that for a single product (ie: Google does not apply as they have 100+ full products), you are doing things wrong.
If you're going to provide the anti-thesis, don't use Uber as your example. They don't even understand how their business is managing to remain afloat from a technical perspective.
[1] http://www.zdnet.com/article/uber-to-invest-500m-in-mapping-...
As far as I'm aware, Uber doesn't violate taxi laws. Uber started out providing "black car" services which are not classified or regulated as taxis. Never have been, still aren't. Black car services are ones where you schedule a trip in advance, and there's no "hailing on the street". Being able to hail taxis is what makes them taxis and subject to regulation.
A lot of the drivers who first began working for Uber were existing black car drivers, and who operated their own black car business on the side. Many still do. Uber didn't come along and make this existing class of ride service illegal.
The only vehicles subject to taxi regulation are ones that offer rides to people on the street without prior arrangement, as far as I'm aware.
https://www1.nyc.gov/nycbusiness/description/livery-car-base...
Maybe I'm a super slow architect and developer, but I'd estimate that to be a greater than 8 hour time commitment.
I assume that the org's leadership acted in good faith, that someone honestly think's a non-slapdash solution would be a couple hours of work. It boggles my mind.
And yes, I declined their invitation to pre-screen and thus did not complete the interview process.
So yes, I would assume that includes things like full email validation round-trip too.
Even just slopping together an in-memory, no-email-sent deployed solution is at least 3 or 4 hours in my book, which seems way excessive for a pre-screening question!
When Uber first released, my guess is they probably couldn't do most of what you list above. But it didn't matter, because they had one compelling feature: they routed around regulation. This allowed them to pay drivers more and charge riders less than traditional taxis, while taking a cut for themselves. This is a clearly profitable position to be in, which means that they have the money to bring in capable business analysts and programmers, and the rest of what you say above will happen naturally.
The taxi apps before Uber didn't recognize that the killer feature was routing around regulation, and the taxi apps after that didn't do it first.
Sure, I can't write Uber in its current state in a weekend, but I could absolutely write Uber's minimum viable product in a few days. The problem is having the right combination of a good idea, the correct understanding of why it's a good idea, and the expertise to execute it (not just technical expertise).
It isn't the advanced functionality and scalability you're talking about here (that was built in reaction to its popularity) that made it popular. It was their MVP.
You mentioned 5 product "concerns" that Uber must contend with to make a point. No doubt if we brainstormed more we could come up with perhaps 10 or 20 more such "concerns".
Now let's be very generous and assign 10 engineers to each concern.
I still come up with a maximum of 200 engineers for Uber.
But Uber has 2000 engineers.
I don't see any creative ideating that would justify that many engineers _as necessary for the top or bottom line operation of Uber_.
They are there for other reasons but not because Uber needs that many engineers to operate.
> Now let's be very generous and assign 10 engineers to each concern.
> I still come up with a maximum of 200 engineers for Uber. But Uber has 2000 engineers
There's two ways to interpret this: 1) Uber is overstaffed by an order of magnitude. 2) You are underestimating the complexity of Uber by an order of magnitude.
Uber might be overstaffed, but I suspect the answer is mostly that you are drastically underestimating and don't see the complexities of running a large-scale service in multiple countries, dealing with regulations, worldwide scalability, time and cost estimates, surge pricing, tracking and mapping, payroll, billing, payments, apps, internal IT, etc., etc., etc. There aren't 10-20 "concerns". There are hundreds.
I bet they have at a hundred engineers just working on billing and they're all overworked.
> I don't see any creative ideating that would justify that many engineers
Because most of Uber's engineers aren't there to build "creative" solutions. They're there to enable the business.
It seems after reading through this thread that I am definitely in the minority on that opinion, but I'm not sure if I understand the position there.
How many engineers would Uber need to have before one would say "okay, that's too many". 3000? 5000?
Uber can afford 2000 engineers. That doesn't mean they are anywhere near good at utilizing them, which seems to be the implicit assumption in many comments on this thread.
Google has in the tens of thousands of engineers, which they can afford to have because of Search. I highly doubt they are anywhere near reasonably utilizing those engineers to top line or bottom line product value.
> There's two ways to interpret this: 1) Uber is overstaffed by an order of magnitude. 2) You are underestimating the complexity of Uber by an order of magnitude.
The third interpretation is that we have no idea what else Uber is working on besides the operations that are visible to us as consumers. Uber can afford to pay 100s of engineers to build out a few technical concepts/prototypes that will never see the light of day. They basically need to do this, because their unicorn valuation isn't based on chasing the vanishing margins of the taxi industry, its based on owning an entire market that won't exist until they create it.
I suspect its a mix of all three.
Yes, competing with Uber now, with "this can be done in a weekend", is naive. But that's not the point.
The point is, that there are plenty of problems you can make a lot of money on, with a timeline anywhere from a week to a year. Some will be sustainable, and some will be simple cash grabs. The hardest part is identifying not just what, but when. If you have enough connections in the industry, it can be much easier to predict this than if you are on the outside of things.
I have built plenty of things people would say "I could do it in a weekend". And yes, a weekend is a little short, but many of them took just a week, at least initially. The answer is not "Uber does all these things, you need to too." The answer is, "you need to predict the next Uber, so you don't have to do all the things Uber currently does."
However, remember l that Uber (probably) started without any of those complexities. Probably just on a weekend.
So I think the absolutely incorrect "I can build this in a weekend" could be rephrased as "An absolute MVP (Or a proof of concept) like this product could be built in a weekend".
This would make sense, right?
Maybe, theoretically, in some cases. But even so that's very different from the original "I could build that..." bloviation.
That happened on my last trip. I felt bad for the driver so I helped him out finding the best way to pick up a passenger after the first two cancelled.
I think Pool is a good thing but not in rush hour traffic where going slightly off the route adds 10 minutes to a trip minimum.
Hence it's not uncommon to see clones of things (e.g. Dropbox, slack, etc) developed at fractional cost.
Your junior may be onto something , get shares in his. Ew startup quick !
A classic example is banking or money transfers (like paypal). So many people think that financial services are nothing more than moving bits around, which seems like an easy thing to code. Aside from the fact that it's not as easy to code as one might imagine, that part is maybe only 1-5% of the business. Paypal got where they are not because of the quality of their code or their operations but because of their relationships. They established relationships with banks, with regulatory agencies, with governments, and they spent years and years doing these things. They signed contracts, they established trust, they created systems for interfacing with many different banks and governments (not just tech systems, but policies and personnel). The result is that paypal is now one of the easiest ways to move money around the world with minimal friction. Cloning paypal's tech wouldn't enable you to clone their success, for those reasons.
Same thing with Amazon. Amazon's user facing software is only a fraction of their operations, their main competitive advantages are selection, price, fast fulfillment, and customer service.
You underestimate the amount of luck involved in becoming Uber. It's not all luck, but luck is a major factor.
There probably is a lot of luck involved in becoming Uber, but if you can make an app that good in a short amount of time, then the opportunity cost in doing that and sending a demo round to a few dozen minicab companies is very, very low.
Yet these companies are still stuck with horrible apps, because in reality it takes a lot of time to develop a good one, even if a prototype is fairly trivial.
1. Convince customers to download the app, give their credit card, and then trust their rides and selves to a driver
2. Convince drivers to clean up their cars, download the driver app, and turn it on, and wait for customers to ask them for rides
And beyond the technical issues: Can you effectively deal with the negative PR that results when you increase fares during a natural disaster or terrorist attack?
Uber isn't just an app, it's also a company and a brand and a service. It's something people understand, it's something that's popular, it's something that people rely on.
So sure, let's say a really good dev could crank out a software engine that does everything Uber does in a month. Now what?
Anyway, here's a related link: https://www.quora.com/Why-do-AirBnb-and-Uber-need-so-many-en...
And here another: https://news.ycombinator.com/item?id=12597232
No way you can delegate work to 2k engineers and tell them what to do for next 2 days. Physically impossible.
I'd probably just use the 10 most productive engineers, and tell the others to prepare for testing :)
It's not that Uber needs all those engineers. It's just a question of marginal cost vs marginal return. Uber made 1.5 billion in revenue in 2015. An engineer costs roughly $150k / yr. An additional 100 engineers only have to make enough small improvements to increase revenue by 1% to pay for themselves.
This number is far too low. Uber is headquartered in San Francisco.
The MVP can be built in a weekend though.
Think a bit further:
- Hardware needs to be resistant to harsh diesel engine vibrations
- 3G/4G connectivity
- Need a mobile data contract with local ISP
- Software needs to be able to handle network disconnections
- GPS needs to be able to pin-point at which stop the bus is currently stopped, even with bad GPS coverage in larger cities
- If the bus skips a stop because of a detour, the software should be able to detect it and announce the next stop
- The announcement should be bi-lingual for Airport busses
- The announcement should work for people with hearing aids
- Server needs to know all bus-stops
- Server needs to know different stop types, such as bus terminals, intersection stops, regular stops, hand-over stops, virtual stops
- Server needs to be able both work of a yearly bus schedule and real-time update
- Server needs to output in an understandable JSON/XML because the government subsidies demand an open-data format
- Server needs to publish data to an open-data server because of the subsidies
- Because the bus-company is sponsored by European Union money the control interface should be translated to German/French/English/Spanish
And now this weekend project takes a team of 10 engineers working for a year.
Then they opened their APIs, and now I have a half dozen apps to choose from that will show the approximate time until the next bus from a particular line will reach any given stop.
(Not always 100% accurate, but useful enough to know when to wait indoors for 5 min if it's raining, or pick another line/choose to walk because of delays.)
That's all speculation though.
We had that, through GPS + GPRS (or SMS?), back in 2001-2 in a small city I was living in Europe. Complete with full (flash based) website map of where each bus is.
I used it to get out of the tech park/institute I worked at and into the bus stop outside at the very last minute (since bus timetables where completely unreliable).
Displaying the actual bus status, though, is huge progress.
it is scalable because the bus-stop transmitters are added , moved, removed as needed.
updating the data can also be done remotely
These connections are in both the busses and the stops. The reason is so the stops can provide real time updates to people at the stops too. If a bus breaks down its no longer tracked on the real time updates so you are not effing and blinding because a the stop said there is a bus due in 5 mins and no bus comes. And if a bus is removed from service unexpected then the information on why can be feed to people waiting for the bus. People are less likely to be pissed that a bus didn't come when expected if they are given a valid reason.
Personally I was hoping they used some form of radio link I could of sniffed with a SDR so I could put a live updating sign in my house. I just scrape the data from their live feed they use to update the tracker on their mobile app/website instead.
Broadcasting out a signal from the stops could need a transmitter that may need to be licensed as the signal would be to be picked up quite a distance from the stop. Also not all the stops in my area are these "real time updating" stops as they are normally put into covered stops (EDIT: Bus Shelters... The correct term wouldn't come to mind while I was typing this.) and some of our stops are just poles in the ground with a sign on them. The busses tracking their own position wouldn't need these stops upgrading to give this information to people on board the bus as the covered stops can be quite a distance between each other and removes any issues if a stop get damaged and stops broadcasting data (say a car crashes into it).
The busses tracking themselves also have benefits that don't visibly benefit passengers. The services back office can monitor busses and spot problems on the network as they happen. Unexpected heavy traffic on a route may trigger the company to skip or stagger a bus (one of my local routes in advertised as being "every 5-10 mins". The real time traffic condition information could also be sold on to other companies (not sure on the value of this data esp for busses that run once an hour or even longer).
Also, there are things you want to do that this doesn't cover. For example, announcing the next stop when you pull away from the last stop.
I guess it is easier in the long run to have all routes mapped and instead of GPS you use something like doors open / doors close as a trigger to jump to the next entry.
For maximal accuracy simply have an electronic beacon of any sort broadcasting an ID that corresponds to the stop and you've got it solved.
And the entire data set for the route should be able to live offline onboard the bus. Changing bus/numbers routes should include the step for updating route data.
> For maximal accuracy simply have an electronic beacon of any sort broadcasting an ID that corresponds to the stop and you've got it solved.
That's not remotely accurate for the reason above.
> And the entire data set for the route should be able to live offline onboard the bus. Changing bus/numbers routes should include the step for updating route data.
It can. E.g. the old London system used odometers. But that was sufficient only for showing "next stop ..." and for reporting very rough estimates. Today it uses odometers, gps, rate gyros and turn rate sensors to be able to more accurately position the buses along a route, and they still regularly "give up" and take a bus off the schedule when traffic conditions means the uncertainty is too high.
3G is necessary for live ETA, if you want to get fancy. All these complications, in my view, are worth it if you want a system that works 24/7 and serves thousands of people daily. The HW and SW dev costs are acceptable, but it does need a decent team, depending on what the starting point is and the ability of the team members.
Yeah, and now we need to install and manage thousands of beacons in bus stops in pretty hospitable conditions.
Of course, GPS isnt perfect either. It tends to fail in CBD areas.
I can't imagine many reasons a route would have to change on short notice (accident blocking a road?), and in those situations the announcements not quite being right would not be the end of the world.
I've never had this problem.
That's a non-issue.
>- 3G/4G connectivity, need a mobile data contract with local ISP
This is a duh!
>- The announcement should be bi-lingual for Airport busses
It can always not be. How would that be worse than NOT having the announcement at all? Besides what would the other language be? French, German? That would still be useless to 90% of foreign visitors...
I guess the names of the stops are untranslatable anyway :)
I think it just counts the number of stops and has some input from the driver
Sometimes, a doorbell just needs to be a doorbell.
Is it more economical to pay for constant cellular connectivity across 1,000 buses, support IT staff for when the system fails or needs upgrades, etc. or to have the guy you're already paying $15/hr press a button after each stop?
The on-board display can overlay a map and call the next stop based on proximity. Not a weekend project, I'll admit, but many existing moving parts available off the shelf.
Hams play with this stuff... a lot.
[0] https://en.wikipedia.org/wiki/Automatic_Packet_Reporting_Sys...
Half of your points assume that current transportation companies don't have any digital data about bus stops and reroutes.
Anyway I haven't been in a bus that doesn't have such a system for at least for a few years (in western Europe and China).
The question is what is more work: Using the existing data that is stored in some obscure format for which you first have to write an importer/converter or just recreating the data. Add the fact that the existing data might need some cleanup/additions (e.g. times on timetable are only stored with minute precision and you want second precision for more accuracy).
You can do quite a lot with a small local company. It's global reach that's expensive, as soon as you start needing any kind of high-touch sales.
GPS and 3G/4G are trivial add-ons. There are stacks for mobile data.
RFID doesn't have the reliable range, so that won't work as a solution.
It's not really a hard problem for a competent small engineering team with a mix of embedded hardware and software skills. It's not quite a trivial problem, because there are some interesting edge cases, mostly when a bus is diverted. But there is absolutely zero rocket science required.
You could hack something unreliable together in a weekend, but it would take up to six months to get all the bugs out, do the production engineering for a bullet-proof solution, standardise the installation process (if retrofitted), and so on.
Double that if management is poor. :)
Those last parts often get forgotten in software. Hacking something together that kind of works if you don't look at it with a visible frown is hobby coding, not engineering. Engineering is the boring work that happens after that, to build something with a quantifiable many-9s uptime that meets or exceeds a standard spec with comprehensive test cases.
Source: I don't drive,and ride the bus a lot.
Some sort of near-field beacon on the stops might be more durable than relying on GPS, but it won't help with missed stops.
Breaks down quickly if you need bi- or tri-lingual announcements, which is the norm in many popular tourist destinations.
Aside: I'm impressed with the amount of bike-shedding for this one. Though I'm part of the problem, too :-)
More like 2 guys working for a month.
(I calculated the geometric mean of the numbers both of you have given, in case you're wondering ;) )
I'd say something like 3 people for 6 months to 1 year (not all 3 being needed 100% of the time).
That's just faster horses though.
Conductors aren't a solution to a problem in themselves, they're a means to solve a problem. So what's the actual problem? WHY do they want conductors back?
A better consideration (imho) is this:
For a given business/offering/product, what is a likely optimal number of engineers needed to continuously deliver the product's value efficiently? Then: How far is a given company from that optimal number?
This is a hard analysis to do. It is virtually impossible to quantify or put this kind of evaluation in a laboratory. There are too many counterfactuals that would be at play.We really just have to consult our experience and consider which of these is the more probable:
(1) A business/offering/product team with lots of money is really good at utilizing its hundreds of staff. OR (2) It's not.
I've seen a few (2)s from the inside. I have never seen a (1). Therefore I lean more probabilistically toward the belief that a company is needlessly big.
What surprises me is that that's not where people on this thread are leaning---but has anyone on this thread actually ever seen a (1)??? If not, where is this belief coming from? I've never seen a ghost, so I don't believe in ghosts....
In my experience, the answer is two at best and more often, around five. The incremental work product from each new hire diminishes more rapidly than many realize, but the incremental revenue might still make such hires worth it. As Dan points out, a few percent increase in efficiency from optimization can be huge. It might take multiple people quite a while to achieve that, and it will still be worth it. There might be another group of several people trying something else that doesn't pan out, but that doesn't mean they were unproductive dead weight either. Bigger companies have to take risks too. They just take them differently, and the cost is more obviously attributed to them instead of the market.
Maybe a single startup could do what Twitter (for example) does, in fairly short order. Even that's unlikely when issues of scale etc. are considered, but that's not even the point. That single startup is not a valid point of comparison, because it doesn't count the cost of failed experiments. Add up all of the startups trying to do what Twitter does, including the failures, and that probably be a better estimate of how big Twitter (Uber, Netflix, whatever) needs to be.
This isn't literally true in all cases, but it points out that the business decision of how large to grow is based more on that sort of reasoning than "what's the minimum team that can get X done", and maybe a bit different than the analysis you propose.
It is nearly always more probable that a large company with several hundred or more plus engineers doesn't need that many. That those engineers are there for other reasons -- political reasons or speculating on new products, valuation reasons, etc. -- than for the reason that those engineers are fundamental to the top or bottom line of the company's core product/s.
Uber does not need 2000 engineers. That's a prima facie fact.
I've worked inside several large companies and saw this first hand. Hundreds of engineers across teams doing "stuff", no doubt, but nothing that ultimately or ever tied to the top or bottom line. The only ideas that I could come up with for why these people were there were: perhaps the headcount helped company valuation, perhaps we needed that many benchwarmers for when there was company churn, maybe there is some political reasons a manager wants a sizeable headcount on their team, or maybe it's just leadership ignorance as to how things are getting delivered. But in no way could I see a concrete justification for many teams and many engineers.
What am I missing?
I've seen some other posts by Dan before but didn't know what kind of things he works on because I generally don't check that because if I did then I'd end up just checking people instead of reading what people were writing. Anyhow, from the article linked above -- for which a video is available at https://www.youtube.com/watch?v=80LKF2qph6I -- it turns out that Dan has done quite a bit of work with implementing search related technology, and I think that was interesting. His contributions to BitFunnel can be seen at https://github.com/BitFunnel/BitFunnel/graphs/contributors
There is a lot of communication overheads, a lot of bureaucracy, backwards and cross compatibility concerns, conservatism, wasted duplicate effort, wasted pointless effort, some people who aren't contributing much etc. etc.
This is why tiny startups can sometimes dethrone a large leader. However that's often a multi-man-year effort.
So I'd rephrase the statement: "Why's that company so big? I could do that with 20 brilliant engineers and 18 months". I think that order of magnitude can attack pieces of any established software business from a technical perspective. Then there's obviously the business side.
If they're crud apps then everything else in between is just glue programming.
The author of the post covered some very astute points but one not covered in much detail is the challenge of scale and reliability. Maybe this falls under the bucket of optimization and/or latency but I think this deserves being called out on its own.
Once you have Uber-scale number of users requesting taxis at any point, and have a network of drivers constantly communicating their position with the app, suddenly you no longer have a trivial crud app on your hands...
They are normal business that happen to be enabled by technology, but the technological challenges are not new or to be frank uncommonly challenging.
Because we're I assume mostly coders, we think they are differentiated by tech, almost everything else (marketing, sales, customer service) is likely more important.
Bad technology could certainly kill a platform, but excellent tech won't save it, and a mediocre implementation is good enough.
Uber especially has requirements that make it tough to scale correctly. You need to track each Uber session in near real-time, right? That means you simply cannot afford to drop or interrupt those sessions. It's a completely different problem than scaling Instagram or WhatsApp.
Uber real-time requirement of what < 30s? (for a viable product).
No that doesn't seem like a challenging problem. It seems like a problem that would require almost no throught for a MVP, and then incremental challenges as the problem scales.
It seems like a problem that is so comparatively easy compared to what computers are capable of that I wouldn't even class it as "difficult".
But what's telling about your answer is that your thinking about this technical challenge, this feature as being of primary importance.
Do you think if Uber was 10 times cheaper than a regular taxi real-time tracking would be as significant?
Uber's funding which has enabled them to subsidize their expansion (and rides), advertising and promotion and possibly that they plugged in to a easily accessed communications channel (mobile apps). Were likely all more important than the quality of their implementation.
Also Uber is pretty conveniently partitionable. There's a little bit of overlap in some places but that's mainly for the available drivers screen.
The tech may be simple, but the business side of it certainly isn't. The "I could hack that up in a weekend" attitude is often true - but it only covers the bare basics of the software it doesn't even attempt to address the business, which if often where the real struggle is these days. Especially if your background is development. I think many engineers still say this knowingly though, just to (perhaps incorrectly) scoff at the value of good business people.
[0]: https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
It's great to know, but often it's not so great if it leads to inaction...
E.g. if you have a "I could do that in a weekend" impulse, sometimes it's worth following that impulse. If you're right, you've spent a weekend building something potentially great. If you're wrong, you've spent a weekend learning about things you clearly didn't know in advance, and the lessons can often be very different from the objections you'd have throw up if you thought about it without doing, and sometimes what you learn may provide the impulses for another new idea.
But it's hard. E.g. my first impulse for anything that requires collecting money is how painful it is to deal with credit card processing and reporting and VAT and accounting, because I've done big complex billing systems with heavy reporting requirements, and compliance complexity etc.. It's very hard to put that impulse aside, and "just do it" and think about how to solve the payments afterwards. But that's how I did things he first few times I needed to handle payments.
Slack also took much longer than a week, and to be honest, the actual chat part of slack is pretty meh. Where Slack unbelievably shines is in the buttery-smooth onboarding process and the management around the chat accounts.
* building something people actually want. * advertising * engaging with users * aggressively promoting your product. * customer service
It doesn't matter if what you did was hard or not. It matters that you can acquire and retain customers.
I think this is the key realization, and it's actually a variation on Conway's Law[0]. In a nutshell, some part of BigCorp discovers (or believes) that by hiring a software developer for $X, they can make $Y > $X in return. So they do.
As long as some part of BigCorp is able to do that, you get more software engineers. This continues until you either (a) run out of budget, or (b) run out of opportunities.
Because it's not done "top down", it less efficient than it could be to get all of the features in total. But due to how these engineers are funded internally, it's not possible to do the "top down" approach at all. And that's okay, all that really matters is that $Y > $X.
[0] https://en.wikipedia.org/wiki/Conway%27s_law "Organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations." In this case, it's not the communication structure that causes the perceived bloat, it's the funding mechanism. The basic idea that software organizations reflect some non-software, human structure in the business, holds.
Then came search customization. Suddenly, no more cached replies.
I think it's not a coincidence, therefore that many of the people I run into who advocate a universal basic income, arguing tooth and nail against a job guarantee (the YC guys no different) is young, tech savvy and overly optimistic about the scope of automation to subsume all human labour within months.
People waste a lot of time at offices doing things that aren't work. But our culture demands we be at work 8 hours a day, even if the work only requires 4 hours. Economists in the 1930's thought the world would be so rich by today, that people would only need to work a few hours a week. And the economy has grown vastly since then, and we are much richer. But I don't think most people have the option of working that little, even if they want to.
But that's a different subject entirely from automation. Those jobs can really be valuable and still be vulnerable to automation. AI has improved a lot in the last 5 years. I don't think it's implausible at all to imagine most jobs done now being partially or totally automated.
I don't think that's really true, especially in a big corporation. Transparency of the value pipeline in such institutions isn't great at any level, and big corps (and similar large institution -- government often has the same problem, for instance) have a tendency toward not making even the concept of the value stream that justifies the position known to the people working in it much of the time. Its quite likely that the people working a position don't understand how its supposed to deliver value (and are in a poor position to see the big picture of whether it does), while the people who do know how it is supposed to deliver value don't see the small picture of what actually goes on (and thus are in a poor position to evaluate whether it does deliver the value it is supposed to.)
There's no particular reason to think the people working in the position are in the best position to evaluate value delivery (or that even the people in the best position, whoever they might be, are better at answering the question than a Magic 8-ball.)
Yeah I know that's his point and that's why I describe his point of view as being naive.
It may be true that for some percentage of workers at any given time their role is experimental and may turn out to be unimportant or a failed attempt at change, and it may be the case that it take a while for these sorts of inefficiencies to be rooted out or resolved because the cost and time associated with doing so make it a low priority but that is something that people who are in those positions would not necessarily be aware of.
This is the same as when people say things like "I don't know why we are so precious with our kids these days. I never wore a bike helmet and I survived!".
Without the proper perspective people frequently form wildly inaccurate opinions.
I don't think he thinks "anyone not involved in hammering steel" is unnecessary, that's a bit of a strawman.
If all I have to do in order to make it a straw man is replace the word iPhone with horseshoe he's doing a pretty good job of constructing his own straw man.
The argument goes that big corporations have a tendency to hire more people than necessary because middle managers are rewarded based on how many people work under them. Or that people looking to keep their jobs, try to make themselves look more busy and valuable than they really are.
That story is completely ridiculous.
People waste a lot of time at offices doing things that aren't work. But our culture demands we be at work 8 hours a day, even if the work only requires 4 hours.
Then businesses have an opportunity to compete for talent by offering better working conditions. If they can do so profitably then they win.
Economists in the 1930's thought the world would be so rich by today, that people would only need to work a few hours a week. And the economy has grown vastly since then, and we are much richer. But I don't think most people have the option of working that little, even if they want to.
This is more a result of the spoils of productivity increases not being distributed evenly.
By having massive unemployment and under employment then expecting the remaining workers to work harder for less pay on average while more and more income is paid towards servicing private debt the finance, banking and real estate sectors have made out like bandits.
But that's a different subject entirely from automation.
I don't think so. It has a lot to do with automation because that is where the productivity increases have come from, but rather than the federal government guaranteeing full employment and setting a floor price for labour and a minimum set of conditions below which we consider employment to be exploitation, which would not only maintain demand in the economy but also reduce the inequality with which the spoils of those productivity increases are distributed, they have left people to fend for themselves and the economy has languished as a result.
Those jobs can really be valuable and still be vulnerable to automation. AI has improved a lot in the last 5 years. I don't think it's implausible at all to imagine most jobs done now being partially or totally automated.
Maybe in 1,000 years but I disagree that automation will have the type of impact people (particularly in the UBI advocacy camp) claim it will.
"Why not use [Example OSS Library]?"
"Nah, I can do it in 15 minutes."
"You know, they have [X] contributors, lots of great documentation, and 6 months of work into it."
"Yeah, I know [but whatever.]"
Depending on the situation, the library may have a ton of extra bloat that your application will never use. Also, recklessly deferring to open source libraries can potentially snowball into something like the left-pad fiasco[1].
[1]: http://blog.npmjs.org/post/141577284765/kik-left-pad-and-npm
I've seen some[1] bemoan its impacts on readability and others[2] complain about websites which artificially restrict themselves to (what can be) a narrow slice of the viewport.
[1]: http://bettermotherfuckingwebsite.com
[2]: https://plus.google.com/+LinusTorvalds/posts/2Ndtw3ZBRX2
It also has a reasonable default font size my phone, so it's easy to read quickly. This is pretty rare since browsers gave up on text reflow.
So maybe we shouldn't complain. These websites are just meant to be zoomed.
Although some web developers are cruel and block zoom with meta tag (I never understood why some developers did that, maybe for trolling people with poor sight?).
>7 fucking declarations.
Would have been nice
Anyone have pointers to such research?
Results of my research are below; everything I found is anecdotal, consistent with the other comments. The most robust is the presentation at Velocity in 2009. [4, 5]
My notes:
Small ecommerce vendor, 2012. One second delay in page-load causes 7% loss in customer conversions. [1]
Marissa Meyer, 2006 Web 2.0 conference. Extra 1/2 second in page load time dropped traffic by 20%. [2]
Greg Linden, 2006 (same link as above) "We had similar experience at Amazon.com. We tried delaying page in increments of 100ms and found very small delays result in substantial and costly drops in revenue. [2]
Greg Linden, Make Data Useful, 2006 - Every 100ms delay costs 1% of sales. [3]
Velocity, 2009. The User and Business Impact of Server Delays, Additional Bytes, and HTTP Chunking in Web Search Presentation. Multiple observations. My net: Delays under 500m measurably impact customer satisfaction metrics, magnitude increases commensurately with delay. (Microsoft, Amazon, Google) [4, 5]
1 - https://info.ensighten.com/rs/ensighten/images/just-one-seco...
2 - http://glinden.blogspot.com/2006/11/marissa-mayer-at-web-20....
3 - http://www.gduchamp.com/media/StanfordDataMining.2006-11-28....
4 - http://radar.oreilly.com/2009/06/bing-and-google-agree-slow-...
5 - http://conferences.oreilly.com/velocity/velocity2009/public/...
https://archive.org/details/mythicalmanmonth00fred Figure 1.1, page 5
To go from a program to a programming system (interfaces, system integration), you need to multiply the effort by 3.
To go from a program to a programming product (generalization, testing, documentation, maintainance), you need to multiply the effort by 3.
So to get a programming system product, you need to multiply the effort from the program step, by 9.
Nowadays, we need to compose indeed multipliers for distribution, reliability, availability, localization, targetting multiple UI platforms, etc.
And the original multipliers are also probably too small, when you see the effort required just to integrate testing and CI on some projects.
Full-stack developers are already a very fast evolution from the front/back end developers, which were an evolution from a guy doing just HTML/CSS in the 90s. Now you have to include sales, marketing, negotiation, project management, and business management skills on top of your full-stack development skills. The result is that something is going to suffer unless you are a genius, the product is super-simple, or you have 20-30 years to have learned all of this.
There's a much more interesting question in the form of: "Why's that company so big? A tight-knit team could do that in a weekend".
We technically-minded people are often pretty terrible at accurately picturing reality as it exists outside of our respective spheres. Consider:
"Why is Armani a billion dollar company? I could make a beautiful suit in a weekend," said the talented seamster/seamstress.
This sounds like it could be Apple?
I think, at a certain scale, it becomes necessary for organisations to ensure that there are certain people keeping specific things running. Let's say, a company doesn't have any specific person assigned for server administration and then one day, is confronted with a DDoS attack. Who is supposed to handle it? Whose responsibility is it? You have few people who know the basics of operating servers but no one who can swiftly respond to it. If no clear role is established, then the company is bound to face more attacks and possibly, lose more customers.
If they ever wanted to expand their product scope, for example, index their own searches instead of aggregation, they would start running into the obstacles discussed in the article. The Lucene comparison in the article doesn't apply to DDG (yet).
But really when you sat down and looked at it, what we were selling was a supported and tested product that could be configured and active in less time, with excellent ROI, and at significantly less than the cost of dedicating an in-house developer to do it. What we were selling wasn't cutting-edge technology, it was time and cost savings for a department that was almost certainly already short of both money and staff time.
Your search - site:github.com 961748729 - did not match any documents.
Obviously the quality of the product won't scale linearly with the number of engineers, but still, startups punch above their weight. Maybe it just highlights how much harder things get when the company reaches a certain size.
In the early years of Twitter, it would have been relatively easy to clone Twitter, but you won't have had the ecosystem.
Poster example: Google+
Something about 80%/20% rule...
It's relatively easy to build a product and even to ship it.
The real art in building a business to support it.
Yeah, no. It doesn't cost that much to maintain an index of that size. Not even remotely close. My roommate coded a search engine back in 2001-02 as part of a class project/hobby and it easily had an index that large, probably larger till he shut it down. The key lies in not crawling it all in a single day. And your index doesn't populate overnight, it takes months of slow crawling. You can maintain an index of practically unlimited size for chump change (well, compared to the millions OP was throwing around). Do people think Excite, Hotbot, Lycos and Yahoo! in the early years had $12 million per year to spend on their indexing? Hell no. Every single one of them would have went bankrupt in a week. Those companies weren't even worth that much back in the mid to late 90s. Your biggest cost is going to be user loads on your servers (CPU/Ram/Bandwidth), not maintaining an index.
Go out and sell the app to people and find out how easy it is.
> There’s also a wide body of research that’s found that decreasing latency has a roughly linear effect on revenue over a pretty wide range of latencies and businesses.
I'd be interested in seeing that citation list, particularly for non-google/amazon businesses.
Until reading that article, I often espoused similar views on applications. It was a really eye-opening read.
"Give me 9 women and I'll give you a baby in 1 month"
Maybe you could make, say, a Twitter clone, in a weekend. But you couldn't make one that can handle anything near Twitter's scale nor that is as feature-rich as the actual thing, and besides, nobody will be using it.
"Product and Engineering"
"Ops"
"Sales and Marketing"
"Legal"
Enter tasks and goals for each quadrant. Iterate.
This is the minimum effort required to sustain any app. Developers are mostly only aware of the first quadrant.
You could but you didn't so I can't use it...
I can reproduce E=mc² in a matter of minutes. Doesn't mean I could have ever come up with it in the first place.
The endurance part of the company has nothing to do with tech or even scaling or optimizing that tech. Not even close.
Another datapoint, I heard that an accountant counted that the actual number was 1 for 50.
In any case, when you're alone or a small startup, this doesn't seem much, but when you have 100,000 employees, this means that between 2,000 and 10,000 equivalent employees are all the time in the WC (and being paid for that, basically).
Of course, there are a lot of other overheard that become very significant when you have a big corporation, but that still exist (and that we easily discount) for small startup and individuals.
(And I've seen the half hour lines, in an office that had two WCs for 100 people. THEN you end up with people spending 10% of their day doing something other than work.)
I'm also not sure how that's relevant.
e.g: a sorted timeline if strings is easy, but add the simple feature of 'retweeting' and being able to 'unretweet' for example and things quickly become more complex.
these are large businesses with end user-facing "IT" side of the house being just the tip of the iceberg.
Maybe something like that ?
And also "Hofstadter's law"
No, maybe if twitter was still a tiny company you couldn't use it in Arabic but maybe they also wouldn't constantly be on the edge of going out of business.
Edit: I think this is also a regular criticism of Twitter because Twitter has spent the last several years trying to Facebook itself and strayed far from the original idea. You can argue the pros and cons all day since they're pretty much infinite on both ends, but Twitter as a company has spent vast amounts of money on a lot of features that none of it's original userbase really wanted (and drove a lot of people off in the process).
Me, I only really ever used it as a time-waster so I'm not awfully attached but I listen to a ton of podcasts and I can't count the number of hosts who disliked more or less every new thing Twitter did.
Then 2011, 50 million users 70 employees. Seems fair enough.
Now about 1500 employees. It worked fine and scaled fine with 70 employees so you wonder if hiring the other 1430 was good business. I guess if VCs are throwing money at you you may as well spend it on something. Though that's probably what Yahoo was thinking when it went to 11,700 employees and that didn't play out so well.
For example, as one grows they need to have a dedicated HR teams. These teams will demand for a HR software to make their life easier. If the software is an on premise solution then you require engineers to manage that software. Most HR systems require a RDBMS backend, so there is an additional need for a DBA. As this adds to the company, there is a need for a hosted Identity Management solution, which again requires dedicated engineers...so and so forth.
While there are many reasons for a company to be loosing money and most of them are related to building a sustainable business, from an engineering point of view it has a lot to do with hiring. Companies with lot of cash want to hire talented engineers and there is nothing wrong with that when getting the company off the ground. But as they grow the talented pool they can hire from gets smaller. So either they start overpaying for a great talent or offering above market rates for a mediocre talent. Its mostly the latter people who offer negligible intrinsic value while getting boat loads of money.
On the contrary I'd argue they've hardly done anything new, and that is why they are struggling. Think of all the things Facebook has done and abandoned in the same time.
But I like Twitter - I just wished they fixed some pretty obvious issues. I mean... Tweetstorms are like a request for a feature right there, and Twitter's response is... silence.
Hm - every time I suggest optimization (of anything), I'm shot down with "premature optimization is the root of all evil!"
This is unreadable as is.