<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Lyncredible</title>
    <description>A log of navigating the tech stack of business, engineering and management.</description>
    <link>https://lyncredible.com/</link>
    <atom:link href="https://lyncredible.com/feed.xml" rel="self" type="application/rss+xml"/>
     <author>
       <name>Yuan Liu</name>
       <uri>https://lyncredible.com</uri>
       <email>lyncredible@outlook.com</email>
    </author>
    <pubDate>Fri, 06 Mar 2026 03:01:24 +0000</pubDate>
    <lastBuildDate>Fri, 06 Mar 2026 03:01:24 +0000</lastBuildDate><item>
        <title>Calling dibs on DIBS</title>
        <description>&lt;p&gt;I joined Uber in October 2015 to work on the brand-new Driver Incentives Backend System. &lt;a href=&quot;https://www.linkedin.com/in/jonah-cohen/&quot;&gt;Jonah Cohen&lt;/a&gt;, my soon-to-be manager, called dibs on naming it DIBS just a few weeks before I arrived. Fast forward eight years, and now I am calling dibs on recounting the tale of DIBS&lt;sup class=&quot;footnote&quot;&gt;1&lt;/sup&gt;.&lt;/p&gt;




&lt;h2 id=&quot;driver-incentives-and-carrots&quot;&gt;Driver Incentives and Carrots&lt;/h2&gt;

&lt;p&gt;2015 was the heyday of price wars in the ride-sharing market. Most riders likely encountered aggressive promotions and jaw-droppingly low prices, clearly underwritten by the platforms themselves. However, the rider subsidies were mere shadows compared to the incentives lavished&lt;sup class=&quot;footnote&quot;&gt;2&lt;/sup&gt; upon drivers. At first, these incentives served to lure drivers, ensuring ample supply aligned with anticipated high demand. But as competition intensified, such incentives evolved from a recruitment tool to an essential strategy for driver retention&lt;sup class=&quot;footnote&quot;&gt;3&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Uber operated by cities, with driver incentives locally managed by each city’s operations team&lt;sup class=&quot;footnote&quot;&gt;4&lt;/sup&gt;. These incentives were structured as weekly campaigns for drivers. A typical campaign might state: earn an additional $1,000 next week if you complete a total of 40 trips either from or to downtown Manhattan, between 7am and 9am or between 4pm and 7pm, and from Monday to Friday.&lt;/p&gt;

&lt;p&gt;Like any other great business software, driver incentives at Uber started as spreadsheets. Some tenacious Driver Operations people, or DOps, started the program by emailing campaign details to drivers in their cities at the beginning of each week. When the week ended, they wrote SQL queries&lt;sup class=&quot;footnote&quot;&gt;5&lt;/sup&gt; based on the campaign rules to count qualifying drivers and calculate earnings. The incentives were paid out by uploading CSV files with driver UUIDs and dollar amounts.&lt;/p&gt;

&lt;p&gt;Sometime in 2014, the &lt;em&gt;Driver Incentives product team&lt;/em&gt; was formed at Uber’s headquarters in San Francisco. They built out the software to manage the campaigns from creation to payout. Named Carrots&lt;sup class=&quot;footnote&quot;&gt;6&lt;/sup&gt;, the software was a game-changer to DOps who routinely worked 12+ hours a day and 6+ days a week. Here’s the magic it brought&lt;sup class=&quot;footnote&quot;&gt;7&lt;/sup&gt;:&lt;/p&gt;



&lt;ul&gt;
  &lt;li&gt;
&lt;em&gt;One-Stop Management&lt;/em&gt;: DOps could now juggle campaigns all in one web app. Say goodbye to the chaotic dance of copy-pasting across documents, spreadsheets, and endless chat windows.&lt;/li&gt;
  &lt;li&gt;
&lt;em&gt;Instant Visibility&lt;/em&gt;: Whip up a campaign, and bam! It’s right there in the Uber Driver App. Emails? Who needs ‘em!&lt;/li&gt;
  &lt;li&gt;
&lt;em&gt;Error-Free &amp;amp; Unattended Calcs&lt;/em&gt;: Qualification and earnings got the automated touch, thoroughly checked for any sneaky bugs. So, no more clumsy fingers messing up SQL or twiddling thumbs waiting for queries.&lt;/li&gt;
  &lt;li&gt;
&lt;em&gt;Easy Peasy Payout&lt;/em&gt;: Everything’s integrated! DOps just hit a button after a quick peek at the pre-payout report. CSV uploads were so yesterday.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;from-incentica-to-dibs&quot;&gt;From Incentica to DIBS&lt;/h2&gt;

&lt;p&gt;There was just one hiccup: Carrots used the same Vertica&lt;sup class=&quot;footnote&quot;&gt;8&lt;/sup&gt; database that DOps ran their SQL queries on. The team bought the beefiest Vertica box on the market, affectionately dubbing it &lt;em&gt;Incentica&lt;/em&gt;. However, even this powerhouse was nearing its breaking point. Vertica wasn’t built for horizontal scaling. It could not house all of Uber’s data or deal with the erratic, fast-growing query demands.&lt;/p&gt;

&lt;p&gt;Now, here’s a quirky thing: Uber’s idea of a week ended at 4am every Monday, based on each city’s local time. This meant that, for the most part, Incentica had a leisurely pace throughout the week. However, come Monday morning in East Asia, queries started flooding in. And as the clock struck 4am in city after city, the floodgates opened wider. The real kicker? The Carrots team had to constantly babysit these queries. So, their workweek effectively began at noon on Sundays to align with 4am Monday in Beijing. And if you were the unlucky on-call engineer, you were probably pulling an all-nighter on Sunday to ensure Incentica could withstand the onslaught from the Middle East, Europe, and eventually the Americas.&lt;/p&gt;

&lt;p&gt;Then there was the ETL pipeline responsible for transferring data from the primary trips database to Incentica. The pipeline was delayed and lossy due to legacy constraints, which meant the calculations could still end up off the mark despite all the waiting and babysitting.&lt;/p&gt;

&lt;p&gt;Hailing from Seattle, the DIBS team was tasked with rectifying these issues. Our solution seemed straightforward. DIBS would harness streaming-based aggregation to update calculations for each driver and every campaign in real time. Picture this: hundreds of worker nodes running Kafka consumers, all eagerly subscribed to trip completion events. The workers would coordinate to partition and process the events, making the system infinitely scalable&lt;sup class=&quot;footnote&quot;&gt;9&lt;/sup&gt;. The streaming architecture not only distributed the workload evenly throughout the week, eradicating those dreaded Monday query spikes, but it also had a cherry on top: drivers could monitor their real-time progress in the Uber app as the week unfolded. As an added safety net, We opted to shield against duplicate event deliveries&lt;sup class=&quot;footnote&quot;&gt;10&lt;/sup&gt; by recording all processed trip UUIDs for each driver and campaign. Looking back, the design might seem deceptively simple or even naive, but guess what? It did the trick.&lt;/p&gt;

&lt;p&gt;We called dibs on the first full week of 2016 for DIBS’ prime-time debut.&lt;/p&gt;

&lt;h2 id=&quot;scaling-to-sound-sleep&quot;&gt;Scaling to sound sleep&lt;/h2&gt;

&lt;p&gt;And that was the week when I paid my fair share of Sunday all-nighters.&lt;/p&gt;

&lt;p&gt;DIBS actually operated smoothly throughout Sunday night. Yet, both I and &lt;a href=&quot;https://www.linkedin.com/in/gjtrowbridge/&quot;&gt;Greg&lt;/a&gt;, the Carrots on-call engineer, kept getting questions from DOps across various cities. They lamented the absence of calculation results for their campaigns. A closer look revealed that these campaigns had remained in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;draft&lt;/code&gt; state all week. DOps were supposed to click the “launch” button &lt;em&gt;before&lt;/em&gt; the week started to kick off streaming aggregation in DIBS. Their oversight was understandable; before DIBS, they had grown accustomed to waiting until week’s end to click “launch”. This was due to the batch-oriented nature of the Incentica solution, which could only process results &lt;em&gt;after&lt;/em&gt; the week concluded.&lt;/p&gt;

&lt;p&gt;That night I learned more about Kafka than the previous few months combined. Greg and I scrambled to “launch” the campaigns and then rewind the Kafka consumer offset to the previous Sunday. To expedite things, we added a ton more workers&lt;sup class=&quot;footnote&quot;&gt;11&lt;/sup&gt; to the Kafka consumer group, enabling DIBS to churn through the entire week’s trips in just a couple of hours. Ultimately, we managed to complete calculations for most campaigns just a few hours past the Monday 4am cut-off. The only challenge left? Tackling those sleep-depriving Sunday nights.&lt;/p&gt;

&lt;h3 id=&quot;going-back-in-time&quot;&gt;Going back in time&lt;/h3&gt;

&lt;p&gt;In the week that followed, we worked with DOps to launch campaigns on time. Every DOps individual we spoke to was understanding and sympathetic. They acknowledged the advantages of punctual campaign launches, such as allowing drivers to view their real-time progress towards campaigns within the app. While they wanted to help the engineers stop dreading about their on-call shifts, they also politely requested a buffer. What if a campaign was launched a few minutes late? Or if a mistake in the campaign rules was discovered later in the week?&lt;/p&gt;

&lt;p&gt;That turned out to be a fascinating engineering problem for the DIBS team to solve. We built an automated backfill solution for late campaigns. To achieve this, we maintained two kafka consumer groups, both processing the same trips dataset. The primary one always processed trips in real time, while the secondary one was responsible for backfilling late campaigns&lt;sup class=&quot;footnote&quot;&gt;12&lt;/sup&gt;. When a campaign was launched late, the backfill consumer group would automatically rewind its offset to match the campaign’s intended start time, and backfill any trips that had happened prior to the late-launch. We also introduced various optimizations, such as batching multiple late campaigns for backfilling and meticulously filtering out irrelevant trips, ensuring the backfill process was swift and efficient.&lt;/p&gt;

&lt;p&gt;The automated backfill was a smashing success. Every Carrots campaign, even those with delayed launches, was promptly calculated and paid out with little human intervention. Both Carrots and DIBS engineers enjoyed 8 hours of sound sleep during their on-call shifts.&lt;/p&gt;

&lt;p&gt;At least that was the case until DIBS launched in China two months later, when every assumption we made about the system had to be changed.&lt;/p&gt;

&lt;h3 id=&quot;everything-was-bigger-in-china&quot;&gt;Everything was bigger in China&lt;/h3&gt;

&lt;p&gt;DIBS made its debut in China around March 2016, right when the rivalry between DiDi and Uber was escalating from fierce to downright incendiary. With a dense population and aggressive promotions/incentives, Uber was clocking millions of trips every week in each of China’s major cities. This volume dwarfed even the busiest Uber markets elsewhere in the world. At the peak, Shanghai saw ten times more trips than New York City in a typical week. The sheer scale would have completely destroyed Incentica. Fortunately, for DIBS, accommodating the colossal Uber China traffic was just a matter of deploying more worker nodes.&lt;/p&gt;

&lt;p&gt;The real challenges was, interestingly and somewhat expectedly, in backfills. Uber’s DOps in China adopted a strategy of intentionally delaying campaign launches in Carrots until the week’s end. This tactic was devised to keep DiDi in the dark about Uber’s campaign rules, preventing them from undercutting us&lt;sup class=&quot;footnote&quot;&gt;13&lt;/sup&gt;. Instead, they assured drivers that Uber would either match DiDi’s incentives or provide superior ones, but the precise formula would remain unknown until the week concluded.&lt;/p&gt;

&lt;p&gt;This approach wreaked havoc on DIBS. Our primary, real-time consumer sit there all day doing nothing, while the secondary, back-fill consumer bore the brunt of the workload, meticulously processing every single trip for each campaign in the few hours following each week’s close. The surge in compute and network demand during backfills was staggering, scaling to levels about 1,000 times higher than the usual rate.&lt;/p&gt;

&lt;p&gt;So we set out to scale DIBS for China. The key insight was that most changes to campaign rules had no impact on the partial aggregation logic. For example, an incentive of $1,000 demanding 100 weekly trips to qualify would utilize the same trip counter as another incentive of $2,000 requiring 180 weekly trips. This meant DIBS could do real-time aggregation of the partial result, like the trip count, and reuse them for varying campaign rules, as long as the incentive structure remained consistent.&lt;/p&gt;

&lt;p&gt;Each week we launched dummy campaigns&lt;sup class=&quot;footnote&quot;&gt;14&lt;/sup&gt; featuring common incentive structures, performed partial streaming aggregations throughout the week, and when the week wrapped up, reused the partial aggregation results for the actual campaigns launched by DOps. We even automated the process of detecting prevailing incentive structures and initiating these dummy campaigns. At last, our pursuit of uninterrupted slumber was realized.&lt;/p&gt;

&lt;h2 id=&quot;the-trip-that-existed-before-it-didnt&quot;&gt;The trip that existed before it didn’t&lt;/h2&gt;

&lt;p&gt;A mysteriously missing trip broke our peaceful dream later that spring. A DOps reached out to report that a driver was unfairly deprived of their incentive. According to DIBS, they fell short by a single trip. That was baffling. Uber’s Kafka setup ensured “at-least-once” event delivery, implying DIBS should never under count&lt;sup class=&quot;footnote&quot;&gt;15&lt;/sup&gt;. If this driver was denied incentive due to a missed trip, how many other drivers might have been similarly shortchanged?&lt;/p&gt;

&lt;p&gt;To unravel this, we manually initiated a backfill for the contentious campaign. Somewhat unexpectedly, the backfill detected the elusive trip and confirmed the accurate trip count for the concerned driver. Bolstered by this discovery, we triggered backfills for all campaigns from the previous week, comparing the results pre and post-backfill. The scrutiny unearthed a minuscule yet consistent pattern of omitted trips.&lt;/p&gt;

&lt;p&gt;There was an undeniable glitch within the primary, real-time streaming consumer. It seemed as though certain trips were momentarily non-existent in real-time but subsequently found their way into the system, only to be captured during backfills. The pressing question was, why?&lt;/p&gt;

&lt;h3 id=&quot;the-database-that-was-not-kafka&quot;&gt;The database that was not Kafka&lt;/h3&gt;

&lt;p&gt;To answer that question, we delved deeper into the origins of our streaming data. As it turned out, DIBS was &lt;em&gt;not&lt;/em&gt; pulling data from a Kafka topic. Instead, it was sourcing from a &lt;a href=&quot;https://www.uber.com/blog/schemaless-part-one-mysql-datastore/&quot;&gt;Schemaless&lt;/a&gt; table. Schemaless was Uber’s in-house online datastore, designed for vital business data like rider, driver and trip details. Built on top of sharded MySQL tables, Schemaless strictly adhered to append-only writes, which was tailor-made for stream processing tasks akin to DIBS. To further its compatibility, the Schemaless team ingeniously developed client-side stream-consumer libraries that mirrored Kafka’s API. It is no wonder that this whole blog post, up until this point, depicted DIBS as if we were using Kafka the whole time.&lt;/p&gt;

&lt;p&gt;The missed trip broke that abstraction though. To understand why, we need to first dive into the data schema in Schemaless.&lt;/p&gt;

&lt;h3 id=&quot;the-schemaless-schema&quot;&gt;The Schemaless schema&lt;/h3&gt;

&lt;p&gt;All Schemaless datasets were stored in MySQL with a physical schema that could be depicted as follows&lt;sup class=&quot;footnote&quot;&gt;16&lt;/sup&gt;:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Column Name&lt;/th&gt;
      &lt;th&gt;Column Type&lt;/th&gt;
      &lt;th&gt;Note&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ID&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BIGINT&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Primary key with auto-increment&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UUID&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CHAR(36)&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Globally unique identifier, indexed&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Created&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TIMESTAMP&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Timestamp auto-populated upon creation&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Payload&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MEDIUMTEXT&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Serialized JSON payload&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;If we were to store a Uber trip object into a table like this, we would serialize the object into a JSON format, generate a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UUID&lt;/code&gt; for the object, and append the resultant row to the table. The integer &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ID&lt;/code&gt; would be auto-generated by MySQL thanks to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-increment&lt;/code&gt;. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Created&lt;/code&gt; timestamp will be auto-set with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UTC_TIMESTAMP()&lt;/code&gt;. Here is a sample row in columnar format for clearer visualization:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Column&lt;/th&gt;
      &lt;th&gt;Value&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ID&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;42&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UUID&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c160a108-91c5-4af4-8133-727c36f1e277&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Created&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2023-10-29T19:01:04.146Z&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Payload&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{&quot;city_id&quot;: &quot;xxx&quot;, &quot;amount_in_usd&quot;: 30, &quot;distance_in_km&quot;: &quot;18&quot;, ...}&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Note this physical table was just one shard of many. Schemaless partitioned each dataset among many underlying physical tables&lt;sup class=&quot;footnote&quot;&gt;17&lt;/sup&gt;. The globally unique &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UUID&lt;/code&gt; functioned as the pivotal sharding key. The integer &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ID&lt;/code&gt;s were unique within each shard, but were expected to overlap across different shards.&lt;/p&gt;

