<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Vedang.me, posts tagged gojek</title>
  <link href="https://vedang.me/feeds/gojek.xml" rel="self"/>
  <link href="https://vedang.me/"/>
  <updated>2025-01-06T15:18:03+05:30</updated>
  <id>https://vedang.me/</id>
  <author>
    <name>Vedang Manerikar</name>
  </author>
  <entry>
    <id>https://vedang.me/gojek-10x-engineering/</id>
    <link href="https://vedang.me/gojek-10x-engineering/"/>
    <title>Lazy Weekend Viewing: GOJEK's 10x Engineer - Truth or Myth?</title>
    <updated>2019-07-20T05:30:00+05:30</updated>
    <content type="html"><![CDATA[<p><div class="orgtoc"></p><ul><li><a href='#org0d8a8b6'>Executive Summary</a></li><li><a href='#org8076cdb'>The video</a></li><li><a href='#org122b20a'>Introductions</a></li><li><a href='#org2f90d0f'>How do you get so much done with so few engineers</a></li><li><a href='#org8e9ae08'>Collaboration, Communication and Team Size</a></li><li><a href='#org51ff81b'>What about "number of pods"? Will infinite teams of 5 scale infinitely?</a></li><li><a href='#orge1acd86'>Complexity of organisations</a></li><li><a href='#org2eec0d4'>Monolith to SOA</a></li><li><a href='#orgcd71466'>Relationship as a service AKA How politics enters your system</a></li><li><a href='#orgb175c5d'>Is there such a thing as a 10x engineer?</a></li><li><a href='#org351e4de'>Good practices in coding</a></li><li><a href='#orgc854b60'>Differences between good engineers and 10x engineers</a></li><li><a href='#org6da9ca1'>How do you spot red flags in a new hire?</a></li><li><a href='#org06acc0a'>Onboarding / Engineering bootcamp</a></li><li><a href='#org8a3e3e6'>Gojek culture</a></div></li></ul><p><a id="org0d8a8b6"></a></p><h1 id="executive_summary">Executive Summary</h1><ul><li>Engineering quality is paramount. Focus on <a href='https://dave.cheney.net/2019/07/09/clear-is-better-than-clever'>clean and clear code</a>. Code is the primary medium of communication for any engineer. Write beautiful code and hold people to high standards.</li><li>Adding head count has vast hidden costs and often brings down output. The reason for this is the exponential increase in communication required to align everyone to common goals.</li><li>Similarly, pods cannot scale unless they can own small, independent components.</li><li>Monoliths are normal and good when the company is small. Refactoring the monolithic model into different components allows us to scale pods and org.</li><li>Carve monoliths only when it hits critical mass. Then, identify the pain and pull it out into it's own pod.</li><li>"Relationship as a service" or "Please get this done for me over and above other stuff on your plate"<ul><li>"Traffic congestion" (A team which is too busy) and structural failure can lead to the impression that the system is bureaucratic and political.</li></ul></li><li>Criteria when hiring Engineers<ul><li>Computer science (Can computers understand your code?)<ul><li>Ability to grasp large complex systems</li><li>Understanding of implications of design choices on that system.</li></ul></li><li>Software Engineering (Can humans understand your code?)<ul><li>How well do you communicate through your code? This is the metric that enables building <strong>good</strong> systems.</li><li>The hygiene you show in code is the hygiene you will enforce on others.</li></ul></li><li>Good behavioral traits (Can you grow?)<ul><li>Curious</li><li>Wants to learn</li><li>Can accept feedback</li><li>"Strong opinions, Weakly held."</li><li>"Pride without attachment."</li></ul></li></ul></li><li>Find the full video <a href='https://www.youtube.com/watch?v=He0XBBfCEVk'>here</a>!</li><li>The rest of this post is detailed notes on the video</li></ul><p><a id="org8076cdb"></a></p><h1 id="the_video">The video</h1><p><div class="video-container"> <iframe src="https://www.youtube.com/embed/He0XBBfCEVk" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen> </iframe> </div></p><p><a id="org122b20a"></a></p><h1 id="introductions">Introductions</h1><ul><li>CEO: Nadiem Makarim</li><li>CTO: Niranjan Paranjape</li><li>Tech Recruitment Head: Sidu Ponnappa</li><li>C42 Engineering: Sequoia SWAT Team for solving tech problems<ul><li>They were the rare "other Clojure shop" in India in 2010.</li></ul></li><li>Common consulting milestone for them was "the Client just tried to poach me". When Gojek tried this with Niranjan, they sold the entire company to Gojek.</li><li>Today, Gojek does $9 BILLION in transactions with 300 engineers.</li></ul><p><a id="org2f90d0f"></a></p><h1 id="how_do_you_get_so_much_done_with_so_few_engineers">How do you get so much done with so few engineers</h1><ul><li>Adding headcount does not increase output.</li><li>With every engineer you add, you actually slow down work (exponentially)</li><li>A good finance person will challenge you on every item of spend because they understand that that's how they lose money.</li><li>Similarly, a good engineering leader will challenge you on every addition of headcount. The hidden cost is enormous and impacts ability to deliver quickly and at quality.</li></ul><p><a id="org8e9ae08"></a></p><h1 id="collaboration%2C_communication_and_team_size">Collaboration, Communication and Team Size</h1><ul><li>Every person you add exponentially increases the combinatorics of communication you need in order to agree on what exactly it is that you are building.</li><li><strong>Code is communication between humans. Keep it clean and simple.</strong></li><li>Upto 4 people, productivity grows linearly with addition of people. Beyond that it starts plateauing and dipping.<ul><li>The person who observed this started slicing and dicing teams so that at any point in time a subsystem was being worked on by no more than 4 people.</li><li>By <a href='https://goodroot.ca/post/2018/10/13/practicality-metaphysics-conways-law/'>Conway's Law</a>, he was forcing system architecture to be set up in a certain way.</li></ul></li><li>We chose to map out our systems based on what a 5 person team could do.</li></ul><p><a id="org51ff81b"></a></p><h1 id="what_about_%22number_of_pods%22%3F_will_infinite_teams_of_5_scale_infinitely%3F">What about "number of pods"? Will infinite teams of 5 scale infinitely?</h1><ul><li>As an organization, we find similar diminishing returns with growing the number of pods.</li><li>The company's ability to add pods is also limited by ability of the pods to understand the underlying system.</li><li>If your pods are independent (have to collaborate only once in 2 to 4 weeks), then you are in a manageable situation.</li><li>Multiple pods working on the same problem leads to pushing for local goals (evolving the system to maximize your objectives based on limited understanding)</li></ul><p><a id="orge1acd86"></a></p><h1 id="complexity_of_organisations">Complexity of organisations</h1><ul><li>"Don't slow me down" from CEO to engineering<ul><li>Philosopher poet engineers</li><li>Engineering had to educate the CEO on the bad effects of not on-boarding new comers fast enough</li></ul></li><li>Adding Kafka to our stack allowed us to scale<ul><li>Helped us decouple communication</li><li>Tap into our data, you don't need to ask me anymore.</li></ul></li><li><strong>Refactoring the monolithic model into different components allowed us to put more people on the independent teams.</strong></li></ul><p><a id="org2eec0d4"></a></p><h1 id="monolith_to_soa">Monolith to SOA</h1><ul><li>We first pulled out the allocation system<ul><li>matching driver to customer</li></ul></li><li>Next we pulled out Go Pay<ul><li>This allowed us to staff the team of Go Pay without them having to understand the entire monolith.</li></ul></li><li><strong>Identify a problem, pull it out, establish a pod around it.</strong></li><li>CTO was pushing CEO:<ul><li>Before we move into this new thing, we need to get rid of the monolith first.</li><li>The choice they made was <strong>never stall growth</strong>. This meant hanging on to the monolith for longer than they would have liked, and refactoring it in bits and pieces rather than in one single effort.</li></ul></li><li>When starting out, it makes complete sense to have a monolith.</li><li>When you carve a system out of a monolith, eventually that will become a monolith.<ul><li>Now you need to split it again.</li><li><strong>Identify when the monolith reaches critical mass, and then refactor your team and code-base in lockstep.</strong></li></ul></li></ul><p><a id="orgcd71466"></a></p><h1 id="relationship_as_a_service_aka_how_politics_enters_your_system">Relationship as a service AKA How politics enters your system</h1><ul><li>I need something from your system, so I'm going to lean on our relationship to unblock me and ignore your own priorities.</li><li>"Hey I really need this done fast, because X".</li><li>This will grow until you are completely busy trying to unblock other people and are unable to focus on any of your own priorities.</li><li>Now you have a bureaucracy. The person with the back-channel to the blocked system gets to jump the queue. This inherently does not scale because people without the relationship back-channel get more and more frustrated.</li><li>"Our organization is political." I don't have privileged access, therefore that other guy must be master politician.</li><li><strong>The actual underlying problem is traffic congestion.</strong><ul><li>If you are trying to do your best, you are going to use every resource at your disposal, including your relationships, to get work done</li></ul></li><li><strong>Even in the most well-intentioned and non-egotistical organizations, structural failure leads to the perception of favouritism</strong></li></ul><p><a id="orgb175c5d"></a></p><h1 id="is_there_such_a_thing_as_a_10x_engineer%3F">Is there such a thing as a 10x engineer?</h1><ul><li><strong>As system complexity grows, for you to meaningfully contribute, you need to know the system!</strong></li><li>Criteria to select engineers<ul><li>Computer science (can computers understand your code?)<ul><li>Ability to grasp large complex systems</li><li>Understanding of implications of design choices on that system.</li></ul></li><li>Software Engineering (can humans understand your code?)<ul><li>How well do you communicate through your code?</li><li>Communication problems are the hard blockers on building good systems.</li><li>Well written code provides contextual logic and <a href='https://dave.cheney.net/2019/07/09/clear-is-better-than-clever'>clarity</a>.</li></ul></li><li>Good behavioral traits:<ul><li>curious</li><li>wants to learn</li><li>reads books</li><li>can accept feedback</li><li>^ This is the kind of person who can grow.</li></ul></li></ul></li></ul><p><a id="org351e4de"></a></p><h1 id="good_practices_in_coding">Good practices in coding</h1><ul><li>Every code-base comes with a glossary</li><li>Terms have specific meaning, and naming is critical in the dividends it pays off in the future.</li><li>Every engineer at every level has to take a written test</li><li>We are not looking at whether you can solve the complex problem. We are judging how you express yourself. You are a programmer, and your code should speak well for you.</li><li><strong>Hygiene becomes more and more important as a programmer becomes more and more senior.</strong><ul><li>The hygiene you show in code is the hygiene you will enforce on others.</li></ul></li><li>High standards are important.</li></ul><p><a id="orgc854b60"></a></p><h1 id="differences_between_good_engineers_and_10x_engineers">Differences between good engineers and 10x engineers</h1><ul><li>10x <strong>outcome</strong> (not output)</li><li>As you grow your organization, individual outcome is less important. Team outcome is what you need to measure.</li><li>Engineering is completely a team sport.</li><li>You can have deeply capable and extremely competent individual contributors who like to work alone. As long as their code fits beautifully with other systems, they are multiplying everyone's capacity.</li></ul><p><a id="org6da9ca1"></a></p><h1 id="how_do_you_spot_red_flags_in_a_new_hire%3F">How do you spot red flags in a new hire?</h1><ul><li>Every good engineer is highly opinionated. A good engineer has strong opinions weakly held.<ul><li>You should be able to change your opinion on being presented facts.</li></ul></li><li>If you are unable to deal with criticism of your code, that's a smell.<ul><li>We ask junior people to interview senior engineers. This shows the grace they have when dealing with others.</li></ul></li><li>We routinely wind up in situations where you have young people owning complex systems. Senior engineers need to be hired to now deal with these systems, and they will be on-boarded by juniors. They should be able to deal with this fact.</li><li>CTO: "When I lay out a design, I expect people to give me rational criticism so that I can learn from them."</li><li>If you had to hire someone with deep experience vs great behavioral foundations, what would you choose?<ul><li>It Depends!</li><li>Sometimes, you need to bring deep experience to the table to build something out and learn from the guru.</li><li>Behavioral traits means that someone is teachable. Outside the Valley, this is extremely important because of the lack of access to experienced engineering.</li></ul></li></ul><p><a id="org06acc0a"></a></p><h1 id="onboarding_%2F_engineering_bootcamp">Onboarding / Engineering bootcamp</h1><ul><li>Structured decision making</li><li>Basic coding hygiene</li><li>Collaboration<ul><li>How do you engage with someone else to meaningfully decide reasonably quickly what something in code should be.</li></ul></li><li>Heavy focus on coding during the bootcamp.</li><li>We bring in coaches from <strong>every team</strong> and teach. (regardless of hire). This helps us build empathy, which is critical for future collaboration.</li><li>Pride without attachment.<ul><li>Pride allows you to focus on creating beautiful code.</li><li>Attachment means you will stand in the way of the evolution of your beautiful baby. You need to let it go and let others change it.</li><li>If you look back at code you wrote 6 months back and don't notice how bad you were, you aren't growing.</li></ul></li><li>Repeat the same problem every Monday throughout the whole bootcamp. Ask them to review every week and see if they find that feeling of progress.</li></ul><p><a id="org8a3e3e6"></a></p><h1 id="gojek_culture">Gojek culture</h1><ul><li>Even the most high-performing team has to deal with intense time pressure.</li><li>What makes or breaks teams under pressure?<ul><li>Show them the impact that they are making.</li><li>You don't need to push engineers, you need to give them the rush! External force will not drive the maker as much as the impact of work will.</li><li>The value you create is not proportional to the time you put in, it's proportional to the state of your mind in that time you put in.<ul><li>If you are burned out, or your team mate is burned out then there is going to be a huge negative spiral.</li></ul></li><li>To harness creativity, you need balance and psychological safety. The hours that you put in, you need to be in a state of flow. This requires you to take short breaks after days of intense activity.</li></ul></li><li>You can have a 10x engineer amidst you, but you may never know it because you did not give them sufficient leeway to unleash their art.</li></ul>]]></content>
  </entry>
</feed>
