I totally agree with everything you're saying. But I'm going to quibble with your phrasing. Apple's cash reserves belong to the shareholders just as much as Uber's funding rounds.
Too many CEOs operate under the mistaken belief that retained earnings is "play money" in the way that paid-in-capital is not. For investors, retained earnings are subject to the same opportunity cost of capital as funds raised by equity or debt.
Its management's responsibility to deliver returns exceeding the firm's weighted-average cost of capital. If they can't do that, then they should return capital to the shareholders, who can then use it an alternative higher-returning venture.
My sentiment was that if a company is losing money consistently and egregiously, they are on borrowed time and a borrowed dime in very real terms as the trajectory is towards 0 - but the context is largely psychological. To your point, waste is waste. I agree wasting cash generated from profits is equivalent to wasting it from earnings.
I'd insist there is some practically relevant difference in there though.
Wasting money during a trajectory to bankruptcy creates a narrative of negligence that accelerates failure, while wasting it during a consistently profitable trajectory seems like sub-optimal management. The kind of thing that is theoretically identical, but in the real world of behavioral economics, the former seems more certain due to how easily the trajectory to failure can be estimated. The latter creates a weak narrative because of hidden information - nobody will ever know what "could have been" and so can never quantify how sub-optimal the management was.
E.g. nobody is dragging GE executives out of retirement/the grave to answer for long-term effects of sub-optimal management, and further nobody could prove at the time it was sub-optimal, only hypothesize. On the other hand, everything Elon Musk does at Tesla is torn apart and front page news, because they have a trajectory towards failure a high school student could easily calculate.
So "management's responsibility" to optimally allocate capital is sound in theory, but in the real world of imperfect and outright unknowable information, nobody ever really knows what optimal is. Sub-optimal comes to be expected as normal, but accelerating a trend towards failure is a powerful defining narrative. Somehow this matters.
Put it this way: gravity turns space dust into supernovas. Dust is just ever so slightly attracted to other dust, so it accumulates and accumulates, and eventually it becomes so massive that it forms a star.
The theory that firms should beat the market makes money gravitational. A shareholder who beats the market will get more money than other shareholders. Now they have more money that they can use to invest in other market beating schemes, etc. If whether a firm beats the market is random, then some investors will win and some will lose but it all balances out. But if beating the market is not random (and how could it be totally random?) then those with the most money can invest in the best firms faster and more easily than smaller investors and crowd them out. Remember that companies only have a finite number of shares, so not everyone can invest in a winner. If there's even a slight bias towards having more money making it easier to beat the market, then eventually you will get a supernova.
We all understand this on some level. Why is insider trading illegal? Because it makes it trivial to beat the market!
Worker-owned firms are a great idea, but if that's the only ownership model then you lose some ability to diversify your investments. Everyone's 401k goes poof.
Thinking through this, what are the alternatives? Simple cash reserves are out (because most societies can't seem to shake the tendency towards inflation). Bank savings accounts are a good idea, although impractical in our current society because interest rates are so low.
Even if it isn't they have just branded everybody with 'Uber' on their CV that is on the market a low performer. Think before you speak.
_Why haven't you already done that?_
Nobody likes low-performers, even when you're flush with cash. Fixing their mistakes is demoralizing for your high-performers. The word gets around that you have low standards, and it's hard to recruit.
The only way to get your money's worth from them is to put them in death marches and grind them down until they burn out and quit.
I am always extremely suspicious of claims that a company is going to lay off its poor performers and magically be better. If they're telling the truth, they are actually saying that their existing managers are incompetent.
There's a reason that all tech companies try to brag that they only hire the top performers.
There's a reason that all tech companies try to brag that they only hire the top performers.
Performance of an engineer is relative to his environment. I was a top performer on some teams/projects and a low performer on others.
Even if they ace your hiring process, you still can't know how they'll fit with the team long term.
Another way to think about it is that everyone has some productivity, some contribution to the company’s net progress. If someone’s contribution is negative, they should already have been let go.
If their contribution is less than others, maybe “bottom 10%,” but it is still positive, you may be letting go a relatively poor performer in a round of layoffs, but you’re still shedding a person with a positive contribution.
You are going to be worse off, no matter how you sugar-coat it.
If you define performance as change over time then this would seem to have nothing to do with mistakes. From what I've read about the space shuttle programmers, they would have been classified as low performance (low change over time) but who also made with very few mistakes (as I understand their process). At the other end you could have high performing programmers (lots of change) with high defects that they're always fixing (which could in turn qualify as still more change).
With layoffs you want to apply “cut once” approach or at least as rarely as possible, in batches.
Constant trickle of layoffs is very bad for morale, no matter who is laid off. It is also bad for an external image of management.
For example, closing a plant, or getting out of a line of business. If Uber decides not to have anything more to do with self-driving vehicles, they might lay off everyone in its division.
That would have nothing to do with poor performance on the part of individuals.
On the other hand, there is “These people are underperformers,” which is part of Uber’s allegation as they throw their former employees under the bus rather than take responsibility for their management choices.
I contend that if people are underperformers, a constant trickle of letting such people go is not bad for morale. It’s perfectly normal.
“Did you hear they let Dave go?” “Yeah. What took them so long?” That’s the usual talk.
Whereas, “Did you hear that they shut down ML?” “Yeah, and it was half the database tuning group last month, who’ll be next?” “I dunno, but I’m not hanging around to find out...” is the thing you are describing.
Long story short, I agree that a trickle of layoffs is not good, but I suggest that this is true when the people being let go are not thought of as holding the company back.
I disagree that it doesn’t matter who it is. If they are underperforming in the sense of being bottom 10% but still carrying their costs, I agree with you about trickle, but then we can’t claim that letting them go makes the company stronger.
But if they are underperforming to the extent that letting them go makes the engineering group more effective, then management should have identified them earlier, done everything in its power to make them perform, and let them go if they didn’t improve.
Ignoring net negative employees, or being blind to whether they are net negative, or keeping them around even though they are known to be net negative is bad for the company’s bottom line and bad for its morale.
I agree with your points, but optics might depend on a company. In a startup or smaller company being aware that underperforming employees are let go might actually improve morale. For bigger companies it is a typical situation that you notice or get to know that people from other teams are gone, but you may not be aware of their performance.
> Nobody likes low-performers, even when you're flush with cash. Fixing their mistakes is demoralizing for your high-performers. The word gets around that you have low standards, and it's hard to recruit.
Fixing mistakes is part of development. I am yet to be part of a team that never made a mistake. Mistakes are how we learn and get better.
If the same mistakes repeat, THEN you have a problem but if a single individual is to blame everytime, then it's not the individual's problem - you have a bad team. Your team has failed at teamwork - the primary focus of any team.
If you have a team of dozen engineers making a car, the car does not drive until all the parts are not only in place but they all work well together.
The way to make all parts work well together is to have the designers of the parts communicate and work together, well.
If the engine guy is not talking to the intake and exhaust guys, don't be surprised if there are leaks at best or the engine blows up at worst.
I AM assuming each team member went through an interview process. If the going was tough where you could not interview and had to let just any person in, hopefully this person helped you through the tough times.
What value does the interview process provide if you can't figure out if your candidate is a high-performer or not?
Why did your interview process select a low-performer?
Also, performance is the output of a team - a single person should not be expected to provide high-performance day in and day out.
That's impractical to expect out of a human being. A machine and a person have vastly different characteristics.
If my team is working well, we will have a high performance team. There is no other way to have high performance sustained over a long term.
Each team member needs to actually looking forward to working with each other.
The other extreme is programmers work in these silos and come up with solutions that barely work well with each other and then there's blame game being played.
Why do that nonsense? Save money? No - of course not!
Just work as a team!
> The only way to get your money's worth from them is to put them in death marches and grind them down until they burn out and quit.
I don't follow.
Death marches?
First of all WHY do this at all?
What's wrong with the alternative "Hey, it looks like it's not working out. We will be letting you go and support you in looking for a job elsewhere over the next X days"
At one point in time in the past, you and your team interviewed this person and found them useful - what changed that they are no longer useful?
Was an error in hiring made?
Own up, take responsibility and move on. Make the interview process better.
Did the person expect to get a larger bump come bonus/review time that did not happen and now they are demoralized and upset?
Own up, take responsibility and move on. Clarify better what bumps and bonus would be like and how much effort that would entail next time.
> I am always extremely suspicious of claims that a company is going to lay off its poor performers and magically be better. If they're telling the truth, they are actually saying that their existing managers are incompetent.
I also don't follow this and want to hear more about this perspective.
What happens to the people working in mining, transporting and delivering ice from Iceland to California when refrigerators get invented?
Are those people inherently low performers or has the industry they work for shifted beneath them?
We (developers) work in an area of high specialization and the market values us for it (to the tune of six figures).
I have worked at both product and service companies before where entire departments were laid off because a contract did not get renewed or the market changed.
Most employees AND manager involved there were and continue to be competent. We even hire and refer each other wherever we might happen to be to this date even though we met decades ago.
Why would you do that vs moving the high performers to the business critical projects?
I'm implying that rather than laying off top performers you find them a different role in your organization.
Granted if the skill set is incredibly niche--such as hand optimizing HC12 assembly and you've moved to ARM then perhaps not.
It's hard to imagine a scenario where an entire project teams skillset is so niche that they couldn't find a home for top developers in other parts of the org.
In the first case, you're losing team members with tribal knowledge of the system and its requirements. In the second case, you're exponentially increasing the pathways of communication. In either case, you still have the ramp-up time for new team members.
I completely disagree. Which would you rather have:
(a) Business is booming, but leadership holds off on hiring because they believe the boom won't last forever.
(b) Business is booming, so leadership hires to support the boom. The boom eventually subsides, so leadership decides to lay off as the business is no longer there.
Fortunately, even as an employee, I'd much rather have (b) (assuming the timeframe was relatively decent, i.e. I didn't get hired and laid off in 3 months).
I've said this before, but in growing industries, I do not believe lay offs are something to fear. I mean, given the desire for experienced engineers and product people, I have no doubt these Uber folks will get snatched up extremely quickly. (and to emphasize, I certainly do NOT believe this is the case with shrinking industries)
This is a story for retail that will be buying stock. "We cannot afford X" can be an stock buster.
A job candidate with solid skills will be able to show their value to employers, and if an employer puts more weight on this quote over a candidate's qualifications then it was a bullet dodged.
I generally agree with this, except when the candidate in question needs the money paid from a job more than they need a good job.
In any case, yeah, in that respect it is a massively shitty and unnecessary thing to do to employees. They could have easily left it as "re-structuring" without a risk of tainting the reputation of former employees.
You are assuming that these companies are letting engineers to do side-projects that are unrelated to their day to day work?
As far as I know the OSS projects these companies put out are in line what they use internally for day to day work and it is absolutely core to their business.
Examples:
- Amazon: https://firecracker-microvm.github.io - Google: https://github.com/google/guava - Microsoft: https://github.com/microsoft/vscode - Apple: https://github.com/apple/foundationdb
Am I missing the point? Are OSS projects from these companies that are side-projects?
While on the subject, I am not sure about Uber's contribution to OSS. Their projects tend to be outside of my purview.
>> Paying lavish SF engineer salaries to generate cool, but not revenue generating, software
Nobody is forcing Uber to employ people in California.
The motivations for making software OSS are varied and often strategic. For example software is often open sourced to:
* deliberately commoditize it - to eliminate competition and differentiation in that area / stack layer * leverage additional (free) testing and development. * Drive ecosystem / platform adoption * Literally free up customer budgets to be spent with them, rather than on licensing 3rd party software * Intangible benefits like community image, employee satisfaction, etc. * Some combination of above when the software is useful internally, but simply not in a market that the company wants to compete in, or a market worth their time
In any case, the point was that they are "side-projects" from a business perspective in that they cost money but don't generate revenue - the benefits are hard to quantify. Successful, stable companies have much more breathing room for strategic and the "hard to quantify" ROIs than does a company on a trajectory towards bankruptcy. It is kind of like an individual out-of-work engineer with a month's expenses left in the bank choosing to contribute to OSS instead of seeking out paid work. It is not that contributing to OSS is wrong, it is that the priorities in that situation are backwards.
RE: "Nobody is forcing Uber to employ people in California." That is entirely true, but I'm not sure what your point is. My comment is a post-mortem on what led to the layoffs. It is a priori that nobody has forced Uber to do anything that it did...
I have said this before but they seem to have a strong "must be built here" culture. You typically see this in highly political environments where engineers are trying to create projects as a career highlight and as a justification for promotion.
Really?? They have O(thousands) of drivers in O(hundreds) of cities with the app open, sending and receiving data approximately all day.
What companies in your mind are data heavy?
Data heavy to me means terabytes of data with potentially multiple dimensions, like Google or Facebook.
Not to say that Uber's problem isn't challenging, but I don't expect that the amount of data is necessarily the problem.
Think of that vs. a company like Instragram where people are uploading probably terabytes of media content every day, and they have to maintain/host all that content to be served on-demand basically forever. This is probably a low-key reason for pushing "stories" - they get a reprieve by only having to store that for 24 hours. In any case, you're looking at orders of magnitude larger data usage in all aspects.
FWIW an Instagram pic, 1080x1080 is around 100kb.
Uber has to do a lot more processing on it's data. I'm sure there are real challenges and the OSS projects from Uber I've seen/remembered on HN seem to be the type one builds because existing tools don't solve the problem well enough for their cases.
Uber gives estimates of when your ride will show up.
They do lots of stuff in fairly real time with that data and a lot of it is probably compute intense.
Not at all comparable to Instagram.
https://instagram-press.com/blog/2017/12/05/introducing-stor...
The "data heavy" businesses often have the ability to cache their data in CDNs. Uber's data is realtime and dynamic, you scale that the hard way.
5 billion rides in 2017. That's 14 million a day on average. I would guesstimate peak days have at least double the average.
That is data heavy to me. (-;
A single video doorbell can use 200GB / month. With only 10,000 users that is 2 Petabytes of data traffic per month. Not to mention recordings that have to be stored and hosted for streaming later on.
Everything is relative (-;
Often though they don't cull low performers, they give each department a budget or a head count they have to hit. A department made up of high performers will have to cull a high performer to hit budget, a department which is overloaded will become more overloaded and people will quit in response.
In a company the size of Uber a restructure is often a pretty blunt instrument.
Airbnb is a business innovation with a shiny website frontend. But I really don't get all the hype around Airbnb engineering.
Depending on context, sure this could be true. Like if you're comparing the cost of releasing some small OSS module of Uber's to Uber's annual revenue, sure, it's going to be a negligible cost. But if you compare against the cost of developing the module in the first place, it can easily be an equal expense. For example I spent several months on a BLE library for Android (https://github.com/iDevicesInc/SweetBlue) and asked my company to open source it. It took several more months to get the library to a point that was suitable for a proper OSS release. So cleaning up code, making sure no sensitive info, swear words and such, documentation, lawyery stuff, icons, PR copy, blog post, basic website, wiki, and much more nitty gritty I'm glossing over.
I mean a company can just throw code over the wall into GitHub and call it OSS, but I associate a basic level of polish with a proper OSS release that does indeed take a good amount of effort. And that's just initial effort! If it becomes at all popular then you have further ongoing overhead.
I'd say a general rule is that open-sourcing something is at least 50% of overall cost of the project.
I'm the manager of one of Uber's OSS projects, and all that the things you listed here ring true. I just know that in our case at least, OSS prep absolutely pales in comparison to the feature/operational work put in by the team.
To be clear, when I added "really" to that first sentence it was meant to communicate that there is some cost, but in the sense that it's negligible to Uber's losses, as you point out. I was responding to OP's "dubious use of resources" comment. But I can see that wasn't clear.
Do you expect to still be doing this same job (or one step higher) in 6 months?
THIS is the one that comes into play. All that stuff you listed before is a slog to go through when you go to open-source, but unless you're parking the thing as a proof-of-concept/end-of-life, you're now signed up for maintaining the repo. That means triaging issues, pull requests, helping out when contributors don't understand why their build is breaking, etc.
And there's the PM aspect of it: you don't just want to develop a bunch of features without talking to your community, so communicating (in a public friendly way) what you're planning to work on, when folks might reasonably expect that, how they might be able to help out, which of their contributed features you might be able to take depending on where you're at in your lifecycle, and RESPONDING TO COMMENTS all takes way more time than just "building [closed-source] product" in a team of 5-20.
And of course, one of the hardest of all: telling people "no, we can't take that change" when they've spent hours and hours doing work for your project for free. In that regard, we're still very much iterating on a transparent design process that allows for consensus BEFORE too much work has been done (though as we all know, building prototypes is often one of the best ways to find out if a design works right or not).
If you're doing it all right, everyone involved in the project should be doing some amount of all of this every single day. There's no compartmentalizing an engineer on an OSS project as "someone who just writes feature code" vs. "someone who does the repo stuff".
So going back to OP's point: no, it doesn't literally "cost anything" (or very much) to do the basic act of open-sourcing, doing it the "right way" at scale where you're truly engaging and working with the bazaar is very expensive.
Full disclosure: I'm a PM at Microsoft working on PowerShell and was heavily involved in it being open-sourced and ported to macOS/Linux.
But also, lots of folks prefer an object-oriented pipeline. Many of those folks (our primary use case for 10+ years has been IT management) are used to PowerShell on Windows and starting to learn or be exposed to other environments.
We've also got lots zsh-style optimizations in PSReadline. In some cases, we've got some catching up to do, but there's also lots of unique interactive optimizations hiding around[2].
It's also great for interactively exploring REST APIs and building scripts via that experimentation. Try running
Invoke-RestMethod [or irm] https://api.github.com/.
Store that as a variable:
$a = irm https://api.github.com
And then look at all the properties you can explore:
$a | Get-Member [or gm] $a.<tab><tab><tab>
Oh, and of course, one of the big reasons is "so you don't have to open a Windows VM to remote into your Windows Server boxes and manage them from a Macbook".
This is obviously not an exhaustive list, but it'd take a lot more time to write about every benefit and scenario here. In any case, it turns out that our user base is pretty spread out among different scenarios, but between our repo and usage numbers, we've been really happy with how excited that such a diverse group of folks really love PowerShell.
And feel free to reach out to me on Twitter @joeyaiello if you ever want to talk more about your experience (or just hop into our GitHub repo). :)
[1] https://aka.ms/PSGitHubBI [2] https://docs.microsoft.com/en-us/powershell/module/psreadlin...
You're not just flipping the public/private flag on the repo.
If it helps you attract better talent, well - there's a financial incentive there through increased efficiency which I'm sure on its own is more than equal to the review cost.
Yes, it costs next to nothing to just open source a project if you mean literally just putting the source on some hosting site.
However, open sourcing something properly, where you respond to issues, document things properly, and provide build/test infrastructure to external developers is much more work. Not only that but you have to be much more careful when creating APIs and be much more vigilant about keeping backwards compatibility.
If the presumption is that the software would be useful ("developed for a reason") economics suggests there is some price people would be willing to pay for it, and you forfeit that when you make it OSS. That absolutely costs something.
Sure you may not want to be in the business of commercial software (support, maintenance, ultimately just responsibility) which is a completely sane thing to avoid. However when you are bleeding money at the rate of a small country's GDP per year, avoiding opportunities to generate profit based on intangibles like community engagement can come off as ill-advised. In fact, if your company is declared bloated, it stands to reason that you should have the capacity to take on the additional overhead of selling the software. It is not that contributing to OSS is wrong, or that your points are wrong, just that there is a time and situation for this kind of strategy.
Contrast with Amazon, whose entire development of AWS was for the reasons you point out. Instead of open-sourcing it, to the extent that would be possible, they made it into a product and almost in a single move turned consistent overall loss into a massively profitable company.
So this is not at all to argue against the merits of having healthy OSS contribution at a company, but more to say that a company can't contribute to OSS if they are bankrupt - so avoiding the latter should be prioritized over the former.
In contrast to companies like Google, Apple, Microsoft, Amazon etc. that have mountains of their own money to burn (rather than investors') on research and OSS side-projects, it always seemed to me that Uber was trying to play the same game, but far too early. Paying lavish SF engineer salaries to generate cool, but not revenue generating, software is probably excellent for morale, culture and recruiting, but a dubious use of resources when you are losing money seemingly faster than it would be logistically possible to literally burn it.
Saying they're ~ "culling the low performers" can be entirely true, but it is also a Silicon Valley, meritocracy-culture-friendly way of saying "we're losing far too much money to pay bloated growth-stage poaching-game salaries to engineers, so if you're not working on something that generates revenue, glhf"