&lt;h3 id=&quot;the-kafka-consumer&quot;&gt;The “Kafka” consumer&lt;/h3&gt;

&lt;p&gt;The “Kafka” consumer workers streamed data from Schemaless by taking advantage of the append-only nature of the underlying tables. Each shard was earmarked for one exclusive worker&lt;sup class=&quot;footnote&quot;&gt;18&lt;/sup&gt;. This worker ran an infinite loop to consistently poll for fresh rows to process. The loop’s mechanics looked like the following:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Initialize &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;per_shard_offset&lt;/code&gt; to 0.&lt;/li&gt;
  &lt;li&gt;Run the SQL query: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SELECT id, uuid, payload FROM charges WHERE id &amp;gt; $per_shard_offset&lt;/code&gt; to fish out new rows.&lt;/li&gt;
  &lt;li&gt;Process the rows retrieved from Step 2 and update &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;per_shard_offset&lt;/code&gt; to the highest ID identified among the new rows.&lt;/li&gt;
  &lt;li&gt;Circle back to Step 2.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At first glance, the logic appeared impeccable. Since each shard was singularly managed by one specific worker, there wasn’t any room for race conditions between two different workers. So, with the mystery deepening, we documented our quandary and sought insights from the Schemaless team. Upon reviewing our notes, &lt;a href=&quot;https://www.linkedin.com/in/rene-w-schmidt-62858/&quot;&gt;Rene Schmidt&lt;/a&gt;, the esteemed architect behind Schemaless, instantly pinpointed the issue, stating, “It’s a race condition due to Repeatable Read”.&lt;/p&gt;

&lt;h3 id=&quot;the-race-condition&quot;&gt;The race condition&lt;/h3&gt;

&lt;p&gt;Imagine two new rows being appended to the table concurrently as the DIBS consumer ran its &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SELECT&lt;/code&gt; query. This happened all the time because many trips were completing around the world at any given time. It was not rare for two to end up in the same shard and to be written to the same MySQL table simultaneously. Suppose the last known highest ID was 42 just before these events. The table below outlines a possible sequence of events:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Time&lt;/th&gt;
      &lt;th&gt;Rows&lt;/th&gt;
      &lt;th&gt;Appender #1&lt;/th&gt;
      &lt;th&gt;Appender #2&lt;/th&gt;
      &lt;th&gt;DIBS consumer&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;t0&lt;/td&gt;
      &lt;td&gt;1-42&lt;/td&gt;
      &lt;td&gt;Idle&lt;/td&gt;
      &lt;td&gt;Idle&lt;/td&gt;
      &lt;td&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;per_shard_offset&lt;/code&gt; = 42&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;t1&lt;/td&gt;
      &lt;td&gt;1-42&lt;/td&gt;
      &lt;td&gt;Begin Tx&lt;/td&gt;
      &lt;td&gt;Idle&lt;/td&gt;
      &lt;td&gt;Idle&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;t2&lt;/td&gt;
      &lt;td&gt;1-42&lt;/td&gt;
      &lt;td&gt;Append #43&lt;/td&gt;
      &lt;td&gt;Begin Tx&lt;/td&gt;
      &lt;td&gt;Idle&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;t3&lt;/td&gt;
      &lt;td&gt;1-42&lt;/td&gt;
      &lt;td&gt;Idle&lt;/td&gt;
      &lt;td&gt;Append #44&lt;/td&gt;
      &lt;td&gt;Idle&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;t4&lt;/td&gt;
      &lt;td&gt;1-42, 44&lt;/td&gt;
      &lt;td&gt;Idle&lt;/td&gt;
      &lt;td&gt;Commit Tx&lt;/td&gt;
      &lt;td&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SELECT ... WHERE id &amp;gt; 42&lt;/code&gt; yields #44&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;t5&lt;/td&gt;
      &lt;td&gt;1-42, 43, 44&lt;/td&gt;
      &lt;td&gt;Commit Tx&lt;/td&gt;
      &lt;td&gt;Idle&lt;/td&gt;
      &lt;td&gt;Update &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;per_shard_offset&lt;/code&gt; = 44&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;From the sequence, it’s evident that although Appender #1 initiated its transaction before Appender #2, the latter managed to append a row (with ID 44) and complete its transaction earlier. Unfortunately, the DIBS consumer executed the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SELECT&lt;/code&gt; query post Appender #2’s commit but pre Appender #1’s commit, getting only row #44 in return. This means in its subsequent scans, DIBS would bypass any rows with IDs below than 44. As a result, row #43 slipped through the cracks, remaining undetected from the DIBS consumer’s point of view.&lt;/p&gt;

&lt;h3 id=&quot;the-workaround&quot;&gt;The workaround&lt;/h3&gt;

&lt;p&gt;The root of this race condition traced back to the default &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html&quot;&gt;transaction isolation level&lt;/a&gt; of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Repeatable Read&lt;/code&gt; in MySQL / InnoDB. It could be prevented by changing the transaction isolation level to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Serializable&lt;/code&gt;. In that mode, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SELECT&lt;/code&gt; transaction would create a range lock on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ID&lt;/code&gt;, essentially locking the range &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(42, +∞)&lt;/code&gt; in our earlier example. That lock would conflict with the single row locks established by appenders, such as a single row lock of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;43&lt;/code&gt; by Appender #1 in the same example. This means the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SELECT&lt;/code&gt; transaction would wait for all in-progress append transactions to finish before executing the query, thus avoiding the race condition.&lt;/p&gt;

&lt;p&gt;Yet, switching to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Serializable&lt;/code&gt; mode was not free. It would incur a huge performance penalty, forcing many transactions to execute in serial rather than concurrently. The impact would reverberate any production systems interfacing with the database. Given the resulting dramatic plunge in throughput, this approach was not viable.&lt;/p&gt;

&lt;p&gt;Our eventual solution was a bit of a workaround tailored to the Schemaless stream consumer library. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SELECT&lt;/code&gt; query was modified to exclude recent rows by examining the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;created&lt;/code&gt; timestamp:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-SQL&quot;&gt;SELECT id, uuid, payload
FROM trips
WHERE id &amp;gt; $per_shard_offset
  AND created &amp;lt; TIMESTAMP(
    DATE_SUB(UTC_TIMESTAMP(), INTERVAL 2 MINUTE))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;By imposing a condition for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;created&lt;/code&gt; timestamp to be at least 2 minutes old, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SELECT&lt;/code&gt; query effectively ignored all rows appended by recent transactions, and punted them to a subsequent loop iteration. The choice of a 2-minute buffer was enough to sidestep the race condition without adding too much delay. This adjustment avoided degrading overall throughput of the entire system, incurring only a minor delay on the stream consumer side.&lt;/p&gt;

&lt;h2 id=&quot;dibs-until-teleportation&quot;&gt;DIBS until Teleportation&lt;/h2&gt;

&lt;p&gt;DIBS ultimately lived up to its promise of lossless aggregation. Incentica could finally be retired.&lt;/p&gt;

&lt;p&gt;The entire DIBS team flew down to San Francisco to attend the joint Incentica-shutdown party. While in town, I had the chance to engage with several members of Uber’s China Growth organization, the largest user of DIBS. I was surprised to discover that numerous teams within China Growth had use cases mirroring Driver Incentives. Each program revolved around the theme of giving rewards to eligible riders or drivers upon meeting certain criteria.&lt;/p&gt;

&lt;p&gt;On the following day, a TK&lt;sup class=&quot;footnote&quot;&gt;19&lt;/sup&gt; Q&amp;amp;A with China Growth was on the agenda, so I asked Travis a question: “It seems almost half of China Growth are doing various forms of promotion and incentive programs. Assuming there will come a day when we stop the aggressive spending, what innovations should we be focusing on now to differentiate our product when that time arrives?”&lt;/p&gt;

&lt;p&gt;TK’s answer was memorable: “Some day Uber will replicate Star Trek’s Transporters&lt;sup class=&quot;footnote&quot;&gt;20&lt;/sup&gt; and teleport people from Point A to Point B. But until then, we will keep doubling down on incentive programs because everyone else is spending like crazy.”&lt;/p&gt;

&lt;p&gt;The Q&amp;amp;A was hosted within the confines of Uber’s headquarters at 1455 Market Street. Personally, its interior design reminded me strongly of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Starship_Enterprise&quot;&gt;USS Enterprise&lt;/a&gt;. Beyond sci-fi analogies, it was evident that TK was alluding to the future of self-driving cars. I had always been somewhat skeptical&lt;sup class=&quot;footnote&quot;&gt;21&lt;/sup&gt; about the strategy of betting on self-driving technology while bleeding cash in the core business. TK’s response did little to allay those concerns.&lt;/p&gt;

&lt;p&gt;While in SF, I also had the privilege to present a company-wide tech talk on DIBS. As expected, the automated backfill solution was a hot topic of discussion. It was unconventional, caused spiky traffic patterns, and strained both upstream and downstream systems. I recognized and validated the concerns, but also emphasized the short-term necessity of the solution as Uber was spending billions of dollars on driver incentives per year. The vision was to transition to a more robust solution once the Big Data Platform&lt;sup class=&quot;footnote&quot;&gt;22&lt;/sup&gt; was operational. “Or perhaps, when Teleportation becomes a reality,” I mused privately.&lt;/p&gt;

&lt;h2 id=&quot;didi-called-dibs-on-us&quot;&gt;DiDi called dibs on us&lt;/h2&gt;

&lt;p&gt;Neither was fast enough. On August 1st, 2016, less than one year after the start of the DIBS project, Uber &lt;a href=&quot;https://www.cnbc.com/2016/08/01/chinas-didi-chuxing-to-acquire-ubers-chinese-operations-wsj.html&quot;&gt;sold its China operations&lt;/a&gt; to DiDi, receiving a minority stake in the latter as part of the deal.&lt;/p&gt;

&lt;p&gt;Most of the sophisticated features we had developed for DIBS lost their relevance overnight. Within a month, ownership of the DIBS system was transferred to the Carrots team. Subsequently, every member of the DIBS team embarked on new ventures within Uber.&lt;/p&gt;

&lt;p&gt;Throughout the DIBS project, there had been internal reservations regarding the overarching strategy of the price war. However, such concerns never impeded our dedication to crafting the best possible solution within our set parameters. With the change in direction, there was no need to dwell on past accomplishments. After all, business is business, or in Basta’s words, “&lt;a href=&quot;https://basta.substack.com/p/no-sacred-masterpieces&quot;&gt;No sacred masterpieces&lt;/a&gt;”.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:inspiration&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I drew inspiration from &lt;a href=&quot;https://www.linkedin.com/in/mbasta/&quot;&gt;Matt Basta&lt;/a&gt;’s captivating piece titled &lt;a href=&quot;https://basta.substack.com/p/no-sacred-masterpieces&quot;&gt;&lt;em&gt;No sacred masterpieces&lt;/em&gt;&lt;/a&gt;, which recounts how he “built Excel for Uber and they ditched it like a week after launch”. Intriguingly, both tales unfolded during the same time frame centered around the same driver incentives program. Yet, surprisingly, even after spending over 5 years together at Stripe following our Uber stints, Basta and I have never crossed paths.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:scale&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;To grasp the scale of the driver subsidies, consider this: drivers often earned more from incentives than they did from ride payouts.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:competition&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I provided a theory on the intense price war in a &lt;a href=&quot;/2021/12/11/uber-follow-up/&quot;&gt;previous post&lt;/a&gt;.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:franchise&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;In many ways, Uber’s early operations echoed the franchise model of McDonald’s. City managers acted as the franchise owners, while the Uber app, internal tools, and playbooks served as the secret recipes for whipping up Big Macs. Many innovations sprouted from these city operations team, only to be replicated and scaled later with the help of the central teams at the headquarters.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:llm&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;If ChatGPT had been available back then, the DOps would surely have used it to write SQL queries.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:carrots-naming&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;In later years, given the broadly critical stance of the media towards Uber, the name &lt;em&gt;Carrots&lt;/em&gt; might have sparked a minor PR hiccup. Fortunately, it didn’t. The team simply saw it as an easily recognizable codename.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:by-chat-gpt&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The following marketing content was mine, but the thrill was ChatGPT.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:vertica&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Vertica&quot;&gt;Vertica&lt;/a&gt;, for those unfamiliar, is an analytics database that’s designed for very fast queries over very large sets of mostly read-only data.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:kafka-scalability&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The system was horizontally scalable up to the number of virtual partitions in Kafka, which was 4,096 at the time.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:bloom-filter&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;We also contemplated using Bloom filters in the design to quickly detect duplicates, but they were never implemented. Even for the most industrious driver, there just weren’t enough trips to justify it.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:scaling-kafka-consumer&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;We probably scaled out the number of Kafka consumer workers by 10x, although my memory is blurred. This was feasible because, first, the trips data was already spread across 4,096 virtual partitions, and second, Uber’s compute infrastructure was adept at elastically scaling containerized workloads. The first point allowed us to scale out horizontally as long the number of worker nodes did not exceed 4,096. The second point was even more impressive considering that &lt;a href=&quot;https://www.linkedin.com/in/will-larson-a44b543/&quot;&gt;Will Larson&lt;/a&gt;’s team built the compute infrastructure in Uber’s own physical data centers.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:lambda-architecture&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Little did I know back then, but it turned out to be an anti-pattern to backfill by rewinding streaming consumer offsets. The proven way to do this was called a &lt;a href=&quot;https://en.wikipedia.org/wiki/Lambda_architecture&quot;&gt;Lambda Architecture&lt;/a&gt;, where backfills ought to be performed using batch data processing techniques like Apache Spark. It did not matter though, because Uber had yet to build its lossless ETL pipeline to send trip data into its Hadoop-based &lt;a href=&quot;https://www.uber.com/blog/uber-big-data-platform/&quot;&gt;Big Data Platform&lt;/a&gt;.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:basta-noted-the-same&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Basta alluded to the same competition dynamics in his &lt;a href=&quot;https://basta.substack.com/p/no-sacred-masterpieces&quot;&gt;article&lt;/a&gt;, where Excel formulas to calculate incentives must be kept confidential because Uber was worried that DiDi sent spies to intern at Uber and steal such secrets.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:dummy-campaigns&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The dummy campaigns were not visible in the Uber Driver app.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:over-count&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;As is mentioned earlier in this post, DIBS recorded trip UUIDs to protect against duplicate event deliveries to avoid over-counting.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:schema-simplified&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The physical schema was simplified to focus on the race condition. Check out &lt;a href=&quot;https://www.uber.com/blog/schemaless-part-one-mysql-datastore/&quot;&gt;Schemaless on Uber’s Engineering Blog&lt;/a&gt; for the complete definition.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:schemaless-shards&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;DIBS primarily consumed from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trips&lt;/code&gt; dataset in Schemaless, which had 4,096 shards.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:multiple-shards-per-worker&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The converse was not true. Each worker could stream from multiple shards.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:tk&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;TK is the preferred moniker for &lt;a href=&quot;https://en.wikipedia.org/wiki/Travis_Kalanick&quot;&gt;Travis Kalanick&lt;/a&gt;, co-founder and then CEO at Uber.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:transporter&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;See &lt;a href=&quot;https://en.wikipedia.org/wiki/Transporter_(Star_Trek)&quot;&gt;Transporter (Star Trek)&lt;/a&gt; on Wikipedia.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:self-driving-doubts&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;See my previous post &lt;a href=&quot;/2021/12/06/uber-had-no-upside/&quot;&gt;Uber had no upside&lt;/a&gt; which covered my doubts about the potential impact of self-driving technology on Uber’s business.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:big-data-platform&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Sitting in the audience, &lt;a href=&quot;https://www.linkedin.com/in/zshao/&quot;&gt;Zheng Shao&lt;/a&gt; was one of the many who asked questions about the efficiency and scalability of the DIBS backfill. He would go on to build Uber’s &lt;a href=&quot;https://www.uber.com/blog/uber-big-data-platform/&quot;&gt;Big Data Platform&lt;/a&gt;, making it possible for DIBS to migrate to a much more scalable &lt;a href=&quot;https://en.wikipedia.org/wiki/Lambda_architecture&quot;&gt;Lambda Architecture&lt;/a&gt;.&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 30 Oct 2023 00:00:00 +0000</pubDate>
        <link>https://lyncredible.com/2023/10/30/calling-dibs-on-dibs/</link>
        <guid isPermaLink="true">https://lyncredible.com/2023/10/30/calling-dibs-on-dibs/</guid></item><item>
        <title>New hire hacks</title>
        <description>&lt;p&gt;Summer time means I am going to help quite a few new grads to ramp up. This is highly important work because the new hires will substantially increase my team’s total throughput over time, but it is also super time consuming. Over the last few years I have learned a few hacks to make the process more effective.&lt;/p&gt;




