<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Proactive Engineer]]></title><description><![CDATA[A bi-weekly column with insights on software engineering, career growth, AI, and product development.]]></description><link>https://www.proactiveengineer.com</link><image><url>https://substackcdn.com/image/fetch/$s_!pC4V!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1077f3-b9ff-4f78-8295-f2d8235ec5b0_182x182.png</url><title>The Proactive Engineer</title><link>https://www.proactiveengineer.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 27 Apr 2026 14:44:42 GMT</lastBuildDate><atom:link href="https://www.proactiveengineer.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Shehab Abdel-Salam]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[shehababdelsalam@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[shehababdelsalam@substack.com]]></itunes:email><itunes:name><![CDATA[Shehab Abdel-Salam]]></itunes:name></itunes:owner><itunes:author><![CDATA[Shehab Abdel-Salam]]></itunes:author><googleplay:owner><![CDATA[shehababdelsalam@substack.com]]></googleplay:owner><googleplay:email><![CDATA[shehababdelsalam@substack.com]]></googleplay:email><googleplay:author><![CDATA[Shehab Abdel-Salam]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[#40 How I manage tech debt with AI]]></title><description><![CDATA[One of the challenges I&#8217;ve been thinking about recently is ensuring code quality at scale.]]></description><link>https://www.proactiveengineer.com/p/40-how-i-manage-tech-debt-with-ai</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/40-how-i-manage-tech-debt-with-ai</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Tue, 17 Mar 2026 15:38:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9Pv9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One of the challenges I&#8217;ve been thinking about recently is ensuring code quality at scale. Specifically, on handling AI-generated code and finding use cases to adopt agentic workflows for overall better developer experience.</p><p>For context, I work in a BU responsible for two B2B SaaS products, built on a large monorepo of 100+ production services, ~10,000 Python files, and tens of thousands lines of code. All maintained by a group of 50-ish engineers!</p><p>My team maintains ~20% of these services, so we&#8217;ve invested a lot of time and energy in building tools and processes that allow us to ship new features while guaranteeing security and reliability to our customers. </p><p>In this post, I&#8217;ll share an AI workflow I designed for managing my team&#8217;s tech debt.</p><h2>Tech debt at scale</h2><p>We ran into friction with our dev velocity when shipping new features. Partly because some legacy systems weren&#8217;t designed to support new use cases or had an implementation that made sense at the time but later became an unavoidable bug. These are past pragmatic decisions for solving problems, which I do support. </p><p>However, <em>stashing-small-todos-under-the-rug</em> becomes a real pain point over time, especially when organisations want to move from startup stage to a large tech company.</p><p>So I started the conversation about code quality internally, and later expanded to wider engineering. I&#8217;ll cover more about code quality in next post. For now, I&#8217;ll focus on how we moved the needle with automated tech debt management.</p><p>If you&#8217;re interested to learn more on leading successful initiatives, check out below:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;6cfeca19-fb28-48cf-b7c5-58769c6de7fc&quot;,&quot;caption&quot;:&quot;The ability to drive new initiatives is a highly valued skill for engineering. Developing it requires time and patience, so engineers need to start leading initiatives with gradually increasing difficulty. Starting a first-time initiative with high impact can potentially damage your social capital with your peers and leadership. So in this post I&#8217;ll sha&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#39 On driving initiatives&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:27096115,&quot;name&quot;:&quot;Shehab Abdel-Salam&quot;,&quot;bio&quot;:&quot;Helping engineers level up and become more proactive. Senior Software Engineer @ Proofpoint | Instructor | Writing The Proactive Engineer newsletter&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3oxM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd029e537-6372-42e5-a999-c25688df6be4_2036x2036.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-03T12:25:45.714Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!NZnr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.proactiveengineer.com/p/39-on-driving-initiatives&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:185727642,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:5,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2848801,&quot;publication_name&quot;:&quot;The Proactive Engineer&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!pC4V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1077f3-b9ff-4f78-8295-f2d8235ec5b0_182x182.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h2>How we&#8217;re managing tech debt</h2><p>Our tech debt generally comes from feature development and migration projects. We manage this on a dedicated <a href="https://www.atlassian.com/agile/kanban/boards">kanban board</a>, separate from our main board.</p><p>We review this board fortnightly and allocate every other Friday to work through tech debt in priority order. We gamify this work among the team and recognise the engineer who fixed the most tech debt, aka &#8220;The Fixer &#128736;&#65039;&#8221;.</p><p>We used to curate this board manually by running a one-off script to create JIRA tickets (or even worse, on the UI). Other times we nudged people to write a ticket based on a TODO they found.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9Pv9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9Pv9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png 424w, https://substackcdn.com/image/fetch/$s_!9Pv9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png 848w, https://substackcdn.com/image/fetch/$s_!9Pv9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png 1272w, https://substackcdn.com/image/fetch/$s_!9Pv9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9Pv9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png" width="1456" height="560" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:560,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105674,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/191231235?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9Pv9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png 424w, https://substackcdn.com/image/fetch/$s_!9Pv9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png 848w, https://substackcdn.com/image/fetch/$s_!9Pv9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png 1272w, https://substackcdn.com/image/fetch/$s_!9Pv9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41359830-0272-4ec7-97b3-0eea8e972d3f_2191x843.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It took us time and bandwidth to actively update and review the board. Instead, we recognised that automating these repeatable steps can be handed over to an AI agent, which we did with Windsurf&#8217;s <a href="https://windsurf.com/cascade">Cascade</a>.</p><p>We defined a set of <a href="https://docs.windsurf.com/windsurf/cascade/memories#rules">rules</a> on the monorepo with <a href="https://modelcontextprotocol.io/docs/getting-started/intro">MCP</a> integration with <strong>Atlassian</strong> and <strong>GitHub</strong>. After that, we set up a Cascade <a href="https://docs.windsurf.com/windsurf/cascade/workflows">Workflow</a> that scans over selected services, finds any tech debt, and writes a detailed ticket to the board with proposed solution. I use Claude models (Sonnet and Opus) to run these workflows so it can analyse the complexity of the found tech debt and categorise it accordingly. </p><ul><li><p>If it&#8217;s low-hanging fruit, an agent knocks it out with a PR. </p></li><li><p>If it requires deeper change, it goes on the board for an engineer to look into.</p></li></ul><p><em><strong>Benefits are:</strong></em> </p><ol><li><p>We delegate the tech debt board management to an agent.</p></li><li><p>We make it easier to surface tech debt that requires an engineering input.</p></li><li><p>We delegate squashing small tech debts to an agent.</p></li></ol><p>Below is a screenshot of an agent adding tech debt tickets to our kanban board.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VP6D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb961b7b5-8f91-4c53-a56c-02fdeecec72d_2475x852.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VP6D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb961b7b5-8f91-4c53-a56c-02fdeecec72d_2475x852.png 424w, https://substackcdn.com/image/fetch/$s_!VP6D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb961b7b5-8f91-4c53-a56c-02fdeecec72d_2475x852.png 848w, https://substackcdn.com/image/fetch/$s_!VP6D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb961b7b5-8f91-4c53-a56c-02fdeecec72d_2475x852.png 1272w, https://substackcdn.com/image/fetch/$s_!VP6D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb961b7b5-8f91-4c53-a56c-02fdeecec72d_2475x852.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VP6D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb961b7b5-8f91-4c53-a56c-02fdeecec72d_2475x852.png" width="1456" height="501" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b961b7b5-8f91-4c53-a56c-02fdeecec72d_2475x852.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:501,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:239880,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/191231235?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb961b7b5-8f91-4c53-a56c-02fdeecec72d_2475x852.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!VP6D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb961b7b5-8f91-4c53-a56c-02fdeecec72d_2475x852.png 424w, https://substackcdn.com/image/fetch/$s_!VP6D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb961b7b5-8f91-4c53-a56c-02fdeecec72d_2475x852.png 848w, https://substackcdn.com/image/fetch/$s_!VP6D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb961b7b5-8f91-4c53-a56c-02fdeecec72d_2475x852.png 1272w, https://substackcdn.com/image/fetch/$s_!VP6D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb961b7b5-8f91-4c53-a56c-02fdeecec72d_2475x852.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is one instance of how we&#8217;re using AI tooling. We&#8217;re still integrating more with AI tools to automate most of our repeatable tasks. Code quality is definitely an opportunity worth capitalising on.</p><p><em><strong>See the markdown template below for an AI workflow for creating tech debt tickets.</strong></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><h2>Workflow template</h2><p><em>Use this as a starting point and refine to your standards and tools</em>.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;22e94e66-0d84-4ff5-bd4b-d3be1a8629b0&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown"># AI Workflow: Create Tech Debt Ticket from TODO

&gt; Compatible with Claude Code, Cursor, Windsurf (Cascade), and any AI assistant that supports tool use / MCP.

---

## Usage

```
/create-tech-debt-ticket &lt;file_path&gt;
/create-tech-debt-ticket &lt;file_path&gt; "TODO: specific text"
```

---

## Steps

### 1. Identify the TODO

- If a specific TODO is provided, use it directly
- Otherwise, scan the file for all `TODO` / `FIXME` markers and list them
- If multiple are found, ask the user to pick one
- Extract the TODO line and 5 lines of surrounding context

### 2. Check for duplicates

Before creating anything, search your issue tracker for existing tickets that reference the same file or TODO text. Show any matches to the user and ask whether to proceed.

&gt; **Why this matters**: skipping this step turns a helpful workflow into a ticket spam machine.

### 3. Generate the ticket summary

Use a consistent format so tickets are scannable in the backlog:

```
[module.path] &lt;TODO description&gt;
```

Example: a TODO in `src/payments/utils.py` &#8594; `[src.payments] Refactor retry logic`

### 4. Generate the ticket description

Use a structured template so every ticket has the same quality bar:

```markdown
## Problem

&lt;What is the tech debt? Why does it matter?&gt;

## Location

- **File**: `&lt;file path&gt;`
- **Line**: &lt;line number&gt;
- **Code context**:

&lt;5 lines before the TODO, the TODO line, 5 lines after&gt;

## Proposed solution

&lt;Suggest an approach based on the TODO and surrounding code. If unclear, write "To be determined during implementation."&gt;

## Acceptance criteria

- [ ] TODO marker removed
- [ ] Solution implemented and reviewed
- [ ] Tests added or updated
- [ ] Linting and type checks pass
- [ ] PR merged and deployed
- [ ] No regressions in monitoring
```

### 5. Create the ticket

Use your issue tracker's API or MCP integration to create the ticket with:

| Field | Value |
|---|---|
| Project | Your team's project |
| Issue type | Task |
| Labels | `tech-debt` (or your team's equivalent) |
| Parent | Your tech debt epic |
| Description | Output from Step 4 |

### 6. Confirm with the user

Show the created ticket URL and summary. Remind the user which board/backlog it landed in.

---

## Adapting this workflow

| Tool | How to use this |
|---|---|
| **Claude Code** | Save as `.claude/commands/create-tech-debt-ticket.md`, invoke with `/create-tech-debt-ticket` |
| **Windsurf (Cascade)** | Save as `.windsurf/workflows/create-tech-debt-ticket.md`, invoke with `/create-tech-debt-ticket` |
| **Cursor** | Save as `.cursor/rules/create-tech-debt-ticket.mdc` and trigger via chat |
| **Any AI assistant** | Paste the steps above as a prompt with your file content |

For issue tracker integration (JIRA, Linear, GitHub Issues), connect via MCP or your tool's native plugin.
</code></pre></div><p></p>]]></content:encoded></item><item><title><![CDATA[#39 On driving initiatives]]></title><description><![CDATA[The ability to drive new initiatives is a highly valued skill for engineering.]]></description><link>https://www.proactiveengineer.com/p/39-on-driving-initiatives</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/39-on-driving-initiatives</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Tue, 03 Mar 2026 12:25:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NZnr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The ability to drive new initiatives is a highly valued skill for engineering. Developing it requires time and patience, so engineers need to start leading initiatives with gradually increasing difficulty. Starting a first-time initiative with high impact can potentially damage your social capital with your peers and leadership. So in this post I&#8217;ll share a playbook for how to lead initiatives, starting with the mental model around the initiative lifecycle, and advice for getting started.</p><div><hr></div><h2>Intro</h2><p>An initiative at its core is an opportunity to make <em>something better collectively</em>. </p><p>It could be a technical challenge like leading an application redesign, infrastructure migration, or new in-house tooling. </p><p>It could be a non-technical challenge like people management, handling customer support, improving cross-team communication, or starting a new product discovery.</p><p>A strong engineering team is one that recognises that projects and initiatives can come from either leadership (top-down) or engineers themselves (bottom-up). </p><p>Not only does leading initiatives demonstrate ownership, it also shows that engineers genuinely care about (1) the product, (2) the business, and (3) their tools. Focusing on tools alone can be a trap.</p><p>For leading initiatives successfully, there are <strong>five phases</strong> you should be aware of.</p><h2>Initiative Lifecycle</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NZnr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NZnr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png 424w, https://substackcdn.com/image/fetch/$s_!NZnr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png 848w, https://substackcdn.com/image/fetch/$s_!NZnr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png 1272w, https://substackcdn.com/image/fetch/$s_!NZnr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NZnr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png" width="1456" height="734" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:734,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:898580,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/185727642?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NZnr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png 424w, https://substackcdn.com/image/fetch/$s_!NZnr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png 848w, https://substackcdn.com/image/fetch/$s_!NZnr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png 1272w, https://substackcdn.com/image/fetch/$s_!NZnr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cb4c1f-df50-40c9-8752-d1fc3a0b3d4f_4071x2051.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Initiative lifecycle overview</figcaption></figure></div><h2>(1) Identify a problem</h2><p>Every initiative comes with a cost: engineering, time, and money. To justify the spending, there should be a clear problem statement you can communicate to others on what exactly you&#8217;re trying to solve.</p><p>The problem could be developer tooling, an architecture bottleneck, a cost savings problem, routing customer requests, etc. </p><p>A tangible problem that you can experience yourself will make it easier to understand the crux of the problem and the benefit of solving the problem. From there you can brainstorm possible solutions that you can propose before an initiative kick-off.</p><h2>(2) Propose solution to a small group</h2><p>Once you have the problem documented, it&#8217;s good to start the conversation with a viable solution that reviewers should consider.</p><p>Going into a meeting with a problem and a fix is better than nothing:</p><ul><li><p>&#10060; Here&#8217;s a problem</p></li><li><p>&#9989; Here&#8217;s a problem and a candidate solution </p></li></ul><p>This could be a 1-1 or a small meeting with close stakeholders like tech leads, managers, directors, or VPs.</p><p>The goal is to highlight a problem that impacts a valuable metric (customer success or developer experience) and propose a well-thought-out solution as a starting point. It could pivot to another solution, that&#8217;s fine. The goal is to <strong>not mandate a solution</strong> but to eliminate the problem <strong>with the best solution</strong>.</p><blockquote><p>Depending on the scope and/or your organisation, you might need an additional &#8220;hop&#8221; to get buy-in for the initiative. If it requires support or involvement from a wider group (e.g., engineering org, backend guild, or platform team), it is important to go through that first before starting the initiative. You don&#8217;t want people to shoot down your solution mid-execution.</p><p>That&#8217;s where the flow is highlighted in the diagram: 1 &#8594; 2.a &#8594; 2.b &#8594; 3 &#8594; 4 &#8594; 5</p></blockquote><h2>(3) Define Strategy</h2><p>Richard Rumelt defined a good strategy by its &#8220;kernel&#8221; in his book <a href="https://amzn.to/3YUc2Pv">Good Strategy Bad Strategy</a>. The kernel of a strategy contains three elements:</p><ol><li><p>Diagnosis (the why)</p></li><li><p>Guiding policy (the what)</p></li><li><p>Coherent actions (the how)</p></li></ol><p>He explained the &#8220;good strategy&#8221; neatly with a medical analogy:</p><ol><li><p><strong>Diagnosis:</strong> name the disease or pathology</p></li><li><p><strong>Guiding policy:</strong> therapeutic approach decided by the doctor</p></li><li><p><strong>Coherent actions:</strong> prescriptions for diet, therapy and medication</p></li></ol><p>The same applies to driving initiatives. Write the diagnosis as a problem statement in a document (i.e., why this initiative exists), followed by the guiding policy (what we aim to achieve), and then a set of actions/tasks to be carried out throughout the initiative. </p><p>My favourite quote from his book summarises what makes an initiative successful:</p><div class="pullquote"><p><strong>A good strategy doesn&#8217;t just draw on existing strength; it creates strength through the coherence of its design.</strong></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><h2>(4) Execute</h2><p>At this stage, it is clear what we&#8217;re doing, why we&#8217;re doing it, and roughly when we should finish. The focus here is on leveraging engineering skills for execution.</p><p>Every engineer involved should be focused on execution. You as the initiative leader, should be able to provide support when needed. If there is a repeatable pattern or knowledge to share, it&#8217;s more efficient to write it in a shareable document rather than re-explaining the method to every individual. </p><p>During execution, your participants should not be distracted as much as possible. You have the duty to protect their deep focus time (if possible) and make sure everyone is in-sync. This could be translated into daily, weekly, or bi-weekly catchups. It depends on the scope of the initiative.</p><p>The key thing here is efficiency. If setbacks happen, mitigate the risks, and discuss what happened <strong>after</strong> you finish execution.</p><h2>(5) Retro and Celebrate</h2><p>Once the work is done, take this opportunity to retrospect with your engineers and discuss the following:</p><ol><li><p>What went well?  What we should keep doing in future initiatives</p></li><li><p>What didn&#8217;t go well? What were the hiccups and why did it happen</p></li><li><p>What we learned? What lessons can we take away and apply next time</p></li></ol><p>Retros help capitalise the value from a long-running initiative (days, weeks, or months) and allow engineers to share insights they might not have had time to share. This is an important meeting because it reinforces collaboration and inclusion. As a general rule, anyone who pitched in should have the opportunity to speak openly.</p><p>Celebrate and recognise the efforts of everyone involved. They will appreciate investing time and effort in your initiative. Even better, they might be inspired to start their own initiatives and introduce innovative solutions. This is an example of being a force multiplier.</p><div><hr></div><h2>Wrap up</h2><p>Driving initiatives is an important skill for an engineer. It requires time, practice, and patience. I encourage all engineers to practice as early and as often as they can. It is a great return-on-investment later in their careers.</p><p>To wrap up, here are final tips on leading a successful initiative:</p><h3>1. Explain the crux of the problem</h3><p>Explain briefly why people should care about this problem. What&#8217;s the value of solving the problem? If you can present some quantitative metrics and highlight how &#8220;painful&#8221; the problem is, the more likely the team will buy into your initiative.</p><h3>2. Don&#8217;t mandate a solution upfront</h3><p>The goal is not to enforce a specific answer. It is to introduce the problem statement, why it is important to solve, and a candidate solution to discuss. This changes the narrative from (raise a problem with no solution) to (here&#8217;s a problem and a solution, what are your thoughts?).</p><p>The solution with the most &#8220;votes&#8221; is likely the one that the team is happy to support.</p><h3>3. Document and ask for feedback</h3><p>One sign of a strong engineering culture is where teams follow a document-driven approach for exchanging ideas. When discussing requirements or proposals, it&#8217;s best to articulate your thoughts and present your research in writing. This will allow reviewers to not miss any critical detail and be able to challenge any assumptions.</p><h3>4. Choose the right timing</h3><p>If the team&#8217;s bandwidth is already used for other projects and the initiative isn&#8217;t time-critical, it&#8217;d be better to park it for now and resurface when the time is right. People should trust your judgement on when a problem is worth solving.</p><p>If you enjoyed reading this newsletter, consider subscribing and sharing with a friend.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[#38 Claude Code 101]]></title><description><![CDATA[Getting started with Claude Code]]></description><link>https://www.proactiveengineer.com/p/38-claude-code-101</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/38-claude-code-101</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 20 Feb 2026 12:25:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FjZW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3b96dd-546f-4cba-8bc9-7719669643c8_1202x594.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been using Claude Code for a few weeks and I wish I had started earlier. Coding with Claude Code became much more fun, and this is just scratching the surface of what it can do and the range of complex problems it can solve.</p><p>So I thought it&#8217;d be useful to write a &#8220;Claude Code 101&#8221; post where I&#8217;ll cover what Claude Code is, the agentic loop, and practical tips for getting started.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FjZW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3b96dd-546f-4cba-8bc9-7719669643c8_1202x594.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FjZW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3b96dd-546f-4cba-8bc9-7719669643c8_1202x594.webp 424w, https://substackcdn.com/image/fetch/$s_!FjZW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3b96dd-546f-4cba-8bc9-7719669643c8_1202x594.webp 848w, https://substackcdn.com/image/fetch/$s_!FjZW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3b96dd-546f-4cba-8bc9-7719669643c8_1202x594.webp 1272w, https://substackcdn.com/image/fetch/$s_!FjZW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3b96dd-546f-4cba-8bc9-7719669643c8_1202x594.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FjZW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3b96dd-546f-4cba-8bc9-7719669643c8_1202x594.webp" width="1202" height="594" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb3b96dd-546f-4cba-8bc9-7719669643c8_1202x594.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1202,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36682,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/187733857?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1032fed0-c24c-4581-918d-de87a7cb4ed4_1202x700.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FjZW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3b96dd-546f-4cba-8bc9-7719669643c8_1202x594.webp 424w, https://substackcdn.com/image/fetch/$s_!FjZW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3b96dd-546f-4cba-8bc9-7719669643c8_1202x594.webp 848w, https://substackcdn.com/image/fetch/$s_!FjZW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3b96dd-546f-4cba-8bc9-7719669643c8_1202x594.webp 1272w, https://substackcdn.com/image/fetch/$s_!FjZW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3b96dd-546f-4cba-8bc9-7719669643c8_1202x594.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>What is Claude Code?</h2><p><a href="https://code.claude.com/docs/en/overview">Claude Code</a> is a terminal-based agentic tool that interacts with your local filesystem to plan, write, and debug code (plus more <a href="https://code.claude.com/docs/en/features-overview">features</a> that we&#8217;ll talk about below). It was internally released in Nov &#8216;24, research preview in Feb &#8216;25, and then GA in May &#8216;25.</p><p>From the <a href="https://code.claude.com/docs/en/overview">official docs</a>:</p><blockquote><p><em>Claude Code is an AI-powered coding assistant that helps you build features, fix bugs, and automate development tasks. It understands your entire codebase and can work across multiple files and tools to get things done.</em></p></blockquote><p>In practice: you open Claude Code inside a project folder, give it a task, and it works through your codebase: reading files, coding, testing, and refining. That&#8217;s it.</p><p><a href="https://www.anthropic.com/">Anthropic</a> built its reputation on high-performance models (Sonnet &amp; Opus). With Claude Code&#8217;s bare-bones terminal experience, they&#8217;re creating a possible future where IDEs might not be necessary. At least that&#8217;s what <a href="https://x.com/bcherny">Boris Cherny</a>, creator of Claude Code, predicts. </p><p>Boris recently sat down with Y Combinator to talk about his journey of building Claude Code. Highly recommend watching.</p><div id="youtube2-PQU9o_5rHC4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;PQU9o_5rHC4&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/PQU9o_5rHC4?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>What makes Claude Code interesting</h2><p>What makes Claude Code interesting (aside from building apps <em>fast</em>), is it removes the barrier to entry for building software and fundamentally changes our role as software engineers.</p><p>Boris predicts a future where software engineers are product builders (not backend/frontend engineers), given how easy it is to switch from one tech stack to another with Claude Code.</p><p>For example, iOS engineers don&#8217;t have to be locked into the iOS stack for building apps, they can jump from one tech stack to another using Claude Code as a coworker (or team of coworkers!).</p><p>The real value of Claude Code comes from <a href="https://code.claude.com/docs/en/sub-agents">subagents</a>. You can run a team of agents &#8212; separate Claude instances &#8212; working in parallel on different parts of your codebase without an IDE (though I use them within VS Code). And the level of complexity Claude handles when debugging and implementing solutions is <em>fascinating</em> and keeps improving with each new model.</p><p>At the time of writing, Anthropic&#8217;s latest models are <a href="https://www.anthropic.com/news/claude-sonnet-4-6">Sonnet 4.6</a> and <a href="https://www.anthropic.com/claude/opus">Opus 4.6</a>.</p><div><hr></div><h2>How Claude Code works</h2><p>Claude Code operates on an <strong>agentic loop</strong>. When you give it a task, it works through three phases:</p><ol><li><p><strong>Gather context</strong>: searches your codebase and reads relevant files.</p></li><li><p><strong>Take action</strong>: edits files, runs commands, generates code.</p></li><li><p><strong>Verify results</strong>: runs tests, checks compilation, reviews output.</p></li></ol><p>These phases repeat in the loop until the task is complete.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4i2H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba58498-b714-498f-9062-d74727828409_720x280.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4i2H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba58498-b714-498f-9062-d74727828409_720x280.svg 424w, https://substackcdn.com/image/fetch/$s_!4i2H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba58498-b714-498f-9062-d74727828409_720x280.svg 848w, https://substackcdn.com/image/fetch/$s_!4i2H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba58498-b714-498f-9062-d74727828409_720x280.svg 1272w, https://substackcdn.com/image/fetch/$s_!4i2H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba58498-b714-498f-9062-d74727828409_720x280.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4i2H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba58498-b714-498f-9062-d74727828409_720x280.svg" width="720" height="280" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ba58498-b714-498f-9062-d74727828409_720x280.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:720,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The agentic loop: Your prompt leads to Claude gathering context, taking action, verifying results, and repeating until task complete. You can interrupt at any point.&quot;,&quot;title&quot;:&quot;The agentic loop: Your prompt leads to Claude gathering context, taking action, verifying results, and repeating until task complete. You can interrupt at any point.&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The agentic loop: Your prompt leads to Claude gathering context, taking action, verifying results, and repeating until task complete. You can interrupt at any point." title="The agentic loop: Your prompt leads to Claude gathering context, taking action, verifying results, and repeating until task complete. You can interrupt at any point." srcset="https://substackcdn.com/image/fetch/$s_!4i2H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba58498-b714-498f-9062-d74727828409_720x280.svg 424w, https://substackcdn.com/image/fetch/$s_!4i2H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba58498-b714-498f-9062-d74727828409_720x280.svg 848w, https://substackcdn.com/image/fetch/$s_!4i2H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba58498-b714-498f-9062-d74727828409_720x280.svg 1272w, https://substackcdn.com/image/fetch/$s_!4i2H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ba58498-b714-498f-9062-d74727828409_720x280.svg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">https://code.claude.com/docs/en/how-claude-code-works#the-agentic-loop</figcaption></figure></div><p>This works great. However, as context accumulates over longer sessions the output quality starts to degrade (usually ~150k tokens) and you&#8217;ll notice the model getting &#8220;dumber&#8221; at making decisions. A good practice would be to track the current context window and use <code>/compact</code> to summarise older context, or start a new Claude session.</p><p>For more details: <a href="https://code.claude.com/docs/en/how-claude-code-works">https://code.claude.com/docs/en/how-claude-code-works</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Core building blocks</h2><p>Claude Code has four core building blocks:</p><ol><li><p><strong>CLAUDE.md:</strong> A markdown file that tells Claude about your codebase (coding standards, repo structure, architectural decisions). This is persisted context so new Claude sessions can load this into memory.</p></li><li><p><strong>Skill</strong>: A set of instructions or repeatable workflows (e.g., <em>/code-review</em>). A skill is a markdown file that can be used globally (<em>~/.claude/skills/&lt;skill&gt;.md) </em>or at the project level (<em>.claude/skills/&lt;skill&gt;.md).</em></p></li><li><p><strong>Subagent</strong>: Separate Claude instances for isolated execution. The key advantage is <strong>context isolation</strong>. Each agent can work on a specific task in parallel without interfering with each other&#8217;s context. Read more about subagents <a href="https://code.claude.com/docs/en/sub-agents">here</a>.</p><p>Fun fact: Anthropic engineers once asked <a href="https://www.anthropic.com/engineering/building-c-compiler">16 Claude agents to build a C compiler</a>. </p></li><li><p><strong>MCPs</strong>: Connectors to external systems and data sources. You can instruct Claude to read your docs, query databases, or access GitHub through an MCP. The more tools you can provide to Claude, the more you can automate. Be careful of giving too much access though!</p></li></ol><div><hr></div><h2>My first app: Personal dashboard</h2><p>The first app I built was a personal dashboard: local calendar, GitHub PRs, and Hacker News in one view. I described the idea to Claude and steered it with a few follow-up prompts. In &lt;30 minutes, I had a working web app without writing a single line of code. What surprised me wasn&#8217;t just the speed, but how Claude planned the work, implemented the tasks, tested its output, and improved. </p><p>The agent scaffolded the repo, wrote its own CLAUDE.md to persist context, and kept refining the UI until it looked right.</p><blockquote><p>&#128279; Link to the repo: <a href="https://github.com/shehab-as/code-review-dashboard">shehab-as/code-review-dashboard</a></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A9m7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F056d8932-bde0-4dd0-ac31-7868454bfb61_2728x1456.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A9m7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F056d8932-bde0-4dd0-ac31-7868454bfb61_2728x1456.png 424w, https://substackcdn.com/image/fetch/$s_!A9m7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F056d8932-bde0-4dd0-ac31-7868454bfb61_2728x1456.png 848w, https://substackcdn.com/image/fetch/$s_!A9m7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F056d8932-bde0-4dd0-ac31-7868454bfb61_2728x1456.png 1272w, https://substackcdn.com/image/fetch/$s_!A9m7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F056d8932-bde0-4dd0-ac31-7868454bfb61_2728x1456.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A9m7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F056d8932-bde0-4dd0-ac31-7868454bfb61_2728x1456.png" width="1456" height="777" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/056d8932-bde0-4dd0-ac31-7868454bfb61_2728x1456.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:777,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Dashboard Screenshot&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Dashboard Screenshot" title="Dashboard Screenshot" srcset="https://substackcdn.com/image/fetch/$s_!A9m7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F056d8932-bde0-4dd0-ac31-7868454bfb61_2728x1456.png 424w, https://substackcdn.com/image/fetch/$s_!A9m7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F056d8932-bde0-4dd0-ac31-7868454bfb61_2728x1456.png 848w, https://substackcdn.com/image/fetch/$s_!A9m7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F056d8932-bde0-4dd0-ac31-7868454bfb61_2728x1456.png 1272w, https://substackcdn.com/image/fetch/$s_!A9m7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F056d8932-bde0-4dd0-ac31-7868454bfb61_2728x1456.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Screenshot of web app running locally</figcaption></figure></div><div><hr></div><h2>Tips for getting started</h2><h3>1. Use <code>/init</code> when working on new projects</h3><p>It tells Claude to analyse your repo structure, dependencies, and conventions. It then writes a CLAUDE.md file that persists context across sessions. Without it, Claude has no memory of your project structure and you&#8217;ll spend the first few messages re-explaining your codebase every session.</p><h3>2. Context is gold, keep it under 150k tokens</h3><p>When you&#8217;re close to 100k-150k context window, Claude Code starts to forget earlier decisions and make silly mistakes. It doesn&#8217;t warn you when this happens. Use <code>/compact</code> to summarise older context, or start a new session.</p><blockquote><p><strong>&#127775; Pro tip:</strong> Monitor context health with a &#8220;canary keyword&#8221;.</p><p>At the start of a session, share a memorable detail and check if Claude remembers it later. If it doesn&#8217;t, then you have a bloated context window.</p><pre><code><code>You: "Remember this: my favourite coffee is mocha"
[...long coding session with multiple file edits...]
You: "What's my favourite coffee?"
Claude: "I don't see that information in our conversation"
&#8594; Time to start a new session.</code></code></pre></blockquote><h3>3. Keep CLAUDE.md files short</h3><p>CLAUDE.md is like the onboarding doc for a new engineer working on your project. It doesn&#8217;t require a specific structure, but the general advice is to keep it short and straightforward. My CLAUDE.md files usually have: folder structure, coding conventions, available tools, and architecture highlights.</p><p>You can version it on the repo and share it publicly (.claude/). It doesn&#8217;t have to be a static file. Revise it as you go.</p><p>Here&#8217;s a <a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md">guide on writing a good CLAUDE.md file</a></p><blockquote><p><em>While Anthropic does not have an official recommendation on how long your </em><code>CLAUDE.md</code><em> file should be, general consensus is that <strong>&lt; 300 line</strong>s is best, and shorter is even better.</em></p></blockquote><h3>4. Prompt like you&#8217;re communicating to an engineer</h3><p>Avoid vague prompts like &#8220;fix this&#8221; or &#8220;make this better&#8221;. Be specific with examples as if you&#8217;re talking to one of your engineers. For example,</p><p>&#10060; Fix this bug<br>&#9989; There is a memory leak in &lt;module&gt; that causes OOM crashes when handling &lt;/api&gt; requests. Check the &lt;class&gt; logic and find the root cause. Ask me clarification questions before implementing a solution.</p><h3>5. Build Skills for repeatable workflows</h3><p>A Skill can be a simple markdown file or a folder that looks like this:</p><ul><li><p>code-review/</p><ul><li><p>SKILL.md (required): Instructions in Markdown with YAML </p></li><li><p>scripts/ (optional): Executable code (Python, Bash, etc.)</p></li><li><p>references/ (optional): Docs, style guides</p></li><li><p>assets/ (optional): Templates</p></li></ul></li></ul><p>This could also be writing tests, generating changelogs, or scaffolding new services. Experiment and see what works best for you. See Anthropic&#8217;s <a href="https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf">guide</a> for building skills.</p><h3>6. Connect Claude with MCPs</h3><p>The GitHub MCP is the easiest to start with. Allow Claude to read your PRs and issues for gathering more context before taking actions.</p><p>Explore available MCPs in the <a href="https://github.com/punkpeye/awesome-mcp-servers">awesome-mcps</a> repo and play around with it.</p><div><hr></div><h2>Cheat Sheet</h2><p>Finally, here&#8217;s a list of common commands you&#8217;ll need in a Claude session.</p><ol><li><p><code>/init</code> &#8594; Run this once per project. It analyses your codebase structure, dependencies, and creates a <strong>CLAUDE.md</strong> file that persists context across sessions.</p></li><li><p><code>/plan</code> &#8594; Enable plan mode. Claude proposes a detailed implementation plan before taking action. Use this for designing complex features or architectural changes.</p></li><li><p><code>/memory</code> &#8594; Views project memory (<em>./CLAUDE.md</em>) or user memory (<em>~/.claude/CLAUDE.md</em>). Edit these files directly to guide Claude&#8217;s behaviour, or ask it to update it if you want to persist context.</p></li><li><p><code>/context</code> &#8594; Provides a visual representation of the current context. Use this to debug why Claude might be missing something or to reduce token usage.</p></li><li><p><code>/compact</code> &#8594; Runs context compaction to free up the context window space.</p></li><li><p><code>/model</code> &#8594; Switches between Claude models during the session.</p></li><li><p><code>/resume [session-name]</code> &#8594; Resumes previous sessions.</p></li><li><p><code>/skills</code> &#8594; Lists available skills or create new ones.</p></li><li><p><code>/agents</code> &#8594; Creates or manages subagents (isolated Claude instances).</p></li><li><p><code>/mcp</code> &#8594; Manages MCP servers at project-level (<em>.mcp.json</em>) or globally (<em>~/.claude/mcp.json</em>).</p></li><li><p><code>/permissions</code> &#8594; Manages the allow &amp; deny tool permissions.</p></li></ol><div><hr></div><h2>Wrap up</h2><p>So far this is scratching the surface of what Claude Code can do. I highly recommend checking it out. Onboard it on your projects, see where it fits into your existing workflows, and try running multiple subagents. I&#8217;m still in explore mode and I plan to share example capabilities in the future (probably a Claude Code 201 post?).</p><p>Here&#8217;s a quick reference on when to use what with Claude Code.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xxsu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b344f16-f37e-47e5-9411-64492ccd2731_2679x1485.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xxsu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b344f16-f37e-47e5-9411-64492ccd2731_2679x1485.png 424w, https://substackcdn.com/image/fetch/$s_!xxsu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b344f16-f37e-47e5-9411-64492ccd2731_2679x1485.png 848w, https://substackcdn.com/image/fetch/$s_!xxsu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b344f16-f37e-47e5-9411-64492ccd2731_2679x1485.png 1272w, https://substackcdn.com/image/fetch/$s_!xxsu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b344f16-f37e-47e5-9411-64492ccd2731_2679x1485.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xxsu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b344f16-f37e-47e5-9411-64492ccd2731_2679x1485.png" width="1456" height="807" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b344f16-f37e-47e5-9411-64492ccd2731_2679x1485.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:807,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:494490,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/187733857?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b344f16-f37e-47e5-9411-64492ccd2731_2679x1485.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!xxsu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b344f16-f37e-47e5-9411-64492ccd2731_2679x1485.png 424w, https://substackcdn.com/image/fetch/$s_!xxsu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b344f16-f37e-47e5-9411-64492ccd2731_2679x1485.png 848w, https://substackcdn.com/image/fetch/$s_!xxsu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b344f16-f37e-47e5-9411-64492ccd2731_2679x1485.png 1272w, https://substackcdn.com/image/fetch/$s_!xxsu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b344f16-f37e-47e5-9411-64492ccd2731_2679x1485.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>For further reading, check out: <a href="https://code.claude.com/docs/en/best-practices">https://code.claude.com/docs/en/best-practices</a></p><p>If you found this post useful, make sure to subscribe and share with a friend.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[#37 Making better decisions as an engineer]]></title><description><![CDATA[Consequence vs reversibility in decision-making]]></description><link>https://www.proactiveengineer.com/p/37-making-better-decisions-as-an</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/37-making-better-decisions-as-an</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 06 Feb 2026 15:31:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4V3p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>With the rise of AI slop across the internet&#8212;especially within engineering orgs&#8212;strong decision-making has become increasingly valuable skill for engineers. </p><p>Some make the mistake of having a project get blocked by a decision without exploring possible paths forward. Others delegate too many decisions, which can slow down overall progress. Vibe-coding is a form of delegating decisions to AI tools.</p><p>Decision-making is a skill in its own right: it requires practice and a framework to follow, particularly as you take on projects with growing impact. Engineers can still be good decision-makers even when projects fail for reasons outside their control. What matters is having the right mental model for evaluating decisions and weighing consequences against reversibility, which I&#8217;ll cover in the post below.</p><p>I&#8217;ll start by introducing Amazon&#8217;s decision-making culture by Jeff Bezos, then discuss the cost of decisions and their consequences, and finally share examples of how engineers can make better decisions.</p><p>First, let&#8217;s start with decision types.</p><div><hr></div><h2>Decision types</h2><p>Bezos introduced the concept of &#8220;decision types&#8221; to encourage better and faster decision-making, which later became a core part of Amazon&#8217;s culture: <strong>Type 1 and Type 2 decisions. </strong>He wrote the following in a <a href="https://www.sec.gov/Archives/edgar/data/1018724/000119312516530910/d168744dex991.htm">shareholder letter</a>:</p><blockquote><p><em>Some decisions are consequential and irreversible or nearly irreversible &#8211; one-way doors &#8211; and these decisions must be made methodically, carefully, slowly, with great deliberation and consultation. If you walk through and don&#8217;t like what you see on the other side, you can&#8217;t get back to where you were before. We can call these Type 1 decisions. But most decisions aren&#8217;t like that &#8211; they are changeable, reversible &#8211; they&#8217;re two-way doors. If you&#8217;ve made a suboptimal Type 2 decision, you don&#8217;t have to live with the consequences for that long. You can reopen the door and go back through. Type 2 decisions can and should be made quickly by high judgment individuals or small groups.</em></p><p><em>As organizations get larger, there seems to be a tendency to use the heavy-weight Type 1 decision-making process on most decisions, including many Type 2 decisions. The end result of this is slowness, unthoughtful risk aversion, failure to experiment sufficiently, and consequently diminished invention. We&#8217;ll have to figure out how to fight that tendency.</em></p></blockquote><h3>Type 1 Decisions (One-Way Doors)</h3><p><em>Type 1 decisions are irreversible and have long-term consequences.</em></p><p>These are decisions that set the direction and strategy of a company, like entering a new market, launching a new product, or reorganising teams. </p><p>For engineers, these decisions should be made slowly and carefully, with analysis and forward thinking. For example:</p><ul><li><p>Choosing a cloud provider</p></li><li><p>Defining public APIs</p></li><li><p>Designing your data and security model</p></li><li><p>Picking a primary programming language for the product</p></li></ul><p>These are examples of decisions that require research, deep thinking, and discussion with impacted stakeholders (tech leads, managers, directors, and CTO).</p><p>A strong sign of leadership is the ability to identify Type 1 decisions, draft proposals, and discuss them with relevant stakeholders. These are decisions that will eventually be maintained by engineers, so it&#8217;s important to take time to explore alternative solutions and tradeoffs.</p><h3>Type 2 Decisions (Two-Way Doors)</h3><p><em>Type 2 decisions are reversible and have short-term consequences.</em></p><p>These are day-to-day operational decisions, like handling customer issues or implementing new product features. These decisions should generally be made by engineers directly and shouldn&#8217;t require a long chain of approvals. It&#8217;s valuable to communicate these decisions proactively, but don&#8217;t block yourself waiting on others (especially when the action is reversible). For example:</p><ul><li><p>Configuring CI/CD pipelines</p></li><li><p>Adding feature flags</p></li><li><p>Trying a new frontend framework or changing <a href="https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping">ORMs</a></p></li><li><p>Refactoring a service</p></li></ul><p>These are examples of daily decisions that can be made quickly, and if the outcome is inefficient, it&#8217;s not the end of the world. These are often reversible or disposable ideas that don&#8217;t create meaningful consequences for the company or its users.</p><p>As an engineer, you&#8217;re trusted for your technical contributions, which are usually a combination of making fast Type 2 decisions and carefully reviewing Type 1 decisions.</p><p>Junior engineers often get blocked here, sometimes due to lack of experience. That&#8217;s normal during onboarding/training. But it&#8217;s important to build this mental model when working on a busy team: senior engineers and tech leads won&#8217;t be available to review every Type 2 decision, especially when it&#8217;s reversible.</p><blockquote><p>&#127775; <strong>My advice:</strong> ask for input on high-level decisions (like a design proposal) and make Type 2 decisions yourself (e.g., implementation details). </p><p>Changes are always reversible in a pull request.</p></blockquote><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Decision costs</h2><p>Decisions fall on a spectrum from reversible to irreversible. You can tell where a decision lies by asking how much it would cost to undo it. The higher the cost, the more irreversible the decision.</p><p>As you progress in your career, there will be all kinds of decisions you need to make. Understanding the impact and cost of each decision is important and will make you stand out as an influential leader. </p><p>The following diagram frames decisions along two axes:</p><ul><li><p>Reversibility (x-axis)</p></li><li><p>Consequence (y-axis)</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4V3p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4V3p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png 424w, https://substackcdn.com/image/fetch/$s_!4V3p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png 848w, https://substackcdn.com/image/fetch/$s_!4V3p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png 1272w, https://substackcdn.com/image/fetch/$s_!4V3p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4V3p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png" width="1456" height="764" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:897511,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/185836366?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4V3p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png 424w, https://substackcdn.com/image/fetch/$s_!4V3p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png 848w, https://substackcdn.com/image/fetch/$s_!4V3p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png 1272w, https://substackcdn.com/image/fetch/$s_!4V3p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d73a28-5aa6-4865-b156-3a195703bf8b_2385x1252.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://fs.blog/reversible-irreversible-decisions/">Source: Farnam Street</a></figcaption></figure></div><p>To build the right mental model, this diagram suggests the action based on two factors: <strong>reversibility</strong> and <strong>consequence</strong>. The top two quadrants represent high consequence to your team and the business, while the bottom two quadrants represent minimal consequence. The top-right quadrant represents &#8220;technical excellence&#8221;: high-consequence, irreversible decisions that require deep expertise and long-term thinking. The top-left represents &#8220;prototyping&#8221;. It&#8217;s for building a hypothesis and then running experiments to validate or nullify it, and explaining the results to other engineers. The bottom-left quadrant is for quick decisions on small items. Engineers don&#8217;t have to spend too much time on this, especially if it&#8217;s easy to undo. The bottom-right quadrant can also be delegated or decided quickly. It might be useful to communicate those kinds of decisions with your teammates, but it certainly doesn&#8217;t require hours of meetings back-and-forth.</p><p>Below are example decisions you might face as a software engineer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uFVL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9047ed-24b3-448a-a49f-d390c84e680b_2385x1252.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uFVL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9047ed-24b3-448a-a49f-d390c84e680b_2385x1252.png 424w, https://substackcdn.com/image/fetch/$s_!uFVL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9047ed-24b3-448a-a49f-d390c84e680b_2385x1252.png 848w, https://substackcdn.com/image/fetch/$s_!uFVL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9047ed-24b3-448a-a49f-d390c84e680b_2385x1252.png 1272w, https://substackcdn.com/image/fetch/$s_!uFVL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9047ed-24b3-448a-a49f-d390c84e680b_2385x1252.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uFVL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9047ed-24b3-448a-a49f-d390c84e680b_2385x1252.png" width="1456" height="764" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb9047ed-24b3-448a-a49f-d390c84e680b_2385x1252.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:672907,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/185836366?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9047ed-24b3-448a-a49f-d390c84e680b_2385x1252.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uFVL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9047ed-24b3-448a-a49f-d390c84e680b_2385x1252.png 424w, https://substackcdn.com/image/fetch/$s_!uFVL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9047ed-24b3-448a-a49f-d390c84e680b_2385x1252.png 848w, https://substackcdn.com/image/fetch/$s_!uFVL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9047ed-24b3-448a-a49f-d390c84e680b_2385x1252.png 1272w, https://substackcdn.com/image/fetch/$s_!uFVL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb9047ed-24b3-448a-a49f-d390c84e680b_2385x1252.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In startups, you&#8217;ll often be exposed more to the top-right quadrant: consequential and irreversible decisions. In larger companies, you&#8217;ll see more of the top-left quadrant: consequential but reversible decisions. However, you&#8217;ll face all sorts of decisions throughout your career regardless of your chosen environment.</p><p>Junior and mid-level engineers typically start in the bottom quadrants and level up to the top quadrants over time. For the top quadrants, senior engineers are typically needed for the top-left, while staff/principal engineers are required for the top-right.</p><blockquote><p>&#127775; A useful way to think about career growth is the consequence of the decisions you make. If your decisions can meaningfully impact customers or the business&#8212;and succeed&#8212;you&#8217;re trusted as a strong engineer.</p><p>&#127775; If you&#8217;re mostly making inconsequential decisions, your work likely has limited impact. Reorient toward business outcomes and seek opportunities to make higher-consequence decisions with your manager.</p></blockquote><div><hr></div><h2>Conclusion</h2><p>I&#8217;d highly recommend building mental models around decision types and consequences. Whether you&#8217;re an IC or a tech lead, knowing where to spend time and energy in decision-making is critically important to the business. Teaching others how to make better decisions also provides a great return on investment. Knowing when to delegate, prototype, or bring together a group of engineers for an important technical decision is a skill that requires practice and repetition.</p><p>My suggestion moving forward:</p><ul><li><p><strong>Reversible &amp; consequential:</strong> Prototype and get buy-in before executing.</p></li><li><p><strong>Irreversible &amp; consequential:</strong> Research, think deeply about the options, and discuss with relevant stakeholders.</p></li><li><p><strong>Irreversible &amp; inconsequential:</strong> Decide quickly or delegate. Don&#8217;t waste time.</p></li><li><p><strong>Reversible &amp; inconsequential:</strong> Decide quickly and undo if needed. Don&#8217;t waste time.</p></li></ul><p>My final takeaway is this: </p><div class="pullquote"><p><em>Your career grows in proportion to the consequences of the decisions you&#8217;re trusted to make.</em></p></div><p>If you enjoyed reading the newsletter, consider subscribing and sharing it with a friend.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[#36 Looking ahead: AI in 2026 ]]></title><description><![CDATA[Trends I'm noticing and excited about in 2026]]></description><link>https://www.proactiveengineer.com/p/36-looking-ahead-ai-in-2026</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/36-looking-ahead-ai-in-2026</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 09 Jan 2026 15:31:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1Q_6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>First edition of PE in 2026. Happy new year and hope you had a restful break! </p><p>As we&#8217;re entering the 2nd week of 2026, I wanted to share some thoughts and trends I&#8217;m seeing in the AI ecosystem. I&#8217;ve chatted with many software, AI, and product engineers over the past year through local meetups, workshops, and intros. From these discussions, I&#8217;ve noticed two things: engineers are empowered with AI and overwhelmed by AI slop.</p><p>This post might sound buzz-wordy, but I promise I&#8217;ll keep it straight to the point.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1Q_6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1Q_6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png 424w, https://substackcdn.com/image/fetch/$s_!1Q_6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png 848w, https://substackcdn.com/image/fetch/$s_!1Q_6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png 1272w, https://substackcdn.com/image/fetch/$s_!1Q_6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1Q_6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png" width="492" height="256.468085106383" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:343,&quot;width&quot;:658,&quot;resizeWidth&quot;:492,&quot;bytes&quot;:86374,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/182241147?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!1Q_6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png 424w, https://substackcdn.com/image/fetch/$s_!1Q_6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png 848w, https://substackcdn.com/image/fetch/$s_!1Q_6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png 1272w, https://substackcdn.com/image/fetch/$s_!1Q_6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88dfaf6-e593-493b-8fa2-27b495c4e712_658x343.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Intro</h2><p>2025 was a pivotal year for AI. We saw:</p><ul><li><p>Major foundation model advancements from OpenAI (GPT-5 in August), Anthropic (Claude 4 family with Sonnet 4.5 and Opus 4.1), Google (Gemini 3), and Meta (Llama 4 family). </p></li><li><p>An early acceleration toward reasoning models. It started when <a href="https://github.com/deepseek-ai/DeepSeek-R1">DeepSeek R1</a> disrupted the industry in January by achieving performance comparable to OpenAI&#8217;s o1 at a fraction of the training cost (~$6 million vs $100+ million). </p></li><li><p>The term &#8220;vibe coding&#8221; gained mainstream traction, popularised by platforms like <a href="https://lovable.dev/">Lovable</a> and <a href="https://replit.com/">Replit</a> that enable building apps through natural language prompts.</p></li><li><p>Businesses re-evaluating their strategies with AI and increasingly adopting agentic workflows. </p></li><li><p>Hiring engineers became more challenging with LLM cheating. The most documented case was the <a href="https://www.linkedin.com/posts/gergelyorosz_imagine-interviewing-a-candidate-who-looks-activity-7305287228836986880-Mu9b/">fake candidate interview story</a> with Vidoc Security Lab.</p></li></ul><p>This space is still evolving and I believe 2026 is going to be an inflection point for software engineers. </p><div><hr></div><p><strong>Trends I&#8217;m seeing ahead for 2026:</strong></p><ol><li><p>New wave of AI-native engineers</p></li><li><p>Increasing demand for standardised agentic orchestration</p></li><li><p>Vibe coding becoming the de-facto standard for prototyping</p></li><li><p>AI is booming in the UK</p></li></ol><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h3>#1 New wave of AI-native engineers</h3><p>ChatGPT was released on November 30, 2022, and its performance has improved exponentially ever since. </p><p>CS undergraduates who started their 4-year programs right as ChatGPT made public are graduating this year. Technically, we&#8217;re looking at the first generation of engineers who have been immersed in GenAI throughout their education. </p><p>We&#8217;re already seeing some engineers being too dependent on AI tools. But on the flip side, they experienced early integration of AI tools and are more equipped for execution than engineers a decade ago. Hiring should expect a new wave of AI-native engineers.</p><p><strong>Challenges:</strong></p><ul><li><p>Engineers need to understand, explain, and justify LLM outputs at work and interviews. Blindly accepting outputs is not acceptable.</p></li><li><p>Critical thinking and debugging will be more emphasised with AI-assisted development.</p></li></ul><p><strong>Opportunities:</strong></p><ul><li><p>Early-career engineers can practice higher-level thinking and feature planning</p></li><li><p>Engineers will be more productive, contributing to projects faster</p></li><li><p>Experience with AI becoming a competitive advantage</p></li></ul><p><strong>AI adoption is already happening in SWE interviews&#8230;</strong></p><p>Some companies now allow candidates to use AI tools like Copilot and Cursor during interviews (with algorithmic interviews being the exception). Meta has been trialling this approach in an attempt to move away from old LeetCode-style interviews. An internal memo reads:</p><blockquote><p>Meta is developing a new type of coding interview in which candidates have access to an AI assistant. This is more representative of the developer environment that our future employees will work in, and also makes LLM-based cheating less effective.</p></blockquote><p>Candidates will still need algorithmic thinking. The idea is to provide an environment for candidates to solve problems using AI tools and to be able to justify their decisions and explain the outputs they&#8217;re using to solve.</p><p>Task-based interviews are popular among startups and scale-ups, and they&#8217;re increasingly more open towards candidates using AI. I&#8217;ve covered this before in technical interview guide, which you can read more here:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;5f33ed73-9015-48e6-bb9a-ef269de18cca&quot;,&quot;caption&quot;:&quot;Welcome to Part 1 of Preparing for Tech Interviews series, where I share insights and advice gathered from software engineers working at high-growth startups and big tech companies like FAANG.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#22 Preparing for Tech Interviews, Part 1: Coding&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:27096115,&quot;name&quot;:&quot;Shehab Abdel-Salam&quot;,&quot;bio&quot;:&quot;On a mission to help engineers become proactive leaders. Senior Software Engineer @ Proofpoint | Instructor | Writing The Proactive Engineer newsletter&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3oxM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd029e537-6372-42e5-a999-c25688df6be4_2036x2036.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-02-14T09:02:44.670Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!NmkM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.proactiveengineer.com/p/22-preparing-for-tech-interviews&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:154889587,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:12,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2848801,&quot;publication_name&quot;:&quot;The Proactive Engineer&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!pC4V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1077f3-b9ff-4f78-8295-f2d8235ec5b0_182x182.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h3>#2 New demand for Orchestrating agentic AI</h3><p>TL;DR - I believe we&#8217;re close to having a &#8220;Kubernetes&#8221; version for agentic workflows.</p><p>In short, there are two kinds of AI:</p><ol><li><p>Generative (ChatGPT) that generates text based on a user&#8217;s prompts.</p></li><li><p>Agentic (Claude Code) that acts to achieve complex goals with minimal supervision (e.g., coding up a feature, testing, and creating a PR).</p></li></ol><p>Both kinds are increasingly improving. Generative AI has stronger reasoning capabilities, and agentic AI is evolving from a passive assistant to an active collaborator with decision-making capabilities. Orchestration is about employing a network of AI agents, each designed for specific tasks, working together to automate complex workflows. </p><p>Engineers are already experimenting with multiple agents executing different tasks concurrently, essentially operating as a tech lead on top of an &#8220;AI super team&#8221;. But the de-facto orchestration standard hasn&#8217;t emerged just yet.</p><p>With this trend, I believe there is a need for developer tooling on top of the agentic workflows. For example, monitoring and observability (o11y) will be required to track and manage the progress of agents like Claude Code. Another is managing resources (CPU/Memory) for running agents. All can be unlocked by an orchestration platform that manages these &#8220;AI super teams&#8221;, the same way Kubernetes manages containers.</p><p>Agentic AI is still a hot topic, and businesses are looking for ways to adopt agentic workflows. So I believe there will be a new class of developer tools built primarily for managing AI agents. And upskilling in that area will be a great ROI for engineers.</p><div><hr></div><h3>#3 Vibe coding becoming the de-facto standard for prototyping</h3><p>While non-technical individuals quickly embraced vibe-coding, engineers preferred an &#8220;AI-assisted development&#8221; approach. However, prototyping ideas with vibe coding started to be a thing among engineering teams.</p><p>Engineers have reported great results in terms of speed and quality when validating new ideas. The ability to create throwaway solutions in temporary repos for technical review makes it easier for engineers to explore new ideas. And with the increasing coding performance of LLMs like Claude and GPT, teams have started prototyping like vibe-coders.</p><p><a href="https://www.vellum.ai/?utm_source=www.proactiveengineer.com&amp;utm_medium=referral">Vellum</a> shared public leaderboards for evaluating LLM performance. The diagram below shows coding performance (last updated 18 Nov 2025).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XyIJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f3a46e-ceff-4938-8e66-b351fb32df5d_1400x982.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XyIJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f3a46e-ceff-4938-8e66-b351fb32df5d_1400x982.png 424w, https://substackcdn.com/image/fetch/$s_!XyIJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f3a46e-ceff-4938-8e66-b351fb32df5d_1400x982.png 848w, https://substackcdn.com/image/fetch/$s_!XyIJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f3a46e-ceff-4938-8e66-b351fb32df5d_1400x982.png 1272w, https://substackcdn.com/image/fetch/$s_!XyIJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f3a46e-ceff-4938-8e66-b351fb32df5d_1400x982.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XyIJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f3a46e-ceff-4938-8e66-b351fb32df5d_1400x982.png" width="1400" height="982" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28f3a46e-ceff-4938-8e66-b351fb32df5d_1400x982.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:982,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:133114,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/182241147?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f3a46e-ceff-4938-8e66-b351fb32df5d_1400x982.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!XyIJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f3a46e-ceff-4938-8e66-b351fb32df5d_1400x982.png 424w, https://substackcdn.com/image/fetch/$s_!XyIJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f3a46e-ceff-4938-8e66-b351fb32df5d_1400x982.png 848w, https://substackcdn.com/image/fetch/$s_!XyIJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f3a46e-ceff-4938-8e66-b351fb32df5d_1400x982.png 1272w, https://substackcdn.com/image/fetch/$s_!XyIJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f3a46e-ceff-4938-8e66-b351fb32df5d_1400x982.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">source: <a href="https://www.vellum.ai/best-llm-for-coding">https://www.vellum.ai/best-llm-for-coding</a></figcaption></figure></div><p>Engineers who are good at prompting and high-level thinking will solve more complex problems faster with accurate code generation. This is a highly valuable skill for AI-native engineers in the job market.</p><p>One thing I learned from Addy Osmani, Google Cloud AI Director, <a href="https://newsletter.pragmaticengineer.com/p/beyond-vibe-coding-with-addy-osmani">who shared recently on the &#8220;Pragmatic Engineer&#8221; podcast by Gergely Orosz</a>, is that he writes an internal monthly AI newsletter to his engineering org about the latest trends and learnings to empower his engineers to work with AI and establish standardised practices.</p><p>He explains that engineers should be curious about AI and contribute to defining standard guidelines when working with AI. These efforts will pay off in the long term for an innovation-first culture.</p><blockquote><p>TL;DR - Engineers who keep up with the latest foundational models and are naturally curious will be ahead.</p></blockquote><p><strong>To recap, what makes engineers successful in this environment:</strong></p><ul><li><p>Strong prompting skills combined with architectural thinking</p></li><li><p>Staying current with foundational models (Claude, GPT, etc.)</p></li><li><p>Natural curiosity to experiment with new tools as they emerge</p></li></ul><div><hr></div><h3>#4 AI is booming in the UK</h3><p>The UK government data shows the number of AI companies has nearly doubled over the past two years, reaching close to 6,000 firms and generating around &#163;24 billion in revenue in 2024, more than double in 2023. Employment in AI has also increased by 33% in just 12 months, with over 86,000 new roles.</p><p>Research shows UK businesses are spending an average of &#163;15.9 million on AI, and that figure is expected to grow by 40% over the next two years. Many organisations have started to shift from using AI as a series of isolated technology projects, and implementing enterprise-wide AI strategies.</p><p>Latest example is my previous company, <a href="https://faculty.ai/">Faculty AI</a>. They recently <a href="https://newsroom.accenture.com/news/2026/accenture-to-acquire-faculty-to-scale-ai-capabilities">announced acquisition by Accenture for a $1bn</a>, making the company a &#8220;tech unicorn&#8221;.  This is a clear signal of Accenture&#8217;s AI strategy. Acquiring Faculty allows them to deploy enterprise-wide AI solutions within their consultancy.</p><p>I&#8217;ve been fortunate to meet many engineers and founders working on exciting AI products, as well as experience the strong camaraderie in the tech community and supporting other startups as they grow.</p><p>No affiliation, here are a very small list of exciting companies (they&#8217;re all hiring)!</p><ul><li><p><a href="https://incident.io/">Incident.io</a></p></li><li><p><a href="https://tldraw.dev/">tldraw</a> (<a href="https://www.youtube.com/shorts/7X0m6oGdBbI">short video</a> for AI-assisted drawing agents, fairies!)</p></li><li><p><a href="https://www.granola.ai/">Granola</a> for back-to-back meetings</p></li><li><p><a href="https://www.synthesia.io/">Synthesia</a>, an AI video platform for businesses</p></li><li><p><a href="https://encord.com/">Encord</a> for managing, curating, and annotating AI data</p></li><li><p><a href="https://poly.ai/">PolyAI</a> for building AI voice agents</p></li><li><p><a href="https://www.isomorphiclabs.com/">Isomorphic Labs</a>, an AI platform for accelerating drug discovery</p></li></ul><div><hr></div><h2>Wrap up</h2><p>Going into the second week of 2026, AI will continue to disrupt industries, and it is more important than ever for engineers to be well-equipped with AI. This shift presents both an opportunity and a challenge. Strong judgment, human creativity, and strategic thinking will become some of the most valuable skills for software engineers.</p><div class="pullquote"><p>Time to say goodbye to <a href="https://leetcode.com/problems/invert-binary-tree/description/">inverting binary trees</a>.</p></div><p>To recap, these are the trends I&#8217;m looking forward to:</p><ol><li><p>New wave of AI-native engineers</p></li><li><p>Increasing demand for standardised agentic orchestration</p></li><li><p>Vibe coding becoming the de-facto standard for prototyping</p></li><li><p>AI is booming in the UK</p></li></ol><p>If you enjoyed this newsletter, consider subscribing and sharing it with a friend.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[#35 Business vs Promotion-driven development]]></title><description><![CDATA[If promotion depends on complexity, guess what teams will ship?]]></description><link>https://www.proactiveengineer.com/p/35-business-vs-promotion-driven-development</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/35-business-vs-promotion-driven-development</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 19 Dec 2025 16:31:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3exc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In some large organisations, promotion-driven development becomes a strategy engineers use for career progression. When they can&#8217;t find (or don&#8217;t know) the right business scope, they create one: a complex engineering challenge that looks impressive in a promotion packet. But if solving that challenge doesn&#8217;t move the needle for the business, is it really worth solving? More importantly, is the complexity justified?</p><p>If the answer is no, but it still leads to a promotion, that is promotion-driven development. Unfortunately, it&#8217;s a symptom of a broken incentive system.</p><blockquote><p><em><strong>Promotion-driven:</strong> Solving engineering problems that optimise the promotion packet.<br><strong>Business-driven: </strong>Solving business problems that impact the company.</em></p></blockquote><p>When leadership rewards this strategy (even accidentally), it signals a clear disconnect between them and engineering.</p><p>I don&#8217;t claim this is true across all companies; this is a personal opinion based on what I&#8217;ve seen and discussed with engineers from other companies.</p><p>I&#8217;ll share some thoughts below on the problem and how I approach it with both leadership and engineering.</p><p>A quick work from <a href="https://www.scalekit.com/">Scalekit</a> who is kindly sponsoring this email.</p><div><hr></div><h2>Scalekit (Sponsor)</h2><p>Agents are becoming first-class actors. They&#8217;re calling APIs, triggering actions, and operating without user sessions &#8212; which means your auth stack needs to support more than just humans. With MCP servers emerging as the standard interface for agents, Scalekit brings the comprehensive auth stack for AI apps. Their MCP auth module supports all client registration flows, so you can handle real-world clients without sprawl or security debt.</p><p>The good part is even if you&#8217;re already using a custom auth system, or third party auth providers like Auth0, Cognito, Scalekit plugs in alongside, letting you add scoped, observable auth for agents without ripping out what you&#8217;ve built.</p><p>Because if agents are on your roadmap, your auth infra needs to meet them there.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.scalekit.com/mcp-auth?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=proactiveengineer&quot;,&quot;text&quot;:&quot;Learn more&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.scalekit.com/mcp-auth?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=proactiveengineer"><span>Learn more</span></a></p><div><hr></div><h2>Problem with promotion-driven development</h2><p>Shipping projects is a great skill. Doing enough reps as an engineer makes them more valuable for the team and the business. The number and quality of repetitions varies from one company to another. But in larger organisations, there&#8217;s often the challenge of <strong>competing for scope.</strong></p><p>For example, if there are dozens of senior engineers and only a handful of projects, most engineers will be disincentivised to share scope, especially if their promotions depend on shipping those projects. Sadly, not picking the right projects can tank your performance review.</p><p>This culture of not sharing scope became more visible at Meta, especially <a href="https://www.businessinsider.com/meta-performance-cuts-mark-zuckerberg-memo"> when they cut 5% of their workforce in January</a> and did more performance layoffs later this year. Some Meta engineers shared this shift where teams stopped sharing scope to avoid getting PIP&#8217;d.</p><p>This environment pushes engineers to find complex, promotion-driven initiatives that didn&#8217;t come from a business need. Common examples: architecture rewrites or microservices rewrites.</p><p>This is over-engineering, but with a different motivation: finding the complexity to make the promotion case more compelling. </p><p>Both leadership and engineering share responsibility for fixing this.</p><div><hr></div><h2>For engineers: Focus on the leverage</h2><p>A well-rounded engineer should be obsessed with solving business problems. The goal is not delivering complex engineering output with no business value (i.e., showing off).</p><p>Finding scope can be very challenging, but introducing unnecessary complexity is not the right direction to follow. If you&#8217;re struggling to find scope:</p><p><strong>Talk to product people and leadership. </strong>Your manager, skip-level, or product manager. Pay attention to their words: what they&#8217;re thinking about, what OKRs they mention, what customer deals are making the CEO literally sweat. </p><p>These are great signals for you to dig deeper.</p><p>Engineering and business challenges don&#8217;t have to be mutually exclusive. The problems are at the intersection of a Venn diagram, where solving them moves the business forward and make an engineering impact. <strong>This is finding your leverage.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3exc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3exc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png 424w, https://substackcdn.com/image/fetch/$s_!3exc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png 848w, https://substackcdn.com/image/fetch/$s_!3exc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png 1272w, https://substackcdn.com/image/fetch/$s_!3exc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3exc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png" width="477" height="318.4368131868132" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:972,&quot;width&quot;:1456,&quot;resizeWidth&quot;:477,&quot;bytes&quot;:111356,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/181598879?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3exc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png 424w, https://substackcdn.com/image/fetch/$s_!3exc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png 848w, https://substackcdn.com/image/fetch/$s_!3exc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png 1272w, https://substackcdn.com/image/fetch/$s_!3exc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6d44aa-876a-46b0-90cc-88513244d509_1533x1023.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Challenging Complexity</h3><p>If an engineer presents a &#8220;microservice rewrite with no business OKRs&#8221; proposal in a design review, this should be challenged, either pivot to an idea backed by a business metric or completely reject it.</p><p>Whenever I&#8217;m proposing a new idea, I always have answers to the five whys<strong> </strong>ready. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gn9k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb42e66bf-2457-4b33-9efd-423290b3679a_572x388.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gn9k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb42e66bf-2457-4b33-9efd-423290b3679a_572x388.png 424w, https://substackcdn.com/image/fetch/$s_!gn9k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb42e66bf-2457-4b33-9efd-423290b3679a_572x388.png 848w, https://substackcdn.com/image/fetch/$s_!gn9k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb42e66bf-2457-4b33-9efd-423290b3679a_572x388.png 1272w, https://substackcdn.com/image/fetch/$s_!gn9k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb42e66bf-2457-4b33-9efd-423290b3679a_572x388.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gn9k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb42e66bf-2457-4b33-9efd-423290b3679a_572x388.png" width="430" height="291.67832167832165" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b42e66bf-2457-4b33-9efd-423290b3679a_572x388.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:388,&quot;width&quot;:572,&quot;resizeWidth&quot;:430,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The 5 Whys: Getting to the Root of the Matter - CX Journey&#8482;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The 5 Whys: Getting to the Root of the Matter - CX Journey&#8482;" title="The 5 Whys: Getting to the Root of the Matter - CX Journey&#8482;" srcset="https://substackcdn.com/image/fetch/$s_!gn9k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb42e66bf-2457-4b33-9efd-423290b3679a_572x388.png 424w, https://substackcdn.com/image/fetch/$s_!gn9k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb42e66bf-2457-4b33-9efd-423290b3679a_572x388.png 848w, https://substackcdn.com/image/fetch/$s_!gn9k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb42e66bf-2457-4b33-9efd-423290b3679a_572x388.png 1272w, https://substackcdn.com/image/fetch/$s_!gn9k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb42e66bf-2457-4b33-9efd-423290b3679a_572x388.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Say I&#8217;m designing an architectural proposal (e.g., scaling out a database).</strong></p><p>Valid questions are:</p><ol><li><p><strong>Why </strong>do we need to scale? </p><p><em>Answer: </em>Because we&#8217;re reaching the limits of a single database instance.</p></li><li><p><strong>Why </strong>are we hitting the limits? <br><em>Answer:</em> Because we&#8217;re storing data on X, Y, and Z</p></li><li><p>I see the value in storing X &amp; Y, but <strong>why</strong> are we storing Z?</p></li></ol><blockquote><p>&#128161;<em> Notice the shift: why are we solving this with infrastructure rather than addressing the data model?</em></p></blockquote><ol start="4"><li><p>Have you explored other options? <strong>Why</strong> this &lt;approach&gt;?</p></li><li><p><strong>Why </strong>are we confident this plan will work without it becoming an operational burden?</p></li></ol><p>Being prepared to answer these five whys (with research and data) is the mark of a well-rounded engineer.</p><p><strong>Also, simplicity &gt; complexity&#8230;</strong></p><p>There&#8217;s an immense value to adopting pragmatism for solving problems. Evan &amp; Stefan, cofounders of <a href="https://www.hellointerview.com/">hellointerview.com</a>, reinforced this in their blog post: <a href="https://www.hellointerview.com/blog/lessons-from-building-hello-interview">14 Lessons from Building Hello Interview</a>. They run their entire product using only two services: a Next.js web server and a <a href="https://temporal.io/">Temporal</a> worker service. </p><p>To quote Stefan:</p><blockquote><p>&#8220;Perfect is the enemy of shipped, and we&#8217;ve shipped a lot.&#8221;</p></blockquote><div><hr></div><h2>For Leadership: Celebrate product stability</h2><p>Product and feature launches are great. When engineers deliver and customers are acquired or retained, that&#8217;s successful engineering-product partnership.</p><p>This partnership still holds true even during &#8220;feature dryness.&#8221; When architectures are reviewed, costs reduced, and scale improved, those are meaningful contributions that strengthen stability and reliability of the product. </p><p>This could be:</p><ul><li><p>Metrics improved (uptime, latency, cost savings, database connections)</p></li><li><p>Infrastructure wins</p></li><li><p>Onboarding large customers or sustaining high traffic (e.g., Black Fridays)</p></li></ul><p>These are all efforts worth recognition and support by leadership.</p><blockquote><p>POV: Promotions shouldn&#8217;t skew toward building &#8220;feature factory&#8221; teams, but toward building teams of creative problem solvers.</p></blockquote><p>Maintaining the product might not be a sexy slide deck to present. But initiatives around reliability and scale have long-term impact worth celebrating!</p><blockquote><p>Feature releases are not a prerequisite for promotion. Promotions should depend on many things, including (but not limited to) releasing new features.</p></blockquote><div><hr></div><h2>Wrap up</h2><p>Leadership should encourage business-driven development over promotion-driven development. Engineers should anchor themselves to solving business problems, complex or not, boring or not. </p><p>Complexity must always be challenged. Not because of the individual, but to justify maintaining that complexity and making sure all options were exhausted.</p><p>To me, a healthy design review meeting is one where the engineer has done enough research to justify their idea and can answer the five whys before presenting.</p><p>That&#8217;s the last post for the year. If you enjoyed reading this, consider subscribing to the newsletter.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><p>I&#8217;ll be back on January 9th. Till then, happy new year to you and your families! &#127881;</p>]]></content:encoded></item><item><title><![CDATA[#34 How I use LLMs as an engineer]]></title><description><![CDATA[&#128075; Welcome back to the PE newsletter!]]></description><link>https://www.proactiveengineer.com/p/34-how-i-use-llms-as-an-engineer</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/34-how-i-use-llms-as-an-engineer</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 05 Dec 2025 15:31:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!T0gz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb878f941-b636-485a-923b-5f807b032db4_1156x440.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#128075; Welcome back to the PE newsletter!</p><p>A month ago, I <a href="https://www.linkedin.com/posts/shehab-abdel-salam_newsletter-theproactiveengineer-softwareengineering-activity-7379791825240485888-mTQW?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAABSCvLkBWVYKFqMtmtXiSpNC44P4NxKdHdc">shared on LinkedIn</a> that I took a mid-year break to make more room for new experiences and reading. Also, writing a weekly blog while working a full-time job is a <em><strong>very</strong></em> challenging thing to manage. But, I&#8217;m planning to get back to writing again, at a more relaxed pace (once every 2 weeks) and also share my journey using AI. Today, I&#8217;ll share how I use LLMs as an engineer. </p><p>Before that, a quick word from <a href="https://www.scalekit.com/">Scalekit</a>, who is kindly sponsoring this email.</p><div><hr></div><h2>Scalekit</h2><p>Today&#8217;s fast growing AI apps are collectively thinking about growth, activation, and expansion. But behind that frictionless product adoption, lies the most overlooked systems in product design: <strong>authentication &amp; authorization</strong>. To understand how this new generation approaches these choices, Scalekit did a manual teardown of <strong>50+ modern AI apps</strong> &#8212; studying how users sign up, join orgs, switch contexts, and scale into enterprise accounts.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mwfl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc9cc47-1634-4977-bb06-1f49624cb1a7_2880x1012.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mwfl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc9cc47-1634-4977-bb06-1f49624cb1a7_2880x1012.png 424w, https://substackcdn.com/image/fetch/$s_!Mwfl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc9cc47-1634-4977-bb06-1f49624cb1a7_2880x1012.png 848w, https://substackcdn.com/image/fetch/$s_!Mwfl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc9cc47-1634-4977-bb06-1f49624cb1a7_2880x1012.png 1272w, https://substackcdn.com/image/fetch/$s_!Mwfl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc9cc47-1634-4977-bb06-1f49624cb1a7_2880x1012.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mwfl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc9cc47-1634-4977-bb06-1f49624cb1a7_2880x1012.png" width="1456" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ffc9cc47-1634-4977-bb06-1f49624cb1a7_2880x1012.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1975938,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/178713619?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc9cc47-1634-4977-bb06-1f49624cb1a7_2880x1012.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Mwfl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc9cc47-1634-4977-bb06-1f49624cb1a7_2880x1012.png 424w, https://substackcdn.com/image/fetch/$s_!Mwfl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc9cc47-1634-4977-bb06-1f49624cb1a7_2880x1012.png 848w, https://substackcdn.com/image/fetch/$s_!Mwfl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc9cc47-1634-4977-bb06-1f49624cb1a7_2880x1012.png 1272w, https://substackcdn.com/image/fetch/$s_!Mwfl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc9cc47-1634-4977-bb06-1f49624cb1a7_2880x1012.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.stateofauth.com/&quot;,&quot;text&quot;:&quot;Read the full report here&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.stateofauth.com/"><span>Read the full report here</span></a></p><div><hr></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T0gz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb878f941-b636-485a-923b-5f807b032db4_1156x440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T0gz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb878f941-b636-485a-923b-5f807b032db4_1156x440.png 424w, https://substackcdn.com/image/fetch/$s_!T0gz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb878f941-b636-485a-923b-5f807b032db4_1156x440.png 848w, https://substackcdn.com/image/fetch/$s_!T0gz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb878f941-b636-485a-923b-5f807b032db4_1156x440.png 1272w, https://substackcdn.com/image/fetch/$s_!T0gz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb878f941-b636-485a-923b-5f807b032db4_1156x440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T0gz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb878f941-b636-485a-923b-5f807b032db4_1156x440.png" width="1156" height="440" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b878f941-b636-485a-923b-5f807b032db4_1156x440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:440,&quot;width&quot;:1156,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:83640,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/178713619?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb878f941-b636-485a-923b-5f807b032db4_1156x440.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T0gz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb878f941-b636-485a-923b-5f807b032db4_1156x440.png 424w, https://substackcdn.com/image/fetch/$s_!T0gz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb878f941-b636-485a-923b-5f807b032db4_1156x440.png 848w, https://substackcdn.com/image/fetch/$s_!T0gz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb878f941-b636-485a-923b-5f807b032db4_1156x440.png 1272w, https://substackcdn.com/image/fetch/$s_!T0gz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb878f941-b636-485a-923b-5f807b032db4_1156x440.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Intro</h2><p>In early 2025, many engineers were skeptical about using AI. Some still are, while others fall somewhere in between. However, leveraging AI in software engineering has become a key skill companies look for when hiring engineers, and those who invest in using AI are now being described as AI-native software engineers. We&#8217;ll hear the term &#8220;AI-native&#8221; a lot in 2026.</p><p><a href="https://substack.com/@addyosmani">Addy Osmani</a>, engineering leader at Google, described it in his newsletter as:</p><blockquote><p><strong>An </strong><em><strong>AI-native software engineer</strong></em><strong> is one who deeply integrates AI into their daily workflow, treating it as a partner to amplify their abilities.</strong></p></blockquote><p>I was one of the skeptical engineers, but I became invested in AI adoption for engineering teams and started researching ways to optimise my workflow. So far, I&#8217;ve worked with tools like <a href="https://github.com/features/copilot">GitHub Copilot</a>, <a href="https://www.coderabbit.ai/">CodeRabbit</a>, <a href="https://cursor.com/">Cursor</a>, and <a href="https://windsurf.com/">Windsurf</a>. I currently use Windsurf as my main editor with state-of-the-art models like <a href="https://www.anthropic.com/news/claude-opus-4-5">Claude Opus 4.5</a>, <a href="https://openai.com/index/introducing-gpt-5/">GPT-5</a>, and <a href="https://cognition.ai/blog/swe-1-5">SWE-1.5</a> (default).</p><p>I&#8217;ve yet to play around with <a href="http://claude.ai/code">Claude Code</a>, but I&#8217;ve heard engineers at <a href="https://incident.io/">Incident.io</a> love using it and that it weaves nicely into their codebase. They wrote a post about it, which I highly recommend reading: <a href="https://incident.io/blog/shipping-faster-with-claude-code-and-git-worktrees">Shipping faster with Claude Code</a><em>.</em></p><p>So, here&#8217;s how I use LLMs at work.</p><h3>1. Coding (logic replication) and writing tests</h3><p>I use LLMs for coding, testing, scripting, and documentation. For coding, I lean more on logic <em><strong>replication</strong></em> rather than <em><strong>innovation</strong></em>. Replication is things like: copying a design pattern from another module, extending test cases, configuring a new Terraform module, and so on. It&#8217;s the <em>local</em> <em>context</em> I can quickly pass to the LLM so it types faster while I review and accept the changes. Also, I spend time writing more specific prompts for the LLM to get better output, just like I&#8217;m writing a JIRA ticket for an engineer.</p><p>For <strong>innovation</strong>, I prefer to write the critical myself and delegate the repetitive parts to LLMs. I want the core logic to be crystal clear in my head as I write it. It&#8217;s a business asset I must fully understand with its edge cases before shipping.</p><p>That said, I still enjoy the <em>tab-tab </em>experience of AI-generated code. It significantly speeds up my development process, and it has certainly made me a better code reviewer.</p><h3>2. Learning a new programming language</h3><p>I use LLMs both as a teacher and a study buddy. My common use cases include learning programming languages and onboarding to new repositories. </p><p>At my previous company, I had to pick up Rust to write a high-performance simulation library. Using LLMs was helpful at translating ideas from idiomatic Python to Rust. Overall, it accelerated my learning process, especially when figuring out idiomatic patterns like managing memory, handling errors, etc.</p><p>Now I always use an LLM when working with new codebases. It&#8217;s my AI onboarding buddy. Sometimes I need to jump into an infrastructure monorepo and ask questions like <em>&#8220;what are the dependencies of X&#8221;</em> or go through another team&#8217;s repo and ask <em>&#8220;Explain this service to me&#8221;</em>.</p><p>Being able to ask an <em><strong>infinite</strong></em> amount of (stupid) questions is wonderful. Of course, hallucinations or missing context can produce wrong answers, but still a small risk I&#8217;m willing to take. Also with experience you develop an engineering <em>sense</em> to spot incorrect results quickly.</p><h3>3. Debugging <em>(sometimes)</em></h3><blockquote><p>POV: I find debugging with LLMs harder than debugging solo.</p></blockquote><p>In my experience, LLMs sometimes give you a <em>slightly</em> wrong fix that sends you in a different direction, creating a cascade of misleading answers and fixes. A lot depends on the context you provide.</p><p>At the moment, I prefer debugging in focus mode, but if I&#8217;m desperate, I&#8217;ll try asking an LLM, though without high expectations. However, Anthropic mentioned that their engineers who used the latest model <a href="https://www.anthropic.com/news/claude-opus-4-5">Opus 4.5</a>, solved a critical bug that <a href="https://www.anthropic.com/news/claude-sonnet-4-5">Sonnet 4.5</a> couldn&#8217;t fix, in <strong>2 mins</strong>. So it may just be a matter of time before I can rely on LLMs entirely for debugging.</p><p>Generally, when working with large<strong> </strong>log files, JSON blobs, etc. I definitely will use an LLM for interpretation, since it can process large amounts of information much faster than the human brain.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><h3>4. Proofreading engineering docs</h3><p>I write a lot of documents as part of my tech lead work. Before sharing design proposals or wikis across teams, I use LLMs to proofread them. Covering edge cases, adding missing links, and fixing typos. </p><p>But I don&#8217;t use LLMs for drafting new documents. As an engineer, I&#8217;m responsible for the technical decisions and proposals I produce. That means taking the time to think through solutions that align with the product spec, and also to carry the project in my head end-to-end (similar to the 1st point about coding).</p><div class="pullquote"><p>Execution can be delegated to LLMs, <strong>not </strong>Strategy.</p></div><p> For me, writing documents is a strategic exercise that I don&#8217;t delegate to LLMs.</p><h3>5. Prototyping ideas (<em>faster)</em></h3><p>Before LLMs, I used to jot down ideas on paper and allocate some focus time to code up a silver bullet prototype.</p><p>With LLMs, I can now branch out a repo, <em>vibe-code</em> a solution, test it, and quickly decide whether it&#8217;s worth sharing. </p><p>This cycle of ideation &#8594; prototyping  &#8594; testing &#8594; validation can be executed much faster, and I can iterate multiple times a day.</p><p>On Friday mornings, I like to vibe-code ideas I&#8217;ve had throughout the week, experiment with throwaway solutions in local branches and see if one or two are worth sharing with the team.</p><p>That said, I am skeptical about engineers vibe-coding in production repos. To me, it adds a risky layer of abstraction (English &#8594; Machine Code) instead of (High-Level Language &#8594; Machine Code). Experienced engineers are careful not to blindly accept AI-generated changes that might end up creating an unwanted incident in production. This is especially true for large organisations and enterprise.</p><p>But who knows? With the performance improvements I&#8217;m seeing, I might change my mind soon. For now, just throwaway prototypes.</p><h2>Wrap up</h2><p>I wrote this post knowing there&#8217;s still more to leverage with LLMs, but I&#8217;m glad I&#8217;ve gone from a skeptical engineer to a full-on AI-native (still a work in progress). To recap, here&#8217;s how I use LLMs:</p><ol><li><p>Coding (<em><strong>logic</strong></em><strong> </strong><em><strong>replication</strong></em>), testing, and documentation</p></li><li><p>Learning new language(s)</p></li><li><p>Debugging (<em><strong>sometimes</strong>)</em></p></li><li><p>Proofreading engineering documents</p></li><li><p>Prototyping ideas (<em><strong>faster</strong>)</em></p></li></ol><p>I don&#8217;t use it for:</p><ol><li><p> Coding (<em><strong>non-replication</strong></em>)</p></li><li><p>Writing documents</p></li><li><p>Diagramming</p></li></ol><p>How do you use LLMs at work? Let me know in the comments below</p>]]></content:encoded></item><item><title><![CDATA[#33 Why You Should Read More Engineering Blogs]]></title><description><![CDATA[One of the early mistakes I made in my career was not reading engineering blogs.]]></description><link>https://www.proactiveengineer.com/p/33-why-you-should-read-more-engineering</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/33-why-you-should-read-more-engineering</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 09 May 2025 11:31:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IKP_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IKP_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IKP_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png 424w, https://substackcdn.com/image/fetch/$s_!IKP_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png 848w, https://substackcdn.com/image/fetch/$s_!IKP_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png 1272w, https://substackcdn.com/image/fetch/$s_!IKP_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IKP_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png" width="1340" height="616" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:616,&quot;width&quot;:1340,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:208170,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/162262049?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IKP_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png 424w, https://substackcdn.com/image/fetch/$s_!IKP_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png 848w, https://substackcdn.com/image/fetch/$s_!IKP_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png 1272w, https://substackcdn.com/image/fetch/$s_!IKP_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c67ac00-560d-4c11-8879-7693eaee5bdb_1340x616.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One of the early mistakes I made in my career was not reading engineering blogs. I used to think that the only way for an engineer to deepen their knowledge was by reading textbooks like<a href="https://www.oreilly.com/library/view/designing-data-intensive-applications/9781491903063/"> </a><em><a href="https://www.oreilly.com/library/view/designing-data-intensive-applications/9781491903063/">Designing Data-Intensive Apps</a></em> by Martin Kleppman, <em><a href="https://www.oreilly.com/library/view/fundamentals-of-software/9781492043447/">Fundamentals of Software Architecture</a></em>, and so on. While these are great references to have, they often miss the real-world challenges engineers face when architecting solutions for their customers, especially at scale. A great way to learn new patterns or solutions is through stories. That&#8217;s where engineering blogs can help.</p><p>In this post, I&#8217;ll highlight some example stories and share my 25 favourite engineering blogs.</p><div><hr></div><h2><em><strong>Why should I read engineering blogs?</strong></em></h2><p>Say you&#8217;re in product team (A) focused on developing a component like search service. There&#8217;s team (B) working on a payment service, and team (C) working on the product&#8217;s infrastructure. If one engineer from each team gave a ~30min talk to share new findings or solutions they&#8217;ve tried, you&#8217;d want to attend, right?</p><p>Now instead of 30-min talks, their findings / solutions are shared as written documents. And instead of just internal teams sharing their work, these documents come from teams across various companies. The range of stories is now virtually endless, with something interesting and relevant for every engineering team. </p><p>A good engineering story includes:</p><ol><li><p><strong>Challenge/Struggle</strong></p></li><li><p><strong>Ideas</strong></p></li><li><p><strong>Solution</strong></p></li><li><p><strong>Next Steps</strong></p></li></ol><p>Academic textbooks often take time to include new industry-tested ideas. So, to avoid &#8220;knowledge staleness&#8221;, it&#8217;s important to combine work experience with <strong>modern</strong> solutions to build a strong understanding of what works and what doesn&#8217;t. Solutions aren&#8217;t always as straightforward as some textbooks may suggest.</p><p><em><strong>So my advice for software engineers is this:</strong></em></p><div class="pullquote"><p><em>Deepen your knowledge through work experience and by reading books <strong>and engineering blogs.</strong></em></p></div><p>Here are <strong>8 blog posts</strong> where engineers share how they solved an interesting problem, including what worked and what didn&#8217;t.</p><div><hr></div><h2>Engineering blog stories</h2><h3>1. <em><a href="https://www.netflix.com/">Netflix</a></em> - Introducing Impressions (2025)</h3><p>Netflix wrote a post about building a system to track every image a user hovers over on the homepage, called &#8220;impressions&#8221;, to improve personalised recommendations. They explained why tracking impression history matters (to avoid overexposure, highlight new releases, and improve analytics).</p><p>They shared interesting stats about their new system, processing from <strong>1 to 1.5 million events per second</strong> using technologies like <a href="https://flink.apache.org/">Apache Flink</a>, <a href="https://kafka.apache.org/">Kafka</a>, and <a href="https://iceberg.apache.org/">Iceberg</a>. They also talked about their system&#8217;s qualities like ensuring high data quality, and their future plans to automate performance tuning and improve alerting.</p><p><strong>Link:</strong> <a href="https://netflixtechblog.com/introducing-impressions-at-netflix-e2b67c88c9fb">https://netflixtechblog.com/introducing-impressions-at-netflix-e2b67c88c9fb</a></p><h3>2. <em><a href="https://www.canva.com/">Canva</a> - Supporting real-time mouse pointers (2024)</em></h3><p>Say you are asked to design an edit collaboration experience (like Canva) based on customer research. You discuss product requirements and trade-offs, and after some thinking, you might arrive at a solution that requires <a href="https://en.wikipedia.org/wiki/WebSocket">websockets</a> for bidirectional communication with a coordination component (e.g., <a href="https://etcd.io/">etcd</a> or <a href="https://zookeeper.apache.org/">ZooKeeper</a>), or a pub/sub model (e.g., <a href="https://redis.io/">Redis</a>).</p><p>That&#8217;s what Canva initially did. They served 100,000 users using websockets and Redis pub/sub for real-time interactions.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PwW-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33af139d-2b52-41ca-8001-c96506c9082d_3024x1090.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PwW-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33af139d-2b52-41ca-8001-c96506c9082d_3024x1090.png 424w, https://substackcdn.com/image/fetch/$s_!PwW-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33af139d-2b52-41ca-8001-c96506c9082d_3024x1090.png 848w, https://substackcdn.com/image/fetch/$s_!PwW-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33af139d-2b52-41ca-8001-c96506c9082d_3024x1090.png 1272w, https://substackcdn.com/image/fetch/$s_!PwW-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33af139d-2b52-41ca-8001-c96506c9082d_3024x1090.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PwW-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33af139d-2b52-41ca-8001-c96506c9082d_3024x1090.png" width="502" height="181.0096153846154" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/33af139d-2b52-41ca-8001-c96506c9082d_3024x1090.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:525,&quot;width&quot;:1456,&quot;resizeWidth&quot;:502,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Data flow&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Data flow" title="Data flow" srcset="https://substackcdn.com/image/fetch/$s_!PwW-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33af139d-2b52-41ca-8001-c96506c9082d_3024x1090.png 424w, https://substackcdn.com/image/fetch/$s_!PwW-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33af139d-2b52-41ca-8001-c96506c9082d_3024x1090.png 848w, https://substackcdn.com/image/fetch/$s_!PwW-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33af139d-2b52-41ca-8001-c96506c9082d_3024x1090.png 1272w, https://substackcdn.com/image/fetch/$s_!PwW-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33af139d-2b52-41ca-8001-c96506c9082d_3024x1090.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Source: https://www.canva.dev/blog/engineering/realtime-mouse-pointers/</figcaption></figure></div><p>However, Canva faced a scalability issue with supporting real-time mouse updates, which were capped at 3 updates / sec. They shared in their blog post how they transitioned from a Websockets + Redis-based architecture (Milestone 1) to a WebRTC-based architecture (Milestone 2) to achieve a much higher update rate of 60 updates / sec.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cwe4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d991201-deee-4733-b3e1-6c7914a26d10_2712x1300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cwe4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d991201-deee-4733-b3e1-6c7914a26d10_2712x1300.png 424w, https://substackcdn.com/image/fetch/$s_!Cwe4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d991201-deee-4733-b3e1-6c7914a26d10_2712x1300.png 848w, https://substackcdn.com/image/fetch/$s_!Cwe4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d991201-deee-4733-b3e1-6c7914a26d10_2712x1300.png 1272w, https://substackcdn.com/image/fetch/$s_!Cwe4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d991201-deee-4733-b3e1-6c7914a26d10_2712x1300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cwe4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d991201-deee-4733-b3e1-6c7914a26d10_2712x1300.png" width="516" height="247.36813186813185" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d991201-deee-4733-b3e1-6c7914a26d10_2712x1300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:698,&quot;width&quot;:1456,&quot;resizeWidth&quot;:516,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Difference between the WebSocket-based and WebRTC-based architectures&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Difference between the WebSocket-based and WebRTC-based architectures" title="Difference between the WebSocket-based and WebRTC-based architectures" srcset="https://substackcdn.com/image/fetch/$s_!Cwe4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d991201-deee-4733-b3e1-6c7914a26d10_2712x1300.png 424w, https://substackcdn.com/image/fetch/$s_!Cwe4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d991201-deee-4733-b3e1-6c7914a26d10_2712x1300.png 848w, https://substackcdn.com/image/fetch/$s_!Cwe4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d991201-deee-4733-b3e1-6c7914a26d10_2712x1300.png 1272w, https://substackcdn.com/image/fetch/$s_!Cwe4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d991201-deee-4733-b3e1-6c7914a26d10_2712x1300.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Their unique infrastructure problem is a great example of how production engineers manage stateful connections at scale while carefully weighing the trade-offs between technologies that power a great product like Canva.</p><p><strong>Link:</strong> <a href="https://www.canva.dev/blog/engineering/realtime-mouse-pointers">https://www.canva.dev/blog/engineering/realtime-mouse-pointers</a></p><h3>3. <em><a href="https://www.figma.com/">Figma</a> -</em> A 9-month journey of sharding PostgreSQL for &#8220;infinite&#8221; scale (2024).</h3><p>Figma wrote a blog post about their journey with horizontal sharding on their SQL database. They shared useful insights on database sharding (logical vs physical sharding). They shared some interesting stats in their blog. For example, new tables sharded in production experienced <strong>only 10 seconds</strong> of partial downtime. It&#8217;s an interesting read for those managing databases at scale.</p><p><strong>Link:</strong> <a href="https://www.figma.com/blog/how-figmas-databases-team-lived-to-tell-the-scale">https://www.figma.com/blog/how-figmas-databases-team-lived-to-tell-the-scale</a></p><h3>4. <em><a href="https://discord.com/">Discord</a></em> - how they store <strong><s>billions</s> </strong>trillions<strong> </strong>of messages! (2023)</h3><p>Discord shared in their 2017 blog post how they were managing <strong>120 million messages / day</strong> using <a href="https://cassandra.apache.org/">Cassandra</a> with a team of <strong>only four backend engineers</strong>! However, they later faced performance issues with Cassandra as their messaging infrastructure grew to store trillions of messages. As a result, they decided to migrate to <a href="https://www.scylladb.com/">ScyllaDB</a> for handling the new write-throughput. They go into technical details about how they managed the database migration and celebrated how ScyllaDB helped them handle massive data during high-traffic events like the World Cup. Here&#8217;s a highlight:</p><p><em>&#8220;At the end of 2022, people all over the world tuned in to watch the World Cup. One thing we discovered very quickly was that goals scored showed up in our monitoring graphs. This was very cool because not only is it neat to see real-world events show up in your systems, but this gave our team an excuse to watch soccer during meetings. We weren&#8217;t &#8220;watching soccer during meetings&#8221;, we were &#8220;proactively monitoring our systems&#8217; performance.&#8221;&#8221;</em></p><p><strong>Links:</strong></p><ul><li><p>(2017) <a href="https://discord.com/blog/how-discord-stores-billions-of-messages">https://discord.com/blog/how-discord-stores-billions-of-messages</a></p></li><li><p>(2023) <a href="https://discord.com/blog/how-discord-stores-trillions-of-messages">https://discord.com/blog/how-discord-stores-trillions-of-messages</a></p></li></ul><h3>5. <em><a href="https://www.snapchat.com/">Snap</a></em> - using QUIC for Snapchatters (2021)</h3><p>The <a href="https://en.wikipedia.org/wiki/QUIC">QUIC</a> protocol was designed in 2012 as a replacement for TCP to reduce network latency. I had read about this protocol before, but I had never read stories about using QUIC in production. Snap shared their story of how QUIC reduced network latency for live videos, a critical feature for their users (Snapchatters).</p><p><strong>Link:</strong> <a href="https://eng.snap.com/quic-at-snap">https://eng.snap.com/quic-at-snap</a></p><h3>6. <em><a href="https://www.shopify.com/">Shopify</a> -</em> Building resilient payment systems.</h3><p>Shopify shared 10 tips for building resilient payment systems in a blog post. While the details are high-level, their sixth tip on Idempotency Keys stood out as an interesting observation. They recommend using <a href="https://github.com/ulid/spec">ULID</a> instead of UUID4 as it performs better with B-tree&#8211;based indexes due to its sorted nature. Here&#8217;s a highlight:</p><p><em>&#8220;In one high-throughput system at Shopify we&#8217;ve seen a <strong>50 percent decrease</strong> in INSERT statement duration by switching from UUIDv4 to ULID for idempotency keys.&#8221;</em></p><p><strong>Link:</strong> <a href="https://shopify.engineering/building-resilient-payment-systems">https://shopify.engineering/building-resilient-payment-systems</a></p><h3>7. <em><a href="https://www.uber.com/">Uber</a> - Kubernetes migration journey (2025)</em></h3><p>Uber initially used <a href="https://mesos.apache.org/">Apache Mesos</a>  as their container orchestration framework to manage their platform. However, they decided to move away from Mesos (which they announced as deprecated in 2021) and migrate to Kubernetes. This decision posed significant challenges related to scale, reliability, and integration. They first defined their migration principles and explained why they had to rebuild all their integrations from scratch. It&#8217;s an interesting read about Uber&#8217;s year-and-a-half journey migration from Mesos to Kubernetes.</p><p><strong>Link:</strong> <a href="https://www.uber.com/blog/migrating-ubers-compute-platform-to-kubernetes-a-technical-journey/">https://www.uber.com/blog/migrating-ubers-compute-platform-to-kubernetes-a-technical-journey/</a></p><h3>8. <em><a href="https://stripe.com/">Stripe</a></em> - Building interactive docs with Markdoc</h3><p>Stripe shared how they rebuilt their documentation with  <strong>Markdoc</strong>, a custom format that simplifies the authoring experience for developers. It&#8217;s an interesting tool that boosts both developer productivity and documentation quality. If you care about great docs, this one&#8217;s a must-read.</p><p><strong>Links:</strong> </p><ul><li><p><a href="https://stripe.com/blog/markdoc">https://stripe.com/blog/markdoc</a></p></li><li><p><a href="https://markdoc.dev/">https://markdoc.dev/</a></p></li></ul><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><h2>Top 25 engineering blogs</h2><blockquote><p><strong>P.S.</strong> My recommendation is <strong>not to</strong> read all these blogs. I recommend picking the ones that tackle a similar problem you&#8217;re facing or cover a topic you&#8217;re curious about.</p></blockquote><p><em><strong>Here are my favourites:</strong></em></p><ol><li><p><a href="https://engineering.fb.com/">Engineering at Meta</a> (also, <a href="https://ai.meta.com/blog/">AI Research at Meta</a>)</p></li><li><p><a href="https://aws.amazon.com/blogs/architecture/">AWS Architecture Blog</a></p></li><li><p><a href="https://www.linkedin.com/blog/engineering">LinkedIn Engineering</a></p></li><li><p><a href="https://discord.com/category/engineering">Discord: Engineering &amp; Developers</a></p></li><li><p><a href="https://github.blog/engineering/">GitHub Engineering</a></p></li><li><p><a href="https://stripe.com/blog">Stripe Blog: Engineering</a></p></li><li><p><a href="https://slack.engineering/">Slack Engineering</a></p></li><li><p><a href="https://developers.googleblog.com/">Google for Developers</a></p></li><li><p><a href="https://www.uber.com/en-RS/blog/engineering/">Uber Engineering</a></p></li><li><p><a href="https://engineering.atspotify.com/">Spotify Engineering</a></p></li><li><p><a href="https://netflixtechblog.com/">Netflix Tech Blog</a></p></li><li><p><a href="https://www.canva.dev/blog/engineering/">Canva Engineering Blog</a></p></li><li><p><a href="https://medium.com/pinterest-engineering">Pinterest Engineering</a></p></li><li><p><a href="https://blog.cloudflare.com/">The Cloudflare Blog</a></p></li><li><p><a href="https://medium.engineering/">Medium Engineering</a></p></li><li><p><a href="https://engineeringblog.yelp.com/">Yelp Engineering Blog</a></p></li><li><p><a href="https://medium.com/airbnb-engineering">Airbnb Tech Blog</a></p></li><li><p><a href="https://shopify.engineering/">Shopify Engineering Blog</a></p></li><li><p><a href="https://eng.snap.com/blog">Snap Engineering</a></p></li><li><p><a href="https://www.docker.com/blog/category/engineering/">Docker Engineering</a></p></li><li><p><a href="https://devblogs.microsoft.com/engineering-at-microsoft/">Engineering at Microsoft</a></p></li><li><p><a href="https://dropbox.tech/">Dropbox Tech Blog</a></p></li><li><p><a href="https://auth0.com/blog/engineering/">Auth0 Engineering</a></p></li><li><p><a href="https://blog.booking.com/">Booking.com Blog</a></p></li><li><p><a href="https://grafana.com/blog/">Grafana Labs Blog</a></p></li></ol><p>Let me know your favourite blogs or share your recommendations!</p><div><hr></div><p>P.S. If you&#8217;re finding this newsletter valuable, share it with a friend, and consider subscribing if you haven&#8217;t already.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[#32 How to Write Great Feedback]]></title><description><![CDATA[Most resources online provide a generic advice on writing feedback, like &#8216;be kind&#8217; or &#8216;make it useful&#8217;.]]></description><link>https://www.proactiveengineer.com/p/32-how-to-write-great-feedback</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/32-how-to-write-great-feedback</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 02 May 2025 11:30:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UR-G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most resources online provide a generic advice on writing feedback, like &#8216;be kind&#8217; or &#8216;make it useful&#8217;. While these are good basics to have, they don&#8217;t add much value for the recipients because it lacks concrete examples or focus areas that engineers can learn from. In this post, I&#8217;ll share examples on how to provide contextualised feedback and highlight the growth axes engineers should focus on.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UR-G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UR-G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png 424w, https://substackcdn.com/image/fetch/$s_!UR-G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png 848w, https://substackcdn.com/image/fetch/$s_!UR-G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png 1272w, https://substackcdn.com/image/fetch/$s_!UR-G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UR-G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png" width="1456" height="621" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:621,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:121482,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/161107258?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UR-G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png 424w, https://substackcdn.com/image/fetch/$s_!UR-G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png 848w, https://substackcdn.com/image/fetch/$s_!UR-G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png 1272w, https://substackcdn.com/image/fetch/$s_!UR-G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d3a9c23-8b39-4536-b754-bd1ec5253b59_2012x858.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>First, Feedback 101</h2><p>If you&#8217;re new to providing feedback, I recommend following one of the two guides below. This will help you structure your responses in a meaningful way to get started.</p><ul><li><p><em><strong>Situation-Behaviour-Impact (SBI)</strong></em></p></li><li><p><em><strong>Situation-Task-Action-Result (STAR)</strong></em></p></li></ul><p>There are probably 10 more guides out there, but they all follow the same idea (describe a scenario and what the person did). I wouldn&#8217;t spend time reading them all if you&#8217;re already familiar with SBI or STAR.</p><p>Now, let&#8217;s talk about giving feedback to engineers using the growth axes.</p><h2><strong>Growth Axes: Technical and Behavioural</strong></h2><p>Growth axes are an abstraction of technical and soft skills. They highlight key areas engineers should focus on and group them into two main categories. When writing feedback or doing self-assessments, it&#8217;s helpful to view these axes and see the &#8220;deltas of expansion&#8221; over time. This way instead of asking, <em>&#8220;How much did this person improve as an engineer?&#8221;</em>, you can reframe it to, <em>&#8220;How much more scope has this person taken on since last time?&#8221;.</em></p><p>First, the <strong>Technical axes</strong> measure a software engineer&#8217;s core skills and ability to solve complex problems. These include how well they understand underlying systems (knowledge depth), the creativity and complexity of their ideas (solution complexity), the quality of their code and design (quality of execution), and the challenging projects they can take on (scope).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pymR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0487c4a-674f-45c0-8dac-1546cdd73165_1112x972.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pymR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0487c4a-674f-45c0-8dac-1546cdd73165_1112x972.png 424w, https://substackcdn.com/image/fetch/$s_!pymR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0487c4a-674f-45c0-8dac-1546cdd73165_1112x972.png 848w, https://substackcdn.com/image/fetch/$s_!pymR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0487c4a-674f-45c0-8dac-1546cdd73165_1112x972.png 1272w, https://substackcdn.com/image/fetch/$s_!pymR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0487c4a-674f-45c0-8dac-1546cdd73165_1112x972.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pymR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0487c4a-674f-45c0-8dac-1546cdd73165_1112x972.png" width="372" height="325.1654676258993" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0487c4a-674f-45c0-8dac-1546cdd73165_1112x972.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:972,&quot;width&quot;:1112,&quot;resizeWidth&quot;:372,&quot;bytes&quot;:75059,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/161107258?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0487c4a-674f-45c0-8dac-1546cdd73165_1112x972.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pymR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0487c4a-674f-45c0-8dac-1546cdd73165_1112x972.png 424w, https://substackcdn.com/image/fetch/$s_!pymR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0487c4a-674f-45c0-8dac-1546cdd73165_1112x972.png 848w, https://substackcdn.com/image/fetch/$s_!pymR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0487c4a-674f-45c0-8dac-1546cdd73165_1112x972.png 1272w, https://substackcdn.com/image/fetch/$s_!pymR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0487c4a-674f-45c0-8dac-1546cdd73165_1112x972.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Second, <strong>Behavioural axes</strong> measure how someone operates within a team: how they communicate ideas and ask questions (communication), work with the team (collaboration), take initiative and introduce new ideas (influence), and demonstrate a leadership-like attitude in getting things done (ownership).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lYsx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d33a5d3-4985-470e-a625-e3eb7eff6e2f_1508x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lYsx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d33a5d3-4985-470e-a625-e3eb7eff6e2f_1508x1200.png 424w, https://substackcdn.com/image/fetch/$s_!lYsx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d33a5d3-4985-470e-a625-e3eb7eff6e2f_1508x1200.png 848w, https://substackcdn.com/image/fetch/$s_!lYsx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d33a5d3-4985-470e-a625-e3eb7eff6e2f_1508x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!lYsx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d33a5d3-4985-470e-a625-e3eb7eff6e2f_1508x1200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lYsx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d33a5d3-4985-470e-a625-e3eb7eff6e2f_1508x1200.png" width="428" height="340.69505494505495" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d33a5d3-4985-470e-a625-e3eb7eff6e2f_1508x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1159,&quot;width&quot;:1456,&quot;resizeWidth&quot;:428,&quot;bytes&quot;:100541,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/161107258?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d33a5d3-4985-470e-a625-e3eb7eff6e2f_1508x1200.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lYsx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d33a5d3-4985-470e-a625-e3eb7eff6e2f_1508x1200.png 424w, https://substackcdn.com/image/fetch/$s_!lYsx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d33a5d3-4985-470e-a625-e3eb7eff6e2f_1508x1200.png 848w, https://substackcdn.com/image/fetch/$s_!lYsx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d33a5d3-4985-470e-a625-e3eb7eff6e2f_1508x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!lYsx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d33a5d3-4985-470e-a625-e3eb7eff6e2f_1508x1200.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Using growth axes to provide feedback is an effective way to link a person&#8217;s performance to the traits most valued at work. The best type of feedback is when it helps the recipient progress in either the Technical or Behavioural axes, making sure they&#8217;re moving in the right direction and ultimately getting promoted.</p><blockquote><p>&#127775; <strong>Tip</strong>: Most engineers (especially junior-level) tend to focus heavily on the Technical axes. Highlighting the Behavioural axes in your feedback is a great way to broaden their perspective and emphasise the importance of soft skills in the workplace.</p></blockquote><p>Now, let&#8217;s go to contextualised feedback.</p><h2>Contextualised Feedback</h2><p>Contextualised feedback is just a fancy way of saying, &#8220;provide a specific example of when a particular action occurred&#8221;. It works best when you highlight a specific scenario with a<em><strong> delta</strong></em> on how to handle the scenario better next time. If they have an &#8220;Aha&#8221; moment from your feedback examples, that&#8217;s a sign of great feedback!</p><p>To illustrate, here are <strong>four</strong> examples of contextualised feedback:</p><blockquote><p>1) <strong>Alice</strong> is a strong IC, but needs to start scoping work.</p></blockquote><p><strong>&#8220;Alice</strong> did an excellent job on delivering X and supporting her team, great work! For further growth, I&#8217;d recommend she start focusing on technical planning. This is an opportunity for her to stretch her high-level thinking and think about trade-offs when designing a new feature. For example, in her next project she can start writing an <a href="https://en.wikipedia.org/wiki/Request_for_Comments">RFC</a> document to propose a solution, discuss it with the team, and break it down into tasks. This will help her build confidence in scoping more complex features&#8221;</p><blockquote><p>2) <strong>Bob</strong> did a good job on his first tech leading, but needs some pointers.</p></blockquote><p>&#8220;<strong>Bob</strong>&#8217;s project as a first-time tech lead was a success, well done to him! I noticed however some coordination challenges when managing work across a few team members. For example, I noticed in situation X and Y where he had to step in multiple times to support a junior engineer and unblock their work, which left him with little time to prepare for design meetings. While supporting the team is a great quality of a tech lead, one area for improvement is identifying tasks he can delegate to more experienced team members. This would empower them to support junior engineers with less-friction tasks, essentially creating &#8220;clones&#8221; of himself through the more experienced engineers. I&#8217;m happy to share more tips on that!&#8221;</p><blockquote><p>3) <strong>Charlie</strong> needs to further develop his technical skills.</p></blockquote><p><strong>&#8220;Charlie </strong>showed strong ownership when working on X, which I&#8217;d encourage him to keep doing! I also noticed his passion for backend engineering during our weekly catch-ups. One area for growth would be to deepen his knowledge by tackling more challenging backend tasks or leading small initiatives to improve our product&#8217;s infrastructure. This would be a great opportunity to ask the tech lead for more challenging work and guidance for improving his technical chops.&#8221;</p><blockquote><p>4) <strong>Emma</strong> is afraid of asking questions.</p></blockquote><p><strong>&#8220;Emma</strong> did an excellent job managing project X and handling comms around Y. This was really helpful for leadership&#8217;s context, so kudos to her! I did notice she sometimes hesitated to ask questions during our bi-weekly leadership calls, especially around Z, which is totally understandable. For growth, I&#8217;d encourage her to start asking questions (even basic ones) during planning meetings to clear up any miscommunication and build confidence to ask tougher questions with leadership. I&#8217;m happy to chat more and share resources that helped me with this too.&#8221;</p><div><hr></div><h2><strong>Helper Questions for Writing Feedback</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fxTd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5226ffb2-1fec-423d-b215-7b682daaa36d_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fxTd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5226ffb2-1fec-423d-b215-7b682daaa36d_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!fxTd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5226ffb2-1fec-423d-b215-7b682daaa36d_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!fxTd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5226ffb2-1fec-423d-b215-7b682daaa36d_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!fxTd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5226ffb2-1fec-423d-b215-7b682daaa36d_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fxTd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5226ffb2-1fec-423d-b215-7b682daaa36d_512x512.png" width="162" height="162" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5226ffb2-1fec-423d-b215-7b682daaa36d_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:162,&quot;bytes&quot;:94974,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/161107258?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5226ffb2-1fec-423d-b215-7b682daaa36d_512x512.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fxTd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5226ffb2-1fec-423d-b215-7b682daaa36d_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!fxTd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5226ffb2-1fec-423d-b215-7b682daaa36d_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!fxTd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5226ffb2-1fec-423d-b215-7b682daaa36d_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!fxTd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5226ffb2-1fec-423d-b215-7b682daaa36d_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>For writing great feedback, here are some of the questions I often copy-paste from my template:</p><ol><li><p><em><strong>What projects did I work on with this person?</strong></em></p><ul><li><p>(A bullet list is fine)</p></li></ul></li><li><p><em><strong>What stood out when I worked with them on each project?</strong></em></p><ul><li><p>Something cool they did or an initiative that was valuable.</p></li></ul></li><li><p><em><strong>What do I want them to do more of or keep doing?</strong></em></p><ul><li><p>This could be anything. For example, how they manage a weekly meeting. If that was useful, I&#8217;d want to reinforce the behaviour through recognition.</p></li></ul></li><li><p><em><strong>How would I score this person (1&#8211;10) on the Growth Axes?</strong></em></p><blockquote><p>Note that the goal is not to provide &#8220;official scores&#8221;, but to help understand my perspective on their strengths and areas for development.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Psdf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa2ec37-4e30-46b9-a57a-10f824287b9d_2488x1098.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Psdf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa2ec37-4e30-46b9-a57a-10f824287b9d_2488x1098.png 424w, https://substackcdn.com/image/fetch/$s_!Psdf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa2ec37-4e30-46b9-a57a-10f824287b9d_2488x1098.png 848w, https://substackcdn.com/image/fetch/$s_!Psdf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa2ec37-4e30-46b9-a57a-10f824287b9d_2488x1098.png 1272w, https://substackcdn.com/image/fetch/$s_!Psdf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa2ec37-4e30-46b9-a57a-10f824287b9d_2488x1098.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Psdf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa2ec37-4e30-46b9-a57a-10f824287b9d_2488x1098.png" width="686" height="302.9519230769231" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3fa2ec37-4e30-46b9-a57a-10f824287b9d_2488x1098.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:643,&quot;width&quot;:1456,&quot;resizeWidth&quot;:686,&quot;bytes&quot;:172629,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/161107258?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa2ec37-4e30-46b9-a57a-10f824287b9d_2488x1098.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Psdf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa2ec37-4e30-46b9-a57a-10f824287b9d_2488x1098.png 424w, https://substackcdn.com/image/fetch/$s_!Psdf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa2ec37-4e30-46b9-a57a-10f824287b9d_2488x1098.png 848w, https://substackcdn.com/image/fetch/$s_!Psdf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa2ec37-4e30-46b9-a57a-10f824287b9d_2488x1098.png 1272w, https://substackcdn.com/image/fetch/$s_!Psdf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa2ec37-4e30-46b9-a57a-10f824287b9d_2488x1098.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p><em><strong>If this were my feedback, are there any examples that would make it more helpful?</strong></em></p><ul><li><p>For example, on the &#8220;Influence&#8221; axis, this could be leading an idea or an initiative. On the &#8220;Quality of Execution&#8221; axis, this could be recommending an engineering book or do some pairing.</p></li></ul></li></ol><div><hr></div><h2>Conclusion</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oyYi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a56977-c199-49c6-873a-e987510bf5a0_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oyYi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a56977-c199-49c6-873a-e987510bf5a0_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!oyYi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a56977-c199-49c6-873a-e987510bf5a0_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!oyYi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a56977-c199-49c6-873a-e987510bf5a0_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!oyYi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a56977-c199-49c6-873a-e987510bf5a0_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oyYi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a56977-c199-49c6-873a-e987510bf5a0_512x512.png" width="138" height="138" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69a56977-c199-49c6-873a-e987510bf5a0_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:138,&quot;bytes&quot;:118805,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/161107258?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a56977-c199-49c6-873a-e987510bf5a0_512x512.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oyYi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a56977-c199-49c6-873a-e987510bf5a0_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!oyYi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a56977-c199-49c6-873a-e987510bf5a0_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!oyYi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a56977-c199-49c6-873a-e987510bf5a0_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!oyYi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a56977-c199-49c6-873a-e987510bf5a0_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Writing great feedback is an underrated skill. Every 6-12 months, you&#8217;ll be asked to write feedback for your peers, managers, and direct reports. If the process feels like hitting a brick wall each time, that&#8217;s a missed learning opportunity. Having a systematic approach reduces the friction of writing and allows you to share meaningful insights that the reader can build on. This is what drives engineers (and everyone) to grow in their careers and have meaningful conversations with their managers.</p><p>The last things I&#8217;d say is:</p><ul><li><p><strong>Be empathetic:</strong> The person receiving feedback is probably feeling just as uncomfortable as you are.</p></li><li><p><strong>Be specific:</strong> Avoid ambiguous statements. Provide a clear example with a <em>delta</em> on how to handle the situation better. (Remember, contextualised feedback)</p></li><li><p><strong>Be welcoming</strong>: Allow room for discussion. They might have something new to add or clarify.</p></li></ul><p>And that&#8217;s another made-up framework for you, ESW. &#128064;</p><p>Finally, the one piece of advice I&#8217;d give to those receiving feedback is this:</p><div class="pullquote"><p><strong>If you accept the fact that there will always be room for growth, you&#8217;ll never be afraid of feedback.</strong></p></div><p>If you&#8217;re finding this newsletter valuable, share it with a friend, and consider subscribing if you haven&#8217;t already. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[#31 Documenting Software Architecture using C4 Model]]></title><description><![CDATA[Software architecture is a dynamic system that evolves over time.]]></description><link>https://www.proactiveengineer.com/p/31-documenting-software-architecture</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/31-documenting-software-architecture</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 25 Apr 2025 11:05:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80247c79-3352-41be-bbea-541c02108e2d_1950x830.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Software architecture is a dynamic system that evolves over time. Documenting an evolving system is a common pain point for engineers because<br><strong>(A)</strong> It is time-consuming,<br><strong>(B)</strong> There&#8217;s no widely adopted standard or convention,<br><strong>(C)</strong> Engineers are more incentivised to ship code than to document.</p><p>And last one is unclear purpose. Some senior engineers and tech leads argue, &#8220;Who will benefit from these docs if we already have the mental model of the system?&#8221;</p><p>You can see why this single-point-of-failure is not sustainable.</p><p>However, most engineers hand-draw the architecture using simple diagrams (boxes and arrows) because it&#8217;s a more intuitive and straightforward approach. The C4 Model builds on this concept, providing some convention and clear boundaries to make the diagrams more consistent. It&#8217;s been adopted by engineering teams like Spotify (<a href="https://engineering.atspotify.com/2022/07/software-visualization-challenge-accepted/">blog</a>) and is referenced in several articles, including <a href="https://martinfowler.com/articles/building-infrastructure-platform.html#CommunicateYourTechnicalVision">Martin Fowler&#8217;s: Building Infrastructure Platform</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><p>In this post, I&#8217;ll explain what the C4 Model is and how it can be used for better team collaboration and documentation of software architecture.</p><div><hr></div><h1>Documenting Software Architecture</h1><p>Designing an architecture is an evolving process, not a finished product. This holds true for different types of organisations, including startups, scale-ups, and big tech. However, the driving factors can vary. It might be a scalability issue requiring architectural changes for new read/write patterns, or a new project that demands additional infrastructure (e.g., building ML pipelines, etc.).</p><p>Keeping the architecture documentation up-to-date without a clear framework is challenging for engineers, especially when they&#8217;re busy with other tasks like project scoping and feature development.</p><p>As a byproduct of missing frameworks, we default to using many shapes (boxes,  circles, etc.) with many arrows to model the systems&#8217; infra and code structure in multiple diagrams.</p><p>Here are some examples below:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CRvL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98803a6d-892d-4ac1-8c08-bc73767effe6_724x551.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CRvL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98803a6d-892d-4ac1-8c08-bc73767effe6_724x551.png 424w, https://substackcdn.com/image/fetch/$s_!CRvL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98803a6d-892d-4ac1-8c08-bc73767effe6_724x551.png 848w, https://substackcdn.com/image/fetch/$s_!CRvL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98803a6d-892d-4ac1-8c08-bc73767effe6_724x551.png 1272w, https://substackcdn.com/image/fetch/$s_!CRvL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98803a6d-892d-4ac1-8c08-bc73767effe6_724x551.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CRvL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98803a6d-892d-4ac1-8c08-bc73767effe6_724x551.png" width="724" height="551" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98803a6d-892d-4ac1-8c08-bc73767effe6_724x551.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:551,&quot;width&quot;:724,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:793875,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/159424908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98803a6d-892d-4ac1-8c08-bc73767effe6_724x551.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CRvL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98803a6d-892d-4ac1-8c08-bc73767effe6_724x551.png 424w, https://substackcdn.com/image/fetch/$s_!CRvL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98803a6d-892d-4ac1-8c08-bc73767effe6_724x551.png 848w, https://substackcdn.com/image/fetch/$s_!CRvL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98803a6d-892d-4ac1-8c08-bc73767effe6_724x551.png 1272w, https://substackcdn.com/image/fetch/$s_!CRvL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98803a6d-892d-4ac1-8c08-bc73767effe6_724x551.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Courtesy of https://c4model.com/introduction</figcaption></figure></div><p>Adjacent to the problem of documenting architectural designs is the challenge of documenting software design (i.e., OOP and design patterns).</p><p>In the 2000s, the <a href="https://en.wikipedia.org/wiki/Unified_Modeling_Language">Unified Modeling Language (UML)</a> was the go-to approach for software design. UML was introduced in the 1990s as a general-purpose language to visualise a software design, break down its internal components in a Class structure, and model their relationship.</p><p>However, it was built to solve an outdated problem. Its main focus was modeling class relationships in source code&#8212;which worked well for Monolith architecture and academic projects&#8212;but it relied on strict rules and notations for relationships and associations. For most engineers, it quickly became too complex to follow and use, especially in modern software design. </p><blockquote><p>In software design/OOP interviews, I never expected candidates to use UML; simple boxes and arrows were good enough.</p></blockquote><p>Here&#8217;s a classic example of modeling a banking system using UML. Notice the annotations and arrow types used to define specific relationships.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TB70!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68189d-1472-467a-a521-e7fcbdf98dc0_1400x991.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TB70!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68189d-1472-467a-a521-e7fcbdf98dc0_1400x991.png 424w, https://substackcdn.com/image/fetch/$s_!TB70!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68189d-1472-467a-a521-e7fcbdf98dc0_1400x991.png 848w, https://substackcdn.com/image/fetch/$s_!TB70!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68189d-1472-467a-a521-e7fcbdf98dc0_1400x991.png 1272w, https://substackcdn.com/image/fetch/$s_!TB70!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68189d-1472-467a-a521-e7fcbdf98dc0_1400x991.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TB70!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68189d-1472-467a-a521-e7fcbdf98dc0_1400x991.png" width="540" height="382.24285714285713" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b68189d-1472-467a-a521-e7fcbdf98dc0_1400x991.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:991,&quot;width&quot;:1400,&quot;resizeWidth&quot;:540,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;UML Class Diagrams Tutorial, Step by Step | by Salma | Medium&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="UML Class Diagrams Tutorial, Step by Step | by Salma | Medium" title="UML Class Diagrams Tutorial, Step by Step | by Salma | Medium" srcset="https://substackcdn.com/image/fetch/$s_!TB70!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68189d-1472-467a-a521-e7fcbdf98dc0_1400x991.png 424w, https://substackcdn.com/image/fetch/$s_!TB70!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68189d-1472-467a-a521-e7fcbdf98dc0_1400x991.png 848w, https://substackcdn.com/image/fetch/$s_!TB70!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68189d-1472-467a-a521-e7fcbdf98dc0_1400x991.png 1272w, https://substackcdn.com/image/fetch/$s_!TB70!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b68189d-1472-467a-a521-e7fcbdf98dc0_1400x991.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">UML for a Banking System</figcaption></figure></div><div><hr></div><h1><strong>The C4 Model</strong></h1><p>So what is the C4 model?</p><p>It&#8217;s a set of hierarchical abstractions that describe software architecture using simple graphical notation. C4 stands for <strong>C</strong>ontext, <strong>C</strong>ontainer, <strong>C</strong>omponent, and <strong>C</strong>ode, each representing a diagram at a different level of abstraction.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l78V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc686f266-b21f-48c0-aee1-d87118d2e7f3_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l78V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc686f266-b21f-48c0-aee1-d87118d2e7f3_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!l78V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc686f266-b21f-48c0-aee1-d87118d2e7f3_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!l78V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc686f266-b21f-48c0-aee1-d87118d2e7f3_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!l78V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc686f266-b21f-48c0-aee1-d87118d2e7f3_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l78V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc686f266-b21f-48c0-aee1-d87118d2e7f3_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c686f266-b21f-48c0-aee1-d87118d2e7f3_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The abstractions behind the C4 model&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The abstractions behind the C4 model" title="The abstractions behind the C4 model" srcset="https://substackcdn.com/image/fetch/$s_!l78V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc686f266-b21f-48c0-aee1-d87118d2e7f3_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!l78V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc686f266-b21f-48c0-aee1-d87118d2e7f3_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!l78V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc686f266-b21f-48c0-aee1-d87118d2e7f3_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!l78V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc686f266-b21f-48c0-aee1-d87118d2e7f3_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">reference: https://c4model.com/abstractions</figcaption></figure></div><p>The idea is simple and tooling-independent. The <strong>Context</strong> view provides a high-level overview of the system and its interactions with external systems (or internal systems we don&#8217;t have context on). The <strong>Container</strong> is a view of the software building blocks, such as applications and databases, and how they communicate. The <strong>Component</strong> view is a breakdown of containers into smaller detailed flows (e.g., CRUD components). The <strong>Code</strong> view is the implementation details, focusing on classes and code structure (similar to UML). This multi-layered view supports the needs of different stakeholders&#8212;from architects and developers to product managers and analysts&#8212;by building a clear, shared understanding of the system&#8217;s architecture.</p><blockquote><p>Think of the <strong>Context</strong> as viewing a country in Google Maps: you can zoom in to explore a city within the country (<strong>Container</strong>), zoom in further to a specific area in the city (<strong>Component</strong>), and finally zoom all the way in to a specific street (<strong>Code</strong>). </p></blockquote><p>This layered approach is what the C4 Model provides. No complex notations, only hierarchical diagrams with clear boundaries.</p><p>For more details, I&#8217;d recommend watching this latest talk by Simon Brown where he explains why C4 Model exists:</p><div id="youtube2-mqoU2C-USP0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;mqoU2C-USP0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/mqoU2C-USP0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>How to use the C4 Model</h2><p>With any new approach, I&#8217;d start simple. The goal isn&#8217;t to enforce a diagramming convention on the engineering team, but rather to test and explore the intuition behind explaining an architecture using the layering approach. This could involve modeling one microservice or two services, where one depends on the other. I&#8217;d recommend trying a top-down design approach. Here&#8217;s a reference diagram as a recap.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SQcq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80247c79-3352-41be-bbea-541c02108e2d_1950x830.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SQcq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80247c79-3352-41be-bbea-541c02108e2d_1950x830.png 424w, https://substackcdn.com/image/fetch/$s_!SQcq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80247c79-3352-41be-bbea-541c02108e2d_1950x830.png 848w, https://substackcdn.com/image/fetch/$s_!SQcq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80247c79-3352-41be-bbea-541c02108e2d_1950x830.png 1272w, https://substackcdn.com/image/fetch/$s_!SQcq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80247c79-3352-41be-bbea-541c02108e2d_1950x830.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SQcq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80247c79-3352-41be-bbea-541c02108e2d_1950x830.png" width="1456" height="620" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80247c79-3352-41be-bbea-541c02108e2d_1950x830.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:620,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:222703,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/159424908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80247c79-3352-41be-bbea-541c02108e2d_1950x830.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SQcq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80247c79-3352-41be-bbea-541c02108e2d_1950x830.png 424w, https://substackcdn.com/image/fetch/$s_!SQcq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80247c79-3352-41be-bbea-541c02108e2d_1950x830.png 848w, https://substackcdn.com/image/fetch/$s_!SQcq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80247c79-3352-41be-bbea-541c02108e2d_1950x830.png 1272w, https://substackcdn.com/image/fetch/$s_!SQcq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80247c79-3352-41be-bbea-541c02108e2d_1950x830.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Before starting this exercise, here are some questions I&#8217;d ask myself:</p><ul><li><p>Do I understand the boundaries of each diagram (Context, Container, Component, Code)?</p></li><li><p>Am I able to identify which part belongs to which diagram?</p></li><li><p>Am I abstracting too much or over-explaining my diagrams?</p></li><li><p>Would another person understand the intention behind my diagrams?</p></li><li><p>Is it easier to read compared to our existing diagrams?</p></li></ul><div><hr></div><h2>Wrap up</h2><p>Software documentation is a bottleneck for many engineering teams. The goal of overcoming this bottleneck is to quickly build a mental model of a system, making it easier to introduce new ideas and fully understand how everything fits together.</p><p>Having a standard process like C4 for documenting and updating architecture improves decision-making, increases collaboration, facilitates knowledge sharing, and provides smooth onboarding. C4 is tooling-agnostic and easy to follow, making it an excellent fit for any organisation.</p><p>P.S. If you enjoyed reading this post, you might also be interested in reading this post on developer documentation.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;1e98a52a-fdbd-47d5-a63c-9ddbd765ef7c&quot;,&quot;caption&quot;:&quot;People who&#8217;ve worked with me before know that I&#8217;m a documentation enthusiast. I believe that solid developer documentation for a product can be a major selling point for anyone using or purchasing a solution.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#19 How To Write Better Developer Docs&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:27096115,&quot;name&quot;:&quot;Shehab Abdel-Salam&quot;,&quot;bio&quot;:&quot;On a mission to help engineers become proactive leaders. Senior Software Engineer @ Proofpoint | Instructor | Author of The Proactive Engineer newsletter&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd029e537-6372-42e5-a999-c25688df6be4_2036x2036.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-01-24T09:45:10.063Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6927b055-cd7a-42ed-8758-1bad7fa61bd2_2444x890.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.proactiveengineer.com/p/19-how-to-write-better-docs&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:153803715,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:2,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Proactive Engineer&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1077f3-b9ff-4f78-8295-f2d8235ec5b0_182x182.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#129482; IcePanel </h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vuAM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b7fbdd-fd02-4c99-8566-2e2eda5a982a_1424x388.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vuAM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b7fbdd-fd02-4c99-8566-2e2eda5a982a_1424x388.png 424w, https://substackcdn.com/image/fetch/$s_!vuAM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b7fbdd-fd02-4c99-8566-2e2eda5a982a_1424x388.png 848w, https://substackcdn.com/image/fetch/$s_!vuAM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b7fbdd-fd02-4c99-8566-2e2eda5a982a_1424x388.png 1272w, https://substackcdn.com/image/fetch/$s_!vuAM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b7fbdd-fd02-4c99-8566-2e2eda5a982a_1424x388.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vuAM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b7fbdd-fd02-4c99-8566-2e2eda5a982a_1424x388.png" width="532" height="144.95505617977528" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3b7fbdd-fd02-4c99-8566-2e2eda5a982a_1424x388.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:388,&quot;width&quot;:1424,&quot;resizeWidth&quot;:532,&quot;bytes&quot;:28904,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/159424908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b7fbdd-fd02-4c99-8566-2e2eda5a982a_1424x388.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!vuAM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b7fbdd-fd02-4c99-8566-2e2eda5a982a_1424x388.png 424w, https://substackcdn.com/image/fetch/$s_!vuAM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b7fbdd-fd02-4c99-8566-2e2eda5a982a_1424x388.png 848w, https://substackcdn.com/image/fetch/$s_!vuAM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b7fbdd-fd02-4c99-8566-2e2eda5a982a_1424x388.png 1272w, https://substackcdn.com/image/fetch/$s_!vuAM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3b7fbdd-fd02-4c99-8566-2e2eda5a982a_1424x388.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>If you&#8217;d like to use the C4 Model, I recommend checking out <a href="https://icepanel.io/">IcePanel</a>. </p><p>IcePanel is a collaborative diagramming and modelling tool for software architecture based on the C4 model.</p><p>It&#8217;s a lightweight and powerful tool to help you visualise your architecture at different levels of abstraction with a single source of truth. Great for all audiences, from technical (engineers, architects) to non-technical (product and business people).</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://icepanel.io/&quot;,&quot;text&quot;:&quot;Design your architecture&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://icepanel.io/"><span>Design your architecture</span></a></p><div><hr></div><p>If you found this post valuable, share it with a friend and consider subscribing if you haven&#8217;t already.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[#30 Six Traits That Make a Great Founding Engineer]]></title><description><![CDATA[Traits That I Find Most Important In a Founding Engineer]]></description><link>https://www.proactiveengineer.com/p/30-six-traits-that-make-a-great-founding</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/30-six-traits-that-make-a-great-founding</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 11 Apr 2025 11:40:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mQF1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A <strong>Founding Engineer</strong> is one of the first technical hires at an early-stage startup. They set the engineering tone for the company and serve as the critical link between the founder(s)&#8217; idea and a fully operational product. In this post, I&#8217;ll cover six traits I&#8217;ve found valuable when working with founding engineers.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><div class="pullquote"><p>First, what is a Founding Engineer?</p></div><p>It is a general term used for the first engineers at a startup. They are the first hires made by the C-suite to work on the business idea and help transform it into a viable solution (very high-level here).</p><p>Here&#8217;s another explanation I found useful on Medium:</p><blockquote><p>&#8220;They are the ones that got the product off the ground and into the hands of the customers. They designed and developed significant portions of the codebase from scratch, and know the inner workings of the code better than anyone. Beyond engineering, they joined the company at the riskiest point and tend to have higher equity than following hires in comparable positions.&#8221; <a href="https://medium.com/@alexwurts/how-to-be-a-founding-engineer-6209618115d4">Source</a></p></blockquote><p><em><strong>P.S: A Founding Engineer is not a CTO.</strong></em> </p><p>In some cases, especially at the start, a CTO might operate as a Founding Engineer if there are only a few people (e.g., 2-5), but they will eventually need to delegate that responsibility to a full-time engineer who will serve as the product architect and the coding machine.</p><p>With that context, let&#8217;s talk about some key traits of Founding Engineers and how they operate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mQF1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mQF1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png 424w, https://substackcdn.com/image/fetch/$s_!mQF1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png 848w, https://substackcdn.com/image/fetch/$s_!mQF1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png 1272w, https://substackcdn.com/image/fetch/$s_!mQF1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mQF1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png" width="1456" height="844" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:844,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:136895,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/161081163?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mQF1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png 424w, https://substackcdn.com/image/fetch/$s_!mQF1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png 848w, https://substackcdn.com/image/fetch/$s_!mQF1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png 1272w, https://substackcdn.com/image/fetch/$s_!mQF1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c7cd51-4564-4010-a494-8dbcccdd7831_1512x876.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>#1 Plan for the Punches &#129354;</h2><p>Joining an early-stage startup as a founding engineer is a high-risk move that requires some calculation. Those who join and are prepared for <em><strong>some</strong></em> personal / professional punches are the ones who can make great things happen.</p><p><em>Some of the punches are:</em></p><ul><li><p>Working with a tight budget.</p></li><li><p>Weekend calls to fix broken deployments.</p></li><li><p>Customer calls not going great.</p></li><li><p>Struggling with customer acquisition or growth.</p></li><li><p>Rewriting significant parts of the codebase.</p></li><li><p>A family member not feeling well.</p></li><li><p>Moving between houses.</p></li></ul><p>Reality is, this isn&#8217;t a 9-to-5 cushy tech job. It&#8217;s a critical role that requires someone who is passionate about the problem they&#8217;re solving and making a significant impact. Founding engineers know this upfront because they&#8217;re in it for the long game, so they plan accordingly. </p><p>They also make sure they&#8217;re getting a good base salary to support their personal life so they&#8217;re not distracted midway.</p><h2>#2 Deep Technical Skills &#129504;</h2><p>Founding engineers need to be technically strong, I&#8217;m talking <strong>A+</strong> engineers. They operate as generalist software engineers where they handle the backend, frontend, infrastructure, and QA work (with some limitations). These are people who are skilled at solving problems and enjoy a new challenge. Either they know how to solve a specific problem or know how to find a solution for it.</p><p>They&#8217;re also responsible for later hiring other engineers. They define the engineering culture and enforce good software engineering practices. They can also attract like-minded individuals through referrals to join their team at the growth stage.</p><blockquote><p>Hiring <strong>A+</strong> founding engineers increases the likelihood of building an <strong>A+</strong> team.</p></blockquote><h2>#3 Hard Conversations &#128483;&#65039;</h2><p>Being able to have tough conversations is valuable for founding engineers. They&#8217;ll need to talk about crucial topics, whether it&#8217;s with early customers or the founders.</p><p>This could be about equity, salaries, product direction, hiring, budgeting, and more.</p><p>A common situation for founding engineers is receiving customer feedback. If customers don&#8217;t like their prototype demo or the latest feature, that&#8217;s perfectly fine. It&#8217;s a valuable data point to improve from. What you want is <strong>honest</strong> feedback. Politeness can create a bad dataset, which is unhelpful in early-stage product development.</p><p>Those who can ask the hard questions and handle the tough responses, stand out. This personality trait creates a culture of transparency and honesty within the team, and that&#8217;s something all stakeholders highly respect.</p><h2>#4 Good Information Diet &#128732;</h2><p>Founding engineers aren&#8217;t absorbed in daily startup news. They protect large blocks of their time for deep work.</p><p>They focus on solving <em>their</em> startup&#8217;s problems rather than watching others solve <em>theirs</em>. The engineers behind <a href="https://openai.com/">OpenAI</a>, <a href="https://lovable.dev/">Lovable</a>, and <a href="https://www.cursor.com/">Cursor</a> aren&#8217;t spending their time on Twitter (X) or Hacker News reading about DeepSeek or what other <a href="https://en.wikipedia.org/wiki/Agentic_AI">Agentic AI</a> startups are doing. They&#8217;re heads down, focusing on scaling and improving their products.</p><blockquote><p>A good habit of a founding engineer is being conscious of their news consumption (<em><strong>online</strong></em>) and leave room for deep thinking and creativity (<em><strong>offline</strong></em>).</p></blockquote><h2>#5 Fight or Flight &#9823;&#65039;</h2><p>This may sound like common sense, but founding engineers need to double down on the company vision. They&#8217;re not shaken by the first bump on a bumpy road. They also understand what it means for businesses to be <strong>fight-or-flight</strong> mode.</p><blockquote><p><strong>What is fight-or-flight?</strong></p></blockquote><p>In a business context, the <em>flight</em> strategy is about differentiation, offering a <strong>unique value</strong> to new customers rather than directly competing for existing customers with relatively the same value. The <em>fight</em> strategy on the other hand, involves competing with other competitors by offering a <strong>similar value</strong> to customers with <em>some</em> different parameters (think AWS vs GCP for cloud offerings). </p><p>Companies that follow the<em> flight </em>strategy look for under served market or create entirely new spaces (often called &#8220;<a href="https://hbr.org/2004/10/blue-ocean-strategy">blue oceans</a>&#8221;) where competition is minimal. They focus on innovating in these new spaces and serving new markets without intense competition.</p><blockquote><p>Let&#8217;s take an example of a cloud observability startup (<a href="https://www.honeycomb.io/">Honeycomb</a> vs <a href="https://aws.amazon.com/">AWS</a>)</p></blockquote><p>Competing with AWS is a classic <em><strong>fight</strong></em> strategy. AWS provides observability solutions (e.g., CloudWatch) that offer metrics, logs, and traces out of the box. Some companies focus on competing with them by offering better dashboards (e.g., AI-powered solutions) or better pricing, but they&#8217;re still playing the same game. Some businesses follow this approach to compete for existing customers, and that&#8217;s okay.</p><p>However, Honeycomb (founded in 2016) took the <em><strong>flight</strong></em> approach. Instead of building &#8220;yet another monitoring tool&#8221;, they introduced a novel approach to observability. They provide an observability platform that empowers engineers to better understand their systems and know <em><strong>why</strong></em> things are happening, not just <em><strong>what</strong></em> happened.</p><p>This <em>flight</em> strategy of differentiation allowed them to avoid directly competing with AWS. Instead, they focused on defining what great observability looks like and how their product delivers it.</p><blockquote><p><strong>&#128221; Quick note on fight-or-flight</strong></p></blockquote><p>Founding engineers aren&#8217;t typically responsible for this, as it aligns more with a product person (e.g., CEO/CPO). However, knowing this in general can help provide context for the environment in which founding engineers are operating in.</p><p><em><strong>Remember:</strong></em> <a href="https://www.suptask.com/blog/brief-history-of-slack">Slack was originally a gaming company</a>. They didn&#8217;t compete for a better gaming company (<em>fight</em>), they pivoted to become a multibillion-dollar B2B messaging platform (<em>flight)</em>.</p><h2>#6 Expectation Setting &#129309;</h2><p>This one is short and sweet. Founding engineers know how to manage expectations with both technical and non-technical stakeholders. They&#8217;ll be the first ones asked:</p><ul><li><p>Why the product is behind the technical roadmap.</p></li><li><p>When a specific feature will be available.</p></li><li><p>Why a particular idea isn&#8217;t possible.</p></li><li><p>How we can make some idea possible.</p></li></ul><p>Being able to manage different stakeholders and set expectations is important for the first engineers writing the code from scratch. </p><div><hr></div><h2>Wrap up</h2><p>Hiring a founding engineer is not the same as hiring a software engineer at a big tech company (i.e., LeetCode). This process typically happens through strong referrals or candidates demonstrating deep technical expertise from previous projects. Hiring a founding engineer also requires immense trust. That&#8217;s why most founders first reach out to their network to identify a potential match with someone they&#8217;ve worked with before and ask them to join their team.</p><p>Would I recommend taking the Founding Engineer path? Spoiler: it <em><strong>really</strong></em> depends.</p><p>But in general, I admire those who take it. These are engineers with impressive scars from building products who have lots of stories worth listening to.</p><div><hr></div><p>If you&#8217;re finding this newsletter valuable, share it with a friend, and consider subscribing if you haven&#8217;t already. One email every Friday at 12PM GMT. &#129309;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[#29 How to Deliver a Backlog Refinement Session]]></title><description><![CDATA[Most engineering teams use Scrum or Kanban to track their work.]]></description><link>https://www.proactiveengineer.com/p/29-how-to-deliver-a-backlog-refinement</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/29-how-to-deliver-a-backlog-refinement</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 04 Apr 2025 11:06:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most engineering teams use <a href="https://en.wikipedia.org/wiki/Scrum_(software_development)">Scrum</a> or <a href="https://www.atlassian.com/agile/kanban">Kanban</a> to track their work. Regardless of the approach, teams need to plan ahead for new projects or features that the business expects. One such activity is backlog refinement sessions. This is often led by a tech lead or senior IC, with input from the PM for product sense. In this post, I&#8217;ll share my strategy for running backlog refinement sessions effectively.</p><h2>What is backlog refinement meeting?</h2><p>It is a recurring meeting where the engineering team and the PM review the product backlog, add new or remove outdated tasks, and reprioritise for upcoming sprints.</p><p><em>Think of it like this: the input of the meeting is a list of unordered tasks, and the output is a priority queue where the sort key is importance score.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8mV3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8mV3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png 424w, https://substackcdn.com/image/fetch/$s_!8mV3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png 848w, https://substackcdn.com/image/fetch/$s_!8mV3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png 1272w, https://substackcdn.com/image/fetch/$s_!8mV3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8mV3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png" width="1456" height="659" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:659,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:121787,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157737774?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8mV3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png 424w, https://substackcdn.com/image/fetch/$s_!8mV3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png 848w, https://substackcdn.com/image/fetch/$s_!8mV3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png 1272w, https://substackcdn.com/image/fetch/$s_!8mV3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8725c68-c195-4644-90aa-4863c1e1d1a7_1896x858.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>How to deliver a backlog refinement meeting?</h2><p>Refinement sessions are typically led by Tech Leads (Senior or Staff). However, smaller projects or feature planning can also be led by Mid-level engineers, requiring efforts of ~1-2 engineers.</p><p>First, let&#8217;s clarify what the meeting <strong>should not</strong> be about.</p><div class="pullquote"><p><em><strong>&#9888;&#65039; It is not a design proposal meeting.</strong></em></p></div><p>If new projects require scoping and design for team buy-in, it&#8217;s better to have that as a separate meeting. The mechanics of the two meetings can be similar, but the outputs are quite different.</p><p>Design proposal meetings involve in-depth engineering discussions, exploring alternatives, and gathering feedback from the team. The next steps from this meeting could be either for the author to explore other options and check back (possibly with another design meeting if needed), or to reach a consensus on a specific design and start breaking it down into tasks (i.e. backlog refinement meeting).</p><div class="pullquote"><p><em><strong>Here are four steps for an effective session</strong></em></p></div><p>For (operating) tech leads, your goal is to clearly communicate the tasks the team should focus on. A good way to prepare the agenda is by writing them down in advance, following this template.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6kKr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fe39a8-ace3-4bf2-9003-9fdcce87dc9c_940x1110.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6kKr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fe39a8-ace3-4bf2-9003-9fdcce87dc9c_940x1110.png 424w, https://substackcdn.com/image/fetch/$s_!6kKr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fe39a8-ace3-4bf2-9003-9fdcce87dc9c_940x1110.png 848w, https://substackcdn.com/image/fetch/$s_!6kKr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fe39a8-ace3-4bf2-9003-9fdcce87dc9c_940x1110.png 1272w, https://substackcdn.com/image/fetch/$s_!6kKr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fe39a8-ace3-4bf2-9003-9fdcce87dc9c_940x1110.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6kKr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fe39a8-ace3-4bf2-9003-9fdcce87dc9c_940x1110.png" width="340" height="401.48936170212767" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94fe39a8-ace3-4bf2-9003-9fdcce87dc9c_940x1110.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1110,&quot;width&quot;:940,&quot;resizeWidth&quot;:340,&quot;bytes&quot;:96626,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157737774?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fe39a8-ace3-4bf2-9003-9fdcce87dc9c_940x1110.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6kKr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fe39a8-ace3-4bf2-9003-9fdcce87dc9c_940x1110.png 424w, https://substackcdn.com/image/fetch/$s_!6kKr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fe39a8-ace3-4bf2-9003-9fdcce87dc9c_940x1110.png 848w, https://substackcdn.com/image/fetch/$s_!6kKr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fe39a8-ace3-4bf2-9003-9fdcce87dc9c_940x1110.png 1272w, https://substackcdn.com/image/fetch/$s_!6kKr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fe39a8-ace3-4bf2-9003-9fdcce87dc9c_940x1110.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em><strong>Here&#8217;s the breakdown for each task:</strong></em></p><p><strong>I. Description:</strong> Context of the project: why this task exists and what we aim to achieve.</p><p><strong>II. Technical Notes:</strong> Suggestions or ideas for implementation details the assignee should keep in mind. Links to existing designs or source code. </p><p><strong>III. Acceptance Criteria (AC):</strong> When can we mark this as done? Have we tested this? Have we shipped this?</p><p><strong>IV. Points/Days: </strong>How important is this task to the business? How many points or days should we estimate?</p><blockquote><p>&#127775; <strong>Tip:</strong> Product Managers highly appreciate this metric. It helps them manage expectations outside the team and also derive some clarity from the dev team.</p></blockquote><p><strong>V. Deadline (optional):</strong> Is this time-sensitive? Are users expecting it by a specific date?</p><p>Your agenda should look like this before the meeting:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UneY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0cbfe1-537d-44aa-b5c5-586dc136aa92_2494x770.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UneY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0cbfe1-537d-44aa-b5c5-586dc136aa92_2494x770.png 424w, https://substackcdn.com/image/fetch/$s_!UneY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0cbfe1-537d-44aa-b5c5-586dc136aa92_2494x770.png 848w, https://substackcdn.com/image/fetch/$s_!UneY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0cbfe1-537d-44aa-b5c5-586dc136aa92_2494x770.png 1272w, https://substackcdn.com/image/fetch/$s_!UneY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0cbfe1-537d-44aa-b5c5-586dc136aa92_2494x770.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UneY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0cbfe1-537d-44aa-b5c5-586dc136aa92_2494x770.png" width="1456" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da0cbfe1-537d-44aa-b5c5-586dc136aa92_2494x770.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:154038,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157737774?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0cbfe1-537d-44aa-b5c5-586dc136aa92_2494x770.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!UneY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0cbfe1-537d-44aa-b5c5-586dc136aa92_2494x770.png 424w, https://substackcdn.com/image/fetch/$s_!UneY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0cbfe1-537d-44aa-b5c5-586dc136aa92_2494x770.png 848w, https://substackcdn.com/image/fetch/$s_!UneY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0cbfe1-537d-44aa-b5c5-586dc136aa92_2494x770.png 1272w, https://substackcdn.com/image/fetch/$s_!UneY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda0cbfe1-537d-44aa-b5c5-586dc136aa92_2494x770.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>How to run the meeting:</p><ol><li><p><strong>Set the context upfront.</strong></p></li></ol><p>If your team is working on multiple work-streams, specify upfront which type of work you want to refine. You might be refining work from two sub-projects or one highly important feature. Either way, make it clear at the start what you expect your team to review.</p><ol start="2"><li><p><strong>Walkthrough each task on the backlog.</strong></p></li></ol><p>Go through each task, explain its purpose at a high level (description), and what you expect the assignee to do (acceptance criteria). Highlight the technical notes (when applicable) and ensure that relevant resources are added for the assignee. Keep task descriptions short and concise as well as your explanation (~1-2 minutes).</p><ol start="3"><li><p><strong>Allow room for questions, modify if needed.</strong></p></li></ol><p>After going through each task, ask if the team has any questions. Leave some space for that <em>uncomfortable</em> silence before someone speaks up. This gives team members time to re-scan the task and call out any details. If there are questions or notes, make sure they&#8217;re resolved and added to the task if relevant (e.g., additional technical notes or a follow-up task).</p><ol start="4"><li><p><strong>Story-point and agree on estimates.</strong></p></li></ol><p>If everything is clear, ask the team for effort estimates (e.g., <a href="https://asana.com/resources/planning-poker">poker planning</a>). This can reveal new insights, like some team members flagging risks by estimating high or everyone agrees this is a quick fix. Make sure each task the team reviews is story-pointed.</p><p><strong>Note:</strong> You don&#8217;t have to use the &#8220;traditional agile estimation&#8221; holistically. An estimate can simply be 1/2 day or 1 day of engineering time. Follow your team&#8217;s preference for the estimates or metrics that work best for them.</p><div class="pullquote"><p>Repeat steps 2-4 till the end of the session.</p></div><p><strong>P.S.</strong> It&#8217;s okay if not all task are fully defined &#8212; as long as they include some details to guide the conversation and allow you to fill in missing details during the session.</p><p><strong>P.P.S.</strong> Your team might work with more or less metadata on each backlog item. Use this as inspiration if you&#8217;re just starting out, and improve the template as you go.</p><div><hr></div><h2>Wrap up</h2><p>Like anything else, getting good at delivering refinement sessions takes practice. Tech leads aren&#8217;t naturally skilled at it&#8212;they were once junior engineers who learned from their tech leads running these sessions, gradually took on feature planning with increasing complexity, and eventually became comfortable scoping and leading larger projects.</p><p>A sign of a growing engineer is one who <em><strong>proactively</strong></em> asks to scope a specific feature, understands the technical challenges, and can deliver a clear roadmap for technical delivery through well-refined backlog items. This approach of dry-run tech leading is a strong signal of someone operating at the next level.</p><p><em><strong>For recap, the four steps are:</strong></em></p><ol><li><p><em>Set the context upfront.</em></p></li><li><p><em>Walk through each task on the backlog.</em></p></li><li><p><em>Allow room for questions and modify if needed.</em></p></li><li><p><em>Story-point and agree on estimates.</em></p></li></ol><p>Rinse and repeat, and you&#8217;ll noticeably get better. &#128703;</p><div><hr></div><p>If you&#8217;re enjoying the newsletter, share it with a friend, and consider subscribing if you haven&#8217;t already. You can also add a testimonial through this <em><strong><a href="https://reviews.proactiveengineer.com/r/review">1-question form</a></strong></em>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><p>Here are some testimonials from our readers &#129782;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BQdP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BQdP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 424w, https://substackcdn.com/image/fetch/$s_!BQdP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 848w, https://substackcdn.com/image/fetch/$s_!BQdP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 1272w, https://substackcdn.com/image/fetch/$s_!BQdP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BQdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png" width="1456" height="928" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:928,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BQdP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 424w, https://substackcdn.com/image/fetch/$s_!BQdP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 848w, https://substackcdn.com/image/fetch/$s_!BQdP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 1272w, https://substackcdn.com/image/fetch/$s_!BQdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[#28 How Proactive Engineers Operate in Solo, Pair, and Mob Programming]]></title><description><![CDATA[What are they, and when should you use each?]]></description><link>https://www.proactiveengineer.com/p/27-solo-vs-pair-vs-mob-programming</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/27-solo-vs-pair-vs-mob-programming</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 28 Mar 2025 12:04:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b91f78-911c-4d77-993a-acf0b9b81c77_472x424.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Engineering teams have their own ways of working&#8212;whether it&#8217;s implementing new features, troubleshooting problems, or brainstorming initiatives. Some tasks can be handled by a solo engineer with uninterrupted focus time (solo programming), while others require two engineers to &#8220;talk rubber duck&#8221; to each other (pair programming), and some need input from the entire team (mob programming).</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><p>Let&#8217;s unpack each one and explore how proactive engineers approach them.</p><div><hr></div><h2>I. Solo Programming</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6TbA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4a314d-3557-4bb7-9a05-d3b835d324a8_608x595.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6TbA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4a314d-3557-4bb7-9a05-d3b835d324a8_608x595.png 424w, https://substackcdn.com/image/fetch/$s_!6TbA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4a314d-3557-4bb7-9a05-d3b835d324a8_608x595.png 848w, https://substackcdn.com/image/fetch/$s_!6TbA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4a314d-3557-4bb7-9a05-d3b835d324a8_608x595.png 1272w, https://substackcdn.com/image/fetch/$s_!6TbA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4a314d-3557-4bb7-9a05-d3b835d324a8_608x595.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6TbA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4a314d-3557-4bb7-9a05-d3b835d324a8_608x595.png" width="378" height="369.91776315789474" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d4a314d-3557-4bb7-9a05-d3b835d324a8_608x595.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:595,&quot;width&quot;:608,&quot;resizeWidth&quot;:378,&quot;bytes&quot;:236982,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6TbA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4a314d-3557-4bb7-9a05-d3b835d324a8_608x595.png 424w, https://substackcdn.com/image/fetch/$s_!6TbA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4a314d-3557-4bb7-9a05-d3b835d324a8_608x595.png 848w, https://substackcdn.com/image/fetch/$s_!6TbA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4a314d-3557-4bb7-9a05-d3b835d324a8_608x595.png 1272w, https://substackcdn.com/image/fetch/$s_!6TbA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4a314d-3557-4bb7-9a05-d3b835d324a8_608x595.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Engineers who can take on any task and execute it solo are often regarded as strong ICs. It&#8217;s an opportunity to demonstrate ownership and accountability when working on a specific task. Examples include:</p><ul><li><p>For junior-level, coding a well-defined task.</p></li><li><p>For mid-level, debugging a deployment issue.</p></li><li><p>For senior-level, designing a new service.</p></li></ul><blockquote><p>Solo programming is the default for engineers working on a task in deep focus.</p></blockquote><p>Contractor software engineers work in solo mode 99% of the time. Some companies hire engineering teams made up mostly (if not entirely) of senior ICs. While this approach can increase the bandwidth for complex technical delivery, it reduces the opportunities to grow and mentor less-experienced engineers.</p><p><em><strong>Pros of Solo:</strong></em></p><ul><li><p><strong>Learning:</strong> Encourages research and critical thinking to find the best solution.</p></li><li><p><strong>Ownership:</strong> Demonstrates responsibility for a task or project.</p></li></ul><p><em><strong>Cons of Solo:</strong></em></p><ul><li><p><strong>Limited perspective:</strong> Solutions may be influenced by personal biases.</p></li><li><p><strong>Skill variability:</strong> Task outcomes can vary depending on individual experience levels.</p></li></ul><div><hr></div><h2>II. Pair Programming</h2><blockquote><p>Two developers working together, with one writing code (the driver) and the other reviewing (the navigator).</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XW-3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b91f78-911c-4d77-993a-acf0b9b81c77_472x424.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XW-3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b91f78-911c-4d77-993a-acf0b9b81c77_472x424.png 424w, https://substackcdn.com/image/fetch/$s_!XW-3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b91f78-911c-4d77-993a-acf0b9b81c77_472x424.png 848w, https://substackcdn.com/image/fetch/$s_!XW-3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b91f78-911c-4d77-993a-acf0b9b81c77_472x424.png 1272w, https://substackcdn.com/image/fetch/$s_!XW-3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b91f78-911c-4d77-993a-acf0b9b81c77_472x424.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XW-3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b91f78-911c-4d77-993a-acf0b9b81c77_472x424.png" width="392" height="352.135593220339" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13b91f78-911c-4d77-993a-acf0b9b81c77_472x424.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:424,&quot;width&quot;:472,&quot;resizeWidth&quot;:392,&quot;bytes&quot;:74186,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XW-3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b91f78-911c-4d77-993a-acf0b9b81c77_472x424.png 424w, https://substackcdn.com/image/fetch/$s_!XW-3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b91f78-911c-4d77-993a-acf0b9b81c77_472x424.png 848w, https://substackcdn.com/image/fetch/$s_!XW-3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b91f78-911c-4d77-993a-acf0b9b81c77_472x424.png 1272w, https://substackcdn.com/image/fetch/$s_!XW-3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b91f78-911c-4d77-993a-acf0b9b81c77_472x424.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Coding interviews are based on pair programming. The candidate being the driver for solving the problem, and the interviewer as the navigator supporting the driver.</p><p>I once spent a full 8 months at Dell working in pair-programming mode. The first half was with a mentor, where I received live code reviews and guidance while implementing new solutions. The other half was with a colleague, whom I was onboarding to our codebase and infrastructure.</p><p>There are times when an engineer wants to think out loud about an implementation detail or explain their debugging approach to another engineer. This is similar to <a href="https://en.wikipedia.org/wiki/Rubber_duck_debugging">rubber duck debugging</a>, with the other engineer acting as a sounding board.</p><p><em><strong>Pros of Pairing:</strong></em></p><ul><li><p><strong>Second opinion:</strong> Seeking another opinion to address a specific problem.</p></li><li><p><strong>Knowledge sharing:</strong> Onboarding and mentoring engineers.</p></li><li><p><strong>Live feedback:</strong> Providing real-time suggestions or code reviews on a developed solution.</p></li></ul><p><em><strong>Cons of Pairing:</strong></em></p><ul><li><p><strong>Reduced Autonomy:</strong> The need for immediate feedback leaves little time for independent thinking and research (i.e., engineers tend to context switch if their attention is not required for long).</p></li><li><p><strong>Resource strain:</strong> Two people working on a single task can be an expensive use of engineering time for the team.</p></li></ul><div><hr></div><h2>III. Mob Programming</h2><blockquote><p>Taking <em><strong>pair-programming</strong></em> to the next level.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rjFh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1a94aac-dcae-4698-88ee-ce9fc9ee55e0_1444x1206.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rjFh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1a94aac-dcae-4698-88ee-ce9fc9ee55e0_1444x1206.png 424w, https://substackcdn.com/image/fetch/$s_!rjFh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1a94aac-dcae-4698-88ee-ce9fc9ee55e0_1444x1206.png 848w, https://substackcdn.com/image/fetch/$s_!rjFh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1a94aac-dcae-4698-88ee-ce9fc9ee55e0_1444x1206.png 1272w, https://substackcdn.com/image/fetch/$s_!rjFh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1a94aac-dcae-4698-88ee-ce9fc9ee55e0_1444x1206.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rjFh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1a94aac-dcae-4698-88ee-ce9fc9ee55e0_1444x1206.png" width="440" height="367.4792243767313" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c1a94aac-dcae-4698-88ee-ce9fc9ee55e0_1444x1206.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1206,&quot;width&quot;:1444,&quot;resizeWidth&quot;:440,&quot;bytes&quot;:567009,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rjFh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1a94aac-dcae-4698-88ee-ce9fc9ee55e0_1444x1206.png 424w, https://substackcdn.com/image/fetch/$s_!rjFh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1a94aac-dcae-4698-88ee-ce9fc9ee55e0_1444x1206.png 848w, https://substackcdn.com/image/fetch/$s_!rjFh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1a94aac-dcae-4698-88ee-ce9fc9ee55e0_1444x1206.png 1272w, https://substackcdn.com/image/fetch/$s_!rjFh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1a94aac-dcae-4698-88ee-ce9fc9ee55e0_1444x1206.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is a mode where the entire team works on the same problem, at the same time, and at the same computer. One writing code (the driver) and others exchanging ideas (navigators). Also known as <em><a href="https://agiletechnicalexcellence.com/2023/04/22/ensemble-programming.html">Ensemble Programming</a></em>.</p><p><em><strong>Pros of Mob:</strong></em></p><ul><li><p><strong>Solution Ideation:</strong> More ideas are generated as everyone is actively involved.</p></li><li><p><strong>Team Engagement:</strong> All team members are equally engaged and invested in the outcome.</p></li><li><p><strong>Onboarding at scale:</strong> It&#8217;s an effective way to onboard multiple new team members.</p></li></ul><p><em><strong>Cons of Mob:</strong></em></p><ul><li><p><strong>Inefficient utilisation of time:</strong> Having multiple people working on the same task can be distracting, especially if conversations get in the way of focused work.</p></li><li><p><strong>Slower progress:</strong> While collaboration encourages discussion and debate, it can also slow things down since decisions need group approval. If speed is important, Mob Programming might not be the best approach.</p></li></ul><div class="pullquote"><p><strong>So, how should a proactive engineer approach each mode?</strong></p></div><p><em><strong>Here are some use-cases to think about:</strong></em></p><ul><li><p>If an engineer is stuck on an implementation detail for 1+ days, offer to <em><strong>pair</strong></em> with them.</p></li><li><p>If there&#8217;s a pain point that significantly affects the entire team (e.g., dev tooling), consider fixing it <em><strong>solo</strong></em> to remove friction. Teams and managers will highly appreciate it.</p></li><li><p>If there are new engineers on the team, consider <em><strong>mob</strong></em> <em><strong>programming</strong></em> to share process knowledge (e.g., deploying a feature, resolving an incident).</p></li><li><p>If there&#8217;s a task you can handle quickly and effectively (e.g., demos), do it <em><strong>solo</strong></em>.</p></li><li><p>If you need live input from product or design on a specific feature (e.g., UI widget), consider <em><strong>pairing</strong></em> if appropriate.</p></li></ul><div><hr></div><h2>Wrap Up</h2><p>Engineering teams know what works best for them and can mix and match different work modes based on the context. Solo programming enables high developer velocity, pair programming allows for immediate feedback and knowledge sharing, and mob programming creates space for solution ideation and debugging critical incidents.</p><p><em><strong>Does your team work in all three modes? Let me know in the comments below.</strong></em></p><p><em><strong>P.S. </strong></em>If you&#8217;re finding this newsletter valuable, share it with a friend, and consider subscribing if you haven&#8217;t already.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[#27 Why Everyone Is Talking About Vibe Coding]]></title><description><![CDATA[Andrej Karpathy, co-founder of OpenAI, introduced a new term called vibe coding to describe how developers can guide an LLM to solve a problem by framing it through a set of prompts.]]></description><link>https://www.proactiveengineer.com/p/27-impact-of-vibe-coding-on-software</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/27-impact-of-vibe-coding-on-software</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 21 Mar 2025 12:03:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!r7dR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d395245-c0d7-4065-92a4-d236945e6a37_2400x1350.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r7dR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d395245-c0d7-4065-92a4-d236945e6a37_2400x1350.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r7dR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d395245-c0d7-4065-92a4-d236945e6a37_2400x1350.png 424w, https://substackcdn.com/image/fetch/$s_!r7dR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d395245-c0d7-4065-92a4-d236945e6a37_2400x1350.png 848w, https://substackcdn.com/image/fetch/$s_!r7dR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d395245-c0d7-4065-92a4-d236945e6a37_2400x1350.png 1272w, https://substackcdn.com/image/fetch/$s_!r7dR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d395245-c0d7-4065-92a4-d236945e6a37_2400x1350.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r7dR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d395245-c0d7-4065-92a4-d236945e6a37_2400x1350.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d395245-c0d7-4065-92a4-d236945e6a37_2400x1350.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Vibe Coding: The Future of Software Development or Just a Trend?&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Vibe Coding: The Future of Software Development or Just a Trend?" title="Vibe Coding: The Future of Software Development or Just a Trend?" srcset="https://substackcdn.com/image/fetch/$s_!r7dR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d395245-c0d7-4065-92a4-d236945e6a37_2400x1350.png 424w, https://substackcdn.com/image/fetch/$s_!r7dR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d395245-c0d7-4065-92a4-d236945e6a37_2400x1350.png 848w, https://substackcdn.com/image/fetch/$s_!r7dR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d395245-c0d7-4065-92a4-d236945e6a37_2400x1350.png 1272w, https://substackcdn.com/image/fetch/$s_!r7dR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d395245-c0d7-4065-92a4-d236945e6a37_2400x1350.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://lovable.dev">Lovable banner image </a></figcaption></figure></div><p>Andrej Karpathy, co-founder of OpenAI, introduced a new term called <em><strong>vibe coding</strong></em> to describe how developers can guide an LLM to solve a problem by framing it through a set of prompts. The concept is similar to <a href="https://en.wikipedia.org/wiki/Prompt_engineering">prompt engineering</a>, but is focused on generating code with LLMs. Andrej describes it as a new way of programming by &#8220;<em>giving in to the vibes to LLMs, embrace exponentials, and let it do the work</em>&#8221;. Here is <a href="https://x.com/karpathy/status/1886192184808149383">his famous tweet</a> from February 2025.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9AvE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b455ba4-a232-46b5-b730-c8a4613760c4_1190x1006.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9AvE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b455ba4-a232-46b5-b730-c8a4613760c4_1190x1006.png 424w, https://substackcdn.com/image/fetch/$s_!9AvE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b455ba4-a232-46b5-b730-c8a4613760c4_1190x1006.png 848w, https://substackcdn.com/image/fetch/$s_!9AvE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b455ba4-a232-46b5-b730-c8a4613760c4_1190x1006.png 1272w, https://substackcdn.com/image/fetch/$s_!9AvE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b455ba4-a232-46b5-b730-c8a4613760c4_1190x1006.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9AvE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b455ba4-a232-46b5-b730-c8a4613760c4_1190x1006.png" width="428" height="361.8218487394958" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b455ba4-a232-46b5-b730-c8a4613760c4_1190x1006.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1006,&quot;width&quot;:1190,&quot;resizeWidth&quot;:428,&quot;bytes&quot;:296570,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/158989498?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b455ba4-a232-46b5-b730-c8a4613760c4_1190x1006.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9AvE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b455ba4-a232-46b5-b730-c8a4613760c4_1190x1006.png 424w, https://substackcdn.com/image/fetch/$s_!9AvE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b455ba4-a232-46b5-b730-c8a4613760c4_1190x1006.png 848w, https://substackcdn.com/image/fetch/$s_!9AvE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b455ba4-a232-46b5-b730-c8a4613760c4_1190x1006.png 1272w, https://substackcdn.com/image/fetch/$s_!9AvE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b455ba4-a232-46b5-b730-c8a4613760c4_1190x1006.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Andrej Karpathy on X</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><p>People are increasingly doing <em>vibe coding</em> and AI coding tools make it ridiculously easy to get started. For recommendations, you can check out <a href="https://www.cursor.com/">Cursor</a> or <a href="https://replit.com/ai">Replit Agent</a>.</p><p>However, as cool and trendy as vibe coding is, it will have a massive impact on traditional software engineering&#8212;both positive and negative. In this post, I&#8217;ll talk about the future of vibe coding, its upsides and downsides, and its impact on software engineering.</p><h2>The future with vibe coding</h2><p>Developer tools have become more capable with AI. Tools like <a href="https://github.com/features/copilot">GitHub Copilot</a> and <a href="https://www.cursor.com/">Cursor</a> allow a developer to chat with an LLM to describe a task to solve. The LLM generates the necessary code, the developer reviews it, and can quickly approve it with a few tabs.</p><p>Some industry professionals love this new way of coding and advocate for making code accessible to non-technical users. Others are concerned about the reliability and maintainability of AI-generated code. I&#8217;m more with the latter group, at least for now, until I see more positive examples of companies using it or until we have a proper <em><strong>vibe debugging</strong></em> in place.</p><p>Jared Friedman, Garry Tan, Harj Taggar, and Diana Hu from <a href="https://www.ycombinator.com/">Y Combinator</a> shared their thoughts on vibe coding a couple of weeks ago. They talked about how vibe coding is shaping the future and unlocking exponential benefits for founders and startups. It&#8217;s a 30-min discussion if you want to check it out:</p><div id="youtube2-IACHfKmZMr8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;IACHfKmZMr8&quot;,&quot;startTime&quot;:&quot;33s&quot;,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/IACHfKmZMr8?start=33s&amp;rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Check out this <a href="https://x.com/NicolasZu/status/1898130528567804366">NicolasZu&#8217;s flight simulation game</a>, built purely on vibe coding (thousands of prompts, no coding).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VEeH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebfbb93-a71e-4c11-87e8-707d5d153a8b_1066x1158.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VEeH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebfbb93-a71e-4c11-87e8-707d5d153a8b_1066x1158.png 424w, https://substackcdn.com/image/fetch/$s_!VEeH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebfbb93-a71e-4c11-87e8-707d5d153a8b_1066x1158.png 848w, https://substackcdn.com/image/fetch/$s_!VEeH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebfbb93-a71e-4c11-87e8-707d5d153a8b_1066x1158.png 1272w, https://substackcdn.com/image/fetch/$s_!VEeH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebfbb93-a71e-4c11-87e8-707d5d153a8b_1066x1158.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VEeH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebfbb93-a71e-4c11-87e8-707d5d153a8b_1066x1158.png" width="370" height="401.93245778611634" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ebfbb93-a71e-4c11-87e8-707d5d153a8b_1066x1158.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1158,&quot;width&quot;:1066,&quot;resizeWidth&quot;:370,&quot;bytes&quot;:495872,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/158989498?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebfbb93-a71e-4c11-87e8-707d5d153a8b_1066x1158.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!VEeH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebfbb93-a71e-4c11-87e8-707d5d153a8b_1066x1158.png 424w, https://substackcdn.com/image/fetch/$s_!VEeH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebfbb93-a71e-4c11-87e8-707d5d153a8b_1066x1158.png 848w, https://substackcdn.com/image/fetch/$s_!VEeH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebfbb93-a71e-4c11-87e8-707d5d153a8b_1066x1158.png 1272w, https://substackcdn.com/image/fetch/$s_!VEeH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebfbb93-a71e-4c11-87e8-707d5d153a8b_1066x1158.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>However, people on the internet didn&#8217;t like the Y Combinator video (excluding trolls). They shared opposing views on how relying heavily on LLMs can be dangerous. It could either force users to create mediocre, repeatable apps, or generate code with unpredictable behaviour that is hard to maintain, or act as a replacement for engineers. Heres&#8217;s an example:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Uy0H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5fea443-b68e-4a60-a433-6a06a84f39b3_1208x1442.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Uy0H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5fea443-b68e-4a60-a433-6a06a84f39b3_1208x1442.png 424w, https://substackcdn.com/image/fetch/$s_!Uy0H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5fea443-b68e-4a60-a433-6a06a84f39b3_1208x1442.png 848w, https://substackcdn.com/image/fetch/$s_!Uy0H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5fea443-b68e-4a60-a433-6a06a84f39b3_1208x1442.png 1272w, https://substackcdn.com/image/fetch/$s_!Uy0H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5fea443-b68e-4a60-a433-6a06a84f39b3_1208x1442.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Uy0H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5fea443-b68e-4a60-a433-6a06a84f39b3_1208x1442.png" width="396" height="472.7086092715232" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5fea443-b68e-4a60-a433-6a06a84f39b3_1208x1442.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1442,&quot;width&quot;:1208,&quot;resizeWidth&quot;:396,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;securityJustInterferesWithVibes : r/ProgrammerHumor&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="securityJustInterferesWithVibes : r/ProgrammerHumor" title="securityJustInterferesWithVibes : r/ProgrammerHumor" srcset="https://substackcdn.com/image/fetch/$s_!Uy0H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5fea443-b68e-4a60-a433-6a06a84f39b3_1208x1442.png 424w, https://substackcdn.com/image/fetch/$s_!Uy0H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5fea443-b68e-4a60-a433-6a06a84f39b3_1208x1442.png 848w, https://substackcdn.com/image/fetch/$s_!Uy0H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5fea443-b68e-4a60-a433-6a06a84f39b3_1208x1442.png 1272w, https://substackcdn.com/image/fetch/$s_!Uy0H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5fea443-b68e-4a60-a433-6a06a84f39b3_1208x1442.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There is truth in both arguments&#8212;vibe coding is a double-edged sword. It can increase developer productivity in engineering teams, but it is obviously not a replacement for engineers. To leverage vibe coding in building software, you&#8217;d still need technical expertise to review the new changes. That&#8217;s why we do PR reviews.</p><blockquote><p>Vibe coding is like having non-tech users review PRs before releases.</p></blockquote><div class="pullquote"><p><em><strong>When should we use vibe coding, then?</strong></em></p></div><h2>Upsides of vibe coding</h2><ol><li><p><em><strong>Great for prototyping, especially when building new products</strong></em></p></li></ol><p>Vibe coding is powerful for prototyping and building MVPs. It allows teams to quickly translate ideas into functional code without spending extensive time on development. This fast iteration helps founders test new ideas and validate features early in the process, enabling them to pivot fast based on feedback.</p><ol start="2"><li><p><em><strong>Up skilling individuals</strong></em></p></li></ol><p>Vibe coding can be powerful for engineers who are learning a new programming language or want to operate as a full-stack (generalist) software engineer. A backend engineer can tap into frontend work with vibe coding if needed. </p><p>Vibe coding is also great for less-technical professionals who want to test out new ideas and bring them to life. They can communicate their ideas to an LLM to generate functional code without deep programming expertise. This allows product managers and designers to create simple software ideas through a conversation, making it easy to test and less expensive to delete (without spending engineering resources).</p><ol start="3"><li><p><em><strong>Increased developer productivity</strong></em></p></li></ol><p>Vibe coding can significantly boost developer productivity by automating repetitive tasks, generating test cases, and speeding up the coding process. This allows them to focus on higher-level design, architecture, and problem-solving, ultimately accelerating the development cycle. By leveraging vibe coding, teams can move faster and ship more features with less manual effort, driving greater overall productivity in the development process.</p><h2>Downsides of vibe coding</h2><ol><li><p><em><strong>Complicated to use in large enterprises</strong></em></p></li></ol><p>Vibe coding can be difficult to use in large enterprises. While it works well for individual developers and small teams, complex codebases and existing abstractions present challenges. Relying on AI-generated code requires thorough review and testing to ensure it meets the necessary standards and fits within the broader design.</p><ol start="2"><li><p><em><strong>Non-technical individuals can get stuck midway</strong></em></p></li></ol><p>While vibe coding lowers the barrier to entry for coding tasks, non-technical users can get stuck on runtime errors or debugging issues without additional help from LLMs. A simple example is when an LLM generates code using a deprecated API from library version x.y.z, while the non-technical user has library version x.y+1.z installed.</p><p>Although the chances of this happening are relatively low, lacking technical knowledge makes it harder for users to resolve such issues on their own.</p><p>A good example is Leo&#8217;s SaaS, which was built 100% with LLMs. &#128556;</p><ol start="3"><li><p><em><strong>Less-experienced engineers relying too much on vibe coding</strong></em></p></li></ol><p>Junior engineers who rely too heavily on vibe coding without understanding core programming concepts risk producing inefficient or unmaintainable code. Excessive use of AI tools can hinder their long-term growth by limiting the development of problem-solving skills and a deep understanding of software engineering principles.</p><p>Just as we advise junior engineers not to blindly copy-paste code from stack overflow, we should also encourage them not to rely on vibe coding without thoroughly understanding the output.</p><div><hr></div><h2>Final thoughts</h2><p>Vibe coding is shaping up the future. AI tools are getting better and more autonomous every day, allowing developers to ship code faster than ever. Less technical people can now build apps as easily as capturing an iPhone video.</p><p>However, a strong technical foundation remains essential for building software beyond prototypes. Engineers must develop the skill of capturing <em>vibe coding</em> practices within their teams and carefully reviewing LLM-generated code. Vibe coding should be treated as a supplementary practice in software development, not a primary one.</p><p>Less-experienced engineers now turn to LLMs instead of the good ol&#8217; Stack Overflow. This shift places greater responsibility on senior engineers and tech leads in startups and large enterprises to audit LLM-generated code and ensure it fits within their software design. After all, </p><blockquote><p><em><strong>Each new line of code adds debt to the developer&#8212;it needs to earn its place in production.</strong></em></p></blockquote><div><hr></div><p><em><strong>Have you tried vibe coding recently? Let me know your thoughts in the comments below.</strong></em></p><p>If you&#8217;re finding this newsletter valuable, share it with a friend, and consider subscribing if you haven&#8217;t already.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[#26 When to Pay Down Tech Debt]]></title><description><![CDATA[Handling technical debt is a recurring subject among software engineering teams.]]></description><link>https://www.proactiveengineer.com/p/26-when-to-pay-down-tech-debts</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/26-when-to-pay-down-tech-debts</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 14 Mar 2025 12:02:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sh3-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Handling technical debt is a recurring subject among software engineering teams. <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Lou Franco&quot;,&quot;id&quot;:18363858,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88fe622f-0820-476b-bb18-b569d9f36422_664x664.jpeg&quot;,&quot;uuid&quot;:&quot;63149179-b521-40b1-8a28-61237155c595&quot;}" data-component-name="MentionToDOM"></span>, former principal engineer with 30+ years experience, wrote a <a href="https://newsletter.pragmaticengineer.com/p/paying-down-tech-debt">guest post</a> on <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;The Pragmatic Engineer&quot;,&quot;id&quot;:458709,&quot;type&quot;:&quot;pub&quot;,&quot;url&quot;:&quot;https://open.substack.com/pub/pragmaticengineer&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5ecbf7ac-260b-423b-8493-26783bf01f06_600x600.png&quot;,&quot;uuid&quot;:&quot;79968356-d456-4558-b3bd-e433debf7596&quot;}" data-component-name="MentionToDOM"></span> newsletter, where he shared his lessons from managing tech debt and a guide on how to reduce it effectively. My motivation for covering this topic is to share my take on when it makes sense to pay down tech debt, and also because this is something I&#8217;m currently managing with my team.</p><p>In this post, I&#8217;ll answer two questions:</p><ol><li><p>How to think about tech debt.</p></li><li><p>When to pay down tech debt.</p></li></ol><div><hr></div><h2>First, there will always be tech debt</h2><p>In early 2023, my manager asked me to chair the backend weekly meeting and own the platform backlog. I was responsible for curating the backlog, tracking ongoing progress with the backend team every Monday, and managing comms with the platform users.</p><p>In first few months, I noticed that the platform backlog was somewhat static, very few things are being added every month or two. So I figured, what if I encouraged the team to divide-and-conquer on these tech debts in parallel to working on the upcoming sprints? Our backlog should be clean in a few weeks. &#129529;</p><p>My assumption was wrong, obviously. I assumed that our new implementations would not generate any new tech debt, our tools would not push us to do any version upgrades, and no legacy code constraints would surface over time. Thinking of squashing all the debt is a positive approach, but not a realistic one.</p><p>So rather than thinking of debt as a finite set of tasks in a fixed bucket, think of it as an infinite stream of tasks, where the rate of change depends on how your teams operate. Following good design patterns and abstractions in writing code = fewer debt. Writing messy spaghetti code = more debt.</p><p>As long as you&#8217;re building new things, there will always be tech debt.</p><div><hr></div><h2>Why you should care</h2><p>A technical debt can be defined as an issue in the codebase or infrastructure that makes it harder for engineers to introduce new changes.</p><blockquote><p>Tech debt is sometimes viewed as a quality-of-life opportunity <strong>for engineers working on the product.</strong></p></blockquote><p>While the main goal should still be focused on the product roadmap for delivering business value. However, the engineers working on the roadmap should have the least amount of friction to do their work. Tech debt is a secondary backlog that accumulates over time, and neglecting it too often can harm developer productivity, reduce team morale, and eventually lead to engineers leaving.</p><p>A friend of mine who worked at a tech company once shared that the main reason she left her job, was the unwillingness from her team and leadership to address tech debt. She became frustrated working in an environment with broken tools, flaky tests, failing pipelines, and missing READMEs.</p><p>I empathise with her story. While delivering business value is always a priority, neglecting developer productivity too much ultimately slows down the engineering team. If businesses need to delight their customers, they&#8217;ll need to support their engineers.</p><p>However, on the flip side, not all tech debt is worth fixing. Some of them are nice-to-haves with no noticeable improvement to developer productivity. Possibly in 6&#8211;12 months, they can start to make a dent at developer productivity. At that time, we can pay down the debt. But for now, we should focus on shipping new features and make a note of these potential future dents. </p><blockquote><p>We should only care about tech debt that improves our ability to deliver business value.</p></blockquote><div><hr></div><h2>When to pay down tech debt</h2><p>Going back to the platform backlog story, one day I received an email from Google Cloud Provider (GCP) announcing <a href="https://cloud.google.com/artifact-registry/docs/transition/transition-from-gcr">the deprecation of their </a><em><a href="https://cloud.google.com/artifact-registry/docs/transition/transition-from-gcr">Container Registry</a></em><a href="https://cloud.google.com/artifact-registry/docs/transition/transition-from-gcr"> service and the migration to </a><em><a href="https://cloud.google.com/artifact-registry/docs/transition/transition-from-gcr">Artifact Registry</a></em>. Since we were using the soon-to-be-deprecated service for storing images, I saw this as tech debt, a critical one. However, looking back, the email that was sent was only announcing a 2-year deprecation window. So by prioritising and pushing for immediate action amid all the other things we were working on was a hard sell, one that didn&#8217;t seem like a good idea. I raised it during our weekly backend meeting, had a good discussion, and took some notes. But the general consensus was, &#8220;Is this a problem we need to solve <em>right now</em>?&#8221; The answer was no.</p><p><strong>So my advice is this:</strong> pay down tech debt for today&#8217;s problems and plan for 3-6 months. Focus only on those that will (A) increase developer productivity or (B) improve user experience.</p><p>To reiterate using <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Lou Franco&quot;,&quot;id&quot;:18363858,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88fe622f-0820-476b-bb18-b569d9f36422_664x664.jpeg&quot;,&quot;uuid&quot;:&quot;d78c7a60-fe05-4bd8-8b6b-4c1ecbd0da83&quot;}" data-component-name="MentionToDOM"></span>&#8217;s quote:</p><blockquote><p><strong>&#8220;The heuristic I use to pay tech debt these days is this:</strong> by reducing a specific tech debt, can I increase developer productivity and deliver business value <em>right now?&#8221;</em></p></blockquote><p>One thing I&#8217;d also avoid is solving far future problems, like the 2-year deprecation window I mentioned earlier. I reported something we should fix <em>before March 2025 in February 2023</em>. That&#8217;s over-engineering.</p><blockquote><p><strong>Over-engineering: </strong>Solving a far future tech debt (&gt; 12 months).</p></blockquote><p>If it requires action within 6 months, discuss and plan. If it&#8217;s 6-12 months, depends on the impact. If it&#8217;s 12+ months, that&#8217;s over-engineering.</p><h3>Starter decision tree</h3><p>If I could visualise an engineer&#8217;s decision-making about tech debt in the form of a decision tree, there would still be differences across different orgs. Some would have short binary trees (yes/no questions), while others would have deep B-trees, with each branch containing less obvious answers.</p><p>However, if I could picture an initial tree for a skilled engineer, it would look something like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sh3-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sh3-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png 424w, https://substackcdn.com/image/fetch/$s_!sh3-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png 848w, https://substackcdn.com/image/fetch/$s_!sh3-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png 1272w, https://substackcdn.com/image/fetch/$s_!sh3-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sh3-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png" width="645" height="569" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:569,&quot;width&quot;:645,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65878,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157708615?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sh3-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png 424w, https://substackcdn.com/image/fetch/$s_!sh3-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png 848w, https://substackcdn.com/image/fetch/$s_!sh3-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png 1272w, https://substackcdn.com/image/fetch/$s_!sh3-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644bcadd-ac65-4c3e-b230-26ad540b40ba_645x569.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Started decision tree for paying down tech debt</figcaption></figure></div><p>This tree provides a set of simple questions to narrow down the problem into quick actions. Note that this is not a static tree to paying down tech debt. Engineers are responsible for continuously refining their decision-making process when assessing tech debt.</p><blockquote><p>Take this starter tree as an inspiration and refine it as you go.</p></blockquote><div><hr></div><h2>Your relationship with your product manager</h2><p>The types of tech debt generated are somewhat similar across different tech companies, except for <a href="https://www.pitchdrive.com/glossary/early-stage">early-stage startups</a>.</p><p>An early-stage startup is typically in the process of <strong>validating</strong> and finding its <strong>product-market fit (PMF)</strong>. Product managers (PMs) are mainly focused on:</p><ol><li><p>Identifying unmet needs in the market through customer research. </p></li><li><p>Developing a value proposition or hypothesis to be tested via an MVP.</p></li></ol><p>In my view, a successful Product &lt;&gt; Engineering relationship is one where PMs can communicate an unmet user need, define a product vision and strategy, while engineers provide technical feasibility, review the roadmap, and build a solution<strong>. This is the most important relationship in any software company.</strong></p><blockquote><p>PMs trust engineers to deliver, while engineers trust PMs that their work serves the users.</p></blockquote><p>In an early-stage startup, a product typically goes through multiple iterations (pivots), and so does tech debt. With each product iteration, new technologies or abstractions are introduced, codebase is rewritten, or architecture is redesigned.</p><blockquote><p>If a product isn&#8217;t live and used by <strong>at least one customer</strong>, real tech debt hasn&#8217;t been created, and any previous debt isn&#8217;t worth discussing.</p></blockquote><p>Once the product is live and being used by customers, then we can start measuring developer productivity. PMs trust your judgment as an engineer on highlighting impactful work that increases developer productivity and delivers business value. It&#8217;s important for both of you to be in sync so you can decide what should go on the priority backlog for the next sprint and what can be put on hold. </p><blockquote><p>Invest in the PM &lt;&gt; Eng relationship. Staying in sync will make a PM&#8217;s decision tree for resolving tech debt similar to yours.</p></blockquote><div><hr></div><h2>Wrap up</h2><p>Paying down tech debts as an engineer require:</p><ul><li><p>Evaluating the maturity of the product and solving today&#8217;s problems.</p></li><li><p>Being aware of over-engineering, i.e., solving far future problems (&gt;12 months).</p></li><li><p>Thinking critically about the engineering cost beyond the individual, considering the business impact as well.</p></li><li><p>Building a relationship of trust and transparency with PMs to get buy-in.</p></li></ul><p><em><strong>One last thing: </strong></em>PMs trust your skills and opinions as an engineer. When discussing tech debt, make sure you highlight its relevance and impact on developer productivity so you both stay aligned while working on the product roadmap. Once you&#8217;re out of sync, discussions about tech debt will become ineffective and may raise eyebrows.</p><div><hr></div><h3><em><strong>&#128172; Quick Note:</strong></em></h3><p>I recently launched a <a href="https://reviews.proactiveengineer.com/">testimonial page</a> for readers to share their thoughts about the newsletter, and I&#8217;d love to feature yours! You can add one through this <a href="https://reviews.proactiveengineer.com/r/review">link</a> &#128588;</p><p><em><strong>Special thanks to Ingy E. for her latest testimonial!</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BQdP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BQdP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 424w, https://substackcdn.com/image/fetch/$s_!BQdP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 848w, https://substackcdn.com/image/fetch/$s_!BQdP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 1272w, https://substackcdn.com/image/fetch/$s_!BQdP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BQdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png" width="1456" height="928" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:928,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:660440,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157708615?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BQdP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 424w, https://substackcdn.com/image/fetch/$s_!BQdP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 848w, https://substackcdn.com/image/fetch/$s_!BQdP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 1272w, https://substackcdn.com/image/fetch/$s_!BQdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90abb717-b82e-43fb-be5f-1f6069aee13c_2240x1428.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="pullquote"><p><strong>FYI</strong>: New issues of <em>The Proactive Engineer</em> will be sent out <strong>every Friday at 12 PM GMT</strong>.</p></div><p>If you&#8217;re finding this newsletter valuable, share it with a friend, and consider subscribing if you haven&#8217;t already.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[#25 Ten Unspoken Rules in Slack]]></title><description><![CDATA[After working at five different companies that use Slack, I&#8217;ve realised that within an engineering culture, there&#8217;s also a Slack culture.]]></description><link>https://www.proactiveengineer.com/p/25-ten-unspoken-rules-in-slack</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/25-ten-unspoken-rules-in-slack</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 07 Mar 2025 09:02:10 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fc2d0e10-b85c-4773-b1c7-4865e44bff69_336x257.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Pb9F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e88542-34bc-472b-a65e-c97ebe37e955_336x257.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Pb9F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e88542-34bc-472b-a65e-c97ebe37e955_336x257.png 424w, https://substackcdn.com/image/fetch/$s_!Pb9F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e88542-34bc-472b-a65e-c97ebe37e955_336x257.png 848w, https://substackcdn.com/image/fetch/$s_!Pb9F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e88542-34bc-472b-a65e-c97ebe37e955_336x257.png 1272w, https://substackcdn.com/image/fetch/$s_!Pb9F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e88542-34bc-472b-a65e-c97ebe37e955_336x257.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Pb9F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e88542-34bc-472b-a65e-c97ebe37e955_336x257.png" width="336" height="257" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1e88542-34bc-472b-a65e-c97ebe37e955_336x257.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:257,&quot;width&quot;:336,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:15067,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157954726?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e88542-34bc-472b-a65e-c97ebe37e955_336x257.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Pb9F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e88542-34bc-472b-a65e-c97ebe37e955_336x257.png 424w, https://substackcdn.com/image/fetch/$s_!Pb9F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e88542-34bc-472b-a65e-c97ebe37e955_336x257.png 848w, https://substackcdn.com/image/fetch/$s_!Pb9F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e88542-34bc-472b-a65e-c97ebe37e955_336x257.png 1272w, https://substackcdn.com/image/fetch/$s_!Pb9F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1e88542-34bc-472b-a65e-c97ebe37e955_336x257.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After working at five different companies that use Slack, I&#8217;ve realised that within an engineering culture, there&#8217;s also a Slack culture. A culture that reflects how effective and communicative a team can be. How they communicate ideas, progress, blockers, solutions, etc. </p><p>This is not research-backed, but here&#8217;s a thought experiment:</p><blockquote><p><em><strong>What if you could measure a team&#8217;s performance by observing their Slack channels?</strong></em></p></blockquote><p>Over time, they&#8217;ll develop some unspoken rules for communication to increase their team&#8217;s productivity. I believe you can spot a productive engineer by their written communication and how they use Slack.</p><p>So, here are 10 rules for efficient Slack communication.</p><div><hr></div><h2>#1 - Don&#8217;t overuse @here</h2><p>When I worked at Dell, I was responsible for coordinating tech talks for engineering teams and regularly posted announcements for upcoming talks. A rookie mistake I made was pinging the channel with every announcement and inviting discussions, which ended up pinging every member for every reply. This created a noisy update, one I&#8217;d even mute myself.</p><p>Unless there&#8217;s an urgent update or a need for the team&#8217;s attention, using <em><strong>@here</strong></em> more than necessary will interrupt their deep focus time. A conversation thread that starts with <em><strong>@here</strong></em> generates lots of notifications, making it difficult for non-relevant participants to concentrate.</p><blockquote><p>Be mindful of using <em><strong>@here</strong></em>. Only use if the entire group should engage.</p></blockquote><h2>#2 - Use threads for new conversations</h2><p>Some people tend to go back and forth on a specific point, which ends up cluttering the channel. For example, my team once had a debate on <a href="https://www.docker.com/">Docker</a> vs <a href="https://podman.io/">Podman</a> (50+ messages). A good rule is to create a thread, tag the relevant people, and start the conversation there.</p><p>This provides a bird&#8217;s-eye view of all current and past <strong>nested</strong> conversations within the main channel. It&#8217;s super convenient for people who want to zoom in or out of any conversation they find relevant or interesting.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QuWQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b7c6e-8f81-4ba5-86cb-f623f6e9bf4c_888x532.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QuWQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b7c6e-8f81-4ba5-86cb-f623f6e9bf4c_888x532.png 424w, https://substackcdn.com/image/fetch/$s_!QuWQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b7c6e-8f81-4ba5-86cb-f623f6e9bf4c_888x532.png 848w, https://substackcdn.com/image/fetch/$s_!QuWQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b7c6e-8f81-4ba5-86cb-f623f6e9bf4c_888x532.png 1272w, https://substackcdn.com/image/fetch/$s_!QuWQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b7c6e-8f81-4ba5-86cb-f623f6e9bf4c_888x532.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QuWQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b7c6e-8f81-4ba5-86cb-f623f6e9bf4c_888x532.png" width="482" height="288.76576576576576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c0b7c6e-8f81-4ba5-86cb-f623f6e9bf4c_888x532.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:532,&quot;width&quot;:888,&quot;resizeWidth&quot;:482,&quot;bytes&quot;:172019,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157954726?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b7c6e-8f81-4ba5-86cb-f623f6e9bf4c_888x532.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QuWQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b7c6e-8f81-4ba5-86cb-f623f6e9bf4c_888x532.png 424w, https://substackcdn.com/image/fetch/$s_!QuWQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b7c6e-8f81-4ba5-86cb-f623f6e9bf4c_888x532.png 848w, https://substackcdn.com/image/fetch/$s_!QuWQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b7c6e-8f81-4ba5-86cb-f623f6e9bf4c_888x532.png 1272w, https://substackcdn.com/image/fetch/$s_!QuWQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c0b7c6e-8f81-4ba5-86cb-f623f6e9bf4c_888x532.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If Alice, Bob, and Charlie want to follow up on the $feature release, they know where to find it.</p><h2>#3 - Add context to new messages</h2><p>This rule is simple but essential. Messaging individuals without context creates awkward ambiguity and leads to longer discussions before issues are resolved. Receiving multiple &#8220;Hi&#8221;s from teammates makes it harder to distinguish what&#8217;s urgent, important, or easy to resolve.</p><p>So, instead of posting</p><blockquote><p>&#10060; Hey there<br>&#10060; I have a question<br>&#10060; Are you free?</p></blockquote><p>Take the time to write out your question or request:</p><blockquote><p>&#9989; Hey, can we catch up on the new roadmap this week? I have a few questions about the second milestone.</p></blockquote><h2>#4 - Separate channel for a recurring topic </h2><p>Having an all-in-one channel for all discussions can hurt the team&#8217;s productivity, making it harder to search for key details and organise conversations by category. If a topic keeps coming up with specific individuals, create a dedicated channel for it.</p><p><em><strong>For example,</strong></em></p><blockquote><ul><li><p>Asking a team<strong> </strong>about backend services &#8594; <code>#ask-backend</code></p></li><li><p>Requesting support from QA engineers &#8594; <code>#support-qa</code></p></li><li><p>Discussing key details of a project &#8594; <code>#project-awesome</code></p></li></ul></blockquote><h2>#5 - Format links with bookmarklets</h2><p>Over time, teams develop their own habits and tools for communicating over Slack. Sharing PRs, posting release notes, recording demos, etc.</p><p>A common one I found in previous companies, is using <strong>bookmarklets </strong>for PR reviews.</p><blockquote><p><em>A bookmarklet is a JavaScript code snippet stored as a bookmark in a browser.</em></p></blockquote><p>A bookmarklet is a small piece of code that runs on a web page to perform a specific action. For example, I can have a bookmarklet that copies the page URL and formats it into an <strong>[emoji][page title]</strong> for fun. Here is an example:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tOyP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d2f16a9-9b3e-4419-a8bf-ead69fe32e04_992x278.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tOyP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d2f16a9-9b3e-4419-a8bf-ead69fe32e04_992x278.png 424w, https://substackcdn.com/image/fetch/$s_!tOyP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d2f16a9-9b3e-4419-a8bf-ead69fe32e04_992x278.png 848w, https://substackcdn.com/image/fetch/$s_!tOyP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d2f16a9-9b3e-4419-a8bf-ead69fe32e04_992x278.png 1272w, https://substackcdn.com/image/fetch/$s_!tOyP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d2f16a9-9b3e-4419-a8bf-ead69fe32e04_992x278.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tOyP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d2f16a9-9b3e-4419-a8bf-ead69fe32e04_992x278.png" width="530" height="148.52822580645162" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d2f16a9-9b3e-4419-a8bf-ead69fe32e04_992x278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:278,&quot;width&quot;:992,&quot;resizeWidth&quot;:530,&quot;bytes&quot;:96572,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157954726?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d2f16a9-9b3e-4419-a8bf-ead69fe32e04_992x278.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tOyP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d2f16a9-9b3e-4419-a8bf-ead69fe32e04_992x278.png 424w, https://substackcdn.com/image/fetch/$s_!tOyP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d2f16a9-9b3e-4419-a8bf-ead69fe32e04_992x278.png 848w, https://substackcdn.com/image/fetch/$s_!tOyP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d2f16a9-9b3e-4419-a8bf-ead69fe32e04_992x278.png 1272w, https://substackcdn.com/image/fetch/$s_!tOyP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d2f16a9-9b3e-4419-a8bf-ead69fe32e04_992x278.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><blockquote><p>&#127775; A concrete example of a bookmarklet is copy-pasting PRs to the team channel.</p></blockquote><p>A good solution is to have a bookmarklet that generates a standard message with a PR link, including its state (open or draft) and diffs. Here are two examples: (1) GitLab and (2) GitHub.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7xLD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b38c6-ee00-4d55-b00b-3776d0192cbd_1082x156.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7xLD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b38c6-ee00-4d55-b00b-3776d0192cbd_1082x156.png 424w, https://substackcdn.com/image/fetch/$s_!7xLD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b38c6-ee00-4d55-b00b-3776d0192cbd_1082x156.png 848w, https://substackcdn.com/image/fetch/$s_!7xLD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b38c6-ee00-4d55-b00b-3776d0192cbd_1082x156.png 1272w, https://substackcdn.com/image/fetch/$s_!7xLD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b38c6-ee00-4d55-b00b-3776d0192cbd_1082x156.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7xLD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b38c6-ee00-4d55-b00b-3776d0192cbd_1082x156.png" width="554" height="79.87430683918669" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c1b38c6-ee00-4d55-b00b-3776d0192cbd_1082x156.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:156,&quot;width&quot;:1082,&quot;resizeWidth&quot;:554,&quot;bytes&quot;:59347,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157954726?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b38c6-ee00-4d55-b00b-3776d0192cbd_1082x156.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7xLD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b38c6-ee00-4d55-b00b-3776d0192cbd_1082x156.png 424w, https://substackcdn.com/image/fetch/$s_!7xLD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b38c6-ee00-4d55-b00b-3776d0192cbd_1082x156.png 848w, https://substackcdn.com/image/fetch/$s_!7xLD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b38c6-ee00-4d55-b00b-3776d0192cbd_1082x156.png 1272w, https://substackcdn.com/image/fetch/$s_!7xLD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c1b38c6-ee00-4d55-b00b-3776d0192cbd_1082x156.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Check out the repo below for using a bookmarklet for PRs:</p><p>&#128279; <a href="https://github.com/shehab-as/bookmarklets">https://github.com/shehab-as/bookmarklets</a></p><h2>#6 - Cut down on<strong> </strong>previews</h2><p>This is a biased opinion, but from experience, I&#8217;ve found that message previews create a lot of clutter. This is true in busy channels where important conversations are happening. </p><p>My colleagues and I have this unspoken rule of removing &#8220;visual noise&#8221; as much as possible when posting in the main channel. This includes previews from PRs, Notion, Shortcut, Jira, etc.</p><blockquote><p>Try to minimise previews when posting links, especially if there are many.</p></blockquote><h2>#7 - Use Slackbot for reminders</h2><p>Individuals with busy calendars tend to set reminders in Gmail or Outlook to keep things on track. Teams do the same with <a href="https://slack.com/intl/en-gb/help/articles/202026038-An-introduction-to-Slackbot">Slackbot</a>, using it to set reminders and automate repeated tasks. This helps everyone stay organised and make sure nothing is overlooked.</p><p><em><strong>Here are examples:</strong></em></p><ul><li><p>&#128276; /remind #channel to share team updates every Friday at 3PM</p></li><li><p>&#128276; /remind #channel to review open PRs every weekday at 9AM</p></li><li><p>&#128276; /remind #channel to accept new interviews every Thursday at 3PM</p></li><li><p>&#128276; /remind #channel to schedule a retro on the first Monday of every month at 1PM</p></li></ul><h2>#8 - Avoid lengthy channel names</h2><p>This may seem like an obvious rule, but I still come across channels with long names that add little value. Naming channels shouldn&#8217;t be a big deal, but take a moment to trim down any unnecessary words.</p><p><em><strong>Here are examples:</strong></em></p><ul><li><p>&#10060; #engineering-team-technical-discussions<br>&#9989; #eng-discuss</p></li><li><p>&#10060; #customer-bug-reports-and-tracking<br>&#9989; #bug-reports</p></li><li><p>&#10060; #hiring-and-referral-process-updates<br>&#9989; #hiring</p></li></ul><blockquote><p><em>There are only two hard things in Computer Science: cache invalidation and naming things.&#8212; Phil Karlton</em></p></blockquote><p>I would also add&#8212;naming Slack channels&#8212;as another hard thing. &#128556;</p><h2>#9 - Use <strong>tmp-</strong> for short-lived channels</h2><p>Some projects require temporary collaboration from adjacent teams or individuals. These channels are short-lived, meant for only a few days or weeks. A good convention is to signal the liveness through the channel&#8217;s name.</p><blockquote><p><em>tmp-</em> channels are expected to be archived within days or weeks.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!db-E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80af026b-b46d-4643-b2ed-68d538094053_652x226.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!db-E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80af026b-b46d-4643-b2ed-68d538094053_652x226.png 424w, https://substackcdn.com/image/fetch/$s_!db-E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80af026b-b46d-4643-b2ed-68d538094053_652x226.png 848w, https://substackcdn.com/image/fetch/$s_!db-E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80af026b-b46d-4643-b2ed-68d538094053_652x226.png 1272w, https://substackcdn.com/image/fetch/$s_!db-E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80af026b-b46d-4643-b2ed-68d538094053_652x226.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!db-E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80af026b-b46d-4643-b2ed-68d538094053_652x226.png" width="508" height="176.08588957055215" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80af026b-b46d-4643-b2ed-68d538094053_652x226.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:226,&quot;width&quot;:652,&quot;resizeWidth&quot;:508,&quot;bytes&quot;:92500,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157954726?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80af026b-b46d-4643-b2ed-68d538094053_652x226.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!db-E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80af026b-b46d-4643-b2ed-68d538094053_652x226.png 424w, https://substackcdn.com/image/fetch/$s_!db-E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80af026b-b46d-4643-b2ed-68d538094053_652x226.png 848w, https://substackcdn.com/image/fetch/$s_!db-E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80af026b-b46d-4643-b2ed-68d538094053_652x226.png 1272w, https://substackcdn.com/image/fetch/$s_!db-E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80af026b-b46d-4643-b2ed-68d538094053_652x226.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>#10 - Use prefix for consistency</h2><p>Channels with a common prefix can help visualise an engineering function and highlight relevant channels for engineers. This is especially useful for new joiners, who may find themselves lost in many channels without knowing which are most important. </p><p>Technical program managers (TPMs) or individuals working with multiple teams also find this valuable for coordinating and managing cross-team communication.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q8ef!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928fed63-4d99-425e-a5b2-08263df9beb8_1514x982.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q8ef!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928fed63-4d99-425e-a5b2-08263df9beb8_1514x982.png 424w, https://substackcdn.com/image/fetch/$s_!Q8ef!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928fed63-4d99-425e-a5b2-08263df9beb8_1514x982.png 848w, https://substackcdn.com/image/fetch/$s_!Q8ef!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928fed63-4d99-425e-a5b2-08263df9beb8_1514x982.png 1272w, https://substackcdn.com/image/fetch/$s_!Q8ef!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928fed63-4d99-425e-a5b2-08263df9beb8_1514x982.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q8ef!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928fed63-4d99-425e-a5b2-08263df9beb8_1514x982.png" width="526" height="341.032967032967" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/928fed63-4d99-425e-a5b2-08263df9beb8_1514x982.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:944,&quot;width&quot;:1456,&quot;resizeWidth&quot;:526,&quot;bytes&quot;:165444,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157954726?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928fed63-4d99-425e-a5b2-08263df9beb8_1514x982.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q8ef!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928fed63-4d99-425e-a5b2-08263df9beb8_1514x982.png 424w, https://substackcdn.com/image/fetch/$s_!Q8ef!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928fed63-4d99-425e-a5b2-08263df9beb8_1514x982.png 848w, https://substackcdn.com/image/fetch/$s_!Q8ef!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928fed63-4d99-425e-a5b2-08263df9beb8_1514x982.png 1272w, https://substackcdn.com/image/fetch/$s_!Q8ef!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928fed63-4d99-425e-a5b2-08263df9beb8_1514x982.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>Using a prefix for <em>all channels</em> is not mandatory, but try to find a balance between convenience and clarity.</p></blockquote><h2>Bonus: #11 - Leverage Slack&#8217;s marketplace</h2><p>&#128279; <a href="https://slack.com/marketplace">https://slack.com/marketplace</a></p><p>Slack is more than just a messaging app. It&#8217;s a platform with many supported integrations and a marketplace full of apps for collaboration and productivity.</p><p>Take the time to explore the apps that work best for you and your team. </p><p><em>Some ideas for inspiration:</em></p><ul><li><p><a href="https://slack.com/marketplace/A9G1TH4S2-loom">Loom</a> &#8212; Record demos or quick updates.</p></li><li><p><a href="https://proactiveengineer.slack.com/marketplace/A2RPP3NFR-jira-cloud">Jira</a> &#8212; Create and track team sprints.</p></li><li><p><a href="https://proactiveengineer.slack.com/marketplace/A676ADMV5-gitlab">GitLab</a> &#8212; Track CI/CD statuses and new MRs.</p></li><li><p><a href="https://slack.com/marketplace/A04E6JX41-polly">Polly</a> &#8212; Create quick polls for teams.</p></li><li><p><a href="https://slack.com/marketplace/A89HZ352N-clockwise">Clockwise</a> &#8212; Manage a busy calendar.</p></li><li><p><a href="https://slack.com/marketplace/A0641FFPG80-coffee-donut-chat-alfy">Coffee &amp; Donut Chat</a> &#8212; Randomise coffee chats with the team.</p></li></ul><div><hr></div><p><em><strong>One last thing: </strong></em>Posting a direct message to someone vs. in a channel can be seen as <strong>synchronous</strong> vs. <strong>asynchronous</strong> communication. If you need an urgent response, message that person directly (<strong>sync</strong>). If it&#8217;s not urgent, post it in the channel (<strong>async</strong>).</p><p>Or for clarity, you can signal this at the beginning of your message, like this:</p><blockquote><p><strong>&#9989; &#8220;(Non-urgent)</strong> Can someone look into the error logs?&#8221;<br><strong>&#9989; &#8220;(Urgent)</strong> Can someone look into the deployment failure?&#8221;</p></blockquote><div><hr></div><h2>Wrap Up</h2><p>Teams love using Slack for day-to-day communication. They find new ways to boost productivity through app integrations, Slackbot, formatted links, and more. They have fun with emojis, GIFs, and memes. They pin announcements and links for quick access, and generally make everything easy to search.</p><p><em><strong>To recap:</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0rJb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc32aeca-660a-48b9-b7a6-55ffaefd074e_2364x588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0rJb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc32aeca-660a-48b9-b7a6-55ffaefd074e_2364x588.png 424w, https://substackcdn.com/image/fetch/$s_!0rJb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc32aeca-660a-48b9-b7a6-55ffaefd074e_2364x588.png 848w, https://substackcdn.com/image/fetch/$s_!0rJb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc32aeca-660a-48b9-b7a6-55ffaefd074e_2364x588.png 1272w, https://substackcdn.com/image/fetch/$s_!0rJb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc32aeca-660a-48b9-b7a6-55ffaefd074e_2364x588.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0rJb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc32aeca-660a-48b9-b7a6-55ffaefd074e_2364x588.png" width="1456" height="362" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc32aeca-660a-48b9-b7a6-55ffaefd074e_2364x588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:362,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:205245,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157954726?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc32aeca-660a-48b9-b7a6-55ffaefd074e_2364x588.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0rJb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc32aeca-660a-48b9-b7a6-55ffaefd074e_2364x588.png 424w, https://substackcdn.com/image/fetch/$s_!0rJb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc32aeca-660a-48b9-b7a6-55ffaefd074e_2364x588.png 848w, https://substackcdn.com/image/fetch/$s_!0rJb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc32aeca-660a-48b9-b7a6-55ffaefd074e_2364x588.png 1272w, https://substackcdn.com/image/fetch/$s_!0rJb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc32aeca-660a-48b9-b7a6-55ffaefd074e_2364x588.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="pullquote"><p><em><strong>Fun fact:</strong> Did you know that Slack is an acronym for &#8220;Searchable Log of All Conversation and Knowledge&#8221;?</em></p></div><h3><em><strong>&#128172; Quick Note:</strong></em></h3><p>I recently launched a <a href="https://reviews.proactiveengineer.com/">testimonial page</a> (also known as <em>Wall of Love</em>) for readers to share their thoughts about the newsletter. I would love to feature yours! You can add one through this <a href="https://reviews.proactiveengineer.com/r/review">link</a> &#128588;</p><p><em><strong>Special thanks to Kenny, Nim, Karim, Roxana, and Mark for their beautiful words!</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2V1R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a92af1d-7303-46c7-a73b-098dd85149c5_2290x1236.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2V1R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a92af1d-7303-46c7-a73b-098dd85149c5_2290x1236.png 424w, https://substackcdn.com/image/fetch/$s_!2V1R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a92af1d-7303-46c7-a73b-098dd85149c5_2290x1236.png 848w, https://substackcdn.com/image/fetch/$s_!2V1R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a92af1d-7303-46c7-a73b-098dd85149c5_2290x1236.png 1272w, https://substackcdn.com/image/fetch/$s_!2V1R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a92af1d-7303-46c7-a73b-098dd85149c5_2290x1236.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2V1R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a92af1d-7303-46c7-a73b-098dd85149c5_2290x1236.png" width="1456" height="786" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a92af1d-7303-46c7-a73b-098dd85149c5_2290x1236.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:786,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:576146,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.proactiveengineer.com/i/157954726?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a92af1d-7303-46c7-a73b-098dd85149c5_2290x1236.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2V1R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a92af1d-7303-46c7-a73b-098dd85149c5_2290x1236.png 424w, https://substackcdn.com/image/fetch/$s_!2V1R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a92af1d-7303-46c7-a73b-098dd85149c5_2290x1236.png 848w, https://substackcdn.com/image/fetch/$s_!2V1R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a92af1d-7303-46c7-a73b-098dd85149c5_2290x1236.png 1272w, https://substackcdn.com/image/fetch/$s_!2V1R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a92af1d-7303-46c7-a73b-098dd85149c5_2290x1236.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[#24 Preparing for Tech Interviews, Part 3: Behavioural]]></title><description><![CDATA[Four things to do to prepare for behavioural interviews]]></description><link>https://www.proactiveengineer.com/p/24-preparing-for-tech-interviews</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/24-preparing-for-tech-interviews</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 28 Feb 2025 09:00:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NmkM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to <em><strong>final </strong></em>Part 3 of <em>Preparing for Tech Interviews</em> series, where I share insights and advice gathered from software engineers working at high-growth startups and big tech companies like FAANG.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Recap: </h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NmkM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NmkM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 424w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 848w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 1272w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NmkM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png" width="610" height="372.032967032967" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:888,&quot;width&quot;:1456,&quot;resizeWidth&quot;:610,&quot;bytes&quot;:689579,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!NmkM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 424w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 848w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 1272w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><strong>Rough</strong></em> percentages collected from 50+ engineers at all levels.</figcaption></figure></div><blockquote><p><strong>Note:</strong> companies might have specific requirements/responsibilities for their roles. Make sure to contextualise these estimates based on the role you&#8217;re applying for.</p></blockquote><div><hr></div><h2>Behavioural Interviews</h2><p>If you&#8217;re at this stage, congratulations! You passed the hard technical interviews. However, just because you have the behavioural interview left doesn&#8217;t mean you&#8217;re <em>guaranteed</em> an offer. Behavioural interviews can be the final piece hiring managers need to decide whether you get an offer or not, and at what level you should join. </p><p>So, by putting some effort into this final round, you increase your chances of getting an offer you want and can negotiate.</p><p><em>What is a behavioural interview?</em></p><blockquote><p>It is a way for evaluating candidate&#8217;s experience and ability to perform based on their previous work. It also serves as a culture-fit test to see if the candidate will work well with the team.</p></blockquote><p>Leadership roles (e.g., Staff) require a strong yes in behavioural interviews, just as much as system design (see preparation guide above). In the rest of this post, I&#8217;ll cover <em><strong>four key steps</strong></em> to help you prepare for behavioural interviews.</p><p><em><strong>How to prepare:</strong></em></p><ol><li><p>Research the company</p></li><li><p>Use <strong>CARL</strong> for storytelling, lint with <strong>STAR</strong></p></li><li><p>Speak to the level you&#8217;re applying for</p></li><li><p>No villains in your stories</p></li></ol><div><hr></div><h2>1. Research the company</h2><p>Say you have one day to prepare. <strong>First</strong>, check out the company&#8217;s website and take notes on what they&#8217;re doing (<strong>mission</strong>), what their future plans are (<strong>vision</strong>), how they plan to get there (<strong>strategy</strong>). Your goal is to get a <em>rough</em> idea of why this company exists, where it wants to go, and how you can contribute to its mission. </p><p><strong>Second</strong>, research your interviewer(s). Check their LinkedIn profiles, see what they&#8217;ve been working on, and look for common ground. Any shared experience or interest can be a valuable discussion point during the interview. For example:</p><ul><li><p>You both worked at the same company before.</p></li><li><p>You share interest or expertise in a specific area (e.g., platform engineering).</p><ul><li><p><strong>&#127775; Tip:</strong> Highlight this in your intro. </p></li></ul></li><li><p>You both enjoy reading The Proactive Engineer newsletter.</p></li></ul><p>Your research doesn&#8217;t need to be a full-page paragraph, just a few bullet points and any questions you might have for the interviewer.</p><blockquote><p><strong>&#127775; Tip:</strong> Don&#8217;t ask generic questions that can be found in the <em><strong>/about</strong> </em>page of the company&#8217;s website.</p></blockquote><p>Asking questions that make it seem like you don&#8217;t know what you&#8217;re applying for will give a bad impression. Do your research beforehand. Ask questions that give you insights into the company&#8217;s solution, team culture, and role expectations.</p><blockquote><p><strong>&#127775; Tip:</strong> A good question doesn&#8217;t have a binary answer (yes or no).</p></blockquote><p><em><strong>Here are few examples:</strong></em></p><p>&#10060; What is &lt;company&gt;?<br>&#9989; I&#8217;ve read that &lt;company&gt; does &lt;solution&gt;, could you tell me more about that?</p><p>&#10060; Do you need backend or frontend experience?<br>&#9989; Could you share more about the responsibilities or expectations of the role? </p><p>&#10060; Do you like working at &lt;company&gt;?<br>&#9989; What&#8217;s the one thing you enjoy most about working at &lt;company&gt;?</p><p>Coming prepared with questions and a sense of curiosity is a positive signal to the interviewers.</p><h2>2. Use CARL for storytelling, lint with STAR</h2><p>Now, when answering questions, you need to build strong behavioural responses by practicing how to communicate your past experiences. The key is storytelling.</p><p>The common advice on the internet is to follow the <strong>STAR</strong> method for storytelling. <strong>STAR</strong> is a way that lets you describe a situation you handled at work, providing key details for interviewers to assess your experience. It is an acronym for:</p><ul><li><p><strong>S</strong>ituation<strong>:</strong> What was happening, who was involved, and why it mattered.</p></li><li><p><strong>T</strong>ask<strong>:</strong> What was your responsibility and what you needed to achieve.</p></li><li><p><strong>A</strong>ction<strong>:</strong> What you did, how you did it, and why.</p></li><li><p><strong>R</strong>esult<strong>:</strong> What was the outcome.</p></li></ul><p><strong>STAR</strong> is a good starting point, however I don&#8217;t recommend using it for all your responses because it lacks the character&#8217;s growth&#8212;you. As an interviewer, I am interested to hear about your stories and how you grew from each one of them. Lessons, insights, reflections, things you can take away from an experience. </p><p>So, instead I recommend using the <strong><a href="https://reflection.ed.ac.uk/reflectors-toolkit/reflecting-on-experience/carl">CARL</a></strong> method. It is a refined version of<strong> STAR</strong> that allows you to describe the <strong>context</strong> you worked in, the <strong>actions</strong> you took, the <strong>results</strong> you achieved, and the <strong>learnings</strong> you&#8217;ve taken away. <strong>CARL</strong> is an acronym for:</p><ul><li><p><strong>C</strong>ontext<strong>:</strong> [similar to Situation] Share context of what was happening.</p></li><li><p><strong>A</strong>ction: [same] Explain what you did, how you did it, and why.</p></li><li><p><strong>R</strong>esult<strong>:</strong> [same] Share the outcome.</p></li><li><p><strong>L</strong>earnings: [new] Share what you learned from the choices you made.</p></li></ul><blockquote><p><strong>&#127775; Tip:</strong> I previously covered a similar version (<strong>CAR</strong>s) and how to write them in a Brag document for future behavioural interviews. For more, check out the post below.</p></blockquote><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;3bcb71ae-89d6-43e8-accc-fdf6e0f0fbf0&quot;,&quot;caption&quot;:&quot;Imagine your performance review is coming up in, let&#8217;s say in two weeks, and you want to highlight the skills and areas you've developed over the past ~6 months. First questions pop up:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#10 Create Your Brag Document &#127894;&#65039;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:27096115,&quot;name&quot;:&quot;Shehab Abdel-Salam&quot;,&quot;bio&quot;:&quot;Helping engineers become proactive leaders. Senior Software Engineer @ Proofpoint | Instructor | Author of The Proactive Engineer newsletter&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd029e537-6372-42e5-a999-c25688df6be4_2036x2036.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-11-01T09:00:56.756Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a10ce2-98ab-40c1-ba0c-db079a3bdd01_450x336.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.newsletter.shehababdelsalam.com/p/10-create-your-brag-document&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:147687596,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:6,&quot;comment_count&quot;:6,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Proactive Engineer&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1077f3-b9ff-4f78-8295-f2d8235ec5b0_182x182.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Finally, here&#8217;s my strategy for preparing behavioural responses:</p><blockquote><p><strong>Step 1:</strong> Write down a few compelling stories from your previous work.</p><p><strong>Step 2:</strong> Use <strong>STAR</strong> to lint or refine, make sure they have a clear structure.</p><p><strong>Step 3:</strong> Repurpose them to <strong>CARL</strong> by highlighting your growth in each story.</p></blockquote><p>I recently found <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Austen McDonald&quot;,&quot;id&quot;:59992961,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e807098d-a85a-41c5-aa0d-c99ffe66034a_1514x1514.jpeg&quot;,&quot;uuid&quot;:&quot;1a273bcb-ca32-4d1f-abea-b983cd84da2d&quot;}" data-component-name="MentionToDOM"></span>&#8217;s Substack, where he shares excellent advice on preparing for behavioural interviews. Austen was a Senior Engineering Manager at Meta and Chair of the hiring committee for iOS and Android pipelines.</p><p>Check out his recent discussion on approaching behavioural interviews:</p><div id="youtube2-bBvPQZmPXwQ" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;bBvPQZmPXwQ&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/bBvPQZmPXwQ?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>I recommend checking out his newsletter: <a href="https://thebehavioral.substack.com/archive">Mastering the Behavioral Interview</a></p><div><hr></div><h2>3. Speak to the level you&#8217;re applying for</h2><p>I&#8217;ve been in hiring committees where we had candidates who were technically strong but received a lower-level offer based on their behavioural interviews. Frustrating as it sounds, but unfortunately that&#8217;s the case. Companies hiring for leadership roles (e.g., Staff) look for signs of strong decision-making in candidates&#8217; responses about their past experiences. If a candidate provides shallow answers or spends too much time discussing lower-level details, committees will be cautious about putting that candidate in a critical role.</p><blockquote><p>If I&#8217;m interviewing a senior candidate and the conversation tends to go more on lower-level topics, chances are the candidate will be hired at a lower level.</p></blockquote><p>To fix this, focus on sharing stories that show growth and high-level thinking in your work.  </p><ul><li><p><strong>Mid-level:</strong> The features you&#8217;ve worked on and how you delivered them.</p></li><li><p><strong>Senior-level:</strong> The projects you&#8217;ve worked on and how you supported the team.</p></li><li><p><strong>Staff-level:</strong> The projects you&#8217;ve led and their organisational impact.</p></li></ul><blockquote><p><strong>&#127775; Tip:</strong> I can talk all day about how my team&#8217;s code is perfect and clean, but none of that matters if it doesn&#8217;t solve a user or a business problem.</p></blockquote><p>Speak to the level you&#8217;re applying for. Don&#8217;t spend time on &#8220;small potato&#8221; topics like: code refactoring, what&#8217;s a good PR, what&#8217;s an ideal stand-up, etc.   </p><h2>4. No villains in your stories</h2><p>Your goal is to pass the interview, get an offer, join the team, and do great work. </p><p>Your goal is not to badmouth your previous companies or create villains to make your stories more compelling. This will negatively impact your overall interview process. Some reasons are:</p><ul><li><p>You&#8217;ll certainly badmouth the new company if/when you decide to leave.</p></li><li><p>You&#8217;ll signal a blame-culture attitude (e.g., <em>&#8220;our project failed because &lt;person&gt; did not bla bla&#8221;</em>).</p></li><li><p>You&#8217;ll come across as difficult to work with, which is the last thing the team needs to worry about.</p></li></ul><p>And in general, interviewers will question your &#8220;innocence&#8221; if all of your stories revolve around having villains at work.</p><p>Story time. Years ago, I once broke a platform&#8217;s observability by accident for a few days and no one noticed. As painful and awkward as this was, it created an opportunity for my team and me to re-evaluate our platform alerts, refine our incident response process, and improve our communication speed with users. I am the villain in this story, but the hard lesson here is the one takeaway worth sharing (Think <strong>CARL</strong>).</p><p>Every other person I&#8217;ve worked with has a similar &#8220;broke production&#8221; story, and none of them are villains. These incidents were just hidden opportunities waiting to be <em>stumbled on</em> by someone for improvement.</p><p>Focus on telling high-impact stories and new learnings. No villains. Even if you&#8217;re leaving because of a bad environment, frame your reason for leaving as looking for better opportunities and how the new company can offer that for you.</p><blockquote><p><strong>&#127775; Final tip:</strong> Be authentic to your self. If you&#8217;re in the behavioural round, it means they value your technical skills and they want to see how you&#8217;ll fit in with the team. Come prepared and make it <em>ridiculously</em> easy for them to say yes.</p></blockquote><div class="pullquote"><p> <em>And these are the four things to do to prepare for behavioural interviews</em></p></div><h2>Wrap up</h2><p>As you advance in your career, behavioural interviews will become increasingly important, especially if you&#8217;re applying for a leadership role. So yes, soft skills are important for engineers.</p><p><em><strong>To recap, four things to prepare:</strong></em></p><ol><li><p>Research the company</p></li><li><p>Use <strong>CARL</strong> for storytelling, lint with <strong>STAR</strong></p></li><li><p>Speak to the level you&#8217;re applying for</p></li><li><p>No villains in your stories</p></li></ol><div class="pullquote"><p>Good luck to anyone doing tech interviews, hope you find what you&#8217;re looking for!</p></div><p><em><strong>Quick ask: </strong></em>If you enjoyed this three-part series, let me know in the polls below. Also, if you have a question or a topic you&#8217;d like me to cover in the newsletter, feel free to submit it through <a href="https://docs.google.com/forms/d/e/1FAIpQLScl1DfixPMU17vO0yyt0c9nSQ9qDnDWgn-RBO90KlKyWXum9A/viewform">this form</a>. &#128588; </p><div class="poll-embed" data-attrs="{&quot;id&quot;:277015}" data-component-name="PollToDOM"></div><p>If you haven&#8217;t subscribed to the newsletter yet, make sure you do. &#128591;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[#23 Preparing for Tech Interviews, Part 2: System Design]]></title><description><![CDATA[Four things to do to prepare for system design interviews]]></description><link>https://www.proactiveengineer.com/p/23-preparing-for-tech-interviews</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/23-preparing-for-tech-interviews</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 21 Feb 2025 09:02:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NmkM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Part 2 of <em>Preparing for Tech Interviews</em> series, where I share insights and advice gathered from software engineers working at high-growth startups and big tech companies like FAANG.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Preparation Recap:</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NmkM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NmkM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 424w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 848w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 1272w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NmkM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png" width="610" height="372.032967032967" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:888,&quot;width&quot;:1456,&quot;resizeWidth&quot;:610,&quot;bytes&quot;:689579,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!NmkM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 424w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 848w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 1272w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><strong>Rough</strong></em> percentages collected from 50+ engineers at all levels.</figcaption></figure></div><blockquote><p><strong>Note:</strong> companies might have specific requirements/responsibilities for their roles. Make sure to contextualise these estimates based on the role you&#8217;re applying for.</p></blockquote><div><hr></div><h2>System Design</h2><p>System design interviews can be one of the most intimidating rounds for engineers. However, with the right preparation and practice they can become the easiest to crack. A system design interview is a design activity that allows engineers to demonstrate their knowledge and expertise in building systems, break down a large system into a functional MVP, and discuss requirements and trade-offs with other engineers (interviewers).</p><blockquote><p>System Design is not a Q&amp;A interview, it is a collaborative design session, and you&#8217;re the one leading it.</p></blockquote><p><em><strong>So, here are four key things to do to prepare for system design interviews:</strong></em></p><ol><li><p>Refresh on the fundamentals</p></li><li><p>Learn to scope</p></li><li><p>Start high-level, end with deep dives</p></li><li><p>Do mock interviews</p></li></ol><div><hr></div><h3>1. Refresh on the fundamentals</h3><p>One of the strong signals interviewers look for in a candidate isn&#8217;t just familiarity with technologies but a deep understanding of the core fundamentals that guide their technology choices. A strong candidate can design a system without being locked into a particular tech stack. And if they do choose a stack, they can justify its pros and cons. When doing the interview, be careful about throwing out a lot of technology names without logical reasoning.</p><p><em>Here are two good/bad examples of designing a solution:</em></p><blockquote><p>&#10060; I&#8217;ll use a MongoDB because it&#8217;s &#8220;fast&#8221; and &#8220;easy to scale&#8221;.<br>&#9989; Given the data locality imposed by the system, I&#8217;ll use a NoSQL database.</p><p>&#10060; Scaling Database? We can do data sharding using AWS&#8217; RDS (Aurora Limitless).<br>&#9989; Depending on the read/write ratio, if query performance is already optimised with indexing, we can introduce a leader-follower cluster, creating read replicas for read-heavy paths and a single master for write-heavy paths. </p></blockquote><p><em><strong>So what are the fundamentals?</strong></em></p><p>Imagine there are three foundational layers beneath <strong>Technologies</strong>, representing the <strong>Fundamentals</strong>. These are:</p><ol><li><p>Core Concepts</p></li><li><p>Protocols / Interfaces</p></li><li><p>Patterns / Techniques</p></li></ol><p>The boundaries don&#8217;t matter; they highlight topics in specific areas like networking, protocols, data formats, and communication patterns. Technologies are solution offerings from different companies (e.g., cloud providers like AWS, Azure, and GCP) that solve a fundamental problem using a specific technology.</p><p>That&#8217;s why when candidates say they&#8217;ll use an object storage in their design&#8212;an S3 bucket or GCP bucket&#8212;I don&#8217;t care which technology they pick. I care that they pick the right solution for the problem (an object storage).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5Ep0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1789ae-a094-4da2-b0ff-e95ab3ee8dec_1518x828.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5Ep0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1789ae-a094-4da2-b0ff-e95ab3ee8dec_1518x828.png 424w, https://substackcdn.com/image/fetch/$s_!5Ep0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1789ae-a094-4da2-b0ff-e95ab3ee8dec_1518x828.png 848w, https://substackcdn.com/image/fetch/$s_!5Ep0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1789ae-a094-4da2-b0ff-e95ab3ee8dec_1518x828.png 1272w, https://substackcdn.com/image/fetch/$s_!5Ep0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1789ae-a094-4da2-b0ff-e95ab3ee8dec_1518x828.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5Ep0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1789ae-a094-4da2-b0ff-e95ab3ee8dec_1518x828.png" width="550" height="299.93131868131866" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a1789ae-a094-4da2-b0ff-e95ab3ee8dec_1518x828.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:550,&quot;bytes&quot;:86440,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5Ep0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1789ae-a094-4da2-b0ff-e95ab3ee8dec_1518x828.png 424w, https://substackcdn.com/image/fetch/$s_!5Ep0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1789ae-a094-4da2-b0ff-e95ab3ee8dec_1518x828.png 848w, https://substackcdn.com/image/fetch/$s_!5Ep0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1789ae-a094-4da2-b0ff-e95ab3ee8dec_1518x828.png 1272w, https://substackcdn.com/image/fetch/$s_!5Ep0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a1789ae-a094-4da2-b0ff-e95ab3ee8dec_1518x828.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Interviewers look for signals of your knowledge depth beyond <strong>Technologies</strong>, so deepen your understanding of the <strong>Fundamentals</strong> to confidently explain any layer of the stack during the interview. They also help you make better decisions during the system design interview. Focus on the problem, not the technologies.</p><blockquote><p><strong>&#127775; Tip:</strong> Technologies change over time. Fundamentals stay the same.</p></blockquote><p><em><strong>Here are two examples of topics around Technologies/Fundamentals:</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Jhxo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d169496-38af-4b31-a8b9-4faf5f07833f_1494x854.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jhxo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d169496-38af-4b31-a8b9-4faf5f07833f_1494x854.png 424w, https://substackcdn.com/image/fetch/$s_!Jhxo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d169496-38af-4b31-a8b9-4faf5f07833f_1494x854.png 848w, https://substackcdn.com/image/fetch/$s_!Jhxo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d169496-38af-4b31-a8b9-4faf5f07833f_1494x854.png 1272w, https://substackcdn.com/image/fetch/$s_!Jhxo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d169496-38af-4b31-a8b9-4faf5f07833f_1494x854.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jhxo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d169496-38af-4b31-a8b9-4faf5f07833f_1494x854.png" width="660" height="377.14285714285717" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d169496-38af-4b31-a8b9-4faf5f07833f_1494x854.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:832,&quot;width&quot;:1456,&quot;resizeWidth&quot;:660,&quot;bytes&quot;:162201,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Jhxo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d169496-38af-4b31-a8b9-4faf5f07833f_1494x854.png 424w, https://substackcdn.com/image/fetch/$s_!Jhxo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d169496-38af-4b31-a8b9-4faf5f07833f_1494x854.png 848w, https://substackcdn.com/image/fetch/$s_!Jhxo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d169496-38af-4b31-a8b9-4faf5f07833f_1494x854.png 1272w, https://substackcdn.com/image/fetch/$s_!Jhxo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d169496-38af-4b31-a8b9-4faf5f07833f_1494x854.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Databases</strong>: Technologies vs Fundamentals</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vUOp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cd9da09-5bcd-4e15-b220-c542182a6a74_1482x806.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vUOp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cd9da09-5bcd-4e15-b220-c542182a6a74_1482x806.png 424w, https://substackcdn.com/image/fetch/$s_!vUOp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cd9da09-5bcd-4e15-b220-c542182a6a74_1482x806.png 848w, https://substackcdn.com/image/fetch/$s_!vUOp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cd9da09-5bcd-4e15-b220-c542182a6a74_1482x806.png 1272w, https://substackcdn.com/image/fetch/$s_!vUOp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cd9da09-5bcd-4e15-b220-c542182a6a74_1482x806.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vUOp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cd9da09-5bcd-4e15-b220-c542182a6a74_1482x806.png" width="658" height="357.9230769230769" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9cd9da09-5bcd-4e15-b220-c542182a6a74_1482x806.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:792,&quot;width&quot;:1456,&quot;resizeWidth&quot;:658,&quot;bytes&quot;:173402,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vUOp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cd9da09-5bcd-4e15-b220-c542182a6a74_1482x806.png 424w, https://substackcdn.com/image/fetch/$s_!vUOp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cd9da09-5bcd-4e15-b220-c542182a6a74_1482x806.png 848w, https://substackcdn.com/image/fetch/$s_!vUOp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cd9da09-5bcd-4e15-b220-c542182a6a74_1482x806.png 1272w, https://substackcdn.com/image/fetch/$s_!vUOp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cd9da09-5bcd-4e15-b220-c542182a6a74_1482x806.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Networking</strong>: Technologies vs Fundamentals</figcaption></figure></div><p>Take the time to refresh on the fundamentals and deepen your expertise in a specific area that interests you. That could be working with databases, networking, security, etc.</p><blockquote><p><strong>&#127775; Tip:</strong> Interviewers look for breadth and depth in the design, make it easy for them to see that.</p></blockquote><h3>2. Learn to scope</h3><p>This one is similar to task-based interviews, covered in the Coding post:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;a1c2e807-d63a-459e-a2a1-27996fb10885&quot;,&quot;caption&quot;:&quot;Welcome to Part 1 of Preparing for Tech Interviews series, where I share insights and advice gathered from software engineers working at high-growth startups and big tech companies like FAANG.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#22 Preparing for Tech Interviews, Part 1: Coding&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:27096115,&quot;name&quot;:&quot;Shehab Abdel-Salam&quot;,&quot;bio&quot;:&quot;Helping engineers become proactive leaders. Senior Software Engineer @ Proofpoint | Instructor | Author of The Proactive Engineer newsletter&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd029e537-6372-42e5-a999-c25688df6be4_2036x2036.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-02-14T09:02:44.670Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.newsletter.shehababdelsalam.com/p/22-preparing-for-tech-interviews&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:154889587,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:6,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Proactive Engineer&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1077f3-b9ff-4f78-8295-f2d8235ec5b0_182x182.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Learning how to scope (i.e. gather requirements) is critical in a system design interview. When asked to design a system, you need to think about:</p><ol><li><p><strong>Functional requirements (FR)</strong>: Core features/functionalities of the system.</p></li><li><p><strong>Non-functional requirements (NFR)</strong>: Attributes of the system.</p></li></ol><p>For example, designing a system like <strong>Uber</strong> will have something like:</p><ol><li><p><strong>FR:</strong> Users can request rides to a specific location.</p></li><li><p><strong>NFR:</strong> Real-time data (Uber should support live tracking)</p></li></ol><blockquote><p>&#127775; <strong>Tip:</strong> NFRs usually end with -<em><strong>ility</strong></em><strong> </strong>(e.g., Scalability, Availability, Reliability). However, only mention those that are <strong>important and relevant for your system</strong>. Don&#8217;t list them out without purpose.</p></blockquote><p>Practice taking ambiguous systems and gathering requirements for each one. You&#8217;ll find lots of examples in the study resources down below.</p><h3>3. Start high-level, end with deep dives </h3><p>Once you&#8217;ve gathered the requirements for a system, start designing an end-to-end working solution (sharing your thought process) at a high level, and then dive deep into 1-3 technical components at the end.</p><p>Your approach should be to:</p><ol><li><p>Satisfy the <strong>FRs</strong> via <strong>high-level</strong>.</p></li><li><p>Satisfy the <strong>NFRs</strong> via <strong>deep dives</strong>.</p></li></ol><p>To illustrate, here are two examples of how to approach a system design interview question.</p><h2>Example #1 - Spotify</h2><blockquote><p>Design Spotify: a music streaming platform where users can search for songs, play music, and create playlists.</p></blockquote><p><em><strong>Step 1: Scope the system</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rvuA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f41fd5-51ee-4179-ac25-6c5b3ed0acf7_737x754.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rvuA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f41fd5-51ee-4179-ac25-6c5b3ed0acf7_737x754.png 424w, https://substackcdn.com/image/fetch/$s_!rvuA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f41fd5-51ee-4179-ac25-6c5b3ed0acf7_737x754.png 848w, https://substackcdn.com/image/fetch/$s_!rvuA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f41fd5-51ee-4179-ac25-6c5b3ed0acf7_737x754.png 1272w, https://substackcdn.com/image/fetch/$s_!rvuA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f41fd5-51ee-4179-ac25-6c5b3ed0acf7_737x754.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rvuA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f41fd5-51ee-4179-ac25-6c5b3ed0acf7_737x754.png" width="376" height="384.6729986431479" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2f41fd5-51ee-4179-ac25-6c5b3ed0acf7_737x754.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:754,&quot;width&quot;:737,&quot;resizeWidth&quot;:376,&quot;bytes&quot;:120422,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rvuA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f41fd5-51ee-4179-ac25-6c5b3ed0acf7_737x754.png 424w, https://substackcdn.com/image/fetch/$s_!rvuA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f41fd5-51ee-4179-ac25-6c5b3ed0acf7_737x754.png 848w, https://substackcdn.com/image/fetch/$s_!rvuA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f41fd5-51ee-4179-ac25-6c5b3ed0acf7_737x754.png 1272w, https://substackcdn.com/image/fetch/$s_!rvuA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f41fd5-51ee-4179-ac25-6c5b3ed0acf7_737x754.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em><strong>Step 2: Design a high-level solution</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LxXa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac2521e-7e43-4b5b-8b41-6c2e995e8081_1576x1042.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LxXa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac2521e-7e43-4b5b-8b41-6c2e995e8081_1576x1042.png 424w, https://substackcdn.com/image/fetch/$s_!LxXa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac2521e-7e43-4b5b-8b41-6c2e995e8081_1576x1042.png 848w, https://substackcdn.com/image/fetch/$s_!LxXa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac2521e-7e43-4b5b-8b41-6c2e995e8081_1576x1042.png 1272w, https://substackcdn.com/image/fetch/$s_!LxXa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac2521e-7e43-4b5b-8b41-6c2e995e8081_1576x1042.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LxXa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac2521e-7e43-4b5b-8b41-6c2e995e8081_1576x1042.png" width="1456" height="963" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ac2521e-7e43-4b5b-8b41-6c2e995e8081_1576x1042.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:963,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:261985,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LxXa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac2521e-7e43-4b5b-8b41-6c2e995e8081_1576x1042.png 424w, https://substackcdn.com/image/fetch/$s_!LxXa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac2521e-7e43-4b5b-8b41-6c2e995e8081_1576x1042.png 848w, https://substackcdn.com/image/fetch/$s_!LxXa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac2521e-7e43-4b5b-8b41-6c2e995e8081_1576x1042.png 1272w, https://substackcdn.com/image/fetch/$s_!LxXa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac2521e-7e43-4b5b-8b41-6c2e995e8081_1576x1042.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em><strong>Step 3: Go through 1-2 deep dives:</strong></em></p><ul><li><p><strong>Search Service</strong>: How to build a search engine for songs, artists, and albums.</p></li><li><p><strong>Play Service</strong>: How to handle traffic spikes for song streaming.</p></li><li><p><strong>Play Service</strong>: How to handle traffic spikes for top-10 hits.</p></li><li><p><strong>Play Service</strong>: How to handle buffering and adjust quality based on network conditions.</p></li><li><p><strong>Playlists Service</strong>: How to sync users&#8217; playlists in real time across different devices.</p><p></p></li></ul><h2>Interview #2 - Design YouTube</h2><blockquote><p>Design YouTube: a video streaming platform where users can upload, search, and watch videos.</p></blockquote><p><em><strong>Step 1: Scope the system</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1sIM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faad80c98-ec73-40d1-8481-585c9b4f1955_744x804.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1sIM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faad80c98-ec73-40d1-8481-585c9b4f1955_744x804.png 424w, https://substackcdn.com/image/fetch/$s_!1sIM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faad80c98-ec73-40d1-8481-585c9b4f1955_744x804.png 848w, https://substackcdn.com/image/fetch/$s_!1sIM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faad80c98-ec73-40d1-8481-585c9b4f1955_744x804.png 1272w, https://substackcdn.com/image/fetch/$s_!1sIM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faad80c98-ec73-40d1-8481-585c9b4f1955_744x804.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1sIM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faad80c98-ec73-40d1-8481-585c9b4f1955_744x804.png" width="350" height="378.2258064516129" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aad80c98-ec73-40d1-8481-585c9b4f1955_744x804.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:804,&quot;width&quot;:744,&quot;resizeWidth&quot;:350,&quot;bytes&quot;:139408,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1sIM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faad80c98-ec73-40d1-8481-585c9b4f1955_744x804.png 424w, https://substackcdn.com/image/fetch/$s_!1sIM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faad80c98-ec73-40d1-8481-585c9b4f1955_744x804.png 848w, https://substackcdn.com/image/fetch/$s_!1sIM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faad80c98-ec73-40d1-8481-585c9b4f1955_744x804.png 1272w, https://substackcdn.com/image/fetch/$s_!1sIM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faad80c98-ec73-40d1-8481-585c9b4f1955_744x804.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em><strong>Step 2: Design a high-level solution</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yDQ-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc16b6028-10a1-46eb-b07d-2eac556a06d9_2098x1002.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yDQ-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc16b6028-10a1-46eb-b07d-2eac556a06d9_2098x1002.png 424w, https://substackcdn.com/image/fetch/$s_!yDQ-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc16b6028-10a1-46eb-b07d-2eac556a06d9_2098x1002.png 848w, https://substackcdn.com/image/fetch/$s_!yDQ-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc16b6028-10a1-46eb-b07d-2eac556a06d9_2098x1002.png 1272w, https://substackcdn.com/image/fetch/$s_!yDQ-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc16b6028-10a1-46eb-b07d-2eac556a06d9_2098x1002.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yDQ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc16b6028-10a1-46eb-b07d-2eac556a06d9_2098x1002.png" width="1456" height="695" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c16b6028-10a1-46eb-b07d-2eac556a06d9_2098x1002.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:695,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:326008,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!yDQ-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc16b6028-10a1-46eb-b07d-2eac556a06d9_2098x1002.png 424w, https://substackcdn.com/image/fetch/$s_!yDQ-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc16b6028-10a1-46eb-b07d-2eac556a06d9_2098x1002.png 848w, https://substackcdn.com/image/fetch/$s_!yDQ-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc16b6028-10a1-46eb-b07d-2eac556a06d9_2098x1002.png 1272w, https://substackcdn.com/image/fetch/$s_!yDQ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc16b6028-10a1-46eb-b07d-2eac556a06d9_2098x1002.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em><strong>Step 3: Go through 1-2 deep dives:</strong></em></p><ul><li><p><strong>Watch Service</strong> &#8211; How to handle users with low internet connections to ensure smooth video streaming.</p></li><li><p><strong>Watch Service</strong> &#8211; How to handle traffic spikes during peak usage times.</p></li><li><p><strong>Video Processor</strong> &#8211; How to handle corrupted videos and generate different qualities.</p></li></ul><h3>4. Do mock interviews</h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cIKs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7f2e06-5625-4709-addf-287436cb47c5_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cIKs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7f2e06-5625-4709-addf-287436cb47c5_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!cIKs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7f2e06-5625-4709-addf-287436cb47c5_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!cIKs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7f2e06-5625-4709-addf-287436cb47c5_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!cIKs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7f2e06-5625-4709-addf-287436cb47c5_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cIKs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7f2e06-5625-4709-addf-287436cb47c5_512x512.png" width="104" height="104" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc7f2e06-5625-4709-addf-287436cb47c5_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:104,&quot;bytes&quot;:51404,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cIKs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7f2e06-5625-4709-addf-287436cb47c5_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!cIKs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7f2e06-5625-4709-addf-287436cb47c5_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!cIKs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7f2e06-5625-4709-addf-287436cb47c5_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!cIKs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7f2e06-5625-4709-addf-287436cb47c5_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Mock interviews are a great way to practice system design interviews and get feedback from others. That can be a friend, mentor, colleague, etc.</p><p>Benefits of doing mock interviews is that they help you understand:</p><ul><li><p>Your approach to gathering requirements</p></li><li><p>How you communicate ideas to engineers</p></li><li><p>Where you get stuck on the technical components</p></li><li><p>How you handle &#8220;Bar raiser&#8221; questions or direction shifts</p></li></ul><p>If mock interviews aren&#8217;t an option, try to set aside 45 minutes of deep focus time to work through an interview question on your own. You can record yourself if you want to simulate an actual interview with you speaking.</p><div class="pullquote"><p><em><strong>And these are the four things to do to prepare for system design interviews</strong></em></p></div><h3>&#128214; Study Resources</h3><ul><li><p>If you&#8217;re in a hurry, read <a href="https://www.hellointerview.com/learn/system-design/in-a-hurry/introduction">System Design intro by HelloInterview</a></p></li><li><p>Highly recommend <a href="https://www.amazon.co.uk/System-Design-Interview-Insiders-Guide/dp/1736049119/ref=pd_lpo_d_sccl_1/260-2346086-3395038?pd_rd_w=q5fFE&amp;content-id=amzn1.sym.bb13d3fc-af40-4fff-a822-e0e4c415da96&amp;pf_rd_p=bb13d3fc-af40-4fff-a822-e0e4c415da96&amp;pf_rd_r=ARYQQ8PQCZASGFFNKWAZ&amp;pd_rd_wg=MSbFz&amp;pd_rd_r=e36593fb-b30a-43d9-910d-f8f0b742db33&amp;pd_rd_i=1736049119&amp;psc=1">System Design Interviews by Alex Xu and Sahn Lam</a></p></li><li><p><a href="https://www.amazon.co.uk/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321">Designing Data-Intensive Application</a>, excellent resource for distributed systems.</p></li><li><p>Checkout <a href="https://www.youtube.com/@hello_interview/playlists">Hello Interviews Playlists</a> on YouTube, phenomenal walkthroughs by Evan King and Stefan Mai.</p></li><li><p><a href="https://www.amazon.co.uk/Fundamentals-Software-Architecture-Comprehensive-Characteristics/dp/1492043451">Fundamentals of Software Architecture</a>, a great intro to architectural thinking.</p></li></ul><blockquote><p>&#11088;&#65039; <strong>Final tip:</strong> You only learn if you try. So don&#8217;t consume all these resources without actively practicing. </p></blockquote><div><hr></div><h2>Wrap up</h2><p>Take a vague system design problem, narrow it down to a set of <strong>functional</strong> (FR) and <strong>non-functional</strong> (NFR) requirements, design the solution end-to-end on a high-level, and end with 1-2 deep dives. If you find any knowledge gaps during interview practice, take notes of the topics/areas and study them.</p><p>There&#8217;s no secret formula for &#8220;mastering&#8221; system design interviews. A system design interview can go in a million direction. The more you prepare, the more confident you&#8217;ll become in tackling ambiguous problems. So, practice, practice, practice.</p><p><em><strong>To recap:</strong></em></p><ol><li><p><em><strong>Refresh on the fundamentals</strong></em></p></li><li><p><em><strong>Learn to scope</strong></em></p></li><li><p><em><strong>Start high-level, end with deep dives</strong></em></p></li><li><p><em><strong>Do mock interviews</strong></em></p></li></ol><div><hr></div><p>If you&#8217;re finding this newsletter valuable, share it with a friend, and consider subscribing if you haven&#8217;t already.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[#22 Preparing for Tech Interviews, Part 1: Coding]]></title><description><![CDATA[Welcome to Part 1 of Preparing for Tech Interviews series, where I share insights and advice gathered from software engineers working at high-growth startups and big tech companies like FAANG.]]></description><link>https://www.proactiveengineer.com/p/22-preparing-for-tech-interviews</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/22-preparing-for-tech-interviews</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 14 Feb 2025 09:02:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NmkM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Part 1 of <em>Preparing for Tech Interviews</em> series, where I share insights and advice gathered from software engineers working at high-growth startups and big tech companies like FAANG.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Preparation Guide</h2><p>First, let&#8217;s break down the preparation time for each interview based on engineering experience.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NmkM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NmkM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 424w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 848w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 1272w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NmkM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png" width="610" height="372.032967032967" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:888,&quot;width&quot;:1456,&quot;resizeWidth&quot;:610,&quot;bytes&quot;:689579,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NmkM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 424w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 848w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 1272w, https://substackcdn.com/image/fetch/$s_!NmkM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb62715f6-5f09-4e4f-bbab-694010657f67_1814x1106.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><strong>Rough</strong></em> percentages collected from 50+ engineers at all levels.</figcaption></figure></div><blockquote><p><strong>Note:</strong> companies might have specific requirements/responsibilities for their roles. Make sure to contextualise these estimates based on the role you&#8217;re applying for.</p></blockquote><p><em><strong>Important insights:</strong></em></p><ol><li><p>Junior / Fresh Grads should focus on their <strong>problem-solving </strong>skills through programming and on explaining their thought process. Having general system / software design knowledge is a plus.</p></li><li><p>Mid-Level Engineers are expected to have <strong>some</strong> <strong>experience working with production-grade systems</strong>. While coding remains a priority, they should invest time in preparing for<strong> </strong>system design and behavioural.</p></li><li><p>Senior Engineers <strong>cannot pass solely on coding</strong> (only 40%). They are expected to demonstrate <strong>strong system design skills and communication skills</strong>. Some companies also expect them to operate as a tech lead or mentor to juniors, so they might be asked leadership questions in their behavioural interviews.</p></li><li><p>Staff Engineers is the first rung on the leadership ladder. They are expected to demonstrate <strong>deep technical expertise in system design</strong> and<strong> leadership</strong> in behavioural interviews. A candidate with:</p><blockquote><p><strong>strong</strong> system design + <strong>strong</strong> behavioural + <strong>okay</strong> coding = <strong>yes </strong></p></blockquote></li><li><p>Principal Engineers&#8217; preparation is harder to pin down since it depends on their industry expertise and the business needs. However, their main role is to shape the company&#8217;s technical direction, so the focus should be on demonstrating<strong> organisational impact and deep technical expertise </strong>relevant to the role. </p></li></ol><blockquote><p><strong>Note</strong>: Some companies merge or expand roles based on their structure. Staff/Senior engineers are often labeled as Tech Leads. Mid-level engineers may be divided into multiple levels, such as E3/E4 at <strong>Meta</strong> or SDE II/III at <strong>Amazon</strong>.</p></blockquote><div><hr></div><h2>Part One: Coding Interviews</h2><p>There are two types of coding interviews:</p><ol><li><p><em><strong>Algorithmic</strong></em></p></li></ol><blockquote><p>A standard interview to evaluate a candidate&#8217;s knowledge of data structures, algorithms (DSA), and complexity analysis through coding problems.<br><em><strong>Examples:</strong></em> <em>Binary Search, String Manipulation, Tree Traversal, etc.</em></p></blockquote><ol start="2"><li><p><em><strong>Task-based</strong></em></p></li></ol><blockquote><p>An exercise (or take-home assignment) to evaluate a candidate&#8217;s knowledge through application development. Ideal for assessing specific roles such as Backend, Frontend, and DevOps.<br><em><strong>Examples: </strong>CRUD Applications (e.g., ToDo App), Web Scrapper, etc.</em></p></blockquote><div><hr></div><h2>I. Algorithmic Interviews</h2><blockquote><p><em>More common in big tech and large companies than in small ones and startups.</em></p></blockquote><p>Algorithmic interviews are the standard for assessing CS graduates and junior engineers. These interviews are great for testing the foundations like <strong>data-structures and algorithms, Big O analysis, object-oriented programming, design patterns,</strong> etc.</p><p>Since these candidates don&#8217;t have much production experience, companies rely on algorithmic interviews to evaluate their problem-solving skills<strong> </strong>and their understanding of core software engineering principles.</p><p><em><strong>Four Things to prepare for Algorithmic Interviews:</strong></em></p><ol><li><p>Data-structures and Algorithms (DSA)</p></li><li><p>Time and Space Complexity (BigO)</p></li><li><p>Thinking Vocally</p></li><li><p>Practicing Pattern Recognition</p></li></ol><h3>1. Data Structures and Algorithms (DSA)</h3><p>First things first, you need to learn your data structures and algorithms before attempting to solve problems. They are the backbone of building efficient software. </p><p>You should be able to explain <strong>what a data structure does</strong>, <strong>when it&#8217;s useful</strong>, and <strong>how to use it</strong>.</p><p>For example, understanding why searching for a value in a Python <strong>dictionary</strong> is faster than in a <strong>list</strong>, and knowing their underlying data structures.</p><p><em><strong>Data-structures to study:</strong></em></p><pre><code>&gt; Arrays &amp; Linked Lists (Singly, Doubly, Circularly)
&gt; Stacks (LIFO-order) &amp; Queues (FIFO-order)
&gt; Hash Tables (Hash Maps/Sets)
&gt; Trees &amp; Tree Traversals (PreOrder, InOrder, PostOrder)
&gt; Binary Search Trees
&gt; Graphs
&gt; Heaps (Min/Max Heaps &amp; Priority Queues)
&gt; Tries</code></pre><p>You should also learn the algorithms that operate on the data within these structures &#8212; how each algorithm works (e.g., searching, adding, removing), when it&#8217;s useful, and its cost (time and space complexity).</p><p><em><strong>Algorithms to study:</strong></em></p><pre><code>&gt; Search Algorithms (Binary Search, Breadth-First, Depth-First)
&gt; Sort Algorithms (Bubble Sort, Merge Sort, Quick Sort, etc.)
&gt; Dynamic Programming (DP)
&gt; String Algorithms (Longest Common Subsequence (LCS), Tries, etc.)
&gt; Graph Algorithms (Topological Sort, Dijkstra's, A* Search, etc.)
&gt; Two Pointers &amp; Sliding Window Technique</code></pre><p>You can search for online resources like <a href="https://www.geeksforgeeks.org/">GeekforGeeks</a> that covers these algorithms.</p><blockquote><p><strong>Note:</strong> I also covered some of the data-structures in my <a href="https://www.shehababdelsalam.com/posts/#:~:text=18%20March%202018-,Computer%2Dscience,-Tries%20%2D%2005%20July">old posts</a> during uni. Here&#8217;s one on <a href="https://www.shehababdelsalam.com/posts/binary-search-trees">Binary Search Trees</a>.</p></blockquote><h3>2. Time and Space Complexity (Big O)</h3><blockquote><p>A common mistake that some candidates make is coding up a solution, without knowing how long will it take and how much memory it needs.</p></blockquote><p>Time and space complexity are measurements of how much time and memory an algorithm needs to run as a function of the amount of input it receives.</p><p>Understanding Big O is critical for software engineers. Choosing the right algorithm can make the difference between a program that runs in seconds and one that takes hours or even days. Make sure you&#8217;re able to analyse and justify the complexity introduced in your algorithms.</p><blockquote><p>A candidate who is able to analyse their algorithms and explain trade-offs in time and space complexity is a positive signal.</p></blockquote><h3>3. Thinking Vocally</h3><p>One common mistake I find with candidates during interviews is when asked to solve a specific challenge, they <strong>jump into implementation</strong> without thinking vocally.</p><p>Thinking vocally is verbalising your thought process out loud while working through a problem. This allows you to show to your interviewer/future teammate your reasoning and logical steps when solving a problem.</p><blockquote><p>A candidate who communicates ideas clearly and explains their approach is a positive signal.</p></blockquote><h3>4. Practicing Pattern Recognition</h3><p>Pattern recognition is when you solve many problems around a specific topic (e.g., dynamic programming), and in the process, you develop a pattern for recognising the need for an algorithm (e.g., memoization technique) based on the problem description.</p><blockquote><p>The more you practice, the more you train that<strong> pattern recognition muscle</strong>.</p></blockquote><p>A common mistake that candidates do is open a coding platform (eg., <a href="https://leetcode.com/">LeetCode</a>) and attempt to solve all Easy problems, then move to Medium problems, and so on. This isn&#8217;t practical because A) You don&#8217;t have an infinite amount of time, and B) Your job is not to LeetCode.</p><p><em><strong>Here&#8217;s my practice strategy:</strong></em></p><ol><li><p>Pick a category (e.g., string manipulation) and select a problem.</p></li><li><p>Spend ~30 minutes on it&#8212;try to solve it using the na&#239;ve approach, then improve.</p></li><li><p>Look up online solutions and understand how it differs from yours.</p></li><li><p>Revisit the problem few weeks later and solve it again.</p></li><li><p>Repeat this for 2&#8211;5 problems per day.</p></li></ol><p>This strategy helped me pass Microsoft and Amazon interviews after <strong>six weeks</strong> of preparation.</p><blockquote><p><strong>Note:</strong> The preparation time depends on how much time you can allocate per day. Some candidates take anywhere from <em>4 to 12 weeks</em> to prepare.</p></blockquote><h3>&#128214; Study Resources</h3><ol><li><p>Highly recommend reading <a href="https://www.hellointerview.com/learn/code">HelloInterview</a>.</p></li><li><p><a href="https://leetcode.com/">LeetCode</a> is a great platform for practicing problem-solving (by category!).</p></li><li><p>A detailed explanation of 250 problems: <a href="https://www.amazon.co.uk/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836">Elements of Programming Interviews (C++ edition)</a></p><ul><li><p>Also available in <a href="https://www.amazon.co.uk/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/ref=pd_lpo_d_sccl_1/260-2346086-3395038?pd_rd_w=bklT7&amp;content-id=amzn1.sym.bb13d3fc-af40-4fff-a822-e0e4c415da96&amp;pf_rd_p=bb13d3fc-af40-4fff-a822-e0e4c415da96&amp;pf_rd_r=0VS7WGDWJJRTK7S39VRG&amp;pd_rd_wg=n1N7i&amp;pd_rd_r=fd5ff90c-e4a8-410a-94db-8dac585a71fb&amp;pd_rd_i=1537713949&amp;psc=1">Python edition</a>.</p></li></ul></li><li><p>A great resource for learning how to solve DSA questions (189 problems) <a href="https://www.amazon.co.uk/Cracking-Coding-Interview-6th-Programming/dp/0984782850">Cracking The Coding Interview, 6th edition by Gayle Laakmann McDowell</a>.</p></li><li><p>An excellent reference for your bookshelf <a href="https://www.amazon.co.uk/Introduction-Algorithms-Eastern-Economy-Thomas/dp/8120340078/ref=pd_lpo_d_sccl_2/260-2346086-3395038?pd_rd_w=OdiQQ&amp;content-id=amzn1.sym.bb13d3fc-af40-4fff-a822-e0e4c415da96&amp;pf_rd_p=bb13d3fc-af40-4fff-a822-e0e4c415da96&amp;pf_rd_r=Z0XCR5AMN8Z1FA2EY6TH&amp;pd_rd_wg=kSnza&amp;pd_rd_r=835ea8d5-7f86-4408-b91a-874280bae7b5&amp;pd_rd_i=8120340078&amp;psc=1">Introduction to Algorithms</a> (by C.L.R.S.)</p></li></ol><p><em><strong>Disclaimer:</strong></em> Junior / Fresh Grads might be asked more on CS topics beyond DSA like OOP, Design Patterns, <a href="https://www.geeksforgeeks.org/solid-principle-in-programming-understand-with-real-life-examples/">SOLID</a> principles, etc. Or to design (not code) a software application <em>(as a replacement for system design interview) </em>like Chess, Book Library, etc. </p><blockquote><p><strong>&#127775; Tip: </strong>If you&#8217;re not sure, email your recruiter and ask what to expect in the interview.</p></blockquote><div><hr></div><h2>II. Task-based Interviews</h2><blockquote><p><em>More common in early-stage startups and small to mid-sized companies than in big tech.</em></p></blockquote><p>Task-based interviews come in different forms depending on the company&#8217;s domain and are often tailored to specific roles like Backend, Frontend, DevOps, etc.</p><p>This format is primarily designed for experienced software engineers (and occasionally fresh grads) to assess their ability to <strong>solve real-world problems using a tech stack</strong>. Two examples are:</p><p><strong>Book Catalog API (eg., Goodreads </strong><a href="https://www.goodreads.com/api">https://www.goodreads.com/api</a>)</p><blockquote><p><em>Build a simple REST API that allows users to manage book catalogs.</em></p><ul><li><p>Adding a new book with a title, author, and publication year</p></li><li><p>Fetching a list of books</p></li><li><p>Searching for books by title or author</p></li><li><p>Deleting a book by ID</p></li></ul></blockquote><p><strong>Project Management API (eg., Jira <a href="https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-projects">API</a>)</strong></p><blockquote><p><em>Build a minimal API for managing projects and tasks.</em></p><ul><li><p>Allow users to create, update, and delete projects / tasks.</p></li><li><p>Retrieve project / task information.</p></li><li><p>Mark projects / task as completed</p></li><li><p>Retrieve a list of all projects / tasks.</p></li></ul></blockquote><p><em><strong>Four Things to prepare for Task-based Interviews:</strong></em></p><ol><li><p>Get Comfortable With Your Tools</p></li><li><p>Learn To Scope</p></li><li><p>Build Personal Projects</p></li><li><p>Read As You&#8217;re Building</p></li></ol><h3>1. Get Comfortable With Your Tools</h3><p>One of the goals in task-based interviews is to see how you work as an engineer&#8212;how you set up your development environment, which tools/languages/frameworks you use, how you test your solution, how you use documentation, etc.</p><p>The first step is to pick a stack you&#8217;re interested in (e.g., Python, React, PostgreSQL, Docker, AWS) and practice developing applications while learning about best practices.</p><p>Don&#8217;t waste time on &#8220;mastering&#8221; multiple languages. Pick one language you&#8217;re comfortable with and deepen your knowledge and expertise in it.</p><h3>2. Learn to Scope</h3><p>Some interviews will intentionally give you a vague task to solve. Your role is to ask follow-up questions to gather requirements and make sure you&#8217;re clear on what you need to build.</p><blockquote><p>Say you&#8217;re asked to implement <strong>Amazon Gift Cards API</strong>. </p></blockquote><p><em><strong>Some follow up questions are:</strong></em></p><ul><li><p>What are the core features of the Gift Cards API? (e.g., create, redeem, check balance, deactivate)</p></li><li><p>What information should be stored for each gift card?</p></li><li><p>Are there any expiration rules for gift cards?</p></li><li><p>What happens if a user tries to redeem an expired or deactivated gift card?</p></li></ul><p>If you&#8217;re making some assumptions, be sure to communicate them back to the interviewer. This helps validate the scope and requirements you&#8217;ve gathered. Once everything is clear, you can start building the solution.</p><blockquote><p>&#127775; <strong>Tip: </strong>Make sure to test your solution during the interview. If time runs out, explain your testing strategy out loud and highlight any improvements you would have made if you had more time.</p></blockquote><h3>3. Build Personal Projects</h3><p>To build confidence in task-based interviews, you should be comfortable with:</p><ol><li><p>Designing and building CRUD apps, interacting with databases, etc.</p></li><li><p>Testing and debugging apps, integrating third-party APIs, etc.</p></li><li><p>Deploying and monitoring apps.</p></li></ol><p>Building a personal project allows you to go through this cycle. The more you build, the more capable you become. Think of any project or idea you&#8217;re interested in, and build a small version of it. <strong>Be careful</strong> of tutorial hell (i.e., watching tutorials all day without building)</p><p><em><strong>Here&#8217;s an inspiration:</strong></em></p><ol><li><p><em><strong>Budget Tracker</strong></em> &#8211; Build an app to track expenses, predict future spending (maybe plug-in an ML model?), visualise monthly spending, etc.</p></li><li><p><em><strong>Sports Bracket Generator (e.g., Premier League)</strong></em> &#8211; Learn how to integrate a Sports API to generate tournament brackets and display live updates for your favourite sports.</p></li><li><p><em><strong>Messaging App (e.g., WhatsApp)</strong></em> &#8211; Learn how to build real-time messaging using WebSockets.</p></li></ol><p><em><strong>&#127873; Practice Test: Here is a <a href="https://shehabas.notion.site/Project-Amazon-Gift-Cards-194d8cee5440809b977ef905e336f71e">document for a project idea</a>, Gift Cards.</strong></em></p><blockquote><p>&#127775; <strong>Tip:</strong> Having your personal projects available on GitHub is a strong signal in your resume and an opportunity for others to see your quality of work.</p></blockquote><div class="pullquote"><p><strong>Start small.</strong> The smaller the project, the easier it is to complete and share.</p></div><h3>4. Read as You&#8217;re Building</h3><p>As you build personal/work projects, you&#8217;ll encounter various engineering topics that will challenge you to deepen your understanding, gaining both knowledge and hands-on experience.</p><p><em><strong>Some of these topics are:</strong></em></p><ul><li><p><strong>API design:</strong> learning about REST, GraphQL, gRPC, and SOAP.</p></li><li><p><strong>Testing:</strong> Unit vs. integration testing, white vs black box testing, etc.</p></li><li><p><strong>Storage:</strong> SQL vs. NoSQL, ORM, indexing, isolation levels, transactions, etc.</p></li><li><p><strong>Deployment:</strong> CI/CD, deployment patterns, and strategies for scalability.</p></li><li><p><strong>Observability (o11y):</strong> Using logs, metrics, traces, and OpenTelemetry (OTel)</p></li><li><p><strong>Performance:</strong> Load testing, profiling, and optimisation techniques.</p></li><li><p><strong>Security:</strong> Data validation &amp; sanitisation, AuthN vs. AuthZ.</p></li><li><p><strong>AuthN &amp; AuthZ:</strong> token (JWT) vs. session (cookie), OAuth 2.0, SAML, etc.</p></li><li><p><strong>Cloud Deployment:</strong> EC2 vs Lambda (Serverless) for app hosting.</p></li><li><p><strong>Container Orchestration:</strong> Kubernetes (K8s) vs. managed service (EKS vs. ECS).</p></li></ul><p>Going through all of them during the interview is <strong>not possible</strong>. However, be prepared to d<strong>iscuss any of them</strong>. I&#8217;ve found that reading + hands-on experience from building applications is the best way to internalise new concepts over time.</p><div><hr></div><h2>Wrap up</h2><p>Tech interviews may include both <strong>algorithmic</strong> and <strong>task-based</strong> rounds. In general, these are the two main approaches companies use to evaluate candidates, so make sure to practice both.</p><div class="pullquote"><p>Pick your favourite programming language and practice, practice, practice.</p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y86-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdacfef4-d1ee-4653-bc7e-deb8db8f2f25_848x542.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y86-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdacfef4-d1ee-4653-bc7e-deb8db8f2f25_848x542.png 424w, https://substackcdn.com/image/fetch/$s_!y86-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdacfef4-d1ee-4653-bc7e-deb8db8f2f25_848x542.png 848w, https://substackcdn.com/image/fetch/$s_!y86-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdacfef4-d1ee-4653-bc7e-deb8db8f2f25_848x542.png 1272w, https://substackcdn.com/image/fetch/$s_!y86-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdacfef4-d1ee-4653-bc7e-deb8db8f2f25_848x542.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y86-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdacfef4-d1ee-4653-bc7e-deb8db8f2f25_848x542.png" width="848" height="542" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bdacfef4-d1ee-4653-bc7e-deb8db8f2f25_848x542.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:542,&quot;width&quot;:848,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:378230,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y86-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdacfef4-d1ee-4653-bc7e-deb8db8f2f25_848x542.png 424w, https://substackcdn.com/image/fetch/$s_!y86-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdacfef4-d1ee-4653-bc7e-deb8db8f2f25_848x542.png 848w, https://substackcdn.com/image/fetch/$s_!y86-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdacfef4-d1ee-4653-bc7e-deb8db8f2f25_848x542.png 1272w, https://substackcdn.com/image/fetch/$s_!y86-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdacfef4-d1ee-4653-bc7e-deb8db8f2f25_848x542.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you&#8217;re finding this newsletter valuable, share it with a friend, and consider subscribing if you haven&#8217;t already.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.proactiveengineer.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[#21 Best Way To Show Progress Is To Demo]]></title><description><![CDATA[Five Reasons To Why You Should Demo More Often]]></description><link>https://www.proactiveengineer.com/p/21-best-way-to-show-progress-is-to</link><guid isPermaLink="false">https://www.proactiveengineer.com/p/21-best-way-to-show-progress-is-to</guid><dc:creator><![CDATA[Shehab Abdel-Salam]]></dc:creator><pubDate>Fri, 07 Feb 2025 09:45:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OKvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4334bd-2395-4cf2-95dd-4219345387bb_1080x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OKvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4334bd-2395-4cf2-95dd-4219345387bb_1080x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OKvK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4334bd-2395-4cf2-95dd-4219345387bb_1080x1080.png 424w, https://substackcdn.com/image/fetch/$s_!OKvK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4334bd-2395-4cf2-95dd-4219345387bb_1080x1080.png 848w, https://substackcdn.com/image/fetch/$s_!OKvK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4334bd-2395-4cf2-95dd-4219345387bb_1080x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!OKvK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4334bd-2395-4cf2-95dd-4219345387bb_1080x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OKvK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4334bd-2395-4cf2-95dd-4219345387bb_1080x1080.png" width="334" height="334" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed4334bd-2395-4cf2-95dd-4219345387bb_1080x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:1080,&quot;resizeWidth&quot;:334,&quot;bytes&quot;:196937,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OKvK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4334bd-2395-4cf2-95dd-4219345387bb_1080x1080.png 424w, https://substackcdn.com/image/fetch/$s_!OKvK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4334bd-2395-4cf2-95dd-4219345387bb_1080x1080.png 848w, https://substackcdn.com/image/fetch/$s_!OKvK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4334bd-2395-4cf2-95dd-4219345387bb_1080x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!OKvK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4334bd-2395-4cf2-95dd-4219345387bb_1080x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Whenever I&#8217;m working on a project, I like to first break it down into milestones and see which ones can be shared in the form of demos with relevant stakeholders. This helps me build trust and manage expectations with them. But there&#8217;s more to it. Some of the top-performing teams I know or have worked with, believe in having a <strong>demo-driven</strong> culture within their engineering teams. Below, I&#8217;ll share <strong>five reasons</strong> why.</p><p>Examples of demos are:</p><ul><li><p>Demoing a work-in-progress feature in a website / mobile app.</p></li><li><p>Using a Jupyter Notebook to call newly developed APIs.</p></li><li><p>Running a set of instructions on the terminal.</p></li></ul><div><hr></div><h3>1. Fewer meetings</h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!snuN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefce7557-81f5-4636-ac35-89e82a6439a1_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!snuN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefce7557-81f5-4636-ac35-89e82a6439a1_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!snuN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefce7557-81f5-4636-ac35-89e82a6439a1_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!snuN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefce7557-81f5-4636-ac35-89e82a6439a1_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!snuN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefce7557-81f5-4636-ac35-89e82a6439a1_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!snuN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefce7557-81f5-4636-ac35-89e82a6439a1_512x512.png" width="196" height="196" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/efce7557-81f5-4636-ac35-89e82a6439a1_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:196,&quot;bytes&quot;:28254,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!snuN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefce7557-81f5-4636-ac35-89e82a6439a1_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!snuN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefce7557-81f5-4636-ac35-89e82a6439a1_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!snuN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefce7557-81f5-4636-ac35-89e82a6439a1_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!snuN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefce7557-81f5-4636-ac35-89e82a6439a1_512x512.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>Time is an expensive currency. The more meetings you schedule to share updates, the more expensive it becomes for your technical delivery. Stakeholders can be internal&#8212;Engineering Managers, Directors, VPs, CTOs&#8212;or external, like new customers.</p><p>What if there was a way to cut down meetings to N-1 (or reduce their length) without losing the flow of information? In my experience, demos can do just that.</p><blockquote><p>Say you have a 1-hour weekly meeting to share progress with leadership, with 40 people on the call. That&#8217;s 40 hours spent on that meeting every week.</p></blockquote><p>What if we kept the updates short and sweet by demoing something that gives a <strong>clear status update</strong> without too many verbal details? So,</p><ol><li><p>If we trimmed that meeting to 30 minutes, that&#8217;s 20 hours saved / week.</p></li><li><p>If we switched to a bi-weekly meeting instead, we&#8217;d get back the full 40 hours once every two weeks.</p></li></ol><blockquote><p>Think about how demos could help in your context. And ask around&#8212;would your team appreciate that?</p></blockquote><h3>2. Visuals</h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eHEx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb572f5da-79a1-42f3-a054-45d245f3e303_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eHEx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb572f5da-79a1-42f3-a054-45d245f3e303_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!eHEx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb572f5da-79a1-42f3-a054-45d245f3e303_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!eHEx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb572f5da-79a1-42f3-a054-45d245f3e303_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!eHEx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb572f5da-79a1-42f3-a054-45d245f3e303_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eHEx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb572f5da-79a1-42f3-a054-45d245f3e303_512x512.png" width="208" height="208" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b572f5da-79a1-42f3-a054-45d245f3e303_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:208,&quot;bytes&quot;:134253,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eHEx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb572f5da-79a1-42f3-a054-45d245f3e303_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!eHEx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb572f5da-79a1-42f3-a054-45d245f3e303_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!eHEx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb572f5da-79a1-42f3-a054-45d245f3e303_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!eHEx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb572f5da-79a1-42f3-a054-45d245f3e303_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><p>When preparing for a demo, it&#8217;s important to think about your audience and identify the key elements that will help you effectively share progress. One of those elements is visuals.</p><p>Most people generally enjoy visuals&#8212;they tend to engage more with project updates when they feel tangible, especially if they&#8217;re product-specific.</p><p>I&#8217;ve worked with product managers and designers who found visual demos invaluable, allowing them to pinpoint areas for questions or feedback without diving into technical details.</p><blockquote><p>For example, the goal isn&#8217;t to explain how GraphQL works to non-technical individuals but to show how we&#8217;re using it to solve a problem&#8212;and what that looks like in practice.</p></blockquote><p>That being said, visuals aren&#8217;t everything; they&#8217;re just one element to consider for your audience. Visuals help you explain:</p><ul><li><p><strong>The previous state</strong></p></li><li><p><strong>The current state</strong></p></li><li><p><strong>The future state</strong></p></li></ul><p>I once presented a demo to non-technical stakeholders by simply sharing my code editor and highlighting some Python and configuration files. It was well received&#8212;because I was able to clearly explain the three states above relevant to them.</p><p></p><h3>3. Easy to share</h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5sHg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe38043-fb84-4b8d-8202-b2d24907187f_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5sHg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe38043-fb84-4b8d-8202-b2d24907187f_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!5sHg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe38043-fb84-4b8d-8202-b2d24907187f_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!5sHg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe38043-fb84-4b8d-8202-b2d24907187f_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!5sHg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe38043-fb84-4b8d-8202-b2d24907187f_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5sHg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe38043-fb84-4b8d-8202-b2d24907187f_512x512.png" width="148" height="148" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebe38043-fb84-4b8d-8202-b2d24907187f_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:148,&quot;bytes&quot;:83049,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5sHg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe38043-fb84-4b8d-8202-b2d24907187f_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!5sHg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe38043-fb84-4b8d-8202-b2d24907187f_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!5sHg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe38043-fb84-4b8d-8202-b2d24907187f_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!5sHg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe38043-fb84-4b8d-8202-b2d24907187f_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>One time I worked on a project where the main document was presented as:</p><pre><code># Milestone 1            # Milestone 2
- Goals                  - Goals
- Demo (link)            - Demo (link)

# Milestone 2            # Milestone 4
- Goals                  - Goals
- Demo (link)            - Demo (link)</code></pre><p>The way all the project details were centralised made it easy for anyone to follow up without needing to ask around. A recorded demo could be shared across multiple channels if needed, allowing stakeholders to skim through or speed it up to 2x when necessary.</p><blockquote><p><strong>Tip:</strong> This is one of the most effective ways to onboard new members onto a project.</p></blockquote><p></p><h3>4. Team engagement</h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dVWM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeb25a44-232f-483d-a8bb-7e5f84f9e365_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dVWM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeb25a44-232f-483d-a8bb-7e5f84f9e365_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!dVWM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeb25a44-232f-483d-a8bb-7e5f84f9e365_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!dVWM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeb25a44-232f-483d-a8bb-7e5f84f9e365_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!dVWM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeb25a44-232f-483d-a8bb-7e5f84f9e365_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dVWM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeb25a44-232f-483d-a8bb-7e5f84f9e365_512x512.png" width="180" height="180" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aeb25a44-232f-483d-a8bb-7e5f84f9e365_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:180,&quot;bytes&quot;:29551,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dVWM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeb25a44-232f-483d-a8bb-7e5f84f9e365_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!dVWM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeb25a44-232f-483d-a8bb-7e5f84f9e365_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!dVWM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeb25a44-232f-483d-a8bb-7e5f84f9e365_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!dVWM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeb25a44-232f-483d-a8bb-7e5f84f9e365_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>While this point aligns with themes like inclusion and team empowerment, another key reason is to maximise team engagement.</p><p>Technical demos often require engineers to present their work. The goal isn&#8217;t just to share an engineer&#8217;s screen and click around to show progress. Rather, it&#8217;s an opportunity for engineers to explain their work and how it connects to the problem stakeholders care about. If engineers can articulate the purpose of the demo and how it functions, stakeholders can ask more specific questions&#8212;maximising team engagement.</p><p></p><h3>5. Faster feedback loops</h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FcTt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ede9a8-a9a9-4be6-bcf7-56cc4477a4e7_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FcTt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ede9a8-a9a9-4be6-bcf7-56cc4477a4e7_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!FcTt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ede9a8-a9a9-4be6-bcf7-56cc4477a4e7_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!FcTt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ede9a8-a9a9-4be6-bcf7-56cc4477a4e7_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!FcTt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ede9a8-a9a9-4be6-bcf7-56cc4477a4e7_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FcTt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ede9a8-a9a9-4be6-bcf7-56cc4477a4e7_512x512.png" width="170" height="170" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13ede9a8-a9a9-4be6-bcf7-56cc4477a4e7_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:170,&quot;bytes&quot;:89112,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FcTt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ede9a8-a9a9-4be6-bcf7-56cc4477a4e7_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!FcTt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ede9a8-a9a9-4be6-bcf7-56cc4477a4e7_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!FcTt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ede9a8-a9a9-4be6-bcf7-56cc4477a4e7_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!FcTt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13ede9a8-a9a9-4be6-bcf7-56cc4477a4e7_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>If I were asked to share a project update, some of my general options would be:</p><ul><li><p>Writing a document and sharing it via email.</p></li><li><p>Scheduling a meeting and sharing it verbally.</p></li><li><p>Posting a TL;DR message on Slack/Teams.</p></li><li><p>Scheduling a meeting for a demo.</p></li><li><p>Sharing a recorded demo.</p></li></ul><p>All of these are viable options, but their value depends on the situation and the type of people requesting the update. Sometimes, your manager just needs a one-sentence update for a slide. Other times, your users want a preview of that new feature.</p><p>Demos (4 &amp; 5) are particularly useful for collecting feedback from both technical and non-technical audiences. If your goal is to share progress and gather feedback&#8212;do a demo!</p><div><hr></div><h2>Conclusion</h2><p>Demos are not only a useful way to build trust and relationships with stakeholders; they also increase your project's success rate. Cultivating a <strong>demo-driven</strong> culture strengthens collaboration between technical and non-technical parties and brings clarity to discussions when delivering projects. </p><p>To recap, here are the five reasons:</p><p>1. &#119813;&#119838;&#119856;&#119838;&#119851; &#119846;&#119838;&#119838;&#119853;&#119842;&#119847;&#119840;&#119852;: Demos reduce back-and-forth discussions with stakeholders.<br>2. &#119829;&#119842;&#119852;&#119854;&#119834;&#119845;&#119852;: People tend to engage more with visual updates.<br>3. &#119812;&#119834;&#119852;&#119858; &#119853;&#119848; &#119852;&#119841;&#119834;&#119851;&#119838;: A recorded demo/meeting can be shared across multiple channels if needed.<br>4. &#119827;&#119838;&#119834;&#119846; &#119838;&#119847;&#119840;&#119834;&#119840;&#119838;&#119846;&#119838;&#119847;&#119853;: Engineers can present their work to stakeholders and answer any immediate questions, maximising team engagement.<br>5. &#119813;&#119834;&#119852;&#119853;&#119838;&#119851; &#119839;&#119838;&#119838;&#119837;&#119835;&#119834;&#119836;&#119844; &#119845;&#119848;&#119848;&#119849;&#119852;: Stakeholders can provide specific feedback much easier on the presented work, creating faster feedback loops.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.proactiveengineer.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Proactive Engineer! Subscribe for free to receive new posts every week and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>