<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Vedang.me, posts tagged engineeringmanagement</title>
  <link href="https://vedang.me/feeds/engineeringmanagement.xml" rel="self"/>
  <link href="https://vedang.me/"/>
  <updated>2025-01-06T15:18:04+05:30</updated>
  <id>https://vedang.me/</id>
  <author>
    <name>Vedang Manerikar</name>
  </author>
  <entry>
    <id>https://vedang.me/nicole-forsgren-four-key-metrics-of-high-performance/</id>
    <link href="https://vedang.me/nicole-forsgren-four-key-metrics-of-high-performance/"/>
    <title>Nicole Forsgren: The Four Key Metrics of High Performance</title>
    <updated>2022-08-19T05:30:00+05:30</updated>
    <content type="html"><![CDATA[<p><em>Snippet from <a href='https://itrevolution.com/book/accelerate/'>Accelerate</a></em></p><ul><li><strong>Lead Time</strong> : Length of time between when the code is committed and when it is deployed to production. Smaller is better.</li><li><strong>Mean Time to Recover</strong> : Length of time from incident start to incident end. Smaller is better.</li><li><strong>Change Failure Rate</strong> : Number of deployments to production that need hotfixes. Smaller is better.</li><li><strong>Deployment Frequency</strong> : Number of times new code (not hotfixes) is deployed to production. Larger is better.</li></ul><p>Improving these metrics directly results in huge performance boosts for developer productivity.</p>]]></content>
  </entry>
  <entry>
    <id>https://vedang.me/gene-kim-the-four-types-of-work/</id>
    <link href="https://vedang.me/gene-kim-the-four-types-of-work/"/>
    <title>Gene Kim: The Four Types of Work</title>
    <updated>2020-08-11T05:30:00+05:30</updated>
    <content type="html"><![CDATA[<p><em>Snippet from: <a href='https://www.amazon.in/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B078Y98RG8/'>The Phoenix Project</a>, along with my own notes</em></p><ul><li><strong>Business Projects</strong> : "Feature Work". This is the most visible type of work.</li><li><strong>Internal IT Projects</strong> : Release Automation, QA Automation, Developer Tooling and other internal enablers. Mostly un-tracked and invisible, but crucial to long-term success.</li><li><strong>Updates and Changes</strong> : Generally generated from above two categories of work. Introduces delay as breadth of existing surface area increases.</li><li><strong>Unplanned Work</strong> : Fire-fighting at all levels of the company. Ruins planned work, so root causes need to be aggressively remediated.</li></ul>]]></content>
  </entry>
  <entry>
    <id>https://vedang.me/gene-kim-the-three-ways/</id>
    <link href="https://vedang.me/gene-kim-the-three-ways/"/>
    <title>Gene Kim: The Three Ways of doing excellent Work</title>
    <updated>2020-08-11T05:30:00+05:30</updated>
    <content type="html"><![CDATA[<p><em>Snippet from: <a href='https://www.amazon.in/Phoenix-Project-DevOps-Helping-Business-ebook/dp/B078Y98RG8/'>The Phoenix Project</a>, along with my own notes</em></p><ul><li><strong>Flow</strong> : Maximizing the rate of flow of work is the key to success. Limiting the work in progress is the fastest way to achieve Flow.</li><li><strong>Fast Feedback</strong> : Setup systems to get fast feedback at every stage of work, from concept through shipping to maintaining in production.</li><li><strong>Experimentation and Learning</strong> : Keep dedicated time for experiments, at every level of the company. A culture of innovation is necessary for achieving and maintaining Flow and Feedback.</li></ul>]]></content>
  </entry>
  <entry>
    <id>https://vedang.me/writing-a-good-status-update/</id>
    <link href="https://vedang.me/writing-a-good-status-update/"/>
    <title>Writing a good status update</title>
    <updated>2019-08-06T05:30:00+05:30</updated>
    <content type="html"><![CDATA[<p><div class="orgtoc"></p><ul><li><a href='#org537fb11'>What is the purpose of status updates?</a></li><li><a href='#orgce655a4'>Properties of good status updates</a></li><li><a href='#orgc8ba31b'>Writing the status update</a></li><li><a href='#orgecda601'>Create sections for your updates</a><ul><li><a href='#org8472657'>Name the project you are currently working on</a></li><li><a href='#org7d88d63'>Name the milestone of the project you are currently working on.</a></li><li><a href='#org82aa969'>Your status update should definitively answer the following questions:</a></li><li><a href='#org06d13ca'>Example status update</a></li></ul></li><li><a href='#org9d7cc79'>What do you get from writing a good update?</a></div></li></ul><p>We share written status updates within the team on a weekly basis (every Monday). I wrote this article to explain what these status updates should look like, and I think it's useful enough to publish publicly. Here goes:</p><p><a id="org537fb11"></a></p><h1 id="what_is_the_purpose_of_status_updates%3F">What is the purpose of status updates?</h1><ul><li>Let <strong>your manager</strong> know what you have achieved last week.</li><li>Let <strong>your co-workers</strong> know what you have achieved this week.</li><li><strong>Reflect</strong> on your progress and pace <strong>yourself</strong>.</li></ul><p><a id="orgce655a4"></a></p><h1 id="properties_of_good_status_updates">Properties of good status updates</h1><ul><li><strong>Short</strong> and <strong>meaningful</strong>. (5 min reading time)</li><li>Communicate <strong>work in the previous week</strong>, <strong>highlight progress</strong>.</li><li>Communicate <strong>plan for the next week</strong>, <strong>help make yourself efficient</strong>.</li><li>Communicate <strong>open questions</strong> and <strong>blockers</strong>, <strong>highlight areas where we need to help you</strong>.</li></ul><p><a id="orgc8ba31b"></a></p><h1 id="writing_the_status_update">Writing the status update</h1><p>Write the status update either as the last thing on Friday or as the first thing on Monday. Remember to review the status you had posted previously, so that you don't miss out on any updates. If you choose to write on Friday end-of-day, this can also be a great wind-down / logging-off ritual to wrap up the week and give yourself a sense of accomplishment.</p><p><a id="orgecda601"></a></p><h1 id="create_sections_for_your_updates">Create sections for your updates</h1><ul><li>Use the following sections:<ul><li>What I accomplished this last week</li><li>What didn't go according to plan</li><li>What I plan to do next week</li><li>Questions / Blockers / Action Items</li></ul></li><li>This makes it <strong>easy to parse</strong> your update.</li></ul><p><a id="org8472657"></a></p><h2 id="name_the_project_you_are_currently_working_on">Name the project you are currently working on</h2><ul><li>Yes, your manager is supposed to know what you are working on. But you often do unplanned, extra tasks too. You help on other projects, handle production issues, discover interesting tidbits, get insights from analyzing logs. <strong>Highlight all of these activities!</strong>.</li><li>Help your manager by making it easy for them to compile project reports.</li><li>This makes your update very readable.</li></ul><p><a id="org7d88d63"></a></p><h2 id="name_the_milestone_of_the_project_you_are_currently_working_on.">Name the milestone of the project you are currently working on.</h2><ul><li>Helps when the team needs to take a call about cutting or increasing scope on a project.</li><li>Highlights and reinforces upcoming co-ordination points.</li></ul><p><a id="org82aa969"></a></p><h2 id="your_status_update_should_definitively_answer_the_following_questions%3A">Your status update should definitively answer the following questions:</h2><ul><li>What are you working on?</li><li>For each project that you are working on, where are you? What is the next date that you are committing to?</li><li>Are you on track for the current phase of the project or not? If not, what is the impact on the overall project?</li></ul><p><a id="org06d13ca"></a></p><h2 id="example_status_update">Example status update</h2><h3 id="what_i_accomplished_this_last_week%3A">What I accomplished this last week:</h3><ul><li>Completed final PRD review for <strong>Project X</strong>, no open questions at this point! :yay:. Project is <strong>on track</strong>!</li><li>Pushed a fix to <strong>ABC Service</strong> to production and closed <strong>Jira Ticket Z</strong>. Graphs show amazing reduction in network bandwidth! :epicwin: <em>link to graph or screenshot</em>.</li><li>Conducted the Enterprise initiative meeting, meeting notes are here: <em>link to meeting notes</em>.</li></ul><h3 id="what_didn%27t_go_according_to_plan%3A">What didn't go according to plan:</h3><ul><li>Working on dev of <strong>Project Y</strong>. Project is <strong>not on track</strong> :sad<sub>face</sub>:. We had communicated that dev will be complete by <span class="timestamp-wrapper"><span class="timestamp">&lt;2019-08-02 Fri&gt; </span></span> but I will need 3 more days. This pushes the <strong>new date to <span class="timestamp-wrapper"><span class="timestamp">&lt;2019-08-07 Wed&gt;</span></span></strong> EOD.</li></ul><h3 id="what_i_plan_to_do_next_week%3A">What I plan to do next week:</h3><ul><li>I will have the initial estimates for <strong>Project X</strong> by EOD <span class="timestamp-wrapper"><span class="timestamp">&lt;2019-08-08 Thu&gt;</span></span>.</li><li>I will complete the Dev work on <strong>Project Y</strong> as mentioned above. <strong><span class="timestamp-wrapper"><span class="timestamp">&lt;2019-08-07 Wed&gt; </span></span> EOD</strong></li><li>I will create a document about <strong>DEF Topic</strong> as we had discussed by EOD <span class="timestamp-wrapper"><span class="timestamp">&lt;2019-08-09 Fri&gt;</span></span>.</li></ul><h3 id="questions_%2F_blockers_%2F_action_items%3A">Questions / Blockers / Action Items:</h3><ul><li>We need to sync up about ideas for implementing <strong>Project X</strong> before tomorrow EOD, but you don't have an empty meeting slot until day-after. What should we do?</li><li>I will inform <strong>Frontend team-member</strong> that <strong>Project Y</strong> integration testing cannot start tomorrow, instead it will start on <span class="timestamp-wrapper"><span class="timestamp">&lt;2019-08-08 Thu&gt;</span></span>.</li></ul><p><a id="org9d7cc79"></a></p><h1 id="what_do_you_get_from_writing_a_good_update%3F">What do you get from writing a good update?</h1><ul><li>A <strong>record of work for yourself</strong>. This is invaluable come performance review time. You only have to read through 26 updates and you have a thorough summary.</li><li><strong>Help your manager</strong> advocate for you during appraisals. You should care about your career more than anyone else.</li><li><strong>Help yourself</strong>. Writing the update should <strong>give you</strong> a clear idea of your own progress and what you need to work on.</li></ul>]]></content>
  </entry>
  <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>