&lt;h2 id=&quot;spin-up-buddy&quot;&gt;Spin-up buddy&lt;/h2&gt;

&lt;p&gt;At Stripe, we appoint a spin-up buddy for each new hire. The spin-up buddy is an engineer who is already experienced on the team. They are the dedicated person to help the new hire ramp up. Generally, the spin-up buddy should serve as the information filter for the new hire, so that the new hire can focus on the most important stuff to learn and practice. Specifically, the spin-up buddy is responsible for a few concrete activities below:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Create a spin-up guide for the new hire. The guide lays out a tailored onboarding plan for the new hire. It includes the people to talk to, the documents to read, the technologies to learn, and the spin-up tasks to complete. The guide contains concrete week-by-week goals for the first 5~6 weeks, and also sets up some directional targets for the first 3 months.&lt;/li&gt;
  &lt;li&gt;Scope out a few bite-sized spin-up tasks for the new hire. These tasks are typically bugs or tiny feature requests from the backlog. Each of such tasks should be clearly defined and take no more than a couple of days to finish. The new hire can use these tasks to get their hands dirty and to have a sense of accomplishment early on.&lt;/li&gt;
  &lt;li&gt;Mentor the new hire on a slightly bigger project with some ambiguity. The definition of “bigger” can vary, but I generally find a sweet spot in the 2~3 weeks range. This gives the new hire an opportunity to apply their creativity to solving a new problem, which is another milestone worth celebrating for.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To make the spin-up buddy setup succeed, the buddy and the new hire need to work very closely. They can either be physically co-located, or, if working remotely, have frequent async message exchanges and sync pairing sessions.&lt;/p&gt;

&lt;p&gt;I have found this setup to be beneficial for a few reasons:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;It is scalable. The manager is no longer a bottleneck to ramp up new hires. The more already spun-up people you have on the team, the more new hires you can effectively spin up at the same time. The first-ever spin-up guide takes some effort to create, but subsequent ones only cost some incremental time.&lt;/li&gt;
  &lt;li&gt;It gives everyone opportunities to mentor other people. There is no leveling or seniority requirement for the spin-up buddy. They just need to be reasonably familiar with how the company and the team operates. Such mentorship experience is especially valuable for early-career engineers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;hacking-admin-tasks&quot;&gt;Hacking admin tasks&lt;/h2&gt;

&lt;p&gt;The various admin tasks can be tricky to get right. It is very common for new hires to be missing some arcane permissions or not invited to regular meetings. Below are a few hacks I practice to streamline such admin tasks:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Use email groups for calendar invites and access control as much as possible. Invitation to regular team meetings should be sent to the team email group. Permissions to access team resources like shared documents should also be granted to the team email group. This is straightforward to set up in Gmail. If your employer uses Outlook, I believe you can leverage distribution lists or security groups for similar purposes.&lt;/li&gt;
  &lt;li&gt;If your team has multiple email groups, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;foo-team&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;foo-user-newsletter&lt;/code&gt;, pick one group (e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;foo-team&lt;/code&gt;) to host all team members, and subscribe that team group to other groups (e.g. subscribing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;foo-team&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;foo-user-newsletter&lt;/code&gt;, instead of directly adding people to both groups).&lt;/li&gt;
  &lt;li&gt;Use &lt;a href=&quot;https://slack.com/help/articles/212906697-Create-a-user-group&quot;&gt;Slack user groups&lt;/a&gt; for channel membership. Create a team group and configure “default channels” for the group. Your new hire will be automatically invited to all configured “default channels” once they are added to the team group. This also works for private channels, which are usually annoying to manage. If your employer uses Microsoft Teams, I have no idea how Teams works&lt;sup class=&quot;footnote&quot;&gt;1&lt;/sup&gt;. :(&lt;/li&gt;
  &lt;li&gt;Document the various admin tasks in the spin-up guide, and leverage the spin-up buddy to close the gaps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;that-is-it-for-now&quot;&gt;That is it for now&lt;/h2&gt;

&lt;p&gt;Do you have any tricks to ramp up new hires? Please let me know. Happy spinning up to all new hires and their buddies!&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:microsoft-teams&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Despite having worked for almost 6 years on Microsoft Lync, one of the predecessors to Teams, I have not used Teams at all. To my friends at Teams: let me know if this user group concept exists in Teams. Thanks!&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 25 Jul 2022 00:00:00 +0000</pubDate>
        <link>https://lyncredible.com/2022/07/25/new-hire-hacks/</link>
        <guid isPermaLink="true">https://lyncredible.com/2022/07/25/new-hire-hacks/</guid></item><item>
        <title>Capital efficiency</title>
        <description>&lt;p&gt;The decision to work for a startup&lt;sup class=&quot;footnote&quot;&gt;1&lt;/sup&gt; can be stressful. Everyone wants to get rich, but it is an impossible task to accurately predict the trajectory of any given company. When I consult my mentors and friends, most of the advice I get is a bit handwavy, as is usually the case. I have spent quite some time thinking about this topic. Here is one important lesson I have learned: examine its capital efficiency when deciding to join a startup.&lt;/p&gt;




&lt;h2 id=&quot;what-is-capital-efficiency&quot;&gt;What is capital efficiency&lt;/h2&gt;

&lt;p&gt;Capital efficiency, as its name suggests, measures how efficiently a business uses capital. Loosely speaking, capital efficiency is defined as the ratio of money made over money spent during a certain period. It is obviously better to deploy $1 and make $10 in return, than to deploy $1 and make $2. In this context, the definition of capital is limited to tangible assets like cash, while intangible assets like human creativity and brand recognition are excluded.&lt;/p&gt;

&lt;p&gt;There are much more formal definitions for capital efficiency. The formal definitions are not required to read this post, but I do recommend the following articles to learn more:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
&lt;a href=&quot;https://kellblog.com/2016/03/22/introducing-a-new-saas-metric-the-hype-factor/&quot;&gt;The Hype Factor&lt;/a&gt; by Dave Kellog&lt;/li&gt;
  &lt;li&gt;
&lt;a href=&quot;https://sacks.substack.com/p/the-burn-multiple-51a7e43cb200&quot;&gt;The Burn Multiple&lt;/a&gt; by David Sacks&lt;/li&gt;
  &lt;li&gt;
&lt;a href=&quot;https://www.volitioncapital.com/news/the-venture-capital-efficiency-ratio-and-what-it-means-to-be-capital-efficient/&quot;&gt;The Venture Capital Efficiency Ratio&lt;/a&gt; by Sean Cantwell&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;why-i-care-about-capital-efficiency&quot;&gt;Why I care about capital efficiency&lt;/h2&gt;

&lt;p&gt;The tech industry is defined by high-growth companies, and I certainly would like to work for a company that has a shot to become the next Amazon or Microsoft. This was why I joined Uber in 2015, although it did not go the way I had hoped. There are many explanations for why Uber has not achieved the high expectations&lt;sup class=&quot;footnote&quot;&gt;2&lt;/sup&gt;. I don’t think there is a single correct reason. However, I do believe that Uber’s poor capital efficiency was a significant factor.&lt;/p&gt;

&lt;p&gt;My argument is as follows. The high valuations of tech companies are betted on zero marginal cost. Such companies can spend most of their resources on upfront fixed-cost investments i.e., building great products. They can scale to an almost unlimited pool of customers rapidly and inexpensively. A poor capital efficiency, sustained for a long period, suggests that the marginal cost is not zero, but rather very high. This forces the business to pay its attention to the uncapped marginal cost, while the fixed-cost portion that fuels product innovation takes a backseat. That would be unfortunate for tech workers like me, whose skill set is concentrated in building products. Such skill set would not be as impactful and would not be valued as much in a business with high marginal cost.&lt;/p&gt;

&lt;p&gt;We can turn our attention to the one of largest tech companies for example: Microsoft. The business model of pre-Internet Microsoft was primarily selling packaged software. The marginal cost of producing a DVD copy of Windows is almost zero, yet Microsoft could charge hundreds or thousands of dollars for a single copy. The profit from the high-margin packaged software business allowed Microsoft to invest massively and expand to many business lines. It is important to note that such investment was concentrated in the fixed cost of creating new products, rather than the marginal cost of replicating existing products. They started by selling BASIC interpreters and gradually moved to operating systems (MSDOS/Windows), productivity tools (Office), databases (SQL Server) and developer tools (Visual Studio), to name a few. Microsoft did all of this with no outside funding&lt;sup class=&quot;footnote&quot;&gt;3&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;On the other hand, capital inefficient companies are forced to spend a huge amount of money to maintain and grow its existing business. For example, Uber and Lyft could not differentiate their product experience, but had to resort to price wars to take market share. The implication here is that the product is fungible, and the tech workforce building the product is also replaceable.&lt;/p&gt;

&lt;h2 id=&quot;capital-efficiency-for-startups&quot;&gt;Capital efficiency for startups&lt;/h2&gt;

&lt;p&gt;Once I was convinced capital efficiency is an important metric, the next question was how to measure capital efficiency for startups. Recall the loose definition above: capital efficiency is the ratio of money made over money spent during a certain period. Startups are private companies and do not report earnings. How could I know how much money a startup spent or made in any given year?&lt;/p&gt;

&lt;p&gt;The answer is of course a big NO without insider knowledge&lt;sup class=&quot;footnote&quot;&gt;4&lt;/sup&gt;, but there is a reasonably good approximation: the fund-raising dilution ratio(DR). Imagine a startup raises $M in funding at a pre-money valuation of $V. All existing shareholders before this funding round is diluted by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;M/V * 100%&lt;/code&gt;&lt;sup class=&quot;footnote&quot;&gt;5&lt;/sup&gt;, and that ratio is a proxy for the company’s capital efficiency.&lt;/p&gt;

&lt;p&gt;Let’s look at a couple of hypothetical examples:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Imagine Company A raises $1B at a pre-money valuation of $10B. The DR is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1B/10B * 100% = 10%&lt;/code&gt;, which means that all existing shareholders are diluted by 10%&lt;sup class=&quot;footnote&quot;&gt;6&lt;/sup&gt;.&lt;/li&gt;
  &lt;li&gt;Imagine Company B raises $100M at a pre-money valuation of $10B. The DR is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;100M/10B * 100% = 1%&lt;/code&gt;&lt;sup class=&quot;footnote&quot;&gt;7&lt;/sup&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both companies are valued at $10B before their respective funding round, but I would argue that Company B likely has a higher capital efficiency than Company A, because Company B’s DR is lower. Why is that? A company’s valuation is a function of the amount of money it expects to make in the future, while the amount of money being raised is an approximation of the money it will spend. Put the two together and you have a reasonable proxy to the company’s capital efficiency.&lt;/p&gt;

&lt;p&gt;We can also go one step further and measure the Venture Capital Efficiency Ratio(VCER), which is defined as, for any given round, the pre-money valuation over total capital raised before the round&lt;sup class=&quot;footnote&quot;&gt;8&lt;/sup&gt;. It is the same idea but measured over all previous funding rounds cumulatively. Imagine a company is valued at $10B pre-money for a new round, and it has raised a total of $2B over all previous funding rounds, then its VCER is 5x at that round.&lt;/p&gt;

&lt;p&gt;Here is how I think about the two metrics:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;DR is a forward-looking metric for a single round. It shows how much of the company ownership is given away to new investors in exchange for the money raised to fuel future growth. DR predicts capital efficiency in future business growth. Lower DR is a proxy to higher capital efficiency.&lt;/li&gt;
  &lt;li&gt;VCER is a backward-looking metric over all previous rounds. It shows how much money the company has raised and possibly spent to grow the business and reach the current valuation. VCER validates capital efficiency in previous business growth. Higher VCER translates to higher capital efficiency.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;real-world-examples&quot;&gt;Real-world examples&lt;/h2&gt;

&lt;h3 id=&quot;uber&quot;&gt;Uber&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Date&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Round&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Amount&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Valuation&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Total Raised&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;DR&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;VCER&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Aug 2009&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Seed&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;200.0K&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;200.0K&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Oct 2010&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Angel&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.3M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.5M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Feb 2011&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series A&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;49.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.5M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.45%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.7x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Dec 2011&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;37.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;300.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;49.5M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.33%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.0x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Aug 2013&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series C&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;363.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.5B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;412.5M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.37%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;70.7x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jun 2014&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series D&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.2B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.6B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.06%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;41.2x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Dec 2014&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series E&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.8B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;40.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.4B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.00%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.8x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jul 2015&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series F&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;50.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.4B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.00%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.3x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Dec 2015&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Growth Equity VC&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.6B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;62.5B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.96%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.5x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jan 2018&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Late VC&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.3B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;69.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.3B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.88%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.3x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Aug 2018&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Late VC&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;500.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;72.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.8B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;0.69%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.8x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Apr 2019&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Late VC&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;500.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;78.8B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.3B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;0.63%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.2x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;May 2019&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;IPO&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.1B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;74.3B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.4B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.90%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.6x&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;wework&quot;&gt;WeWork&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Date&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Round&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Amount&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Valuation&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Total Raised&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;DR&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;VCER&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Oct 2011&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Seed&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jan 2012&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Seed&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.9M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.9M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jul 2012&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series A&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.9M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;May 2013&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;40.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;64.9M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Oct 2013&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series C&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;150.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;214.9M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Dec 2014&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series D&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;355.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.6B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;569.9M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.72%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.4x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jun 2015&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series E&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;434.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Mar 2016&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series F&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;430.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.4B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Oct 2016&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series F&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;260.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.7B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jul 2017&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series G&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.2B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.9B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.80%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.8x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jul 2018&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Late VC&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;500.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.4B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Nov 2018&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Growth Equity VC&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;42.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.4B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.14%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.7x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jan 2019&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series H&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;47.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.4B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.13%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.5x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Mar 2021&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;SPAC IPO&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.3B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.6B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.26%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;0.8x&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;zoom&quot;&gt;Zoom&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Date&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Round&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Amount&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Valuation&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Total Raised&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;DR&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;VCER&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jun 2011&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Seed&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jan 2013&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series A&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;37.50%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.0x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Sep 2013&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.5M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;48.6M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.5M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.37%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.1x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Feb 2015&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series C&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;200.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;48.5M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.00%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.8x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jan 2017&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series D&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;100.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;148.5M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.00%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.6x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Apr 2019&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;IPO&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;356.8M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.8B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;505.3M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.03%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;59.6x&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;stripe&quot;&gt;Stripe&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Date&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Round&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Amount&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Valuation&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Total Raised&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;DR&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;VCER&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Mar 2011&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Seed&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Feb 2012&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series A&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;100.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.00%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;50.0x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jul 2012&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;40.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jan 2014&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series C&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;80.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.8B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;120.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.44%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;45.0x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Dec 2014&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series C&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;70.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.5B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;190.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.00%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.2x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jul 2015&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series C&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;100.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.9B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;290.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.04%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.8x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Nov 2016&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series D&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;150.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.2B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;440.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.63%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.7x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Sep 2018&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series E&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;245.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;685.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.23%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;45.5x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Jan 2019&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series F&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;100.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.5B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;785.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;0.44%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.8x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Sep 2019&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series G&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;850.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.3B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.6B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.41%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;45.0x&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Mar 2021&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;Series H&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;600.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;95.0B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.2B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;0.63%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;58.1x&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;a-few-notes-regarding-the-data&quot;&gt;A few notes regarding the data&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Amount&lt;/code&gt; is the amount of money raised in the round.&lt;/li&gt;
  &lt;li&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Valuation&lt;/code&gt; is the pre-money valuation for the round.&lt;/li&gt;
  &lt;li&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DR&lt;/code&gt; is the dilution ratio for the round, i.e., the ratio of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Amount&lt;/code&gt; over &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Valuation&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Total Raised&lt;/code&gt; is the cumulative total capital raised up until that round.&lt;/li&gt;
  &lt;li&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;VCER&lt;/code&gt; is the Venture Capital Efficiency Ratio of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Valuation&lt;/code&gt; for the round over &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Total Raised&lt;/code&gt; until the previous round.&lt;/li&gt;
  &lt;li&gt;All funding and valuation numbers are in US dollars.&lt;/li&gt;
  &lt;li&gt;The data is sourced from &lt;a href=&quot;https://app.dealroom.co/dashboard&quot;&gt;Dealroom&lt;/a&gt; and &lt;a href=&quot;https://www.crunchbase.com/&quot;&gt;Crunchbase&lt;/a&gt;. Although I have worked at Uber and Stripe, I have only referenced public data when putting together this post. There is no guarantee if the data is accurate.&lt;/li&gt;
  &lt;li&gt;Only primary equity rounds are included. Debt rounds and M&amp;amp;A rounds are omitted. Secondary equity rounds are excluded because no new shares are issued in such rounds.&lt;/li&gt;
  &lt;li&gt;Extension rounds at the same valuation as the original rounds are combined into the original rounds to make DR calculation reasonable.&lt;/li&gt;
  &lt;li&gt;To simplify the result, I decided to omit data for Uber China’s funding rounds. As a result, Uber’s fund raising amount below is understated (because money raised for Uber China is not in the table), and hence Uber’s capital efficiency numbers are overstated.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;my-takeaways&quot;&gt;My takeaways&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;It is typical for DR to start high - about 20% or higher for at least three of the four examples above. We don’t have valuation data for WeWork’s early rounds, but it is safe to assume the DR is also in that 20% range or higher. This makes sense because an early-stage company needs to make large upfront fixed-cost investments to create the product.&lt;/li&gt;
  &lt;li&gt;It is also typical for DR to trend lower in subsequent rounds. A low DR in these later rounds suggests that the company’s marginal cost to scale their business is low. That is a sign of a healthy business that is achieving economies of scale. The trend is most clear for Zoom’s data.&lt;/li&gt;
  &lt;li&gt;Conversely, a high DR in later rounds indicate high marginal cost. It implies problems in reaching economies of scale, as is shown in the trajectory of Uber and WeWork after the colossal rounds with billions of dollars raised. Note the absolute number of the DR can still be lower since the valuation is typically higher at these rounds. For example, Uber’s “Growth Equity VC” round is a good one to examine.&lt;/li&gt;
  &lt;li&gt;VCER is a more reliable metric over the long term. A VCER that consistently trends downwards is a sign of a business that has trouble reaching economies of scale, as is illustrated in Uber. A VCER that goes below 1x basically means earlier investors are close to being wiped out, which is what happened to WeWork. On the contrary, a VCER that steadily trends upwards indicates high capital efficiency as the business achieves economies of scale, as is the case of Zoom.&lt;/li&gt;
  &lt;li&gt;For both metrics, it is useful to examine both the raw number and the trend over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the end, I want to note these capital efficiency metrics should be used as references to help understand startups. They are useful but do not tell the entire story. There is no replacement for analyzing the business, the people and the product. Personally I had lots of fun tinkering with these numbers and forming the idea in this post. As a parting gift, I would like to leave you with the IPO-round numbers for some of the most successful companies in the tech industry:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt; &lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Microsoft&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Amazon&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Google&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Facebook&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;IPO Date&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;Mar 1986&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;May 1997&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;Aug 2004&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;May 2012&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Total raised pre-IPO&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.1M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.3B&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Pre-money valuation&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;716.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;384.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.4B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;88.0B&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Amount raised in IPO&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;61.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;54.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1.7B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.0B&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Post-money valuation&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;777.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;438.0M&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.1B&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;104.0B&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;IPO DR&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.52%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.06%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.77%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.18%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;IPO VCER&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;716.0x&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;48.0x&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;593.7x&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.7x&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:startup-definition&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I am using a very loose definition of “startups” in this post: any VC-funded private company that aspires to grow rapidly is a startup. Many such companies should no longer be called “startups” in later stages.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:uber-explanations&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Here is my explanation for Uber’s underachievement: &lt;a href=&quot;/2021/12/06/uber-had-no-upside/&quot;&gt;Uber had no upside&lt;/a&gt;.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:microsoft-no-outside-funding&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Microsoft grew its business with no outside funding before the IPO. They &lt;a href=&quot;https://techcrunch.com/2017/08/08/a-look-back-in-ipo-microsoft-the-software-success/&quot;&gt;raised $1 million&lt;/a&gt; to get a venture capital company onboard for “some adult advice”, but never spent the money.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:startup-earnings&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Early stage startups are usually very open to share financial metrics with prospective candidates. Make sure to ask for such metrics if you are interviewing with one.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:dilution-ratio-definition&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The definition of the dilution ratio is adapted from chemistry. According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Dilution_ratio&quot;&gt;Wikipedia&lt;/a&gt;, the dilution ratio is ratio of solute to solvent. Technically the pre-money valuation should be the solute, because existing shareholders are being diluted, not the new money raised. However, I prefer to treat the new funding as the solute, and the pre-money valuation as the solvent. This way the dilution ratio is usually a lower number, as is shown in the examples that follow.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:company-a-dilution&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;If the pre-money valuation is the solute and the new money raised is the solvent, Company A’s dilution ratio will be 10:1.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:company-b-dilution&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;If the pre-money valuation is the solute and the new money raised is the solvent, Company B’s dilution ratio will be 100:1.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:vcer-ev&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The &lt;a href=&quot;https://www.volitioncapital.com/news/the-venture-capital-efficiency-ratio-and-what-it-means-to-be-capital-efficient/&quot;&gt;proper definition&lt;/a&gt; of VCER uses &lt;a href=&quot;https://www.investopedia.com/terms/e/enterprisevalue.asp&quot;&gt;Enterprise Value&lt;/a&gt;, which is again not possible to get without insider knowledge, and hence I use the pre-money valuation instead.&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 17 Jul 2022 00:00:00 +0000</pubDate>
        <link>https://lyncredible.com/2022/07/17/capital-efficiency/</link>
        <guid isPermaLink="true">https://lyncredible.com/2022/07/17/capital-efficiency/</guid></item><item>
        <title>Learning accounting to read earnings reports</title>
        <description>&lt;p&gt;Will Larson wrote this &lt;a href=&quot;https://lethain.com/profit-and-loss-statement/&quot;&gt;Reading a Profit &amp;amp; Loss statement&lt;/a&gt; article on his blog, which prompted me to share how I learned accounting to read earnings reports. This skill has not made me a good stock picker, but I found it helpful to understand the financial positions of my employers, which were not always in line with the narrative provided by higher-ups. This allowed me to &lt;a href=&quot;/2021/12/06/uber-had-no-upside/&quot;&gt;make independent career decisions&lt;/a&gt;, and I hope it is a useful skill for you too.&lt;/p&gt;

&lt;p&gt;As is the case for almost every other skill, my journey took some learning and practice. I went with the &lt;a href=&quot;https://www.coursera.org/specializations/finance-accounting&quot;&gt;Introduction to Finance and Accounting Specialization&lt;/a&gt; by University of Pennsylvania on Coursera, but I think every 100-level undergrad course in the finance and accounting field works. There are also many accounting 101 books out there, although I haven’t read any and hence cannot make any recommendation.&lt;/p&gt;

&lt;p&gt;Will’s blog post focused on the Profit &amp;amp; Loss statement (also known as the Income statement). In addition, I also found the Balance Sheet and the Cash Flow statement very useful. All of them are explained with examples in a typical finance and accounting course like the one above.&lt;/p&gt;

&lt;p&gt;For practice, I spent some time going through historical earnings reports for a few public companies on &lt;a href=&quot;https://www.sec.gov/edgar/searchedgar/companysearch.html&quot;&gt;EDGAR&lt;/a&gt;. Here are the reports I paid the most attention to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;S-1: the go-public report that contains historical financial statements for a few years leading up to the public listing&lt;/li&gt;
  &lt;li&gt;10-Q: the quarterly reports&lt;/li&gt;
  &lt;li&gt;10-K: the annual reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These reports usually provides year-over-year comparisons for only a single year, so I built some spreadsheets with data going back 5 or 10 years to understand longer term trends. This exercise served as a good practice to solidify my knowledge, but it could get tedious over time. Luckily I found some free tools to help:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
&lt;a href=&quot;https://stockrow.com/&quot;&gt;Stockrow&lt;/a&gt; provides free financial data going back 10 years. It also offers convenient deep links to 10-K and 10-Q reports on EDGAR.&lt;/li&gt;
  &lt;li&gt;
&lt;a href=&quot;https://www.koyfin.com/&quot;&gt;Koyfin&lt;/a&gt; provides free financial data going back 2 years. It does have a nicer interface though.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that is what I want to share on learning accounting today. Hope it helps!&lt;/p&gt;
</description>
        <pubDate>Sun, 10 Jul 2022 00:00:00 +0000</pubDate>
        <link>https://lyncredible.com/2022/07/10/learning-accounting-to-read-earnings/</link>
        <guid isPermaLink="true">https://lyncredible.com/2022/07/10/learning-accounting-to-read-earnings/</guid></item><item>
        <title>Leadership is not a title</title>
        <description>&lt;p&gt;Yesterday I got a recruiting email for an &lt;em&gt;Engineering Leadership&lt;/em&gt; opportunity, and I had got similar ones before. The title &lt;em&gt;Engineering Leadership&lt;/em&gt; makes me quite uncomfortable, although it is understandable why the recruiters wrote it. For years, I was not able to tell the difference between leadership and management, especially in the engineering context. I have, however, come to my own definition over time. In my opinion, leadership is not a title reserved for (senior) management, but a skill that could and should be practiced by every individual.&lt;/p&gt;




&lt;h2 id=&quot;leadership-versus-management&quot;&gt;Leadership versus Management&lt;/h2&gt;

&lt;p&gt;Leadership is indexed on creating value. Everyone could and should create value. A leader on a team cares first and foremost about how to maximize value creation by the entire team. The leader makes sure everyone on the team is aligned on a shared vision. They take on grunt work passionately if that is what it takes to succeed as a team. They will take accountability when there are signs of failure, but they will not worry about how to split the reward before the team succeeds.&lt;/p&gt;

&lt;p&gt;Management is indexed on empowering people. Everyone could and should empower people. A manager on a team recognizes first and foremost that the power of any single person is limited. It takes a village, as they say. The manager will enthusiastically build the right team for the mission, create the right environment and culture for everyone to thrive, and coach each individual to maximize their potential.&lt;/p&gt;

&lt;p&gt;Both leadership and management are important skills to have. The term &lt;em&gt;management&lt;/em&gt; also happens to be the job title for a manager, primarily because contemporary performance review systems have to be scaled in a hierarchical organization&lt;sup class=&quot;footnote&quot;&gt;1&lt;/sup&gt;. Despite not having the term &lt;em&gt;leadership&lt;/em&gt; in the title, it is also absolutely critical for managers to possess the leadership skill because the performance of a manager is ultimately evaluated by the amount of value creation by their team. However, a manager’s job will be miserable if they are the only person to demonstrate leadership on their team. As is typical in the tech industry, many organizations have designated Tech Leads who obsess with value creation by their respective organizations.&lt;/p&gt;

&lt;h2 id=&quot;leadership-is-not-technical-expertise&quot;&gt;Leadership is not technical expertise&lt;/h2&gt;

&lt;p&gt;Leadership is not technical expertise. As is defined above, leadership is not about proficiency in certain technologies or mastery of certain subjects. As a manager, one easy trap to fall into is not to give enough credit to rising leaders simply because they are not “senior enough”. An equally dangerous slope is to blindly require every “senior engineer” to developer their leadership skill. I have learned both lessons the hard way by committing the mistakes by myself. To illustrate, let me refer to the example of true leadership in a different field.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Tom_Brady&quot;&gt;Tom Brady&lt;/a&gt; is probably the greatest of all time in American football. He played statistically at the &lt;a href=&quot;https://www.nfl.com/players/tom-brady/stats/career&quot;&gt;highest level&lt;/a&gt; well into his forties and most recently &lt;a href=&quot;https://en.wikipedia.org/wiki/Super_Bowl_LV&quot;&gt;won the Super Bowl&lt;/a&gt; at the age of 44&lt;sup class=&quot;footnote&quot;&gt;2&lt;/sup&gt; last year. In a sport that is dominated by raw athletic talent, Brady did that by being a true leader. His singular focus is to win, and he is willing to do everything it takes to win: from a very &lt;a href=&quot;(https://www.washingtonpost.com/sports/2021/11/12/tom-brady-age-longevity-discipline/)&quot;&gt;disciplined diet and lifestyle&lt;/a&gt;, to being the &lt;a href=&quot;https://www.patriots.com/news/statement-from-bill-belichick-on-tom-brady-s-retirement&quot;&gt;most hard-working player&lt;/a&gt;; from voluntarily taking &lt;a href=&quot;https://www.quora.com/Did-Tom-Brady-really-take-a-pay-cut&quot;&gt;pay cuts&lt;/a&gt; to keep his team competitive, to supporting and protecting the &lt;a href=&quot;https://www.si.com/nfl/2022/01/03/listen-tom-brady-about-antonio-brown&quot;&gt;most impossible teammate&lt;/a&gt;. My personal favorite is Brady’s &lt;a href=&quot;https://www.si.com/nfl/2021/09/28/tom-brady-comments-dad-joke-put-home&quot;&gt;debunking of his own father&lt;/a&gt; (with a sense of humor) to protect his &lt;em&gt;previous&lt;/em&gt; team and coach, who were criticized by Brady Sr. for treating his son unfairly. Brady’s name was never associated with agility, strength or velocity even in his twenties, yet he retired last week with the &lt;a href=&quot;https://www.statmuse.com/nfl/ask/quarterbacks-with-most-super-bowl-wins&quot;&gt;most Lombardi Trophies&lt;/a&gt; in history. It is too bad that Tom Brady, as &lt;a href=&quot;https://twitter.com/patrickc&quot;&gt;Patrick Collison&lt;/a&gt; would say, is not going to make a few more slam dunks in &lt;a href=&quot;https://en.wikipedia.org/wiki/Super_Bowl_LVI&quot;&gt;Super Bowl LVI&lt;/a&gt; later today.&lt;/p&gt;

&lt;h2 id=&quot;leadership-to-be-continued&quot;&gt;Leadership to be continued&lt;/h2&gt;

&lt;p&gt;I argued &lt;em&gt;what leadership is not&lt;/em&gt; in this post. It is already getting long, so I will save &lt;em&gt;what leadership is&lt;/em&gt; for another article. For those of you who are going to watch the Super Bowl, I predict there will be no fewer touchdowns scored than slam dunks. Enjoy the show!&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:manager-to-disappear&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Effective performance measurement systems are vital to the life and death of any aspiring organization, as is pointed by Paul Graham in a &lt;a href=&quot;https://twitter.com/paulg/status/1489973009741926401&quot;&gt;tweet&lt;/a&gt; and an &lt;a href=&quot;http://www.paulgraham.com/wealth.html&quot;&gt;essay&lt;/a&gt;. In a large enough organization, contemporary management principles center around breaking down objectives and holding individual managers accountable. This arrangement seems reasonably effective to me, but I would not rule out a future where management stops being a job title, but merely a skill for everyone to practice and deploy.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:nominal-age&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Technically Brady was 43 years, 6 months and 4 days old on the day of &lt;a href=&quot;https://en.wikipedia.org/wiki/Super_Bowl_LV&quot;&gt;Super Bowl LV&lt;/a&gt;. I am quoting 44 as his nominal age under &lt;a href=&quot;https://en.wikipedia.org/wiki/East_Asian_age_reckoning&quot;&gt;East Asian age reckoning&lt;/a&gt;.&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Sun, 13 Feb 2022 00:00:00 +0000</pubDate>
        <link>https://lyncredible.com/2022/02/13/leadership-is-not-a-title/</link>
        <guid isPermaLink="true">https://lyncredible.com/2022/02/13/leadership-is-not-a-title/</guid></item><item>
        <title>Performance Outlook</title>
        <description>&lt;p&gt;I have a framework for &lt;a href=&quot;/2020/02/23/effective-career-conversations/&quot;&gt;career conversations&lt;/a&gt;. It comprises of ladder reading, performance heatmap/brag docs, and career development plans. Since writing that post, I have learned and evolved the way to create the career development plan. Let me call it the &lt;em&gt;performance outlook&lt;/em&gt;&lt;sup class=&quot;footnote&quot;&gt;1&lt;/sup&gt;. The idea is the manager and the employee can work together to write down their performance review for the next performance review cycle, which covers what success looks like for them using concrete examples. I would like to thank &lt;a href=&quot;https://www.linkedin.com/in/jgershen/&quot;&gt;Joe Gershenson&lt;/a&gt; from whom I learned this technique.&lt;/p&gt;




&lt;h2 id=&quot;recapping-career-development-plan&quot;&gt;Recapping Career Development Plan&lt;/h2&gt;

&lt;p&gt;Here is what I wrote for the original career development plan:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The final &lt;em&gt;structured&lt;/em&gt; step would then be creating a career development plan. The plan would be comprised of four sections: current condition, target state, proposed projects and practical advice. The current condition and target state would be derived from the ladder reading and performance heatmap exercises. The proposed projects and practical advice would then be tailored to that condition and target. For example, suppose an engineer would like to move to the next level. They were technically competent, but needed to demonstrate project coordination and leadership skills. The proposed projects would be breadth-shaped and require cross-team or cross-functional collaboration. The practical advice would be to focus on communication and mitigating schedule risks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;enter-performance-outlook&quot;&gt;Enter Performance Outlook&lt;/h2&gt;

&lt;p&gt;The core idea is to write down the performance review together with the employee as if time is up for the current review cycle. For example, suppose there is one performance review every year in January. The current time is February 2022, but we will pretend it is already January 2023. It is time to grade their performance for the calendar year of 2022. We will follow the usual format of evaluating performance: start with the impact (the what), and supplement with the contributions (the how). In particular, we will describe how the employee have improved their skills in areas of development that were highlighted in their most recent performance review.&lt;/p&gt;

&lt;p&gt;There are a few key details I try to adhere to in authoring performance outlook:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
&lt;strong&gt;Always use the present or past tense&lt;/strong&gt;. This is counter-intuitive because the performance review is going to happen in the future. Everything written down in the exercise is imaginary no matter how likely or unlikely it appears. In fact, the uncertainty is exactly why it is important to write in the present or past tense. When writing in the future tense, I tend to leave a lot of room to account for variance, but that will only create confusion and anxiety for the employee. Using the present or past tense forces me to be crisp, which helps a lot in creating alignment on expectations.&lt;/li&gt;
  &lt;li&gt;
&lt;strong&gt;Use specific and achievable examples&lt;/strong&gt;. This is an extension of the first point above to make sure clear expectations are set. The typical employee ladder definitions can be very abstract, so it helps to be explicit here. For example, instead of “demonstrating leadership”, write down “identifying waste in our cloud spending and delivering $X in cost savings”.&lt;/li&gt;
  &lt;li&gt;
&lt;strong&gt;Differentiate between success and outstanding success&lt;/strong&gt;. It is very motivating to include stretch targets in the outlook, but the writing should make such targets clear to separate from the table stakes. A helpful way is to organize such targets under an explicit heading for &lt;em&gt;outstanding success&lt;/em&gt;. An alternate is to create an entirely standalone performance outlook for the outstanding success scenario.&lt;/li&gt;
  &lt;li&gt;
&lt;strong&gt;Write with strong yet loosely-held convictions&lt;/strong&gt;. The write-up should express strong convictions for an opinionated future, but it should not enslave the employee or the manager to that particular version of the future. Both of them should be on frequent lookout for changes in the surrounding environment. Both should respond to changes by adjusting or rewriting the performance outlook promptly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have come to love this exercise. The bonus is it can be done by yourself too. It is always a pleasant conversation when an employee creates a performance outlook on their own. I have also been doing this exercise for myself.&lt;/p&gt;

&lt;p&gt;Please give it a try and let me know if you like it.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:performance-outlook-naming&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I chose the word &lt;em&gt;outlook&lt;/em&gt; due to its use in finance for &lt;a href=&quot;https://www.investopedia.com/articles/analyst/03/012903.asp&quot;&gt;earning expectations&lt;/a&gt;.&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 12 Feb 2022 00:00:00 +0000</pubDate>
        <link>https://lyncredible.com/2022/02/12/performance-outlook/</link>
        <guid isPermaLink="true">https://lyncredible.com/2022/02/12/performance-outlook/</guid></item><item>
        <title>Cryptocurrency Mining: Decentralized Centralization</title>
        <description>&lt;p&gt;I dipped my toe into Ethereum mining over the holiday break. My intention was not to make money&lt;sup class=&quot;footnote&quot;&gt;1&lt;/sup&gt;, but to learn the underlying infrastructure powering cryptocurrencies. After all, most of my career has been spent on dealing with distributed systems. The journey impressed me. I am fascinated to see how much centralization there is despite the best intentions that were put into designing a decentralized system. I am also amazed by the creative entrepreneurs who discovered and delivered on business opportunities through decentralized centralization.&lt;/p&gt;




&lt;h2 id=&quot;understanding-cryptocurrency-mining&quot;&gt;Understanding cryptocurrency mining&lt;/h2&gt;

&lt;p&gt;To understand how cryptocurrency mining works under the hood, I followed the 2013 article titled &lt;a href=&quot;https://michaelnielsen.org/ddi/how-the-bitcoin-protocol-actually-works/&quot;&gt;How the Bitcoin protocol actually works&lt;/a&gt; by &lt;a href=&quot;https://mnielsen.github.io/&quot;&gt;Michael Nielsen&lt;/a&gt;. The article strikes the balance of enough technical discussion and not too many implementation details. While it focused on Bitcoin, the general principle applies to Ethereum and other Proof-of-Work based cryptocurrencies.&lt;/p&gt;

&lt;p&gt;In a nutshell, cryptocurrencies are distributed ledgers among a trustless network, and &lt;a href=&quot;https://ethereum.org/en/developers/docs/consensus-mechanisms/pow/&quot;&gt;Proof-of-Work&lt;/a&gt; is the mechanism that allows the decentralized network to come to consensus, or agree on things like account balances and the order of transactions. The mechanics typically includes finding a &lt;a href=&quot;https://en.wikipedia.org/wiki/Cryptographic_nonce&quot;&gt;nonce&lt;/a&gt; which, when concatenated to a message, produces a SHA256 hash that, when interpreted as an unsigned 256-bit integer, is less than the network-specified target, i.e. the mining difficulty. A nonce needs to be found for every block, which is produced regularly over time - about every 10 minutes for Bitcoin and every 10 seconds for Ethereum. The network participant who finds such a nonce first will get rewarded with a certain amount of the corresponding cryptocurrency. The reward is created out of thin air and part of the consensus protocol. Finding a nonce is computationally expensive, and the reward is an incentive for network participants to provide computing resources and to play by the rules.&lt;/p&gt;

&lt;p&gt;The general concept seems reasonable so far. The protocol is beautifully designed to allow trustless consensus to form in a decentralized network. How does it work in practice then?&lt;/p&gt;

&lt;h2 id=&quot;mining-pools&quot;&gt;Mining pools&lt;/h2&gt;

&lt;p&gt;The first tactical decision for me was whether to join a mining pool. My GPU could compute hashes at a rate of about 33M per second(33MH/s), compared to the total hashing power of the Ethereum network at &lt;a href=&quot;https://www.coinwarz.com/mining/ethereum/hashrate-chart&quot;&gt;1PH/s&lt;/a&gt;. In probability terms, that means I could expect to find a good nonce for every 30,000,000 blocks. Assuming a 10-second block time, that translates to getting a reward once every 9.5 years! That is obviously bad for a whole host of reasons:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;That 9.5-year number is an expectation, not guaranteed. So I may have to wait even longer.&lt;/li&gt;
  &lt;li&gt;The total hashing power is likely to increase over time, furthering delaying my expected payout.&lt;/li&gt;
  &lt;li&gt;Any down time in my mining computer would work against me as well.&lt;/li&gt;
  &lt;li&gt;The Ethereum network will probably switch to &lt;a href=&quot;https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/&quot;&gt;Proof-of-Stake&lt;/a&gt; long before my expected payout, rendering my mining useless.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Given all of these, it is a no-brainer for a hobbyist miner like me to join an established mining pool. A mining pool participates on the Ethereum network as one single entity, but it leverages the computing power of all the members in the pool. Even a small-ish mining pool with 1% of the total hashing power is expected to get awards for 3.6 blocks every hour, which greatly smooths out randomness in the earning curve.&lt;/p&gt;

&lt;p&gt;Joining a mining pool is straightforward, but it represents a philosophical shift. I would not need to trust anyone by mining directly on the network, but now I need to trust a central authority, the mining pool operator. After all, they get the block awards directly in their own wallet, and I need to trust that they will calculate my share correctly and pay me on time. In fact, the rules of my mining pool dictate that members get paid once they hit a certain amount&lt;sup class=&quot;footnote&quot;&gt;2&lt;/sup&gt;, which will take me about 200 days to get. That is certainly better than once every 9.5 years, but in a sense I am offering a no-interest loan to the mining pool operator whom I was incentivized to trust despite not knowing anything about them.&lt;/p&gt;

&lt;p&gt;A mining pool is obviously a great business with strong network effects. The more hashing power a mining pool has, the smoother the earning curve will be for its members. The more members it has, the more hashing power it gets. The pool operators charge 1% to 3% from their members, which is a classical software service with zero marginal cost. The strong network effects naturally lead to centralization. In fact, the leading Ethereum mining pool, Ethermine, accounts for &lt;a href=&quot;https://etherscan.io/stat/miner?range=7&amp;amp;blocktype=blocks&quot;&gt;more than 30% hashing power&lt;/a&gt; of the entire Ethereum network. The top three commands 56%, enough to launch a &lt;a href=&quot;https://www.coindesk.com/learn/what-is-a-51-attack/&quot;&gt;51% attack&lt;/a&gt;. Ethereum mining is not something an average user can afford to do alone any more. The situation is not too different for Bitcoin or any other mainstream cryptocurrencies.&lt;/p&gt;

&lt;h2 id=&quot;mining-software&quot;&gt;Mining software&lt;/h2&gt;

&lt;p&gt;The second tactical decision was to choose a mining software. My first intuition was to lean on open source mining software, but &lt;a href=&quot;https://github.com/ethereum-mining/ethminer&quot;&gt;most&lt;/a&gt; &lt;a href=&quot;https://github.com/cbuchner1/ccminer&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;https://github.com/no-fee-ethereum-mining/nsfminer&quot;&gt;them&lt;/a&gt; have not received major updates for years. On the other end, closed source mining software is a booming business. They typically &lt;a href=&quot;https://2cryptocalc.com/mining-software&quot;&gt;charge a commission of 1-2%&lt;/a&gt; for fully integrated solutions which push your GPUs to their limits while protecting their longevity. Such software is sketchy though. They use anti-reverse engineering techniques to protect the binary executables. This is perfect reasonable since otherwise it would be super easy to hack the binaries and avoid paying the commission. However, it does trigger plenty of warnings from most anti-virus software, and invites questions about what is actually happening under the hood.&lt;/p&gt;

&lt;p&gt;Nevertheless, the business of closed source mining software seems to be getting more popular by the day. It is such a competitive business that they even employ consumer promotion tactics like &lt;a href=&quot;https://github.com/develsoftware/GMinerRelease/releases/tag/2.74&quot;&gt;lottery draws for loyal customers&lt;/a&gt;. This business is also built on network effects with typical software margins. The more money the developer makes, the better job they can do in improving usability and performance. The more usability and performance improves, the more users they will attract. The more users, the more commission they will make. This space is more fragmented than mining pools though, presumably because it is not super difficult to create high-performing miners. If mining pools are SaaS businesses, mining software is a freemium software business without App-Store-like distribution&lt;sup class=&quot;footnote&quot;&gt;3&lt;/sup&gt;. The centralization is still staggering and potentially dangerous since no outsiders know what is in the software binaries.&lt;/p&gt;

&lt;h2 id=&quot;decentralized-centralization&quot;&gt;Decentralized centralization&lt;/h2&gt;

&lt;p&gt;Both mining pools and mining software are centralized businesses built on network effects inside a decentralized ecosystem. Credits must go to the early entrepreneurs who discovered and executed against these business opportunities. In a sense this is not too different from how &lt;a href=&quot;https://stratechery.com/concept/aggregation-theory/&quot;&gt;aggregators&lt;/a&gt; like Google built powerful businesses. The Internet itself is decentralized by design. Google did not become powerful by controlling every website. It built a strong business by aggregating all websites and making it a no-brainer for consumers to ask Google for information. The centralization is a natural result of network effects. The zero marginal cost nature of Internet and software made such network effects stronger than ever.&lt;/p&gt;

&lt;p&gt;Such centralization can also be dangerous though. Top mining pools can execute a 51% attack by just coordinating with a small number of counter parties. Popular mining software developers can change their commission rate without revealing it. Even if they are honest and operate with integrity, the centralization makes them ideal targets for outside attackers. Someone can launch simple denial of service attacks against top mining pools to cause major disruptions to the entire Ethereum network&lt;sup class=&quot;footnote&quot;&gt;4&lt;/sup&gt;. They can also plant malicious code into popular mining software without users noticing.&lt;/p&gt;

&lt;p&gt;Ethereum’s giant &lt;a href=&quot;https://vitalik.ca/general/2020/11/06/pos2020.html&quot;&gt;migration from Proof-of-Work to Proof-of-Stake&lt;/a&gt; could probably alleviate the problem, but &lt;a href=&quot;https://beaconcha.in/stakingServices&quot;&gt;staking pools&lt;/a&gt; are already emerging to be the next natural point of centralization. &lt;a href=&quot;https://solana.com/solana-whitepaper.pdf&quot;&gt;Solana’s Proof-of-History&lt;/a&gt; is another interesting alternative, but it is an even high barrier of entry to &lt;a href=&quot;https://docs.solana.com/running-validator/validator-reqs&quot;&gt;run a Solana validator node&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;takeaways&quot;&gt;Takeaways&lt;/h2&gt;

&lt;p&gt;Centralization naturally arises where network effects emerge. Decentralized networks bring down marginal cost and beget network effects. &lt;a href=&quot;https://moxie.org/2022/01/07/web3-first-impressions.html&quot;&gt;Moxie’s first impression of web3&lt;/a&gt; discusses the ways centralization emerges in the user-facing application space on top of major cryptocurrencies. To be fair, the application developers do &lt;a href=&quot;https://medium.com/@danfinlay/what-moxie-missed-on-web3-wallets-8dc572e7f39b&quot;&gt;intend to reduce reliance on centralized services&lt;/a&gt;. My experience with mining shows that such centralization is even more lopsided in the infrastructure layer where &lt;a href=&quot;https://twitter.com/balajis/status/1479865153562681348&quot;&gt;blockspaces&lt;/a&gt; are provided. More interestingly, the infrastructure centralization aligns interests between big and small players, which means the centralization is unlikely to break. Personally I am not paranoid about the philosophical debate of centralization versus decentralization. It is much more interesting for me to watch dynamic businesses get built to meet real user demands in real markets.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:not-making-money&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;At a recent high level of &lt;a href=&quot;https://www.coinbase.com/price/ethereum&quot;&gt;$4,000 per Ether&lt;/a&gt;, my estimated earning is $2 per day.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:payout-threshold&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The payout threshold is perfectly reasonable because the transaction fee is &lt;a href=&quot;https://etherscan.io/gastracker&quot;&gt;astronomically high&lt;/a&gt; to transfer Ether from the pool’s wallet into my own wallet.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:software-distribution&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I have distinct memories of downloading random software over dial-up connections from the 1990s. It was both exciting and scary. I was burnt by viruses like the &lt;a href=&quot;https://en.wikipedia.org/wiki/CIH_(computer_virus)&quot;&gt;CIH&lt;/a&gt; badly in the early days.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:mining-pool-dos&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;If I understand correctly about how the Ethereum protocol works, sudden loss of major hashing power could lead to decrease of mining difficulty. An attacker would have the incentive to take down major mining pools and run their own mining operation on the side with reduced mining difficulty, which allows them to get rewarded richly within the rules of the network. An ambitious and resourceful attacker could even temporarily control more than 50% of total hashing power while the top pools are down.&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 14 Jan 2022 00:00:00 +0000</pubDate>
        <link>https://lyncredible.com/2022/01/14/cryptocurrency-mining-decentralized-centralization/</link>
        <guid isPermaLink="true">https://lyncredible.com/2022/01/14/cryptocurrency-mining-decentralized-centralization/</guid></item><item>
        <title>Uber had no upside, Part Deux</title>
        <description>&lt;p&gt;My previous post, &lt;a href=&quot;/2021/12/06/uber-had-no-upside/&quot;&gt;Uber had no upside&lt;/a&gt;, quickly became the top-ranked post by page views in one day. I am much grateful for your appreciation&lt;sup class=&quot;footnote&quot;&gt;1&lt;/sup&gt;. I am equally inspired by the hard questions some have raised&lt;sup class=&quot;footnote&quot;&gt;2&lt;/sup&gt;. In this follow-up piece, I would like to address the major points surfaced in the discussions. Please bear in mind this is not investment advice though.&lt;/p&gt;




&lt;h2 id=&quot;a-review-of-the-discourse&quot;&gt;A review of the discourse&lt;/h2&gt;

&lt;p&gt;Broadly speaking, there were three categories of discussions:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Uber has a deep moat in economy of scale through its network effects. It would be uneconomic for a new upstart to compete.&lt;/li&gt;
  &lt;li&gt;Uber could use its low-margin businesses to fund growth projects which could be high-margin, just like Amazon did with retail and AWS.&lt;/li&gt;
  &lt;li&gt;I was contradicting myself by saying &lt;em&gt;Uber had no upside&lt;/em&gt; while still holding a &lt;em&gt;meaningful position&lt;/em&gt; in $UBER stock.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let me try to address each of them in the following sections.&lt;/p&gt;

&lt;h2 id=&quot;how-to-compete-with-uber-economically&quot;&gt;How to compete with Uber economically&lt;/h2&gt;

&lt;p&gt;Reader &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6874234394308067328?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A6874234394308067328%2C6874549311045214208%29&quot;&gt;Martin Kess wrote&lt;/a&gt; that Uber’s high &lt;em&gt;utilization and reliability are a moat&lt;/em&gt;. This brings down cost-per-ride, and makes it difficult for a new upstart to compete. Let’s say, for a average $10 ride, the cost per ride is $8 for Uber but $12 for the upstart. The upstart could choose to subsidize $8 and bring price down to $4, but Uber would only need to burn $4 to compete. The upstart would obviously be in a very inefficient position. It would be unwise for any upstart to enter the market and start a price war even in a single metro area.&lt;/p&gt;

&lt;p&gt;Or is it?&lt;/p&gt;

&lt;p&gt;Contrary to intuition, it is Uber that would be in a very bad economic position if there were a price war. The problem is exactly Uber’s high market share. Let’s say a new upstart kicks off a price war in one city where Uber commands 100% of ride-hailing market, which is 1 million rides per day. The upstart sets a price of $4/ride (hence losing $8/ride) and quickly grows to 50k rides per day, or 5% of the market measured by the number of rides. Uber lowers its own price to $4/ride (hence losing $4/ride) to avoid further losing share (hence doing 950k rides/day). At this point, the upstart is burning $400k per day, but Uber is lighting $3.8M on fire per day, 9.5x the amount the upstart is spending!&lt;/p&gt;

&lt;p&gt;The fundamental problem here is that Uber cannot selectively subsidizes rides that would be taken away by the upstart. Instead, Uber has to subsidize all rides in the city. Uber’s dominant position becomes its Achilles’ heel in a price war.&lt;/p&gt;

&lt;p&gt;To make matters worse, the economics tip more into the upstart’s favor in a number of ways:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The more the upstart subsidizes, the higher the pressure Uber will feel. If the upstart sets the price at $2/ride, Uber will need to burn 11.4x as much in the above example&lt;sup class=&quot;footnote&quot;&gt;3&lt;/sup&gt;.&lt;/li&gt;
  &lt;li&gt;Because of #1, the upstart has pricing power despite being the smaller player. Uber has to be reactive and match the price even if it will feel more pain at lower price points.&lt;/li&gt;
  &lt;li&gt;There is no floor in the price war. $0 rides are plausible for the upstart, and the price can even go negative. That negative number could come in the form of rider promotions or driver incentives. This is even worse news for Uber because the math is not in its favor when the price drops even more into the negative territory due to #1.&lt;/li&gt;
  &lt;li&gt;The upstart’s efficiency will improve as it gets more market share, meaning that it could burn less money per ride. On the other hand, Uber’s efficiency will worsen as it loses market share, causing it to burn more money per ride. Ironically, the relative spending difference between the two will converge despite the efficiency change in opposite directions. Again, the important variable here is the market share for each player. Both efficiency and cash burn are functions of the volume.&lt;/li&gt;
  &lt;li&gt;Up until this point we have assumed the market to be static at 1 million rides per day. In practice, the market will expand due to lower prices. This is arguably bad news for Uber again, because it has to burn even more money comparatively as long as it has vastly higher market share.&lt;/li&gt;
  &lt;li&gt;Another huge assumption we made was that Uber had economy of scale, i.e. it could burn less per ride. That may be true, but the degree is probably low. Uber obviously incurs a large variable cost per ride - about 80% of its gross bookings goes to the driver&lt;sup class=&quot;footnote&quot;&gt;4&lt;/sup&gt;. Even within the 20% that Uber takes home with&lt;sup class=&quot;footnote&quot;&gt;5&lt;/sup&gt;, a large portion is used to pay variable costs like insurance. The fixed costs of paying the corporate employees and developing the software are where the economy of scale comes from, but that portion is small, only accounting for 4% of gross bookings according to Philo’s most generous estimation&lt;sup class=&quot;footnote&quot;&gt;6&lt;/sup&gt;. The new upstart does not need to spend billions or years on engineering to get an okay mobile app with passable user experience, and not a single venture capitalist will blink their eye to fund the fixed cost part of software development.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This was largely the playbook that Uber used to compete with Didi in China, coming in as the smaller player. Upon realizing its own disadvantageous position by being the dominant player in China, Didi pulled a masterful trick. It funneled &lt;a href=&quot;https://techcrunch.com/2015/09/16/ubers-rivals-didi-kuadi-and-lyft-form-international-ridesharing-partnership/&quot;&gt;investment into Lyft&lt;/a&gt; which staged a price war with Uber in the US from the advantageous market position of being the smaller player. In fact, Didi formed the &lt;a href=&quot;https://www.businessinsider.com/lyft-didi-ola-grab-anti-uber-alliance-launches-2016-4&quot;&gt;anti-Uber alliance&lt;/a&gt; globally to finance local Uber competitors around the world. Uber was forced to leave China because it could not sustain the cash burn &lt;em&gt;outside of China&lt;/em&gt;&lt;sup class=&quot;footnote&quot;&gt;7&lt;/sup&gt;. Didi could thank &lt;a href=&quot;https://en.wikipedia.org/wiki/Sun_Tzu&quot;&gt;Sun Tzu&lt;/a&gt; for writing &lt;a href=&quot;https://www.chinabeastsandlegends.com/36-1-2-wei-wei-jiu-zhao&quot;&gt;&lt;em&gt;Besiege Wèi to rescue Zhào&lt;/em&gt;&lt;/a&gt; in the 2,500-year-old &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Art_of_War&quot;&gt;&lt;em&gt;The Art of War&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Uber knew the precarious position it was in. That was why &lt;a href=&quot;https://www.nytimes.com/2016/06/21/business/dealbook/why-uber-keeps-raising-billions.html&quot;&gt;Uber kept raising billions after billions of dollars&lt;/a&gt;. Contrary to popular belief, the colossal funding rounds indicated not strength, but weakness. It was a last resort because Uber had no way to differentiate its product.&lt;/p&gt;

&lt;h2 id=&quot;ubers-high-margin-dream&quot;&gt;Uber’s high-margin dream&lt;/h2&gt;

&lt;p&gt;Several readers, in public&lt;sup class=&quot;footnote&quot;&gt;8&lt;/sup&gt; or in private, has expressed that Uber could use its low-margin businesses to fund growth projects, some of which will hopefully be high margin. After all, this was how Amazon became a trillion dollar company, discovering AWS after spending many years in red ink for the retail business.&lt;/p&gt;

&lt;p&gt;I actually gave one concrete example in my previous post. Meituan successfully built a high-margin ads business on the back of a low-margin food delivery business. However, I also explained why this is unlikely to happen for Uber, at least in the US market.&lt;/p&gt;

&lt;p&gt;In more general terms though, the comparison between Uber and Amazon is a deceptively dangerous trap. Yes, both companies started with low-margin businesses involving moving atoms in the physical world. And yes, both companies spent their respective first decades losing money. However, there is at least one fundamental difference between the two from the financial perspective. Amazon was operating cash-flow positive&lt;sup class=&quot;footnote&quot;&gt;9&lt;/sup&gt; but Uber was not&lt;sup class=&quot;footnote&quot;&gt;10&lt;/sup&gt;. To put things into perspective:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Amazon was founded in July 1994. It was operating cash-flow positive in its first full year in 1995, and it has been that way ever since for every single year, with the exceptions of the years 1999, 2000 and 2001, when Amazon was aggressively investing for growth at the peak of and after the burst of the dotcom bubble. Amazon did amazingly well in the 2008 recession, growing its operating cash-flow by 20% from 2007 to 2008, and then growing another 95% the following year!&lt;/li&gt;
  &lt;li&gt;Uber has never been operating cash-flow positive in any year since 2016, the earliest year for which there is publicly available financial data. From 2016 to 2020, Uber burnt through almost $13B cash in operating activities in the 5-year span. For context, Uber raised &lt;a href=&quot;https://www.nytimes.com/2016/06/21/business/dealbook/why-uber-keeps-raising-billions.html&quot;&gt;a total of $15B in cash&lt;/a&gt; from its founding in 2009 to mid-2016 when it reached a $68B valuation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, Amazon losing money was an accounting gimmick. It was reinvesting every penny of profit into future growth. One can read the &lt;a href=&quot;https://www.sec.gov/Archives/edgar/data/1018724/000119312505070440/dex991.htm&quot;&gt;2004 shareholder letter&lt;/a&gt; from Jeff Bezos&lt;sup class=&quot;footnote&quot;&gt;11&lt;/sup&gt; to understand why Amazon singularly focused on cash flows instead of profit &amp;amp; loss&lt;sup class=&quot;footnote&quot;&gt;12&lt;/sup&gt;. On the other hand, Uber did not have much extra money to invest into future growth, because it was burning though piles of cash in its core business for an extended period of time.&lt;/p&gt;

&lt;p&gt;Amazon raised a total of $108M&lt;sup class=&quot;footnote&quot;&gt;13&lt;/sup&gt; in outside capital in its entire history, and built a trillion dollar company by aggressively reinvesting operating cash flows. Uber has raised a staggering $25.2B&lt;sup class=&quot;footnote&quot;&gt;14&lt;/sup&gt; to date, and is still operating cash-flow negative&lt;sup class=&quot;footnote&quot;&gt;15&lt;/sup&gt;. The margin for error was just too small for Uber.&lt;/p&gt;
&lt;h2 id=&quot;my-opportunity-cost&quot;&gt;My opportunity cost&lt;/h2&gt;

&lt;p&gt;Now on to the &lt;em&gt;am-I-contradicting-myself&lt;/em&gt; question. The short answer is yes, but the full answer requires more nuance.&lt;/p&gt;

&lt;p&gt;My primary consideration back in late 2017 was the opportunity cost of my career. It was important to work for an employer with (hopefully massive) growth prospects. I got more than half of my yearly compensation in the form of illiquid equity grants, so I had to think hard into the future and project the risk-adjusted payoff. I was given a meaningful 4-year RSU grant when I joined Uber in October 2015. I was awarded another sizable 4-year RSU grant in April 2017 due to good performance. I was walking away from more than half of my total equity grant in December of that year, because I saw no upside. I could get a much better deal elsewhere even if the new offer was lower on paper at that moment, because I would place much higher premium in the upside of the new company. From that angle, I would argue that my actions were consistent with my analysis.&lt;/p&gt;

&lt;p&gt;There is also a real opportunity cost for my current $UBER holdings. As &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6874234394308067328?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A6874234394308067328%2C6874851108842475520%29&quot;&gt;Murat U.&lt;/a&gt; and &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6874234394308067328?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A6874234394308067328%2C6875442645259317248%29&quot;&gt;Hersh Mehta&lt;/a&gt; pointed out, I could have earned a higher risk-free return by selling and reinvesting into broad-market index funds immediately&lt;sup class=&quot;footnote&quot;&gt;16&lt;/sup&gt;. To be fair, my current holding is less than half of the total I acquired via my two-year employment. Nevertheless, I have to admit that I have nothing but emotional attachment by holding onto the remaining shares. I guess the takeaway is that even rational people with great analysis can make irrational decisions, which could be considered as my tiny contribution to disprove the &lt;a href=&quot;https://en.wikipedia.org/wiki/Efficient-market_hypothesis&quot;&gt;Efficient Market Hypothesis&lt;/a&gt; :)&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:tweet&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://twitter.com/RealYuanLiu/status/1468468633097572358&quot;&gt;My tweet&lt;/a&gt; got 10 likes, which is the highest in over a year! :P&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:linkedin-post&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/posts/yuanliu0x_uber-had-no-upside-activity-6874234394308067328-18Wr&quot;&gt;My LinkedIn post&lt;/a&gt; received a number of inspiring comments and questions on top of 100+ likes.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:math-validation&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Please use this as an exercise to validate my math.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:uber-gaap-expense&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Technically driver earnings is not a GAAP expense in Uber’s accounting, but that is irrelevant to our discussion here.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:uber-take-rate&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;According to &lt;a href=&quot;https://investor.uber.com/news-events/news/press-release-details/2021/Uber-Announces-Results-for-Third-Quarter-2021/&quot;&gt;Uber’s Q3 2021 report&lt;/a&gt;, Uber has a blended take rate of 21% across &lt;em&gt;Mobility&lt;/em&gt; and &lt;em&gt;Delivery&lt;/em&gt;.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:philo-cost-of-software&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;In &lt;a href=&quot;https://philo.substack.com/p/ride-hailing-is-it-sustainable&quot;&gt;Ride-Hailing: Is It Sustainable?&lt;/a&gt;, Philo estimates that Uber will spend $2B in R&amp;amp;D on a little under $100B of gross bookings in 2021. Double that spending and you get a generous 4% number.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:uber-china-exit-reasoning&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;The speculation for the reason behind Uber’s China exit was a logical inference. I had no material non-public information at the time of the decision, nor do I have any today. The decision was way above my pay grade as a fungible software engineer.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:hai-wang-moat-post&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;See &lt;a href=&quot;https://www.linkedin.com/posts/hai-w-81630624_uber-had-no-upside-activity-6874791207445377024-qxxS&quot;&gt;Hai Wang’s post on building deeper moat into Uber&lt;/a&gt;.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:amazon-10k&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Source: &lt;a href=&quot;https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&amp;amp;CIK=0001018724&amp;amp;type=10-K&amp;amp;dateb=&amp;amp;owner=exclude&amp;amp;count=40&amp;amp;search_text=&quot;&gt;Amazon’s 10-K filings&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:uber-s1-10k&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Source: &lt;a href=&quot;https://www.sec.gov/Archives/edgar/data/1543151/000119312519120759/d647752ds1a.htm&quot;&gt;Uber’s S-1&lt;/a&gt; and &lt;a href=&quot;https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&amp;amp;CIK=0001543151&amp;amp;type=10-K&amp;amp;dateb=&amp;amp;owner=exclude&amp;amp;count=40&amp;amp;search_text=&quot;&gt;10-K filings&lt;/a&gt;.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:bezos-shareholder-letters&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;You should really read &lt;a href=&quot;https://bettertomorrowfinancial.com/2021/04/15/2020-update-all-of-jeff-bezos-amazon-letters-to-shareholders-together-in-one-pdf-through-fiscal-year-2019/&quot;&gt;all 24 shareholder letters&lt;/a&gt; Bezos wrote.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:bezos-on-earnings&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Bezos noted that, in his &lt;a href=&quot;https://www.sec.gov/Archives/edgar/data/1018724/000119312505070440/dex991.htm&quot;&gt;2004 shareholder letter&lt;/a&gt;, Amazon does “not focus first and foremost, as many do, on earnings, earnings per share or earnings growth”. He also mentioned “that a focus on EBITDA … would lead to the same faulty conclusion about the health of the business”.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:amazon-funding-history&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Source: &lt;a href=&quot;https://www.crunchbase.com/organization/amazon/company_financials&quot;&gt;Amazon Financials on Crunchbase&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:uber-funding-history&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Source: &lt;a href=&quot;https://www.crunchbase.com/organization/uber/company_financials&quot;&gt;Uber Financials on Crunchbase&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:uber-q3-2021-ytd-cash-flow&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;According to &lt;a href=&quot;https://investor.uber.com/news-events/news/press-release-details/2021/Uber-Announces-Results-for-Third-Quarter-2021/&quot;&gt;its Q3 2021 report&lt;/a&gt;, Uber’s 2021 year-to-date operating cash flow at the end of September was negative $338M. It was still negative, but an order of magnitude lower than the past few years.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:not-investment-advice&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;This post is not investment advice. I may transact in the securities mentioned in this post without providing any updates here.&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Sat, 11 Dec 2021 00:00:00 +0000</pubDate>
        <link>https://lyncredible.com/2021/12/11/uber-follow-up/</link>
        <guid isPermaLink="true">https://lyncredible.com/2021/12/11/uber-follow-up/</guid></item><item>
        <title>Uber had no upside</title>
        <description>&lt;p&gt;I enjoyed a great read of &lt;a href=&quot;https://philo.substack.com/p/ride-hailing-is-it-sustainable&quot;&gt;Ride-Hailing: Is It Sustainable?&lt;/a&gt; by Philo from MD&amp;amp;A&lt;sup class=&quot;footnote&quot;&gt;1&lt;/sup&gt;. It sent me back to late 2017 when I decided to &lt;a href=&quot;/2020/04/09/reflecting-on-my-ic-path-part-iii/&quot;&gt;leave Uber&lt;/a&gt;. At the time, many friends and colleagues asked me why. The answer was because I saw no upside in Uber. In this post, I would like to take a detour from the usual engineering management topics and talk about business. I hope it is useful since it is probably more important to decide whom to work for in a career. Please bear in mind this is not investment advice though.&lt;/p&gt;

&lt;p&gt;(Edit: this post sparked some inspiring discussions on the Internet, which encouraged me to write a &lt;a href=&quot;/2021/12/11/uber-follow-up/&quot;&gt;follow-up post&lt;/a&gt;. I do suggest reading both to get a full picture.)&lt;/p&gt;




&lt;h2 id=&quot;uber-stabilized-in-late-2017&quot;&gt;Uber stabilized in late 2017&lt;/h2&gt;

&lt;p&gt;Uber had &lt;a href=&quot;https://www.vox.com/2017/8/20/16164176/uber-2017-timeline-scandal&quot;&gt;a turbulent year in 2017&lt;/a&gt;. From the &lt;a href=&quot;https://www.vox.com/2017/1/30/14445122/delete-uber-trump-protest-immigration-ban&quot;&gt;Delete Uber&lt;/a&gt; campaign in January, to &lt;a href=&quot;https://www.susanjfowler.com/blog/2017/2/19/reflecting-on-one-very-strange-year-at-uber&quot;&gt;Susan Fowler’s heartbreaking blog post&lt;/a&gt; in February. From the unearthing of other harassment and business conduct claims throughout the spring, to the &lt;a href=&quot;https://www.vox.com/2017/5/27/15705290/bonnie-kalanick-mother-uber-ceo-dies-boating-accident&quot;&gt;tragical death of Bonnie Kalanick&lt;/a&gt;, mother of Founder &amp;amp; CEO Travis Kalanick, over the Memorial Day weekend. The chaos finally came to an end when &lt;a href=&quot;https://www.vox.com/2017/8/27/16212552/uber-ceo-dara-khosrowshahi&quot;&gt;Dara Khosrowshahi took over as CEO&lt;/a&gt; before the Labor Day. Dara brought hope to the company when he projected an 18-month timeline to take Uber public&lt;sup class=&quot;footnote&quot;&gt;2&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;I started interviewing in October, right after Dara started, and gave my notice in December. So it was understandable for my friends and colleagues to ask the “why now” question. A lot of Uber employees left in the chaotic first half of 2017, but things had stabilized over the fall. After all, who did not want the IPO excitement now that there was a time table to go public?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/2020/04/08/reflecting-on-my-ic-path-part-ii/&quot;&gt;I was also doing well at Uber&lt;/a&gt;. I was an established tech lead trusted by my team, my manager, and my organization. I just had a stellar performance review in the spring of 2017. The accompanying stock refresh pushed my yearly compensation package to a level unmatchable from other tech companies&lt;sup class=&quot;footnote&quot;&gt;3&lt;/sup&gt;. Why leave?&lt;/p&gt;

&lt;h2 id=&quot;profitability-was-baked-in&quot;&gt;Profitability was baked in&lt;/h2&gt;

&lt;p&gt;The answer was because I saw no upside in Uber. I &lt;em&gt;did and still do&lt;/em&gt; believe Uber created massive value for the society. It expanded the ride-hailing market by at least an order of magnitude&lt;sup class=&quot;footnote&quot;&gt;4&lt;/sup&gt;. It &lt;em&gt;was and still is&lt;/em&gt; literally impossible to get a taxi from the Seattle-suburban neighborhood I live in, but now I can get a Uber within 10 minutes just at my fingertips.&lt;/p&gt;

&lt;p&gt;Uber was still losing money at the time, but I believed that the Uber business could be sustainable. However, I suspected that Uber’s sky-high valuation had already baked in long-term profitability of a low-margin business in a highly competitive market. Uber would need to deliver new high-margin business at scale to justify any future upside.&lt;/p&gt;

&lt;p&gt;One data point was the valuation. I joined Uber in October 2015, when the valuation was $50B at a per-share price of $48.77. When I left Uber in December 2017, the valuation had risen to $72B, but the per-share price stayed flat at $48.77. That meant Uber the business did not create any value in the two-year span from the investors’ perspective. New capital infusion was responsible for all the valuation increase. All existing shareholders, including employees, were diluted as a result&lt;sup class=&quot;footnote&quot;&gt;5&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Another consideration was &lt;a href=&quot;https://www.yahoo.com/news/uber-picks-dara-khosrowshahi-look-160104990.html&quot;&gt;Dara’s performance as the CEO of Expedia&lt;/a&gt; prior to joining Uber. It appeared that Dara excelled at optimizing operations and doing mergers &amp;amp; acquisitions, but he was not as good at leading product innovations and creating new business opportunities. If that were to hold true for Dara’s tenure at Uber, the best case scenario would be cutting losses and achieving profitability, which again implied limited upside.&lt;/p&gt;

&lt;p&gt;These were my primary considerations when deciding to leave in late 2017. While I stand by that decision today, my thinking has certainly evolved over the past four years. The sections below have more.&lt;/p&gt;

&lt;h2 id=&quot;the-missing-monopoly-profits&quot;&gt;The missing monopoly profits&lt;/h2&gt;

&lt;p&gt;There was an argument that Uber should have acquired or could still acquire Lyft to reap monopoly profits. That claim seemed dubious to me. We can leave the regulatory approval question aside, and just think about market dynamics for the moment. Uber didn’t seem to possess any deep moat other than the network effect built up in a two-sided marketplace connecting drivers and riders. That moat was fragile though, as Lyft had shown when they took advantage of Uber’s forgettable 2017 and &lt;a href=&quot;https://secondmeasure.com/datapoints/rideshare-industry-overview/&quot;&gt;grew from ~10% to ~30% market share&lt;/a&gt; in the US. It was not a stretch to imagine a new player entering the market and undercutting Uber, had Lyft been acquired or driven out of the business by Uber.&lt;/p&gt;

&lt;p&gt;The counter argument is why a new investor will still fund a Uber-like business when they know it is a race to the bottom. That is a legitimate question, but I think someone might still do:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If Uber were a monopoly and were to raise prices, a sufficiently capitalized competitor would have the incentive to enter the market, compete on prices while offering similar quality of service, and take share from Uber.&lt;/li&gt;
  &lt;li&gt;If Uber, fully aware of the competitive threat, didn’t raise prices despite being a monopoly, it would continue to live on thin margins hence having limited upside.&lt;/li&gt;
  &lt;li&gt;Even in a competitive market where companies race to the bottom, there are still plenty of newcomers every now and then. The airline industry is capital intensive and known for being loss makers to promote their loyalty programs. There are also quite a few commercial airliners on the market.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another counter argument is Uber’s network effect. The &lt;a href=&quot;https://twitter.com/davidsacks/status/475073311383105536&quot;&gt;theory&lt;/a&gt; goes like more riders lead to higher utilization for drivers, which leads to higher earnings and more drivers on the platform, which then brings down prices and attracts more riders. AirBnB seems to have a strong network effect. It has been successfully fending off competitors so far. Why would Uber not benefit from the virtuous cycle and fight off any potential competitors? Here is a hypothesis:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Uber’s network effect is local to metropolitan areas. I believe most Uber trips are taken by local riders and operated by local drivers. A new upstart could focus on just one city, run promotions and pay incentives, and quickly undercut Uber’s business in that city. The capital requirement is manageable, and it could raise more capital and expand to other cities once it has shown some success.&lt;/li&gt;
  &lt;li&gt;AirBnB’s network effect is global. A typical traveler would not go to the same destination for repeat vacations. As a result, it would be hard for new upstarts to compete. They could focus on finding hosts in one hot destination, e.g. Hawaii, but they would still need to run national or global promotion campaigns to win mind share from travelers. Alternatively, they could focus on getting travelers from one source area, e.g. Seattle in winter, but they would need to sign up hosts in all the popular destinations. In other words, AirBnB’s network effect is more robust.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hypothesis is partially validated when DiDi, Uber’s almighty competitor in China and globally, went public along with its &lt;a href=&quot;https://d18rn0p25nwr6d.cloudfront.net/CIK-0001764757/fa2d4417-2974-44fd-9f70-cacf41ac8d6a.pdf&quot;&gt;financial data&lt;/a&gt;. Didi &lt;a href=&quot;https://www.reuters.com/article/us-china-taxi-merger/china-taxi-apps-didi-dache-and-kuaidi-dache-announce-6-billion-tie-up-idUSKBN0LI04420150214&quot;&gt;merged with Kuaidi&lt;/a&gt; and &lt;a href=&quot;https://www.cnbc.com/2016/08/01/chinas-didi-chuxing-to-acquire-ubers-chinese-operations-wsj.html&quot;&gt;acquired Uber’s China business&lt;/a&gt; many years ago, but there are no signs of monopoly profits at all. Instead, Didi faced &lt;a href=&quot;https://kr-asia.com/meituan-dianping-and-didi-chuxing-both-claim-temporary-victory-over-competition-to-evolve-into-chinas-super-service-app&quot;&gt;fierce, localized competition&lt;/a&gt; from Meituan and iZuche.com after the ride-hailing war in China was declared over in 2016 when Uber exited.&lt;/p&gt;

&lt;p&gt;Could Uber lobby for favorable regulations to prevent other companies from even entering the market? It is possible, but it is probably not good for Uber either:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Regulations imply cost. They will cut into Uber’s already razor-thin margin. Just look at how hard Uber has been fighting against regulations to treat drivers as employees.&lt;/li&gt;
  &lt;li&gt;Artificial monopolies created by regulations tend to be fragile&lt;sup class=&quot;footnote&quot;&gt;6&lt;/sup&gt;. One only needs to look at the market value of New York City &lt;a href=&quot;https://en.wikipedia.org/wiki/Taxi_medallion&quot;&gt;taxi medallion&lt;/a&gt;, a government-created monopoly that Uber destroyed not long ago.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-underachiever-in-uber-eats&quot;&gt;The underachiever in Uber Eats&lt;/h2&gt;

&lt;p&gt;Uber Eats was believed to be the next growth engine after rides, and it is indeed a larger business&lt;sup class=&quot;footnote&quot;&gt;7&lt;/sup&gt; than ride-hailing for Uber in 2021 due to the coronavirus pandemic. Nevertheless, it still under-achieved relative to its potential. Uber Eats was on track to be No.1 in the US food delivery category in 2017, but it is now a &lt;a href=&quot;https://www.businessofapps.com/data/food-delivery-app-market/&quot;&gt;distant second to DoorDash&lt;/a&gt;. What if Uber Eats were to maintain its leading position? Would the food delivery business unlock a lot more upside for Uber?&lt;/p&gt;

&lt;p&gt;I would still be quite skeptical in that world. Meituan is probably the most successful business built on the back of food delivery, but its profit driver is the high-margin ads business to rank restaurants in its app&lt;sup class=&quot;footnote&quot;&gt;8&lt;/sup&gt;. Amazon employs a similar tactic in its retail listing page to &lt;a href=&quot;https://www.fastcompany.com/90631969/amazon-ad-business-growth&quot;&gt;extract margin from third-party merchants&lt;/a&gt;. Meituan does the same to restaurants who want to be ranked higher in the app. That ads business requires high-density metro areas with hundreds of selections, which does not work in most of US suburbs&lt;sup class=&quot;footnote&quot;&gt;9&lt;/sup&gt;. There are exactly four Asian restaurants that Uber Eats can deliver to me under 30 minutes. It is irrational for any of them to pay Uber in exchange for higher ranking.&lt;/p&gt;

&lt;h2 id=&quot;the-pipedream-of-self-driving-cars&quot;&gt;The pipedream of self-driving cars&lt;/h2&gt;

&lt;p&gt;The final argument is that self-driving cars will turn Uber into a cash cow. Uber’s largest expense is driver payouts&lt;sup class=&quot;footnote&quot;&gt;10&lt;/sup&gt;, and they can drastically lower prices for rides and still literally print money with self-driving cars. After all, isn’t that why &lt;a href=&quot;https://techcrunch.com/2016/08/18/uber-acquires-otto-to-lead-ubers-self-driving-car-effort-report-says/&quot;&gt;Kalanick acquired Anthony Levandowski’s startup&lt;/a&gt; and got into an &lt;a href=&quot;https://www.wired.com/story/uber-waymo-lawsuit-settlement/&quot;&gt;expensive legal battle with Waymo&lt;/a&gt;, Alphabet’s self-driving unit? The payoff has to be extremely high to justify the investment, right?&lt;/p&gt;

&lt;p&gt;I am not buying that argument either. First, it was not a given that Uber would be the first company to commercialize its own self-driving technology. Of course this option is now officially dead after &lt;a href=&quot;https://www.reuters.com/article/us-uber-atg/uber-sells-atg-self-driving-business-to-aurora-at-4-billion-idUSKBN28H2RX&quot;&gt;Uber sold its Advanced Technologies Group to Aurora&lt;/a&gt;. However, even before the deal, the fact that Uber had the largest ride-hailing network did not appear to give it any advantage in developing self-driving technology. Tesla has millions of cars and volunteer users/testers on the road. Waymo has the longest actively-operated fleet of test vehicles. Startups like Cruise and Aurora are focused bets that will either make self-driving work or go out of business. All things considered, it was unlikely for Uber to deliver either the first or the best commercial deployments of self-driving technology.&lt;/p&gt;

&lt;p&gt;Now that Uber is no longer developing its own self-driving technology, could it license such technology once it is available and mature? Maybe. Would that unlock a lot more upside? Probably not. Let’s say some other company develops such technology and is ready to scale it. I think they have a lot of options favorable to them and unfavorable to Uber:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;License the technology to Uber but ask for steep royalty premiums. Uber would still accept the deal because it would be cheaper than human drivers, but the leftover margin to Uber would be thin.&lt;/li&gt;
  &lt;li&gt;License the technology to Uber and Uber’s competitors. Capture all the value while the ride-hailing service providers race to bottom. This has happened in the PC industry where Intel and Microsoft captured all the value while the OEMs competed to death&lt;sup class=&quot;footnote&quot;&gt;11&lt;/sup&gt;.&lt;/li&gt;
  &lt;li&gt;Create their own ride-hailing service and compete directly with Uber. They could offer superior experience and much cheaper rides thanks to their self-driving technology.&lt;/li&gt;
  &lt;li&gt;Partner with an established consumer brand to create a new ride-hailing service and compete with Uber. This is the same as #3, but they could offload the rider relationship to an entity with much better brand recognition, for example Apple, Amazon, Facebook or Google.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Uber definitely has the competitive advantage in scaling the ride-hailing marketplace. In particular, Uber has the operational excellence in managing its fleet of driver partners, but this is irrelevant in the self-driving future.&lt;/p&gt;

&lt;h2 id=&quot;will-i-be-proven-wrong&quot;&gt;Will I be proven wrong?&lt;/h2&gt;

&lt;p&gt;I saw no upside for Uber four years ago. I still see very limited upside for Uber today. That does not mean I am right though. I am writing this to share my reasoning rather than my conclusion. In fact, I will be happily proven wrong if $UBER takes off some day, as I still hold a meaningful portion of my employee equity grant&lt;sup class=&quot;footnote&quot;&gt;12&lt;/sup&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:the-diff-intro&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I found the article from the weekend longreads via &lt;a href=&quot;https://www.thediff.co/&quot;&gt;The Diff by Bryne Hobart&lt;/a&gt;.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:uber-ipo&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Uber did go public in May 2019, roughly 20-months after Dara became CEO.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:comp-match&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;I interviewed at Stripe and Facebook, among other companies. None of them were able to match my yearly total compensation package at Uber based on the then-current valuation for each company.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:uber-market-expansion&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;To learn how Uber expanded the ride-hailing market, read &lt;a href=&quot;https://philo.substack.com/p/ride-hailing-is-it-sustainable&quot;&gt;Ride-Hailing: Is It Sustainable?&lt;/a&gt;, the article I linked at the beginning of this post.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:uber-ipo-dilution&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://www.nytimes.com/2019/05/09/technology/uber-ipo-stock-price.html&quot;&gt;Uber went public&lt;/a&gt; at $45 per share and a $82.4B valuation. In other words, it had more dilution at lower price; late-stage investors lost money; most employees were underwater.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:gdpr-monopoly&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;On the other hand, natural monopolies are more robust against regulations, even when the regulations were aimed at the monopolies themselves. GDPR was supposed to contain Facebook and Google. Instead, they &lt;a href=&quot;https://www.forbes.com/sites/jonmarkman/2018/05/22/gdpr-is-great-news-for-google-and-facebook-really/&quot;&gt;became even more unstoppable&lt;/a&gt; in the EU because smaller competitors cannot afford the cost of GDPR compliance.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:uber-eats-larger&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;According to &lt;a href=&quot;https://investor.uber.com/news-events/news/press-release-details/2021/Uber-Announces-Results-for-Third-Quarter-2021/&quot;&gt;Uber’s Q3 2021 report&lt;/a&gt;, &lt;em&gt;Delivery&lt;/em&gt; is ~30% more than &lt;em&gt;Mobility&lt;/em&gt; in gross bookings, and marginally higher in revenue.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:meituan-profit-driver&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;See &lt;em&gt;online marketing services&lt;/em&gt; from &lt;a href=&quot;http://media-meituan.todayir.com/2021041908000317079722494_en.pdf&quot;&gt;Meituan’s 2020 annual report&lt;/a&gt;.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:doordash-suburbs&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;One primary reason for DoorDash’s success was their &lt;a href=&quot;https://latana.com/post/doordash-success-story/&quot;&gt;focus on suburbs&lt;/a&gt;.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:uber-driver-expense&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Technically most driver payouts are counted in gross bookings but excluded from revenue, which means it is not an expense line item. Uber only books its own cut as revenue.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:ibm-pc&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Remember IBM was the original PC OEM but &lt;a href=&quot;https://www.zdnet.com/article/lenovo-bought-ibms-pc-business-10-years-ago-jury-out-on-broader-ambitions/&quot;&gt;they cut their loss long ago&lt;/a&gt;. Uber’s dominant position in the ride-hailing market does not provide any safeguards.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:not-investment-advice&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;This post is not investment advice. I may transact in the securities mentioned in this post without providing any updates here.&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 06 Dec 2021 00:00:00 +0000</pubDate>
        <link>https://lyncredible.com/2021/12/06/uber-had-no-upside/</link>
        <guid isPermaLink="true">https://lyncredible.com/2021/12/06/uber-had-no-upside/</guid></item><item>
        <title>Getting to know me</title>
        <description>&lt;p&gt;It’s been a long hiatus since my last post. Many thanks to all who are still tuned in. My last post was &lt;a href=&quot;/2020/04/19/help-me-understand-you/&quot;&gt;&lt;em&gt;help me understand you&lt;/em&gt;&lt;/a&gt;, where I ask favors from new teammates to understand them better. This post is the mirror piece. I have found it useful to create a document for coworkers to understand me better. I call it the &lt;em&gt;getting-to-know-yuan&lt;/em&gt; document.&lt;/p&gt;




&lt;h2 id=&quot;write-for-the-audience&quot;&gt;Write for the audience&lt;/h2&gt;

&lt;p&gt;My primary audience of the document is my team. It would not be a terrible choice to name it &lt;em&gt;help-you-understand-me&lt;/em&gt;, but the name deserves some considerations. Not everyone has asked me to help. What if they don’t need my help? For that reason, I settled on the name of &lt;em&gt;getting-to-know-yuan&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;As for the content, I find it helpful to cover my &lt;em&gt;management philosophy&lt;/em&gt; and general &lt;em&gt;operating approach&lt;/em&gt;. It is also beneficial to supplement with a &lt;em&gt;management handbook&lt;/em&gt; which contains tactical advice on how to better work with me. A bonus section is &lt;em&gt;how to tell I am grumpy and how to help me&lt;/em&gt;, although I am yet to created my own version of it.&lt;/p&gt;

&lt;p&gt;It is super valuable for me to review it from time to time. To some extent, I think the document has provided more value to myself. It reminds me to follow the best practices I created for myself! It is also important to update the document as I learn new things.&lt;/p&gt;

&lt;h2 id=&quot;getting-to-know-yuan&quot;&gt;Getting to know Yuan&lt;/h2&gt;

&lt;p&gt;Below is the latest version with confidential information removed. Feel free to tweak and reuse for your own benefits. I cannot claim credit either since mine is also based on many great examples I have seen at Stripe.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;If you are reading this, I am really excited to be working with you.&lt;/p&gt;

  &lt;h3 id=&quot;management-philosophy&quot;&gt;Management Philosophy&lt;/h3&gt;

  &lt;p&gt;My management philosophy is heavily influenced by &lt;a href=&quot;https://lethain.com/systems-thinking/&quot;&gt;systems thinking&lt;/a&gt;. To me, a manager’s performance is evaluated by the collective output of their team. Therefore, a manager needs to be flexible in doing whatever is needed from them to deliver the desired output. On a high level, to paraphrase &lt;a href=&quot;https://www.linkedin.com/in/nielsprovos/&quot;&gt;Niels&lt;/a&gt;, I believe an engineering manager is responsible for creating healthy and well-executing teams:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;Well-executing means:
      &lt;ul&gt;
        &lt;li&gt;Understand what the business needs from the team, and set the right goals for the team&lt;/li&gt;
        &lt;li&gt;Know the execution status for the goals&lt;/li&gt;
        &lt;li&gt;Help the team unblock when they encounter hurdles&lt;/li&gt;
        &lt;li&gt;Ask for help from their own manager and/or the organization when necessary&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Healthy means:
      &lt;ul&gt;
        &lt;li&gt;Create an environment of trust so that
          &lt;ul&gt;
            &lt;li&gt;the manager and their reports can have difficult conversations&lt;/li&gt;
            &lt;li&gt;Disagreement and conflict can be surfaced in a constructive way&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;Make it sustainable so that people stay engaged and don’t burn out&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;To put it another way, my focus as an engineering manager is on projects and people. I would utilize tools like policies and processes to help with that, but the tools are a means to an end.&lt;/p&gt;

  &lt;p&gt;Here are a few books that played key roles in shaping my understanding of engineering management:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;
&lt;a href=&quot;https://www.amazon.com/High-Output-Management-Andrew-Grove/dp/0679762884/ref=sr_1_1?crid=19HZOQJGQLFT7&amp;amp;dchild=1&amp;amp;keywords=high+output+management&amp;amp;qid=1608762120&amp;amp;sprefix=high+output+mana%2Caps%2C216&amp;amp;sr=8-1&quot;&gt;High Output Management&lt;/a&gt;, Andrew Grove&lt;/li&gt;
    &lt;li&gt;
&lt;a href=&quot;https://www.amazon.com/Only-Paranoid-Survive-Exploit-Challenge/dp/0385483821/ref=sr_1_1?crid=24BJVM3JB91PL&amp;amp;dchild=1&amp;amp;keywords=only+paranoid+survive&amp;amp;qid=1608762184&amp;amp;sprefix=only+para%2Caps%2C208&amp;amp;sr=8-1&quot;&gt;Only the Paranoid Survive&lt;/a&gt;, Andrew Grove&lt;/li&gt;
    &lt;li&gt;
&lt;a href=&quot;https://www.amazon.com/Elegant-Puzzle-Systems-Engineering-Management/dp/1732265186/ref=sr_1_2?crid=QRBAZV2J6FFT&amp;amp;dchild=1&amp;amp;keywords=an+elegant+puzzle&amp;amp;qid=1608762253&amp;amp;sprefix=an+elegant+puzzle%2Caps%2C207&amp;amp;sr=8-2&quot;&gt;An Elegant Puzzle&lt;/a&gt;, Will Larson&lt;/li&gt;
    &lt;li&gt;
&lt;a href=&quot;https://www.amazon.com/Managers-Path-Leaders-Navigating-Growth/dp/1491973897/ref=sr_1_2?crid=20FKC51Z5XJHV&amp;amp;dchild=1&amp;amp;keywords=manager%27s+path&amp;amp;qid=1608762288&amp;amp;sprefix=manager%27s+path%2Caps%2C208&amp;amp;sr=8-2&quot;&gt;The Manager’s Path&lt;/a&gt;, Camille Fournier&lt;/li&gt;
    &lt;li&gt;
&lt;a href=&quot;https://www.amazon.com/Making-Manager-What-Everyone-Looks/dp/0735219567/ref=sr_1_1?crid=2C7XVX5FJI8RD&amp;amp;dchild=1&amp;amp;keywords=the+making+of+a+manager&amp;amp;qid=1608762340&amp;amp;sprefix=the+making+of+a+%2Caps%2C217&amp;amp;sr=8-1&quot;&gt;The Making of a Manager&lt;/a&gt;, Julie Zhuo&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3 id=&quot;operating-approach&quot;&gt;Operating Approach&lt;/h3&gt;

  &lt;h4 id=&quot;team-meetings&quot;&gt;Team meetings&lt;/h4&gt;

  &lt;p&gt;I recognize the value of regular team meetings, including sprint planning, standups, etc. I believe good processes are not designed but evolved, so I tend to rethink each meeting’s value from time to time. For example, here is a story of my previous team on &lt;a href=&quot;/2020/02/10/replacing-standups/&quot;&gt;adopting and getting rid of standups&lt;/a&gt;.&lt;/p&gt;

  &lt;p&gt;On a high level, I think the purpose of regular team meetings is to:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;Help with project execution
      &lt;ul&gt;
        &lt;li&gt;By broadcasting status updates and increasing awareness of each individual project among a larger group&lt;/li&gt;
        &lt;li&gt;By communicating blockers and asking for/offering help&lt;/li&gt;
        &lt;li&gt;By escalating issues and making decisions to address them&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Help the team members bond with each other
      &lt;ul&gt;
        &lt;li&gt;By checking in on each other and sharing joys and tears&lt;/li&gt;
        &lt;li&gt;By asking for and offering help on key blockers&lt;/li&gt;
        &lt;li&gt;By trusting and empowering each other on major challenges&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;On a new team, I would like to keep existing meetings running first. In the meantime, I will seek to slowly evolve them to increase the value we get out of the meetings as a team. I don’t think there are universally good processes for all teams, but there are great processes tailored to each individual team.&lt;/p&gt;

  &lt;h4 id=&quot;11s&quot;&gt;1:1s&lt;/h4&gt;

  &lt;p&gt;I spend about half of my time preparing for and attending 1:1s. I prepare high-level agendas before 1:1s, and I expect my counterpart to also think about topics to discuss beforehand. I wrote about my learnings to &lt;a href=&quot;/2020/02/17/effective-one-on-one/&quot;&gt;effective 1:1s&lt;/a&gt;. For my team members, I also dedicate one 1:1 per month to &lt;a href=&quot;/2020/02/23/effective-career-conversations/&quot;&gt;career conversations&lt;/a&gt;.&lt;/p&gt;

  &lt;h4 id=&quot;planning&quot;&gt;Planning&lt;/h4&gt;

  &lt;p&gt;I prefer to have long-term visions (e.g. two years) and short-to-medium-term roadmaps to guide execution. The quarterly planning cycle enables teams to be agile, while we also need to execute against a compelling long-term vision to avoid being trapped in local maxima. My usual plan is to refresh team charters yearly to provide long-term direction, and to track OKRs more regularly to drive short-term planning and execution.&lt;/p&gt;

  &lt;h3 id=&quot;management-handbook&quot;&gt;Management Handbook&lt;/h3&gt;

  &lt;h4 id=&quot;equity&quot;&gt;Equity&lt;/h4&gt;

  &lt;p&gt;I believe in equal opportunities among team members. It includes driving team planning and owning projects. It also includes facilitating regular team meetings and participating in toilsome tasks.&lt;/p&gt;

  &lt;h4 id=&quot;pair-work-by-default&quot;&gt;Pair work by default&lt;/h4&gt;

  &lt;p&gt;Each work stream should have at least two engineers by default. Exceptions can be made, but generally I find pair-working as an effective way to keep the team focused and to increase throughput. It also helps increase the bus factor over time.&lt;/p&gt;

  &lt;h4 id=&quot;communications&quot;&gt;Communications&lt;/h4&gt;

  &lt;p&gt;I think more clearly when reading and writing than during meetings, so I prefer written communications especially when we are about to make important decisions. As an extension, I prefer meetings with written agendas and/or pre-reads. This is not intended to be a replacement for meetings, but rather a way to make meetings more efficient. I do enjoy a healthy dose of unscripted chit-chat too, but I can also ramble a lot - please stop me early!&lt;/p&gt;

  &lt;h4 id=&quot;feedback&quot;&gt;Feedback&lt;/h4&gt;

  &lt;p&gt;I welcome feedback, particularly constructive ones to help me grow. I prefer giving and receiving feedback in 1:1. Upon receiving feedback, I might need time to think and reflect. That does not mean I disagree with the feedback - I might just ask for some personal space to learn and grow :)&lt;/p&gt;

  &lt;h4 id=&quot;goal-setting&quot;&gt;Goal setting&lt;/h4&gt;

  &lt;p&gt;I believe in driving business outcomes via metrics / OKRs. I have a strong preference in democratizing access to metrics so that they are easier to review and to track against. That way we could have leading indicators to tell us when things need attention. Otherwise, we could fall into a trap where we scramble to find metrics after the fact to justify the impact of our work.&lt;/p&gt;

  &lt;h4 id=&quot;execution&quot;&gt;Execution&lt;/h4&gt;

  &lt;p&gt;I usually take a hands-off approach for project execution. I will default trust individuals to make forward progress consistently. To gain some visibility into progress, I will usually ask project owners to break down projects into milestones with estimated dates, to send regular updates on progress, and to update estimates when necessary. This practice is to hold ourselves accountable, but more importantly it helps us get better at estimation and execution over time.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        <pubDate>Sat, 06 Nov 2021 00:00:00 +0000</pubDate>
        <link>https://lyncredible.com/2021/11/06/getting-to-know-me/</link>
        <guid isPermaLink="true">https://lyncredible.com/2021/11/06/getting-to-know-me/</guid></item></channel>
</rss>
