<?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[Become a Senior Engineer]]></title><description><![CDATA[A regular publication for software engineers looking to level up to Senior++]]></description><link>https://newsletter.becomeaseniorengineer.com</link><image><url>https://substackcdn.com/image/fetch/$s_!LSiw!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F725bd1af-606e-42d0-be2d-94dd03dd4046_809x809.png</url><title>Become a Senior Engineer</title><link>https://newsletter.becomeaseniorengineer.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 05 Apr 2026 13:10:20 GMT</lastBuildDate><atom:link href="https://newsletter.becomeaseniorengineer.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Become a Senior Engineer]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[becomeaseniorengineer@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[becomeaseniorengineer@substack.com]]></itunes:email><itunes:name><![CDATA[Aken Roberts]]></itunes:name></itunes:owner><itunes:author><![CDATA[Aken Roberts]]></itunes:author><googleplay:owner><![CDATA[becomeaseniorengineer@substack.com]]></googleplay:owner><googleplay:email><![CDATA[becomeaseniorengineer@substack.com]]></googleplay:email><googleplay:author><![CDATA[Aken Roberts]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[🎓 Increasing Development Speed & Stability With Feature Flags]]></title><description><![CDATA[Make engineering look good by adding more control to your deliverables.]]></description><link>https://newsletter.becomeaseniorengineer.com/p/increasing-development-speed-and</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/increasing-development-speed-and</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Mon, 04 Nov 2024 19:20:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HBjj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6a043-75d1-4386-adb2-477cd5cc94ed_2048x2048.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A senior engineer is responsible for contributing code that is high quality and stable when deployed and released.</p><p>Often times, development of a feature comes in multiple phases, across many contributors, touching many areas of your code base. Every one of these touch points increases the risk of new bugs or regressions.</p><p>So how do you deliver quickly while minimizing risk?</p><p>Feature flags! &#127987;&#65039;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HBjj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6a043-75d1-4386-adb2-477cd5cc94ed_2048x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HBjj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6a043-75d1-4386-adb2-477cd5cc94ed_2048x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HBjj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6a043-75d1-4386-adb2-477cd5cc94ed_2048x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HBjj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6a043-75d1-4386-adb2-477cd5cc94ed_2048x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HBjj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6a043-75d1-4386-adb2-477cd5cc94ed_2048x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HBjj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6a043-75d1-4386-adb2-477cd5cc94ed_2048x2048.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63d6a043-75d1-4386-adb2-477cd5cc94ed_2048x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2645510,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&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_!HBjj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6a043-75d1-4386-adb2-477cd5cc94ed_2048x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HBjj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6a043-75d1-4386-adb2-477cd5cc94ed_2048x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HBjj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6a043-75d1-4386-adb2-477cd5cc94ed_2048x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HBjj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6a043-75d1-4386-adb2-477cd5cc94ed_2048x2048.jpeg 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><h1>What are feature flags?</h1><p>A feature flag is a software implementation that allows you to control the flow of your code (&#8220;feature&#8221;), by switching it on or off (&#8220;flag&#8221;).</p><p>Feature flags are added to the code and deployed <strong>once</strong>, then toggled without additional code changes or deployments. This allows your team to skip the deployment pipeline and quickly disable troublesome areas to reduce exposure and user disappointment.</p><p>More advanced feature flag implementations include the ability to segment users, allowing flags to be toggled for specific users or groups. For example: users who opt into beta features, customers at specific subscription tiers, geographical targeting, etc.</p><p>Feature flags are also referred to as feature toggles or feature switches. Different terms, same concept.</p><h1>What feature flags are not.</h1><h4>Flags are not permanent.</h4><p>It&#8217;s important to distinguish that feature flags are <strong>temporary</strong>, and are meant to be removed when you no longer need to toggle flows <strong>based on development and release cycles</strong>.</p><p>When your feature is 100% available to its target audience, you should remove the flag from your code.</p><p>Leaving flags in your code that are no longer needed contribute to bloat, confusion among your team, and even resentment and morale issues. Read more about Broken Windows in this previous issue:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;c09ff094-df8d-4db2-bca4-1c0f51ef1a32&quot;,&quot;caption&quot;:&quot;The book The Pragmatic Programmer by David Thomas and Andrew Hunt offers this passage about software entropy at the very beginning:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#5: Leave Everything Better Than You Found It&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:191012299,&quot;name&quot;:&quot;Aken Roberts&quot;,&quot;bio&quot;:&quot;Author of Become a Senior Engineer, a resource for software devs to level up. Writes about entrepreneurship on LinkedIn &amp; Twitter.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db095d5e-fd69-4904-a24a-8060bd9bae5c_2313x2323.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-01-11T20:01:25.861Z&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%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://newsletter.becomeaseniorengineer.com/p/5-leave-everything-better-than-you&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:140570249,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Become a Senior 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%2F725bd1af-606e-42d0-be2d-94dd03dd4046_809x809.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h4>Flags are not access control.</h4><p>If your platform includes features that are only accessible at certain tiers, you should use proper authorization checks to protect the flow of that code.</p><p>You <em>can</em> use feature flags during development of said feature. The feature flag determines who is sent to the access control check.</p><p>Feature flags are not a direct replacement of access control. Flags should be the <strong>first</strong> gate that your code passes through. Here&#8217;s a pseudo-code example using the early return pattern:</p><pre><code>if (featureIsEnabled('analytics') === false) {
    // Feature flag is disabled; no access, stop here.
    return;
}

if (user.can('analytics.view') === false) {
    // Feature is enabled, but current user does not have access.
    return;
}

// Feature is enabled AND user has access; continue happy path...</code></pre><h1>How do feature flags work?</h1><p>Most feature flag implementations have two primary components:</p><ol><li><p><strong>Flag Definitions:</strong> a string ID, e.g. `<code>analytics</code>`, and a ruleset that determines the status or value of the flag</p></li><li><p><strong>Rule Evaluator:</strong> the runtime system that retrieves a flag&#8217;s ruleset and evaluates it against the current context, returning the resolved value</p></li></ol><p>A flag is given a <strong>definition</strong> to determine the flag&#8217;s status based on the conditions you define. Implementations vary, but they can all be thought of as conditionals. I&#8217;ll use a fake expression language to demonstrate here.</p><p>The most basic rule is a static ON or OFF, with no context necessary:</p><pre><code>return false;</code></pre><p>If you want a feature to be enabled for a subset of users, you might have a flag configured to be ON for users in a certain group or having a certain attribute, and OFF for everyone else:</p><pre><code>return user.group IN ['beta'];</code></pre><p>Complicated rules can involve a combination of AND and OR conditionals:</p><pre><code>return user.group IN ['beta'] AND (customer.isEnterprise === false OR user.volume !== 'high');</code></pre><p>When it&#8217;s time to check the actual value of a feature flag during code execution, the <strong>rule evaluator</strong> gets the flag&#8217;s definition and evaluates it using the current context.</p><p>In the above examples, the current context would include values for the variables `<code>user</code>` and `<code>customer</code>`.</p><p>Rules and context can be as simple or complicated as your application and business require.</p><h1>Benefits of Feature Flags</h1><ul><li><p><strong>Deploy without causing effects</strong> &#8211; Isolate changes and explicitly control when effects take place.</p></li><li><p><strong>Increase business value by segmenting releases</strong> &#8211; Slowly roll out new, potentially-risky code (canary releases without the deployment complexity). Release a rough draft of a feature to beta users for testing and feedback. A/B test options to determine the best choice.</p></li><li><p><strong>Separate releasing from deployment</strong> &#8211; Release features to your users when it makes sense to your business rather than your deployment schedule. A step towards continuous delivery.</p></li><li><p><strong>Develop faster</strong> &#8211; By isolating code with feature flags, you can continue to develop around that code before it is fully complete. This enables smaller pull requests and faster code reviews, continuous delivery, and more.</p></li><li><p><strong>Test easily in multiple environments</strong> &#8211; No weird branching strategies to determine what environment gets what features.</p></li><li><p><strong>Test in production</strong> &#8211; Enable a feature in production for a single internal user to check a weird issue that can&#8217;t be replicated.</p></li></ul><h1>Trade-offs of Feature Flags</h1><ul><li><p><strong>Developer education</strong> &#8211; Devs may need to be taught feature flag concepts and how to implement them properly.</p></li><li><p><strong>It&#8217;s easy to forget old code</strong> &#8211; If you are replacing an existing feature with a new version, the old version&#8217;s code is no longer needed when the new one is 100% rolled out. Remember to delete the feature flag AND the old code!</p></li><li><p><strong>Testing multiple paths</strong> &#8211; If your organization values test coverage (and it should), test BOTH paths of a feature flag, on and off.</p></li><li><p><strong>Ongoing maintenance</strong> &#8211; It can be easy to forget what flags are completely rolled out and can be removed. Clean them up regularly and leave everything better than you found it.</p></li><li><p><strong>Toggling flags can confuse end users</strong> &#8211; Toggling flags quickly or multiple times may confuse users, as their experience changes randomly.</p></li></ul><h1>Implementation Best Practices</h1><ul><li><p><strong>Don&#8217;t build your own</strong> &#8211; Use an existing service or library.</p></li><li><p><strong>Cover both paths</strong> &#8211; Ensure your code has proper fallbacks for a feature flag being off, whether that&#8217;s reverting to the existing feature or displaying a message to the user.</p></li><li><p><strong>Cover broad areas</strong> &#8211; Feature flags should cover large chunks of code, like an entire feature or endpoint. Don&#8217;t be granular and cover a single function or component.</p></li><li><p><strong>Use consistent naming</strong> &#8211; Whatever standard you choose for feature flag naming, keep it constant.</p></li><li><p><strong>Make deleting flags easy</strong> &#8211; Separate the code for the old path and use early return patterns, so removing the flag means only deleting code:</p></li></ul><pre><code>public function analytics() {
    if (featureEnabled('newAnalytics') === false) {
        this.analyticsOld();
    }

    // New analytics implementation...
}

private function analyticsOld() {
    // Original analytics implementation...
}</code></pre><p><em>When the feature flag is rolled out 100% and we&#8217;re ready to remove the code, we can delete the IF conditional and analyticsOld implementation, leaving the new implementation untouched.</em></p><h1>How Seniors Approach Feature Flags</h1><ul><li><p><strong>They identify a need first</strong> &#8211; Seniors identify shortcomings in the projects, practices, and business, and find solutions proactively. Consider adding feature flags to your code base if you&#8217;re dealing with one of these problems:</p><ul><li><p>Deployed code often has a negative side effect and needs to be rolled back or fixed immediately</p></li><li><p>Pull requests are large, hard to code review, and aren&#8217;t merged quickly enough</p></li><li><p>A feature is complete but can&#8217;t be deployed because another team (like Marketing) isn&#8217;t ready yet</p></li><li><p>You want to test a feature in an environment outside of local dev, but your git arrangement for that is complicated</p></li><li><p>The business isn&#8217;t sure if they should use option A or B</p></li></ul></li><li><p><strong>They understand the trade-offs</strong> &#8211; Like any new addition to your codebase, feature flags come with a cost of proper implementation, maintenance, and possibly performance. Understand the pros and cons and make decisions and adjustments accordingly.</p></li><li><p><strong>They don&#8217;t build their own implementation</strong> &#8211; Unless absolutely necessary, save time and effort by using an existing solution.</p></li><li><p><strong>They standardize and document</strong> &#8211; Make sure everyone around you has the resources to learn and use flags also.</p></li><li><p><strong>They stay on top of maintenance</strong> &#8211; Don&#8217;t introduce something you aren&#8217;t willing to own and take care of.</p></li><li><p><strong>They make engineering faster and more reliable</strong> &#8211; Feature flags offer a lot of benefits for both developers and the business as a whole. Their wins are your wins!</p></li></ul><div><hr></div><p>&#128075;&#127996; Always a pleasure to have you here, Seniors! Talk again soon.</p><p>Aken &#128153;</p>]]></content:encoded></item><item><title><![CDATA[🎓 Why Seniors embrace bug bashing and site reliability duties.]]></title><description><![CDATA[Bug fixing might not be glamorous, but it can often be challenging, fulfilling, and a great source of knowledge and experience.]]></description><link>https://newsletter.becomeaseniorengineer.com/p/why-seniors-embrace-bug-bashing-and</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/why-seniors-embrace-bug-bashing-and</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Thu, 02 May 2024 20:50:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PtcT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46529fe1-fc33-4274-a712-00ecd3131d9c_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I can see you making a face already.</p><p><em>Ugh, bug duty</em> &#128580;</p><p>The bane of many an engineer. Why would you want to fix pesky bugs, when you can be architecting and developing new features that will take your company to the next level?!</p><p>We want big wins for our resume, dammit!</p><p>I don&#8217;t blame you; those are definitely more exciting and potentially more valuable.</p><p><em>However&#8230;</em></p><p><strong>Site reliability duties will make you better at those big feature wins.</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_!PtcT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46529fe1-fc33-4274-a712-00ecd3131d9c_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PtcT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46529fe1-fc33-4274-a712-00ecd3131d9c_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!PtcT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46529fe1-fc33-4274-a712-00ecd3131d9c_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!PtcT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46529fe1-fc33-4274-a712-00ecd3131d9c_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!PtcT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46529fe1-fc33-4274-a712-00ecd3131d9c_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PtcT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46529fe1-fc33-4274-a712-00ecd3131d9c_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46529fe1-fc33-4274-a712-00ecd3131d9c_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184018,&quot;alt&quot;:&quot;An exterminator chasing bugs around a laptop screen&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="An exterminator chasing bugs around a laptop screen" title="An exterminator chasing bugs around a laptop screen" srcset="https://substackcdn.com/image/fetch/$s_!PtcT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46529fe1-fc33-4274-a712-00ecd3131d9c_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!PtcT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46529fe1-fc33-4274-a712-00ecd3131d9c_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!PtcT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46529fe1-fc33-4274-a712-00ecd3131d9c_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!PtcT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46529fe1-fc33-4274-a712-00ecd3131d9c_1024x1024.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><p>Bug duty comes in many different flavors, from being the occasional point person for escalated support tickets (we called this &#8220;triage&#8221; at my last org) to full-time site reliability positions, and everything in between.</p><p>Many devs lament stepping into bug duty because they focus on the negative aspects. You have to fix others&#8217; mistakes. It isn&#8217;t very glamorous work in comparison to feature development. It doesn&#8217;t seem to make a tangible impact. And so on.</p><p>You know the reasons. You&#8217;ve felt them.</p><p>Instead, let&#8217;s highlight and focus on the <strong>benefits</strong> of bug duty, and how it can help you grow into a Senior Engineer.</p><h2>Every bug is a learning opportunity.</h2><p>It is incredibly unlikely that you are such an experienced developer that you can easily resolve every bug that lands in your Jira board. (I bet there&#8217;s an AI for that somewhere&#8230;)</p><p>But that&#8217;s a privilege! An opportunity to learn, explore, tinker, and more.</p><p>You get to practice problem solving, which is the <strong>core</strong> skill an engineer should have and should be practiced as often as possible.</p><p>You get to see technology you haven&#8217;t used before, such as new parts of the code base, or software like a database or logging tool.</p><p>You get to practice optimizing your time by recognizing when you&#8217;re stuck or focusing on something less efficient.</p><p>You get to potentially work across teams, recruiting assistance from support, security, infrastructure, or whomever can help assist you in your bug squashing quest.</p><p>You get to practice reading, understanding, and modifying code written by others. With any luck, you can solve the problem <em>and</em> teach the solution to others so they can learn, too. Which is part of the &#8220;leave everything better than you found it&#8221; mentality.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;924349cf-181d-400c-a2a5-e082273a041f&quot;,&quot;caption&quot;:&quot;The book The Pragmatic Programmer by David Thomas and Andrew Hunt offers this passage about software entropy at the very beginning: There are many factors that can contribute to software rot. The most important one seems to be the psychology, or culture, at work on a project. Even if you are a team of one, your project&#8217;s psychology can be a very delicate&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#5: Leave Everything Better Than You Found It&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:191012299,&quot;name&quot;:&quot;Aken Roberts&quot;,&quot;bio&quot;:&quot;Author of Become a Senior Engineer, a resource for software devs to level up. Writes about entrepreneurship on LinkedIn &amp; Twitter.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3457fa7-5552-455f-9276-de2f0ffb6682_1158x1158.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-01-11T20:01:25.861Z&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%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://becomeaseniorengineer.substack.com/p/5-leave-everything-better-than-you&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:140570249,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Become a Senior 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%2F725bd1af-606e-42d0-be2d-94dd03dd4046_809x809.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h2>Bugs reveal opportunities for extra improvements.</h2><p>Speaking of &#8220;better than you found it&#8221;, bug fixing can identify and inspire a slate of improvement opportunities around your technology and processes unrelated to the bug itself.</p><p>Seeing a lot of bugs that follow the same theme? Teach your team how to avoid them. Or even better, automate protections against them where possible.</p><p>Automation in general goes a <strong>long</strong> way. Increase test coverage. Reduce build times. Automate deployments and rollbacks. Reduce code review time by automating certain checks and fixes that code reviewers shouldn&#8217;t have to focus on.</p><p>Are you having trouble identifying a bug due to lacking logs, metrics, or other exposure? Add them!</p><p>Suggesting, and more importantly <em>implementing</em> these improvements to your products and organization are a key way to increase your influence and seniority as an engineer.</p><h2>Every bug increases your domain knowledge.</h2><p>Seniors are <strong>domain experts</strong>. They have a depth of understanding in one or more areas of an application. They&#8217;re considered subject matter experts of the technology <em>and</em> the business problems the features solve.</p><p>When you fix a bug, you learn about that area of the business, thus increasing your domain knowledge.</p><p>The more you understand what problems the business is solving for your customers, the more your engineering efforts will match the business&#8217; value, increasing <em>your</em> value.</p><h2>Bug fixes are a great time to practice TDD.</h2><p>Test-driven development can be tough to use for the majority of your everyday work. Fixing a bug is a perfect time to practice, because most of the infrastructure is in place. You already have working endpoints or services or whatever your entry point is. You have a well-defined outcome that currently isn&#8217;t happening. And you definitely don&#8217;t have an existing test in place, or it would be failing already.</p><p>Applying TDD when fixing bugs helps you practice TDD, it adds more test coverage, and it helps guarantee the problem is resolved as expected.</p><h2>Every bug fix is a customer problem solved.</h2><p>Engineers are often isolated from customers, and as such rarely see the direct impacts of their work. This has pros and cons. On the good side, you never have to deal with rude and irrational customers. On the bad side, you never hear about how your work is impacting in a positive way.</p><p>At the end of the day, there&#8217;s a real person on the other end of your bug fix, who is ecstatic that one of their pain points has been removed. And that&#8217;s a real win.</p><p>Even if the ticket was created internally, it&#8217;s likely a customer has experienced it without reporting. Like reviews on purchases, bug reports cover only a fraction of total occurrences.</p><p>Ask your customer-facing team to share the response when the customer is told their bug has been fixed. It should brighten your day!</p><p>And speaking of your customer-facing team, they love delivering good news. Bug fixes have an impact internally, too.</p><div><hr></div><p>Bug fixes may seem like a mundane task lacking excitement and value. By focusing on the learning opportunities around your app, technologies, and business, you can see how much value they really hold.</p><p>That said, hopefully you don&#8217;t get stuck only fixing bugs for a long time. &#128521;</p><div><hr></div><h1>Happenings &amp; Findings</h1><h2>Articles</h2><p><a href="https://hatchet.run/">Hatchet</a>, a distributed, fault-tolerant task queue, <a href="https://docs.hatchet.run/blog/multi-tenant-queues">wrote about implementing fair queueing strategies for Postgres-backed task queues</a>.</p><h2>Technologies</h2><p><a href="https://www.kirilv.com/canvas-confetti/">Canvas Confetti</a>, a confetti effect JS library.</p><p><a href="https://github.com/atlassian/pragmatic-drag-and-drop">Pragmatic Drag &amp; Drop</a>, a low-level drag and drop JS library by Atlassian.</p><h2>Fun</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gwEG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa323c47c-35e0-4d56-84a9-77c61e9925f5_4800x4800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gwEG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa323c47c-35e0-4d56-84a9-77c61e9925f5_4800x4800.png 424w, https://substackcdn.com/image/fetch/$s_!gwEG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa323c47c-35e0-4d56-84a9-77c61e9925f5_4800x4800.png 848w, https://substackcdn.com/image/fetch/$s_!gwEG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa323c47c-35e0-4d56-84a9-77c61e9925f5_4800x4800.png 1272w, https://substackcdn.com/image/fetch/$s_!gwEG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa323c47c-35e0-4d56-84a9-77c61e9925f5_4800x4800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gwEG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa323c47c-35e0-4d56-84a9-77c61e9925f5_4800x4800.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a323c47c-35e0-4d56-84a9-77c61e9925f5_4800x4800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&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_!gwEG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa323c47c-35e0-4d56-84a9-77c61e9925f5_4800x4800.png 424w, https://substackcdn.com/image/fetch/$s_!gwEG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa323c47c-35e0-4d56-84a9-77c61e9925f5_4800x4800.png 848w, https://substackcdn.com/image/fetch/$s_!gwEG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa323c47c-35e0-4d56-84a9-77c61e9925f5_4800x4800.png 1272w, https://substackcdn.com/image/fetch/$s_!gwEG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa323c47c-35e0-4d56-84a9-77c61e9925f5_4800x4800.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://workchronicles.substack.com/p/comic-safe-space">Safe Space by Work Chronicles</a></figcaption></figure></div><h1>Up Next</h1><p>&#127891; An Introduction to Architecture Testing</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.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://newsletter.becomeaseniorengineer.com/subscribe?"><span>Subscribe now</span></a></p><p>You&#8217;re the best!</p><p>Aken &#128153;</p>]]></content:encoded></item><item><title><![CDATA[🎓 Why you should be pair programming more often.]]></title><description><![CDATA[Technical, soft skills, and career growth benefits are abundant when you pair effectively. Do it more!]]></description><link>https://newsletter.becomeaseniorengineer.com/p/why-you-should-be-pair-programming</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/why-you-should-be-pair-programming</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Thu, 04 Apr 2024 20:13:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-WbF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8538182a-b67d-44b9-85b7-813b48a6d733_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Pair programming is an incredibly effective way to solve problems, improve productivity, and foster relationships and influence.</p><p><strong>Do it more often!</strong></p><p>Wow, that was an easy newsletter this week!</p><div><hr></div><p>&#8230;Okay FINE, I suppose I can go into slightly more detail. &#128580;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-WbF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8538182a-b67d-44b9-85b7-813b48a6d733_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-WbF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8538182a-b67d-44b9-85b7-813b48a6d733_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!-WbF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8538182a-b67d-44b9-85b7-813b48a6d733_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!-WbF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8538182a-b67d-44b9-85b7-813b48a6d733_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!-WbF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8538182a-b67d-44b9-85b7-813b48a6d733_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-WbF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8538182a-b67d-44b9-85b7-813b48a6d733_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8538182a-b67d-44b9-85b7-813b48a6d733_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:228076,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-WbF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8538182a-b67d-44b9-85b7-813b48a6d733_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!-WbF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8538182a-b67d-44b9-85b7-813b48a6d733_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!-WbF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8538182a-b67d-44b9-85b7-813b48a6d733_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!-WbF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8538182a-b67d-44b9-85b7-813b48a6d733_1024x1024.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><h2>What is pair programming?</h2><p>Pair programming is a collaborative coding technique where two software engineers work together at one workstation to develop software more effectively.</p><p>In modern remote environments, the shared workstation is replaced with screen sharing and real-time editor collaboration features, while the principles and techniques remain the same.</p><p>The most common method (one of many in use today), two engineers take on different roles: driver and navigator. The <strong>Driver</strong> writes the code, focusing on the immediate programming task. The <strong>Navigator</strong> looks at the big picture, thinks ahead, suggests improvements and alternative solutions, and reviews code as it&#8217;s written.</p><p>Importantly, the devs should <strong>regularly switch roles</strong> during a pair programming session. This encourages collaboration, mindset and perspective shifts, and learning.</p><h2>Benefits</h2><h3>Technical Benefits</h3><ul><li><p>&#8220;Two minds are better than one&#8221; &#8211; combined wisdom and skills results in better technical solutions</p></li><li><p>Work gets done faster &#8211; two people are less likely to get blocked, and when it happens action is taken sooner and more effectively</p></li><li><p>Code reviews happen in real time, allowing code to be approved and integrated more quickly (which is HUGE for team velocity &#8211; more on those metrics in a future edition)</p></li></ul><h3>Soft Skill Benefits</h3><ul><li><p>Practicing collaboration results in greater empathy and bonding</p></li><li><p>Improved communication and listening skills</p></li></ul><h3>Career Growth Benefits</h3><ul><li><p>You learn more in a hands-on, practical way</p></li><li><p>Your work and collaboration is made more visible, and more likely to be recognized</p></li><li><p>You provide leadership and mentoring, even if you are the more junior engineer &#8211; everyone brings their unique perspective to the table, even if you only ask questions</p></li></ul><p>All the stuff needed for Senior! &#10024;</p><h2>Success Stories</h2><p>Amit Masaun, VP of Engineering @ Deep 6 AI:</p><blockquote><p>After decades of leading engineering teams, I've found no better approach than collaborative coding. Pair up ( or mob up ) and you'll write cleaner, more robust software while spreading that hard-won knowledge across the team. And when everyone's in the loop through that open dialogue, you move as one unified force towards your technical vision.</p></blockquote><p>CJ Odina, Software Engineer and BASE subscriber:</p><blockquote><p>I had the opportunity to engage in a series of pairing/mentoring sessions with a senior engineer at my job which, among other things, helped me better understand design and architecture patterns. As a result, I was able to build better, more resilient software as well as confidence in my skills.</p></blockquote><p>And personally, my success stories are not one big moment but a lot of little ones like CJ&#8217;s. Pair programming was incredibly helpful when resolving a production outage, hunting an elusive bug, introducing new patterns or paradigms, or creating a consensus between two opposing ideas.</p><p>Any opportunity I can take to both solve a technical problem <em>and</em> grow my bonds with coworkers I will embrace and encourage.</p><h2>Downsides &amp; Gotchas</h2><p>Pair programming has a ton of benefits when done well, but it is possible to pair in an ineffective way. If you&#8217;ve had a bad experience with pair programming, chances are you were burned by bad implementation.</p><p>First, <strong>it takes practice</strong>. You need a mindset of collaboration, focus, and knowing when to stop. Unequal or selfish participation, unbalanced roles, and a general unwillingness to collaborate are going to make pair sessions less valuable.</p><p>If there is a large skill gap between participants, a pairing session could be more training than collaborative problem solving. This can be slower than working individually. Incredibly valuable when onboarding and mentoring, less valuable when tackling a hard problem in a time crunch.</p><p>Similarly, pair programming is not always a time saver. If two devs are each assigned a task, pairing on both tasks fully may not deliver the tasks quicker. Focus your pair programming time on only the parts that are most effective &#8211; hard problems, questions, blockers, etc. Once you have a clear path, individual contribution is likely more effective.</p><h2>How To Pair Effectively</h2><ul><li><p>Use pair time for items of substance: problems, decisions, mentoring. Once there&#8217;s a clear plan and only implementation steps left, revert back to individual contributions.</p></li><li><p>Switch roles regularly while pairing</p></li><li><p>Keep an open mind, avoid micro-managing, and allow your teammate&#8217;s style to influence your own rather than be incompatible</p></li><li><p>Talk often. Explain your thinking, ask questions.</p></li><li><p>Practice! Sometimes you will pair better with one person than another. Don&#8217;t let any frustrating experiences stop you from finding efficiency and enjoyment elsewhere.</p></li></ul><p><em><a href="https://martinfowler.com/articles/on-pair-programming.html">On Pair Programming</a></em><a href="https://martinfowler.com/articles/on-pair-programming.html"> on MartinFowler.com</a> goes into greater detail on different methodologies, tools, implementations, and gotchas. I highly encourage further reading if you want to pair program more often.</p><div><hr></div><p>Do you have any success or horror stories with pair programming? How has it helped you? Hit reply, I&#8217;d love to hear about it!</p><h2>Up Next</h2><p>&#127891; Why Seniors embrace bug bashing and site reliability duties.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.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://newsletter.becomeaseniorengineer.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>Thank you as always!</p><p>Aken &#128153;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.com/p/why-you-should-be-pair-programming?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.becomeaseniorengineer.com/p/why-you-should-be-pair-programming?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p>]]></content:encoded></item><item><title><![CDATA[🎓 LEAKED: The Underground Shortcut to Becoming a Senior Engineer Without Years of Hard Work!]]></title><description><![CDATA[1,000X your path and leave your peers in the dust!]]></description><link>https://newsletter.becomeaseniorengineer.com/p/leaked-the-underground-shortcut-to</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/leaked-the-underground-shortcut-to</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Mon, 01 Apr 2024 18:12:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!N8Ly!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63dd6eae-4973-4ecc-9d12-3a7ffe34ffda_1024x1024.webp" 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_!N8Ly!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63dd6eae-4973-4ecc-9d12-3a7ffe34ffda_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N8Ly!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63dd6eae-4973-4ecc-9d12-3a7ffe34ffda_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!N8Ly!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63dd6eae-4973-4ecc-9d12-3a7ffe34ffda_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!N8Ly!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63dd6eae-4973-4ecc-9d12-3a7ffe34ffda_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!N8Ly!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63dd6eae-4973-4ecc-9d12-3a7ffe34ffda_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N8Ly!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63dd6eae-4973-4ecc-9d12-3a7ffe34ffda_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63dd6eae-4973-4ecc-9d12-3a7ffe34ffda_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:368590,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!N8Ly!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63dd6eae-4973-4ecc-9d12-3a7ffe34ffda_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!N8Ly!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63dd6eae-4973-4ecc-9d12-3a7ffe34ffda_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!N8Ly!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63dd6eae-4973-4ecc-9d12-3a7ffe34ffda_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!N8Ly!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63dd6eae-4973-4ecc-9d12-3a7ffe34ffda_1024x1024.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><p>If only it were that easy! Happy April Fool&#8217;s Day! &#129763;</p><p>I&#8217;m sorry I can&#8217;t unlock the secrets of instantaneous promotions for you today. Hopefully I <em>can</em> make your Monday a little more tolerable with a bit of silliness and companionship.</p><p>There is no single secret or trick to performing well as a software engineer, just as there is never a single way to solve a problem using software and code.</p><p>Your path is unique. <em>You</em> are unique.</p><p>Curiosity, perseverance, and confidence will take you anywhere you want to go.</p><p>By being here and reading this newsletter, you are already taking the right steps by seeking knowledge and experience. Keep it up.</p><p>I know you didn&#8217;t fall for the clickbait title. You knew what you were getting into. Because you got this. &#128170;&#127996;</p><p>See you later, Senior!</p><p>Aken &#128153;</p>]]></content:encoded></item><item><title><![CDATA[🎓 How a Senior engineer effectively onboards at a new job.]]></title><description><![CDATA[Welcome!]]></description><link>https://newsletter.becomeaseniorengineer.com/p/how-a-senior-engineer-effectively</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/how-a-senior-engineer-effectively</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Thu, 28 Mar 2024 21:49:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VZGQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d6c91e-dbf5-41e9-bb05-a19985a368df_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Welcome! Trying something new again this week by sticking with a single topic. I&#8217;m hoping this makes it easier for me to write, since I prefer to go into a level of detail that becomes a bit overwhelming with two topics per week, as well as making things a bit more search engine friendly.</em></p><p><em>Thank you for being a part of this community! As always, if you&#8217;d like to request a topic or share any advice, hit reply. I&#8217;d love to hear from you.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.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://newsletter.becomeaseniorengineer.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_!VZGQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d6c91e-dbf5-41e9-bb05-a19985a368df_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VZGQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d6c91e-dbf5-41e9-bb05-a19985a368df_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!VZGQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d6c91e-dbf5-41e9-bb05-a19985a368df_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!VZGQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d6c91e-dbf5-41e9-bb05-a19985a368df_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!VZGQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d6c91e-dbf5-41e9-bb05-a19985a368df_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VZGQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d6c91e-dbf5-41e9-bb05-a19985a368df_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46d6c91e-dbf5-41e9-bb05-a19985a368df_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:137896,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VZGQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d6c91e-dbf5-41e9-bb05-a19985a368df_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!VZGQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d6c91e-dbf5-41e9-bb05-a19985a368df_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!VZGQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d6c91e-dbf5-41e9-bb05-a19985a368df_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!VZGQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d6c91e-dbf5-41e9-bb05-a19985a368df_1024x1024.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><p>You&#8217;re starting a new job &#8211; congratulations! Every new gig is an exciting opportunity. You will be challenged in new ways, learn new things, meet new people, and maybe even hit that coveted Senior Engineer title!</p><p>The first few weeks and months are crucial for building relationships, understanding the intricacies of the business and its products and tech, and setting the tone of your time there.</p><p>Here&#8217;s how a senior engineer effectively onboards at a new job:</p><h3>Focus on learning.</h3><p>You were hired at this new job for your potential to add to the team, based on your existing skills and past experience. But your first few weeks at an organization are not for demonstrating what you bring to the table, but for learning what&#8217;s already there.</p><p>Every organization has its own business problems, technical nuances, team dynamics, goals, and more. Your onboarding time is best spent learning about all of these, and determining how you can best apply your existing skillset to them.</p><p>Be humble &#8211; don&#8217;t assume you know anything already. Ask all the questions, even if you think you know the answer. Absorb everything.</p><h3>Build relationships early.</h3><p>Your ability to influence and lead is closely tied to the relationships you build. The first few weeks is a great time to introduce yourself to your new team, learn how you will work together, and along the way identify key stakeholders and potential mentors.</p><p>Here is the strategy I recommend:</p><ol><li><p>Meet one-on-one with every person on your immediate team. Get to know each other a bit, but focus on having them explain their current work to you.</p></li><li><p>Get into as much detail as time allows. Have them show you the product, the internals, any documentation, etc.</p></li><li><p>Ask any and all questions you have. Write them down as you have them, so you can follow up in case time runs out. &#8220;Why&#8221; questions are the most important &#8211; they&#8217;ll help provide critical business and team context.</p></li><li><p>Ask how you can help<em> them</em> be more successful. Not everyone will have a specific answer, but those who do are opportunities for increasing your influence.</p></li><li><p>At the end, ask them who else they&#8217;re working with on other teams. Repeat the same process with those people.</p></li><li><p>When you run into people who aren&#8217;t working on anything relevant to you, you can stop.</p></li></ol><p>Using this strategy, you will:</p><ul><li><p>Make yourself known to as many team members as possible</p></li><li><p>Gain valuable insight into the business</p></li><li><p>Learn about the product in a way that&#8217;s relevant to your first few months of work</p></li></ul><h3>Set clear goals.</h3><p>With help from your manager and immediate team, define clear and <strong>achievable</strong> goals for your first 90 days.</p><p>Ideally your goals will balance networking, learning, and tangible contributions (writing code).</p><p>Regularly check in with your manager on how these goals are progressing, and adjust as needed together.</p><h3>Take ownership and demonstrate value.</h3><p>While listening to your new coworkers and learning about the org and its tech, look for opportunities to contribute early on. The freedom you have during the onboarding period is a great time to add some wins to the team that they&#8217;ve been meaning to get to but haven&#8217;t had the capacity yet.</p><p>These wins could include:</p><ul><li><p>Improving documentation, especially anything that has gotten out-of-date since it was last updated</p></li><li><p>Adding useful automation, such as tests or code quality checks</p></li><li><p>Fixing an annoying but low priority piece of tech debt</p></li><li><p>Making an application tweak to add consistency or improved UX</p></li><li><p>Optimize a slow-loading process</p></li></ul><p>Your onboarding time is a perfect opportunity to leave things better than you found them. More on that in this previous edition:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;07717a4b-aa12-41e0-a0e4-830491d51013&quot;,&quot;caption&quot;:&quot;The book The Pragmatic Programmer by David Thomas and Andrew Hunt offers this passage about software entropy at the very beginning: There are many factors that can contribute to software rot. The most important one seems to be the psychology, or culture, at work on a project. Even if you are a team of one, your project&#8217;s psychology can be a very delicate&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#5: Leave Everything Better Than You Found It&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:191012299,&quot;name&quot;:&quot;Aken Roberts&quot;,&quot;bio&quot;:&quot;Author of Become a Senior Engineer, a resource for software devs to level up. Writes about entrepreneurship on LinkedIn &amp; Twitter.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3457fa7-5552-455f-9276-de2f0ffb6682_1158x1158.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-01-11T20:01:25.861Z&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%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://becomeaseniorengineer.substack.com/p/5-leave-everything-better-than-you&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:140570249,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Become a Senior 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%2F725bd1af-606e-42d0-be2d-94dd03dd4046_809x809.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h3>Stay open to feedback.</h3><p>An extension of being humble while learning, stay open to constructive criticism. Actively seek it, encouraging your team to provide advice when they feel you need it.</p><p>Feedback isn&#8217;t only about ways you can improve; it&#8217;s also about understanding how your work aligns with your team and the business&#8217; goals.</p><p>It also establishes a culture of openness and trust, which is critical to your long-term success.</p><h3>Use your product like a customer.</h3><p>Put yourself into the mindset of one of your business&#8217; customers, and start using the products your company offers.</p><p>This provides so many benefits:</p><ul><li><p>Understand customers and their problems help contextualize future work</p></li><li><p>Learn about the products and their benefits and utility; ask questions about features you don&#8217;t understand</p></li><li><p>Identify any improvements that could be made</p></li></ul><p>Which leads nicely into&#8230;</p><h3>Understand the broader business context.</h3><p>Senior engineers are expected to understand not just the technical, but also the business implications of their work.</p><p>Take time to learn about the company's products, market position, and strategic objectives. This broader perspective will enrich your contributions and enable you to drive more impactful innovations.</p><h3>Own the process when there isn&#8217;t one.</h3><p>Engineering teams understand that it takes time to onboard. You will almost never be expected to deliver production code within the first couple weeks, if not longer.</p><p>If your new organization does not have a formal onboarding process, or it is lacking some of the steps mentioned here that you find beneficial (or want to try), create a plan yourself and ask your manager for the time to execute it.</p><p>Taking initiative and ownership is a huge part of being a Senior. Set a good impression by demonstrating that in your first days on the job. Without overstepping what they have planned for you already. &#128521;</p><div><hr></div><p>The beginning of your journey in a new organization is a unique opportunity to redefine your professional identity, expand your skill set, and contribute to something meaningful. By approaching this transition with intentionality, curiosity, and a commitment to excellence, you'll not only succeed in your new role but also set the stage for lasting growth and impact.</p><div><hr></div><h1>Up Next</h1><p>&#127891; Why you should be pair programming more often!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.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://newsletter.becomeaseniorengineer.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>Thank you for taking the time to read. It means a lot to me!</p><p>I&#8217;m coming up on an initial MVP release of my mobile app, Stay Woven. If you&#8217;d like to help me test it out, sign up at <a href="https://staywoven.com">StayWoven.com</a>.</p><p>Are you working on anything cool right now? Hit reply and tell me about it!</p><p>Aken &#128153;</p>]]></content:encoded></item><item><title><![CDATA[🎓 What `MVP` actually means; Horizontal vs. Vertical scaling]]></title><description><![CDATA[What `MVP` Actually Means]]></description><link>https://newsletter.becomeaseniorengineer.com/p/what-mvp-actually-means-horizontal</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/what-mvp-actually-means-horizontal</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Thu, 21 Mar 2024 23:08:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zBOt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f64d78-21e0-48c1-8bcf-fd5d88491893_828x618.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>What `MVP` Actually Means</h1><p>I was having a conversation with one of my favorite managers in recent years, Brandon, at my last full-time job.</p><p>We were discussing how to deliver value both individually and as a team, and how to do it more quickly.</p><p>He shared a wonderful article that helped me redefine MVP &#8211; Minimum Viable Product &#8211; as a focus on the <em>value</em> instead of the <em>product</em>.</p><p>Instead of rewriting the same idea and analogy, please read <em><a href="https://blog.crisp.se/2016/01/25/henrikkniberg/making-sense-of-mvp">Making sense of MVP</a></em><a href="https://blog.crisp.se/2016/01/25/henrikkniberg/making-sense-of-mvp"> by Henrik Kniberg</a>. Keep reading here for a brief TL;DR and my thoughts on how a senior engineer applies this mindset.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zBOt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f64d78-21e0-48c1-8bcf-fd5d88491893_828x618.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zBOt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f64d78-21e0-48c1-8bcf-fd5d88491893_828x618.png 424w, https://substackcdn.com/image/fetch/$s_!zBOt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f64d78-21e0-48c1-8bcf-fd5d88491893_828x618.png 848w, https://substackcdn.com/image/fetch/$s_!zBOt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f64d78-21e0-48c1-8bcf-fd5d88491893_828x618.png 1272w, https://substackcdn.com/image/fetch/$s_!zBOt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f64d78-21e0-48c1-8bcf-fd5d88491893_828x618.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zBOt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f64d78-21e0-48c1-8bcf-fd5d88491893_828x618.png" width="828" height="618" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32f64d78-21e0-48c1-8bcf-fd5d88491893_828x618.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:618,&quot;width&quot;:828,&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;: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_!zBOt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f64d78-21e0-48c1-8bcf-fd5d88491893_828x618.png 424w, https://substackcdn.com/image/fetch/$s_!zBOt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f64d78-21e0-48c1-8bcf-fd5d88491893_828x618.png 848w, https://substackcdn.com/image/fetch/$s_!zBOt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f64d78-21e0-48c1-8bcf-fd5d88491893_828x618.png 1272w, https://substackcdn.com/image/fetch/$s_!zBOt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f64d78-21e0-48c1-8bcf-fd5d88491893_828x618.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>TL;DR:</h2><p>An MVP is not a chunk of &#8220;big bang&#8221; delivery, where you don&#8217;t deliver customers anything until it&#8217;s 100% complete.</p><p>If the intention is to deliver a car, an MVP is <em>not</em> releasing a wheel, then a frame, then a body&#8230; Engineering teams in agile environments tend to fall into this pattern as we plan for sprints.</p><p>An MVP is better thought of as a Minimum <strong>Valuable</strong> Product, or as Henrik puts it, the earliest testable product. (&#8220;Testable&#8221; means can be tested by users, not automated testing for code.)</p><p>The sooner you deliver any kind of value for your customer, the sooner you can get feedback on the direction you&#8217;re heading. Learn, iterate, repeat. If you get too far into a big bang delivery and you&#8217;re <em>wrong</em> about something, you lost a lot of time and effort.</p><h2>How a Senior applies this mindset</h2><p><strong>Figure out your skateboard.</strong></p><p>Identify an MVP that delivers value by breaking up your work into fully-functioning pieces. Do you need to build a feature that includes both front- and back-end layers? Don&#8217;t deliver one on its own &#8211; that&#8217;s the same as delivering the wheel of a car. Find a vertical slice that includes a minimum valuable and <em>usable</em> portion of all layers to deliver first.</p><p><strong>Think in terms of MVPs when prioritizing and planning.</strong></p><p>When working through your backlog, think about delivering MVPs of the features first to help determine what has the most impact (priority), limit scope creep, and provide timetables for planning.</p><p><strong>MVPs help you learn.</strong></p><p>In my last issue we discussed <em>Making (Reasonably) Good Decisions Quickly</em>, and one way to do that is to use prototyping to learn and validate an idea:</p><blockquote><p><strong>Use prototyping, testing, and automation.</strong> Building prototypes and conducting quick tests can provide immediate feedback and inform decisions, especially when choosing between different technical approaches or designs.</p></blockquote><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;8e022f31-a706-4b28-9462-dea3cf9da8b4&quot;,&quot;caption&quot;:&quot;&#129300; How to make (reasonably) good decisions quickly. Part of a senior engineer&#8217;s responsibility is creating clear direction for their projects and their team. Clear direction comes from decisions made in uncertain situations, where multiple options are viable.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;&#127891; Making (reasonably) good decisions quickly; Using a third Entity instead of a Join Table&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:191012299,&quot;name&quot;:&quot;Aken Roberts&quot;,&quot;bio&quot;:&quot;Author of Become a Senior Engineer, a resource for software devs to level up. Writes about entrepreneurship on LinkedIn &amp; Twitter.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3457fa7-5552-455f-9276-de2f0ffb6682_1158x1158.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-03-14T19:05:56.508Z&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%2F6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://becomeaseniorengineer.substack.com/p/making-reasonably-good-decisions&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:142613993,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Become a Senior 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%2F725bd1af-606e-42d0-be2d-94dd03dd4046_809x809.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><strong>Foster a learning and iterative culture.</strong></p><p>Encourage a mindset where failures are seen as opportunities to learn and pivot, rather than setbacks. Use MVPs and iteration to develop this resilience, especially when building new products.</p><p><strong>MVPs enable communication.</strong></p><p>Keep stakeholders informed with regular updates that focus on progress, challenges, and decisions. Guide junior team members through the MVP process, teaching them to balance speed, quality, and user focus in their work.</p><p>You become a Senior Engineer by focusing on the <strong>value</strong> you deliver your team, your organization, and your customers. Every MVP that delivers value, even a small amount, increases your impact and shortens your path to Senior. &#128170;&#127996;</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.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://newsletter.becomeaseniorengineer.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h1>Vertical vs. Horizontal Scaling</h1><p>Scaling refers to increasing the ability of a system or application to handle increasing amounts of data, traffic, or load, without compromising performance or security.</p><p>Scaling comes in many forms, from application code changes to significant infrastructure additions. Today we&#8217;re focusing on two types of server infrastructure scaling: vertical and horizontal.</p><h3><strong>Vertical Scaling (Scaling Up)</strong></h3><p>Vertical scaling involves increasing the power of a single server or resource. This could mean adding more CPUs, RAM, or storage to the existing hardware.</p><p><strong>Pros</strong></p><ul><li><p><strong>Simplicity</strong> &#8211; It's often easier to scale a system vertically because it doesn&#8217;t require significant changes to the application&#8217;s code.</p></li><li><p><strong>Immediate performance boost</strong> &#8211; Adding more resources can provide a direct and immediate improvement to the application's performance.</p></li></ul><p><strong>Cons</strong></p><ul><li><p><strong>Physical limits</strong> &#8211; There's a ceiling to how much you can upgrade a single server, determined by the hardware's maximum capacity.</p></li><li><p><strong>Downtime</strong> &#8211; Upgrading hardware might require downtime, which can be a drawback for systems requiring high availability.</p></li><li><p><strong>Cost</strong> &#8211; Beyond certain limits, it becomes very expensive to increase server specifications.</p></li></ul><h3><strong>Horizontal Scaling (Scaling Out/In)</strong></h3><p>Horizontal scaling means adding more servers to your pool of resources to distribute the load more evenly across them. Instead of having one super-powerful server, you have multiple servers sharing the workload.</p><p><strong>Pros</strong></p><ul><li><p><strong>Flexibility</strong> &#8211; You can add or remove servers based on demand, making it ideal for handling variable workloads.</p></li><li><p><strong>No physical limit</strong> &#8211; Since you&#8217;re adding more machines, you&#8217;re not limited by the capacity of a single server.</p></li><li><p><strong>High availability</strong> &#8211; If one server fails, the system can reroute the load to other servers, ensuring that the application remains available.</p></li></ul><p><strong>Cons</strong></p><ul><li><p><strong>Complexity</strong> &#8211; It requires more sophisticated management, load balancing, and possibly changes to how the application handles state, sessions, or databases.</p></li><li><p><strong>Networking overhead</strong> &#8211; More servers mean more network traffic, which can introduce latency and complexity in communication.</p></li></ul><h3><strong>Choosing Between The Two</strong></h3><p>A senior engineer thinks about scalability from the outset of their projects, considering both short-term and long-term needs.</p><p>Those needs include both the technical and business requirements, such as:</p><ul><li><p><strong>Expected growth</strong> &#8211; How is your application expected to grow in scale?</p></li><li><p><strong>Architectural decisions</strong> &#8211; What is more important: availability or performance? Simplicity or flexibility?</p></li><li><p><strong>Maintenance and team capabilities</strong> &#8211; Who will maintain the scaled infrastructure, and what are their talents and capabilities? How will maintenance impact engineering capacity?</p></li><li><p><strong>Cost</strong> &#8211; What budget is available to the team and the organization?</p></li></ul><p>For applications expected to grow significantly and unpredictably, horizontal scaling offers more flexibility and scalability. On the other hand, for applications with predictable growth, vertical scaling might be a simpler and cost-effective choice initially.</p><p>Imagine you&#8217;re running a social media application. In its infancy, vertical scaling might suffice to meet your needs. However, as your user base grows and traffic spikes occur unpredictably, horizontal scaling becomes essential. You'll need to design your application to efficiently distribute requests across servers, handle sessions consistently, and synchronize data across multiple nodes.</p><div><hr></div><p>Until next time, ciao!</p><p>Aken &#128153;</p>]]></content:encoded></item><item><title><![CDATA[🎓 Making (reasonably) good decisions quickly; Using a third Entity instead of a Join Table]]></title><description><![CDATA[&#129300; How to make (reasonably) good decisions quickly.]]></description><link>https://newsletter.becomeaseniorengineer.com/p/making-reasonably-good-decisions</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/making-reasonably-good-decisions</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Thu, 14 Mar 2024 19:05:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!L3Zj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>&#129300; How to make (reasonably) good decisions quickly.</h1><p>Part of a senior engineer&#8217;s responsibility is creating clear direction for their projects and their team. Clear direction comes from decisions made in uncertain situations, where multiple options are viable.</p><p>By making well-informed decisions quickly, a senior unblocks themselves and their team and enables action, learning, and iteration.</p><h3>Why make decisions quickly</h3><p>The decisions we&#8217;re talking about today aren&#8217;t clear and obvious ones. They&#8217;re decisions made during uncertainty. Maybe you have multiple options that all seem viable. Maybe you aren&#8217;t sure if your problem will be solved by the chosen direction.</p><p><strong>Decisions should be made quickly to get clarity faster.</strong></p><p>The faster a decision is made, the faster action can be taken, and the sooner you will have the result or outcome of your decision.</p><p>Decide &#8594; Act &#8594; Learn &#8594; Repeat</p><h3>How long exactly is &#8220;quickly&#8221;?</h3><p>Every engineer&#8217;s favorite answer: it depends!</p><p>There is no specific time frame a decision must be made within. Thankfully, there are two heuristics you can use to help gauge how long to consider your options:</p><ul><li><p><strong>How big an impact will this decision have on the organization?</strong> If the topic is mission critical and will support the foundations of the entire business for years to come, <em>take your damn time!</em> If there&#8217;s minimal impact and things can be easily changed, decide quickly and iterate from there.</p></li><li><p><strong>When will you know if the decision was good or bad?</strong> If the outcome of your decision can&#8217;t be known for a long time, spend more time up front. (And be careful that your scope isn&#8217;t too big.) If you&#8217;ll know in a reasonably short time, the initial decision can be made more quickly.</p></li></ul><h3>How to decide quickly</h3><ul><li><p><strong>Understand the problem.</strong> Make sure the problem <em>and desired outcome</em> from the decision is well-defined. Have an answer to the question &#8220;How will I know if my decision was correct?&#8221;</p></li><li><p><strong>Prioritize.</strong> Focusing on the most critical aspects of a decision can make the process faster.</p></li><li><p><strong>Reduce scope if needed.</strong> Does the decision seem massive, with a large potential impact? Reduce scope to be less impactful, and can be decided and iterated on more quickly.</p></li><li><p><strong>Research your options.</strong> Narrow your choices through research that supports better options and rules out others. Limit your time using the aforementioned impact and duration heuristics.</p></li><li><p><strong>Collaborate with your team.</strong> Utilize the knowledge and experience of your peers. Ask for their opinions, especially if your options are more subjective. Letting your team express their preferences will help you get buy in.</p></li><li><p><strong>Don&#8217;t wait for unanimity.</strong> It&#8217;s incredibly rare to have <em>everyone</em> fully agree on something. Don&#8217;t wait for it. Make a decision that is supported by a majority.</p></li><li><p><strong>Don&#8217;t stall with multiple choices.</strong> When you&#8217;ve done all this and there are still multiple options that seem like good choices, just pick one! Especially if the impact is low and you can iterate quickly. Getting to the act phase is more important than choosing the &#8220;best&#8221; option, because acting will help you learn what best actually is.</p></li><li><p><strong>Use prototyping, testing, and automation.</strong> Building prototypes and conducting quick tests can provide immediate feedback and inform decisions, especially when choosing between different technical approaches or designs.</p></li></ul><h3>How you can apply this today</h3><p>When presented with a choice that you would usually ask a more senior team member for direction on, try deciding yourself first. <em>Then</em> talk to that team member, present the options, and what you think the best decision is and why.</p><p>If the team member disagrees, you can have a conversation about why. A great learning opportunity.</p><p>If the team member agrees, the conversation will be short, you have saved them time and mental capacity of having to make another decision, and you both get confidence in future decision making opportunities. Eventually you&#8217;ll be empowered to make decisions like that without consulting others.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L3Zj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L3Zj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!L3Zj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!L3Zj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!L3Zj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L3Zj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:417040,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!L3Zj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!L3Zj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!L3Zj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!L3Zj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd0d209-174b-4fad-8472-e50998b3accc_1024x1024.webp 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><h1>&#128101; Using a third entity instead of using a join table</h1><p>A join table is commonly used in relational databases to associate two records with each other in a many-to-many relationship.</p><p>Consider this example of a University with Student and Class entities. There are many Classes, each with many Students. A basic join table structure may look 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_!own3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d213e8c-7df4-4db4-8ac1-5cfde5bebd0d_1338x444.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!own3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d213e8c-7df4-4db4-8ac1-5cfde5bebd0d_1338x444.png 424w, https://substackcdn.com/image/fetch/$s_!own3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d213e8c-7df4-4db4-8ac1-5cfde5bebd0d_1338x444.png 848w, https://substackcdn.com/image/fetch/$s_!own3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d213e8c-7df4-4db4-8ac1-5cfde5bebd0d_1338x444.png 1272w, https://substackcdn.com/image/fetch/$s_!own3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d213e8c-7df4-4db4-8ac1-5cfde5bebd0d_1338x444.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!own3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d213e8c-7df4-4db4-8ac1-5cfde5bebd0d_1338x444.png" width="1338" height="444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d213e8c-7df4-4db4-8ac1-5cfde5bebd0d_1338x444.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:444,&quot;width&quot;:1338,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58375,&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_!own3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d213e8c-7df4-4db4-8ac1-5cfde5bebd0d_1338x444.png 424w, https://substackcdn.com/image/fetch/$s_!own3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d213e8c-7df4-4db4-8ac1-5cfde5bebd0d_1338x444.png 848w, https://substackcdn.com/image/fetch/$s_!own3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d213e8c-7df4-4db4-8ac1-5cfde5bebd0d_1338x444.png 1272w, https://substackcdn.com/image/fetch/$s_!own3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d213e8c-7df4-4db4-8ac1-5cfde5bebd0d_1338x444.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 works just fine if there is no additional data in the middle of this relationship. However, the University wants to know more than who is in the class. We need to track attendance, grades, etc. for each student.</p><p>We could add these attributes to our existing join table, but some frameworks and ORMs don&#8217;t play nicely with that. We&#8217;re also now seeing more of our <strong>domain</strong> coming into play. This isn&#8217;t just a relationship, this is first-class data.</p><p>Let&#8217;s reflect that by replacing the join table with a proper Enrollment entity:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J6jI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc80cc5-b7c9-40b7-82bb-86ba27e799dd_1386x504.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J6jI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc80cc5-b7c9-40b7-82bb-86ba27e799dd_1386x504.png 424w, https://substackcdn.com/image/fetch/$s_!J6jI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc80cc5-b7c9-40b7-82bb-86ba27e799dd_1386x504.png 848w, https://substackcdn.com/image/fetch/$s_!J6jI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc80cc5-b7c9-40b7-82bb-86ba27e799dd_1386x504.png 1272w, https://substackcdn.com/image/fetch/$s_!J6jI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc80cc5-b7c9-40b7-82bb-86ba27e799dd_1386x504.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J6jI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc80cc5-b7c9-40b7-82bb-86ba27e799dd_1386x504.png" width="1386" height="504" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8fc80cc5-b7c9-40b7-82bb-86ba27e799dd_1386x504.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:504,&quot;width&quot;:1386,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:69731,&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_!J6jI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc80cc5-b7c9-40b7-82bb-86ba27e799dd_1386x504.png 424w, https://substackcdn.com/image/fetch/$s_!J6jI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc80cc5-b7c9-40b7-82bb-86ba27e799dd_1386x504.png 848w, https://substackcdn.com/image/fetch/$s_!J6jI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc80cc5-b7c9-40b7-82bb-86ba27e799dd_1386x504.png 1272w, https://substackcdn.com/image/fetch/$s_!J6jI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc80cc5-b7c9-40b7-82bb-86ba27e799dd_1386x504.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>By adding a third entity, we&#8217;ve:</p><ul><li><p>Better reflected the domain and business logic of the University (a student <em>enrolls</em> to a class)</p></li><li><p>Alleviated any issues with frameworks or ORMs that don&#8217;t play nice with additional data in join tables</p></li><li><p>Kept all the same relationships</p></li></ul><div><hr></div><h1>Things &amp; Happenings</h1><h4>Tech</h4><ul><li><p><a href="https://www.usebruno.com/">Bruno</a>, a new API client alternative to Postman</p></li><li><p><a href="https://openmoji.org/">OpenMoji</a>, open source emoji for everyone</p></li></ul><h4>Learning</h4><ul><li><p><a href="https://eloquentjavascript.net/">Eloquent JavaScript (4th Edition, 2024)</a>, a book about JavaScript, programming, and the wonders of the digital</p></li></ul><h4>Tools</h4><ul><li><p><a href="https://dbdiagram.io/">dbdiagram</a>, used to make those table graphics &#128578;</p></li></ul><h4>Other Reading</h4><ul><li><p><a href="https://www.elastic.co/blog/culture-international-womens-day-2024">Celebrating women in tech this International Women&#8217;s Day</a> by Elastic</p></li></ul><div><hr></div><h1>Coming Up</h1><ul><li><p>What an MVP <em>actually</em> is</p></li><li><p>Horizontal vs. Vertical scaling</p></li></ul><p>I <a href="https://www.linkedin.com/feed/update/urn:li:activity:7173372247196336128">posted a poll on LinkedIn</a> about future topics to cover. Head there to vote and influence the content of this newsletter!</p><p>Talk to you again soon.</p><p>Aken &#128153;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.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"><em>BASE is a new publication since December 2023. If you appreciate the content, subscribe <strong>for</strong> <strong>free</strong> to receive future editions. Consider sharing with your colleagues and networks, it would mean a great deal to me. &#128153;</em></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><item><title><![CDATA[🎓 Get more productivity, fewer distractions from Slack; Reduce tech debt by automating dependency updates]]></title><description><![CDATA[How to make Slack and automation work for YOU, not the other way around.]]></description><link>https://newsletter.becomeaseniorengineer.com/p/get-more-productivity-fewer-distractions</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/get-more-productivity-fewer-distractions</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Thu, 07 Mar 2024 22:59:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!B1j9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1b6bd8-a59c-4fbe-9047-cf4aa617f3d4_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Using Slack Effectively</h1><p>Slack is a <em>wonderfully</em> beneficial tool for productivity, team communication, and even automation. But it can be both incredibly distracting and a lot of noise! &#128165;</p><p>Senior engineers constantly iterate on and improve their workflows, how they spend their time, and how information flows to and from them. Here are ways you can Be A Senior and use Slack effectively to both improve communication and minimize distraction:</p><h3>Improve Communication</h3><ul><li><p><strong>Default to using Channels.</strong> Channels allow more participants and make content more accessible both immediately and long-term. It keeps discussions relevant to a single topic in one place instead of spread out among DMs. And it doesn&#8217;t disrupt others from their focus, if they&#8217;ve followed my advice below about minimizing distractions. &#128521;</p></li><li><p><strong>Make more channels.</strong> Do you have 50 engineers all posting about their projects in the #engineering channel? I have a hug and a shoulder to cry on waiting for you if so. Create channels for teams, projects, and even one-off situations. &#128218; <a href="https://slack.com/resources/using-slack/how-to-organize-your-slack-channels">How to organize your slack channels.</a></p></li><li><p><strong>Use private channels.</strong> Some conversations are naturally more sensitive, but are still relevant to work and not private matters. Private channels have all the same benefits while limiting access. This is especially useful when you need to add someone new, as they&#8217;ll have access to the channel&#8217;s history right away.</p></li><li><p><strong>Use threads.</strong> Threads allow multiple conversations to happen in parallel without overwhelming a channel, and are easier to reference later. Be careful letting a thread get too long or diverge from its origins; create another thread if that happens.</p></li><li><p><strong>Add useful integrations.</strong> Share build pipeline updates. Auto-link Jira tickets. Update your status automatically when meetings on your calendar begin. Be notified when you&#8217;re assigned to something. Trigger automations right from Slack. The options are endless.</p></li><li><p><strong>Share info through statuses and reactions.</strong> Who knew emoji could be so damn useful? Update your status when focusing or away from your desk. React with &#128064; when looking into a question. Mark your own question with &#9989; when answered. These small bits of communication are incredibly useful to others, and add up to a lot of time saved.</p></li><li><p><strong>Try not to post rapidly.</strong> This one is more important when direct messaging someone, but can apply to channels and threads, too. Don&#8217;t say &#8220;Hi&#8221; and <em>then</em> write a novel, or send 5-10 rapid lines of mind dump. Make your first post a full thought. Don&#8217;t take someone&#8217;s attention then make them wait.</p></li><li><p><strong>Write well with proper grammar and spelling.</strong> I&#8217;ll admit this one is a lot of personal opinion and standard. I have a hard time reading shortcut-style text with words replaced with letters and a lack of punctuation. I also won&#8217;t take you as seriously if you write like that, even if you&#8217;re a great developer. Kind of like dressing nicely for an interview, the way you write makes an impression.</p></li></ul><h3>Minimizing Distractions</h3><ul><li><p><strong>Use notifications for DMs, mentions, and keywords.</strong> Don&#8217;t use notifications for everything, ever.</p></li><li><p><strong>Turn off &#8220;Include a preview of the message in each notification&#8221;.</strong> This keeps you from reading whatever the message is about and switching contexts even further, and helps with privacy when sharing your screen or someone&#8217;s looking over your shoulder.</p></li><li><p><strong>Use Do Not Disturb mode often.</strong> Think of it like closing your door and putting your headphones on &#8211; this is your time, and people should leave you alone. Set your Slack status to &#8220;Focus Mode&#8221; or &#8220;Heads Down&#8221;, turn DND on, and focus.</p></li><li><p><strong>Adjust notifications at the channel level.</strong> Sometimes one specific channel is noisy, or you can&#8217;t convince someone to stop using @here every time they post (I hate them, too &#129324;).</p></li><li><p><strong>Unsubscribe from threads.</strong> Sometimes you don&#8217;t need to keep up with a thread you participated in. Hover over the original post, click the three dots, and choose &#8220;Turn off notifications for replies&#8221;.</p></li></ul><p>Don&#8217;t let these notifications take over your life like this guy:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B1j9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1b6bd8-a59c-4fbe-9047-cf4aa617f3d4_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B1j9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1b6bd8-a59c-4fbe-9047-cf4aa617f3d4_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!B1j9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1b6bd8-a59c-4fbe-9047-cf4aa617f3d4_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!B1j9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1b6bd8-a59c-4fbe-9047-cf4aa617f3d4_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!B1j9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1b6bd8-a59c-4fbe-9047-cf4aa617f3d4_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B1j9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1b6bd8-a59c-4fbe-9047-cf4aa617f3d4_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b1b6bd8-a59c-4fbe-9047-cf4aa617f3d4_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:401678,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!B1j9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1b6bd8-a59c-4fbe-9047-cf4aa617f3d4_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!B1j9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1b6bd8-a59c-4fbe-9047-cf4aa617f3d4_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!B1j9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1b6bd8-a59c-4fbe-9047-cf4aa617f3d4_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!B1j9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1b6bd8-a59c-4fbe-9047-cf4aa617f3d4_1024x1024.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><h1>Automated Dependency Updates</h1><p>Technical debt comes in many forms. One form you&#8217;re probably familiar with is outdated third-party dependencies. They can be a huge chore to maintain and update, and rarely are you bestowed the time to do so.</p><p>How does a Senior approach convincing the company to give devs the time?</p><p>First, you have to communicate the issue in business value rather than technical.</p><p><strong>Don&#8217;t </strong>&#10060;</p><p>You: &#8220;We need time to update these packages.&#8221;<br>Them: &#8220;Why? Are they broken?&#8221;<br>You: &#8220;No&#8230;&#8221;<br>Them: &#8220;Okay then we don&#8217;t need to. This feature takes priority.&#8221;</p><p><strong>Do</strong> &#9989;</p><p>You: &#8220;We have packages our software depends on that are out of date. These old versions have security vulnerabilities and bugs that have since been patched. If we avoid updating now, our app is open to security risks, and updating later will be a larger undertaking that could risk more bugs or even downtime.&#8221;</p><p>Them: &#8220;Yikes! Let&#8217;s do that now. How long will it take?&#8221;</p><p>By expressing the value in terms of business, you&#8217;re more likely to get buy-in from the decision makers. But that last question is still a tough one &#8211; how long <em>will</em> it take? This won&#8217;t be the only time you do dependency maintenance, either. Will it take that long every time? You need a plan.</p><p><strong>Automation to the rescue!</strong> &#128735;</p><p>Automated dependency updating software tracks your project&#8217;s dependencies, identifies when new versions have been released, and creates pull requests with the updated versions automatically.</p><p>This flow has big wins for you <em>and</em> the business:</p><ul><li><p>Engineers don&#8217;t have to spend time on the tedious parts, allowing them to focus on more impactful work</p></li><li><p>Each dependency update is small, taking minimal time and effort</p></li><li><p>Dependencies don&#8217;t go stale, preventing security risks</p></li><li><p>Can be implemented relatively quickly</p></li></ul><p>However, there are still some considerations and potential trade-offs:</p><ul><li><p>In order to reduce engineer work as much as possible, you should have a <strong>mature</strong> delivery pipeline with a large amount of test coverage. Otherwise it will still be a manual testing effort.</p></li><li><p>If you aren&#8217;t doing continuous delivery, you risk rolling back a release full of features due to a bug not found in an automated update</p></li><li><p>Having a lot of projects (e.g. a large microservice ecosystem) could result in a lot of automated PR noise</p></li><li><p>Automating <em>some</em> dependency management makes it easier to forget about the non-automated stuff</p></li></ul><p>At the very least, being notified when a dependency update is available and reducing the amount of work needed to test and merge it is a win for your team.</p><p>Here are some solutions to consider:</p><ul><li><p><a href="https://www.mend.io/renovate/">Mend Renovate</a></p></li><li><p><a href="https://docs.github.com/en/code-security/getting-started/dependabot-quickstart-guide">GitHub&#8217;s Dependabot</a></p></li><li><p><a href="https://depfu.com/">Depfu</a></p></li><li><p><a href="https://snyk.io/">Snyk</a></p></li></ul><div><hr></div><h1>Coming Up</h1><p>&#129300; How to quickly make (reasonably) good decisions</p><p>&#128101; Creating a third entity instead of using a join table</p><div><hr></div><p>That&#8217;s all for today! Not enough Happenings happened or Findings found. See what I did there? (&#8978;&#9661;&#8978;)</p><p>Have you been enjoying the two-subject format lately? Hit reply and shoot me your thoughts and advice.</p><p>Aken &#128153;</p>]]></content:encoded></item><item><title><![CDATA[🎓 Work on projects you aspire towards; Design Pattern of the Day: Adapter]]></title><description><![CDATA[Grow faster than you would only working on what you're given; how the Adapter pattern creates cleaner code that's faster to implement.]]></description><link>https://newsletter.becomeaseniorengineer.com/p/work-on-projects-you-aspire-towards</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/work-on-projects-you-aspire-towards</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Thu, 29 Feb 2024 22:15:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XqLc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a8e91c6-912a-452f-885c-3b17b6ff44ea_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Work on projects you aspire towards.</h1><p>Working on the projects handed to you from managers, leads, or other leaders on your team is normal and valuable. The problem is, it&#8217;s valuable more to the <em>company</em> than it is to <em>you</em>.</p><p>Most work handed to you will be within your assumed current skillset. As a junior engineer, you&#8217;ll be given more basic tasks. As a mid-level, you&#8217;ll be given features that are more complex, limited in scope.</p><p>In order to make the biggest leaps in knowledge and experience, you need to work on things that are <em>beyond</em> your current skillset. As you demonstrate growth, you&#8217;ll naturally be given more responsibility and opportunity to influence your team and organization.</p><p>Here are 6 actionable ways to position yourself in more aspirational projects and situations:</p><ol><li><p><strong>Give an impression of trust and added value.</strong> You may have all the skills and qualifications to receive more complex projects, but you won&#8217;t get them if the team doesn&#8217;t trust you. Improve your standing by participating in meetings, turning your camera on, helping your teammates, and overall demonstrating you are a valuable part of the team. It doesn&#8217;t mean overtime or extra work, it means not hiding or giving your team reasons to question your abilities.<br></p></li><li><p><strong>Ask or volunteer for the work.</strong> Let your manager or lead know you&#8217;re interested in pursuing more difficult and complex work to gain experience. Sometimes all it takes to get more difficult tasks is to make others aware that you want them. If one is open for the taking already, volunteer to own it.<br></p></li><li><p><strong>Surround yourself with people already there.</strong> Direct ownership of a more complex task isn&#8217;t the only way to gain experience. Ask your more senior team members if you can watch them work via shadowing or pair programming. Have them think out loud so you can hear their mindset and processes. Ask questions any time you don&#8217;t understand something &#8211; these exercises are about learning, not pride.<br></p></li><li><p><strong>Accept opportunities that feel beyond your skillset.</strong> Don&#8217;t let fear, uncertainty, or doubt keep you from excelling. Stagnation is an enemy in your journey to Senior, and avoiding learning opportunities will delay your progress. You won&#8217;t regret pushing outside of your comfort zone.<br></p></li><li><p><strong>Own an ugly problem.</strong> People &#8211; yourself included &#8211; naturally want to do more interesting and impactful things. But tech products are riddled with unsexy issues in the backlog. By taking initiative, owning, and fixing unsexy problems, you&#8217;ll pick up more experience and position yourself as someone that can be trusted. Remember that the key to trust is to <em>deliver</em> whatever you own, ugly or otherwise.<br></p></li><li><p><strong>Ask for help, and admit defeat if necessary.</strong> Part of taking on more complex projects is the risk of failure. Something, at some point in your career, will be too much for you to complete on your own. Don&#8217;t get down about it! First, ask for help when you get stuck. (You should do that at <em>every</em> phase of your career, but it&#8217;s especially important when pushing your boundaries.) If all else fails, let the project be taken over by someone more qualified. Your team will help you recognize when this is needed. At which point you can reflect on what you learned, where you got stuck so you can focus on getting back to that point, and maybe continue to pair with whomever takes it over.</p></li></ol><p>Working on projects you aspire to is very much within your grasp. Be confident in your ability to learn, vocal in you desire, proactive in your ownership, and humble in your success or failure. &#127870;</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XqLc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a8e91c6-912a-452f-885c-3b17b6ff44ea_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XqLc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a8e91c6-912a-452f-885c-3b17b6ff44ea_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!XqLc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a8e91c6-912a-452f-885c-3b17b6ff44ea_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!XqLc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a8e91c6-912a-452f-885c-3b17b6ff44ea_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!XqLc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a8e91c6-912a-452f-885c-3b17b6ff44ea_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XqLc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a8e91c6-912a-452f-885c-3b17b6ff44ea_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a8e91c6-912a-452f-885c-3b17b6ff44ea_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:520560,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XqLc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a8e91c6-912a-452f-885c-3b17b6ff44ea_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!XqLc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a8e91c6-912a-452f-885c-3b17b6ff44ea_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!XqLc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a8e91c6-912a-452f-885c-3b17b6ff44ea_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!XqLc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a8e91c6-912a-452f-885c-3b17b6ff44ea_1024x1024.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><h1>Design Pattern of the Day: Adapter</h1><p>Have you ever tried to charge your phone in a foreign country and found your plug didn&#8217;t fit in the outlet?</p><p>Have you reached for a dongle so you could plug your USB-A device into a USB-C port on your shiny new laptop?</p><p>The <strong>Adapter Pattern</strong> in object-oriented programming (OOP) serves the exact same purpose in your code, acting as a link or bridge between two incompatible interfaces.</p><p>One use case is adding a third-party library to your application. Its interface may not be directly compatible with your domain code. Perhaps your data is already in XML format, but the library prefers JSON. Instead of modifying the library or creating your own custom integration, you can add an Adapter layer in between that performs the necessary data conversion.</p><p><strong>Benefits of the Adapter pattern:</strong></p><p>&#128994;  Quicker development &#8211; only create the layer in between two existing interfaces<br>&#128994;  Clean code &#8211; single responsibility lets classes focus on only one area<br>&#128994;  Flexibility &#8211; adapters can be swapped as long as interfaces stay the same<br>&#128994;  Testability &#8211; the adapter layer can be tested and swapped independently</p><p><strong>Potential downsides:</strong></p><p>&#128308;  More code &#8211; sometimes it&#8217;s easier to just change your existing interfaces<br>&#128308;  Slow &#8211; implementations may have performance impacts</p><h3>Further Learning</h3><p><a href="https://refactoring.guru/design-patterns/adapter">Adapter Pattern @ Refactoring.guru</a></p><p><a href="https://www.pentalog.com/blog/design-patterns/adapter-design-pattern/">PentaLog discusses more potential downside nuances</a>, which are good to consider (as always with software, It Depends!)</p><p><a href="https://www.linkedin.com/advice/0/how-do-you-use-adapter-pattern-integrate">LinkedIn Advice: How do you use the adapter pattern to integrate legacy or incompatible systems?</a></p><div><hr></div><h1>Happenings &amp; Findings</h1><h2>Articles</h2><ul><li><p>Postman&#8217;s <a href="https://www.postman.com/state-of-api/">2023 State of the API</a> report is full of interesting data</p></li><li><p>Shekhar wrote an <a href="https://shekhargulati.com/2022/07/08/my-notes-on-gitlabs-postgres-schema-design/">analysis of GitLab&#8217;s Postgres schema design</a> (2022)</p></li></ul><h2>Technologies</h2><ul><li><p>Netflix released <a href="https://netflixtechblog.com/introducing-safetest-a-novel-approach-to-front-end-testing-37f9f88c152d">SafeTest</a>, a novel approach to front-end testing</p></li><li><p><a href="https://knock.app/">Knock</a> provides notifications as a service, great for mobile apps and more</p></li></ul><h2>Jobs</h2><p>Find your next opportunity through <a href="https://cupalo.io/">Cupalo</a>, an ethical, above-the-table staffing partner who treats you like a real person. <em>(Not sponsored! Lauren is a wonderful founder friend from an entrepreneur group. She&#8217;ll take great care of you!)</em></p><h2>How&#8217;s BASE doing?</h2><ul><li><p>Newsletter subscribers: 47 (+176%)</p></li><li><p>Newsletter open rate: 46.27% (+3.3%)</p></li><li><p>LinkedIn followers: 63 (+425%)</p></li><li><p>Twitter followers: 4 (+33%)</p></li></ul><p>While the numbers aren&#8217;t specifically impressive, the growth is! &#128200;</p><p>I posted on my personal LinkedIn about BASE and asked for shares and referrals, and it was by far my most widely-seen post on the platform. Thank you to those who shared and interacted, and welcome new subscribers!</p><h2>What I&#8217;m Working On</h2><p>I&#8217;m currently building <a href="https://staywoven.com">Stay Woven, a personal relationship manager mobile app</a>.</p><p>I&#8217;ve never built a mobile app, so it&#8217;s an exciting new tech adventure! The stack I&#8217;m using is <a href="https://reactnative.dev/">React Native</a> with a <a href="https://firebase.google.com/">Firebase</a> backend.</p><p>I&#8217;m working on multiple products in 2024 on my journey to becoming a successful entrepreneur and business owner. <a href="https://www.linkedin.com/in/AkenRoberts">Follow along!</a></p><div><hr></div><h1>Coming Up</h1><p>In the next edition, I&#8217;ll cover:</p><ul><li><p>How to use Slack effectively for more productivity and fewer distractions</p></li><li><p>How to automate dependency updates to reduce tech debt</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.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://newsletter.becomeaseniorengineer.com/subscribe?"><span>Subscribe now</span></a></p><p><strong>Thank you for reading!</strong></p><p>Come chat with me on <a href="https://www.linkedin.com/in/akenroberts/">LinkedIn</a>, <a href="https://twitter.com/AkenRoberts">Twitter</a>, or hit reply and let me know how I can help with your engineering career.</p><p>Aken &#128153;</p>]]></content:encoded></item><item><title><![CDATA[A Story of Failure; BASE Tech: Full Text Search Engines]]></title><description><![CDATA[How an engineer who screwed up twice didn't get fired, and why you should use a full-text search engine instead of your database.]]></description><link>https://newsletter.becomeaseniorengineer.com/p/a-story-of-failure-base-tech-full</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/a-story-of-failure-base-tech-full</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Wed, 14 Feb 2024 19:51:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Y5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca5de3ed-61fd-40a2-910c-dae5e1b55373_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Welcome new subscribers! I had a small win sharing the newsletter on LinkedIn this week. It&#8217;s a pleasure to write for you and elevate your engineering careers.</em></p><p>Today for you I have:</p><ul><li><p>A Story of Failure</p></li><li><p>BASE Tech: Full Text Search Engines</p></li><li><p>Links &amp; Happenings</p></li></ul><div><hr></div><h1>A Story of Failure</h1><p>An upper mid-level engineer on our team deployed consecutive releases to production that caused bugs or failures.</p><p>You can probably relate to how they felt. Terrible at their job. A disappointment.</p><p>This dev was certain they were going to be fired.</p><p>But we had a positive culture in our engineering team. We used our regression protocols to revert the deployments. We let them immediately fix the issues and deploy the corrected features to production. We analyzed how the bugs eluded our review and testing processes so we could better protect against future occurrences.</p><p>All without blame.</p><p>Because it happens to us all. Releasing a bug to production is a right of passage. (Hopefully one that doesn&#8217;t have too big an impact on the business!)</p><p>This dev knew they made a mistake, was empowered to fix it, and learned from the process. They improved their experience and skills, and gained trust in the organization that didn&#8217;t punish them.</p><p>Senior engineers acknowledge the fallibility of humans, introduce and encourage a culture of support, ensure technology is in place to help protect against mistakes, and encourage autonomy.</p><p>And we learn from our mistakes. &#128578;</p><p>Do you have a similar story about yourself or a colleague? Leave a comment or hit reply and tell me about it!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y5BJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca5de3ed-61fd-40a2-910c-dae5e1b55373_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y5BJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca5de3ed-61fd-40a2-910c-dae5e1b55373_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!Y5BJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca5de3ed-61fd-40a2-910c-dae5e1b55373_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!Y5BJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca5de3ed-61fd-40a2-910c-dae5e1b55373_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!Y5BJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca5de3ed-61fd-40a2-910c-dae5e1b55373_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y5BJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca5de3ed-61fd-40a2-910c-dae5e1b55373_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ca5de3ed-61fd-40a2-910c-dae5e1b55373_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:441160,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!Y5BJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca5de3ed-61fd-40a2-910c-dae5e1b55373_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!Y5BJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca5de3ed-61fd-40a2-910c-dae5e1b55373_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!Y5BJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca5de3ed-61fd-40a2-910c-dae5e1b55373_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!Y5BJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca5de3ed-61fd-40a2-910c-dae5e1b55373_1024x1024.webp 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><h1>BASE Tech: Full Text Search Engines</h1><p>&#128161; <em>Each BASE Tech briefly covers a technology, its purpose, and how a Senior engineer might approach using it.</em></p><p>You want to add search to your app, and all your data is currently stored in a DB such as MySQL. The first solution you might turn to is <code>LIKE &#8216;%query%&#8217;</code> SQL queries. No new software and it &#8220;gets the job done&#8221;, right?</p><p>Searching is <strong>complex</strong>, and not just in implementation. A great search experience includes many features and nuances that are not provided by <code>LIKE</code> SQL queries:</p><ul><li><p><strong>Language and Text Analysis</strong> &#8211; Fuzzy matching common typos, stemming (reducing words to their base or root form), lemmatization (considering the context to convert a word to its meaningful base form), and handling synonyms. Such features improve the search's ability to match on the <em>intended</em> meaning rather than just the exact text.</p></li><li><p><strong>Relevance Ranking</strong> &#8211;  Rank results based on their relevance to the search query. The most relevant results are returned first, improving the user experience. Many engines also provide highlighted relevant terms you can use in your UI.</p></li><li><p><strong>Advanced Search Features</strong> &#8211; Boolean operators, phrase matching, proximity searches, wildcards, and more. These features allow users to perform more complex and precise searches.</p></li><li><p><strong>Performance</strong> &#8211; Full-text search engines are optimized for searching text data efficiently. They use specialized indexing strategies that allow for much faster search operations, especially across large datasets. <code>LIKE</code> queries, especially those with leading wildcards, can be very slow because they often require scanning entire tables or columns to find matches.</p></li><li><p><strong>Customization</strong> &#8211; Tailored indexing, field-level configuration, custom ranking algorithms, and more.</p></li></ul><p>A full-text search engine empowers you to provide the search experience your users expect (Google and major tech has spoiled them all). How does a Senior make that happen?</p><p>Gather requirements, choose an engine, and create an implementation plan that includes development, pre- and post-launch phases:</p><ul><li><p><strong>Gather Requirements</strong> &#8211; Understand your users&#8217; needs of what they are searching and why. Use this to define the scope of searchable content &#8211; the fields, data, and types to be searched. Don&#8217;t forget requirements like security and compliance.</p></li><li><p><strong>Choose an Engine</strong> &#8211; Find one that has the features you need based on your requirements, while balancing performance, scalability, cost, and ease of integration.</p></li><li><p><strong>Model and Index Your Data</strong> &#8211; Design a schema that represents your searchable content. Develop the process for indexing your content, ideally an automated one to ease deployment and ensure consistency.</p></li><li><p><strong>Build the Thing!</strong> &#8211; Integrate search into your backend, creating service/repository/data layers and abstractions, calling APIs, and anything needed for indexing and querying data. Implement mechanisms to keep the search index up to date with data changes.</p></li><li><p><strong>UI/UX</strong> &#8211; Design and implement the search interface. Add delighting features like autocomplete, faceted search, filters, and sorting where applicable.</p></li><li><p><strong>Test and Optimize</strong> &#8211; Stress test the search implementation under various loads. Adjust ranking algorithms and relevance settings to improve the quality of results based on user feedback and analytics (have a plan for this, it isn&#8217;t an afterthought!)</p></li><li><p><strong>Monitor and Maintain</strong> &#8211; Track usage, performance, and health of your search infrastructure. Understand what maintenance you&#8217;ll need over time, such as software updates and scaling as your data volume grows.</p></li></ul><p>You&#8217;ve now planned for and implemented a powerful and useful full-text search feature just like a Senior engineer would! &#128079;&#127996;</p><p>Here are some engines I recommend looking into for your search needs:</p><ul><li><p><a href="https://www.elastic.co/elasticsearch">Elasticsearch</a></p></li><li><p><a href="https://typesense.org/">Typesense</a></p></li><li><p><a href="https://www.meilisearch.com/">Meilisearch</a></p></li><li><p><a href="https://solr.apache.org/">Apache Solr</a></p></li><li><p><a href="https://www.algolia.com/">Algolia</a></p></li></ul><p>There are more open source and paid hosted solutions out there, if none of these suit your needs. I&#8217;ve used Solr (and <a href="https://sphinxsearch.com/">Sphinx</a>, which doesn&#8217;t seem as modern or maintained as others) in past projects. More recently I implemented Meilisearch for <a href="https://spendbetter.com">SpendBetter.com</a>, then switched to Algolia when I needed multiple geo coordinates per record.</p><p>Have you implemented full-text search? Use a different engine than one mentioned here? Let me know how your experiences went!</p><div><hr></div><h1>Links &amp; Happenings</h1><p>I recently upgraded my laptop, and with a fresh start have been trying new software: <a href="https://app.warp.dev/referral/YQ8GLP">Warp</a>, a modern, Rust-based terminal, and <a href="https://www.gitkraken.com/">GitKraken</a>, a git GUI. Yeah, I&#8217;m a GUI guy, let&#8217;s fight about it!</p><p>My friend Andy is experimenting with <a href="https://www.airplane.dev/">Airplane</a>, a developer platform for internal tools. It has a self-hosted option which is unique for the space.</p><p>I&#8217;m creating a silly API project this month and <a href="https://zuplo.com/">Zuplo</a> is on my radar as an API Gateway layer. They also have a silly-but-useful tool: <a href="https://ratemyopenapi.com/">RateMyOpenAPI</a>. Shout out to Adrian @ Zuplo for sharing!</p><p>Last night I tried the <a href="https://www.sleepcycle.com/">Sleep Cycle</a> app for the first time in an effort to improve my morning routine. It worked pretty well as an alarm and captures some interesting data (and sound clips of my wife snoring &#128564;). I&#8217;ll be curious to see if results stay consistent. Shout out to Zach Highley&#8217;s <a href="https://www.youtube.com/watch?v=9E4CoD2R_-Q">How To Become a Morning Person</a> YouTube video for the recommendation.</p><div><hr></div><p>Happy Wednesday! Come chat with me on <a href="https://www.linkedin.com/in/akenroberts/">LinkedIn</a>, <a href="https://twitter.com/AkenRoberts">Twitter</a>, or hit reply and let me know how I can help with your engineering career.</p><p>Aken &#128153;</p>]]></content:encoded></item><item><title><![CDATA[Communicating To Stakeholders]]></title><description><![CDATA[How seniors effectively communicate to stakeholders by understanding needs, classifying Power vs. Interest, and tailoring communication appropriately.]]></description><link>https://newsletter.becomeaseniorengineer.com/p/communicating-to-stakeholders</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/communicating-to-stakeholders</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Thu, 08 Feb 2024 16:01:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9HHR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1390ec9-8701-4659-9716-c47241072561_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One time as a senior at a web agency, I sat down with another dev for a quick conversation to give them a few small-detail development tips.</p><p>I left that conversation happy with sharing things that I felt were useful.</p><p>The dev left the conversation feeling like I was <em>once again</em> micromanaging and nitpicking their work.</p><p>My good intentions didn&#8217;t matter, and it hurt. &#128577; All I wanted to do was share tips that I personally found useful. But the way I communicated made the dev feel like they sucked at their job.</p><p>You can avoid the same mistake by tailoring your communication to your stakeholders through:</p><ol><li><p>Identifying who they are</p></li><li><p>Understanding their needs</p></li><li><p>Classifying them based on power and interest</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9HHR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1390ec9-8701-4659-9716-c47241072561_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9HHR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1390ec9-8701-4659-9716-c47241072561_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!9HHR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1390ec9-8701-4659-9716-c47241072561_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!9HHR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1390ec9-8701-4659-9716-c47241072561_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!9HHR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1390ec9-8701-4659-9716-c47241072561_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9HHR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1390ec9-8701-4659-9716-c47241072561_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1390ec9-8701-4659-9716-c47241072561_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:505480,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9HHR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1390ec9-8701-4659-9716-c47241072561_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!9HHR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1390ec9-8701-4659-9716-c47241072561_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!9HHR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1390ec9-8701-4659-9716-c47241072561_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!9HHR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1390ec9-8701-4659-9716-c47241072561_1024x1024.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><h1>What is a stakeholder?</h1><p>A stakeholder is someone with an interest in, or is affected by the project you&#8217;re working on. They&#8217;re usually internal &#8211; people at your org that you work with regularly. They can also include people external to your company: customers and clients, third-party vendors, suppliers, regulatory bodies, etc.</p><p>On engineering teams, you&#8217;ll often intuitively know who your stakeholders over the course of discussing a project:</p><ul><li><p>Your boss</p></li><li><p>Your team lead</p></li><li><p>The other devs on your team</p></li><li><p>The Product team</p></li><li><p>Related teams like Design, Infrastructure, Security, etc.</p></li></ul><p>Good teams have documentation in place that identifies key people and their roles in a project (when the scope is big enough). These are immensely useful for both identifying stakeholders, and knowing who to turn to if you have questions or concerns.</p><h1>Identifying a Stakeholder&#8217;s Needs</h1><p><em>(I swear if I write &#8220;stackholders&#8221; one more time&#8230;)</em></p><p>Each stakeholder in a project has their own goals, needs, and desired outcomes for a project.</p><p>The CEO might not care about the project itself, but rather than health and growth of the company as a whole.</p><p>Your boss has significant interest in your project, in terms of both personal and team success.</p><p>Another dev on your team is mostly interested in their part of the project.</p><p>Understanding the needs and goals of a stakeholder can help you classify and tailor communication:</p><p>The CEO needs to know how the project will help with company health and growth, not what you&#8217;re doing today.</p><p>Your boss needs more regular involvement about the project&#8217;s status and your ongoing tasks.</p><p>Your coworker needs to know if they&#8217;re doing a good job achieving <em>their</em> development tasks.</p><p>When I gave advice to my coworker, I focused on what I wanted and not what they needed, which was to know if their work was effectively progressing our team&#8217;s goals. My small tips came across as focusing on little things that didn&#8217;t matter, regardless of their validity.</p><p>Once identified, you can classify your stakeholders to tailor communication.</p><h1>Classifying Stakeholders</h1><p>Using a combination of their needs and their position in your company&#8217;s project and/or org chart, stakeholders can be classified using two key characteristics: their <strong>power</strong> to influence your project, and their <strong>interest</strong> in your project&#8217;s results.</p><p>Those with significant power over a project will need to be kept <strong>satisfied</strong>.</p><p>Those with significant interest in a project will need to be kept <strong>informed</strong>.</p><p>Those with significant power <em>and</em> interest are effectively partners in the project. They should be kept fully engaged along the way to ensure their satisfaction and information level is high.</p><p>Those with low power and interest are minimal priority, and can be given similar efforts when it comes to 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_!j4Ej!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85e824b2-63fa-401f-af3d-092ce204d9e9_700x636.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j4Ej!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85e824b2-63fa-401f-af3d-092ce204d9e9_700x636.webp 424w, https://substackcdn.com/image/fetch/$s_!j4Ej!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85e824b2-63fa-401f-af3d-092ce204d9e9_700x636.webp 848w, https://substackcdn.com/image/fetch/$s_!j4Ej!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85e824b2-63fa-401f-af3d-092ce204d9e9_700x636.webp 1272w, https://substackcdn.com/image/fetch/$s_!j4Ej!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85e824b2-63fa-401f-af3d-092ce204d9e9_700x636.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j4Ej!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85e824b2-63fa-401f-af3d-092ce204d9e9_700x636.webp" width="700" height="636" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85e824b2-63fa-401f-af3d-092ce204d9e9_700x636.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:636,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:17134,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!j4Ej!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85e824b2-63fa-401f-af3d-092ce204d9e9_700x636.webp 424w, https://substackcdn.com/image/fetch/$s_!j4Ej!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85e824b2-63fa-401f-af3d-092ce204d9e9_700x636.webp 848w, https://substackcdn.com/image/fetch/$s_!j4Ej!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85e824b2-63fa-401f-af3d-092ce204d9e9_700x636.webp 1272w, https://substackcdn.com/image/fetch/$s_!j4Ej!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85e824b2-63fa-401f-af3d-092ce204d9e9_700x636.webp 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://www.mindtools.com/aol0rms/stakeholder-analysis">Source: MindTools.com</a></figcaption></figure></div><p>Here are some examples of engineering stakeholders, their needs and classifications, and how to tailor communication for them:</p><ul><li><p><strong>The CEO:</strong> needs company-wide stability and growth. High power, low interest. They&#8217;ll want to know how the project helps achieve stability or growth. Depending on your organization&#8217;s size and structure, this will likely be handled by someone else.</p></li><li><p><strong>The CTO:</strong> needs to reduce technical cost and complexity (also read: needs to help achieve stability and growth through technology). High power, low interest. Treated like the CEO, might not be on your radar at all.</p></li><li><p><strong>Your boss, an engineering manager:</strong> needs effective output from their team(s). Medium-to-high power and interest. Treat them like a partner and remain engaged with them. Good ones will make it very obvious what their goals are with the projects, so you won&#8217;t need to ask or, worse, guess.</p></li><li><p><strong>Your team&#8217;s lead, a senior+ level engineer:</strong> similar to the manager but on a more implementation level, needs effective output from the team and make the manager happy. Low-ish power, high interest. Utilize your project management tools like Jira to keep your work visible and up-to-date. Tell them about blockers early. Make it so they never have to come ask you what the current status is.</p></li><li><p><strong>The Product owner who created the feature spec:</strong> needs to achieve their own team goals, such as increasing revenue or improving customer satisfaction. Low power, high interest. Keep them informed, especially of any changes to the feature or its timeline.</p></li></ul><div><hr></div><p>At the very least, imagine yourself in the role of the stakeholder. What actions would others do that would make you happy, make your job easier? Do those things, communicate those things, and you will be a valued asset to your team.</p><p>Is there a role not mentioned here you&#8217;d like help tailoring your communication to? Do you have a similar failure in attempting to communicate as mine? I&#8217;d love to hear your questions, anecdotes, or how your engineering career is going lately!</p><div><hr></div><p>I apologize for missing a week of Become a Senior Engineer. I caught the flu from my daughter after it wreaked havoc on her for almost a week, my basement backed up with water after our sump pump went out, and we said goodbye to one of our pet cats.</p><p>May you and your pets remain healthy and happy! &#128153;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k9Mz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6152f22a-fe26-48e7-b7db-876144b41162_1920x1146.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k9Mz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6152f22a-fe26-48e7-b7db-876144b41162_1920x1146.jpeg 424w, https://substackcdn.com/image/fetch/$s_!k9Mz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6152f22a-fe26-48e7-b7db-876144b41162_1920x1146.jpeg 848w, https://substackcdn.com/image/fetch/$s_!k9Mz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6152f22a-fe26-48e7-b7db-876144b41162_1920x1146.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!k9Mz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6152f22a-fe26-48e7-b7db-876144b41162_1920x1146.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k9Mz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6152f22a-fe26-48e7-b7db-876144b41162_1920x1146.jpeg" width="1456" height="869" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6152f22a-fe26-48e7-b7db-876144b41162_1920x1146.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:869,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:212770,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&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_!k9Mz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6152f22a-fe26-48e7-b7db-876144b41162_1920x1146.jpeg 424w, https://substackcdn.com/image/fetch/$s_!k9Mz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6152f22a-fe26-48e7-b7db-876144b41162_1920x1146.jpeg 848w, https://substackcdn.com/image/fetch/$s_!k9Mz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6152f22a-fe26-48e7-b7db-876144b41162_1920x1146.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!k9Mz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6152f22a-fe26-48e7-b7db-876144b41162_1920x1146.jpeg 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[Preparing for layoffs; The OWASP Top 10; Is it a console, terminal, or...?]]></title><description><![CDATA[&#127381; Today I&#8217;m trying a new format for the newsletter.]]></description><link>https://newsletter.becomeaseniorengineer.com/p/preparing-for-layoffs-the-owasp-top</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/preparing-for-layoffs-the-owasp-top</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Wed, 24 Jan 2024 19:15:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LSiw!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F725bd1af-606e-42d0-be2d-94dd03dd4046_809x809.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#127381; Today I&#8217;m trying a new format for the newsletter. A bit more casual, easier to consume, and covering multiple topics in an introductory and guiding format, rather than a single long-form topic. Hit reply to let me know what you think.</p><div><hr></div><h1>Preparing For Possible Layoffs</h1><p>Losing your job <em>sucks</em>. Our society revolves so much around money. As soon as our income is no longer a secure thing, we freak out.</p><p>While software engineering can be a lucrative and stable career, individual jobs aren&#8217;t. Here are some ways you can make the possibility of a layoff less scary:</p><ol><li><p><strong>Save up an emergency fund:</strong> Build an emergency fund savings account with enough to cover your expenses for 3-6 months. You&#8217;ll have peace of mind for regular unexpected costs (like your car exploding) along with an unexpected job loss.</p></li><li><p><strong>Document your successes:</strong> Ensure your resume is current and showcases your latest projects, skills, and accomplishments. Keep your online professional profiles, like LinkedIn, updated. Maintain a portfolio of your work, especially any public contributions to open-source projects or personal projects that demonstrate your skills.</p></li><li><p><strong>Keep learning and practicing:</strong> The tech field is constantly evolving. Stay updated with the latest technologies, programming languages, and industry trends. Online courses, certifications, and workshops can be beneficial.</p></li><li><p><strong>Get a side piece:</strong> Engaging in side projects or freelancing can not only hone your skills but also create additional income streams and open up new career opportunities.</p></li><li><p><strong>Be emotionally ready for reality:</strong> Layoffs can be stressful. It's important to maintain a healthy work-life balance and have a support system in place. This can include family, friends, or even professional counseling. True for regular job stress and burn out, too. Talk to someone when you&#8217;re not doing great.</p></li><li><p><strong>Peep the market:</strong> Keep an eye on the job market and the health of companies in your industry. This awareness can provide early signs of market downturns or opportunities in emerging areas.</p></li><li><p><strong>Brush up on your leet code:</strong> Regularly practicing for interviews can keep you sharp and ready to present your best self when opportunities arise.</p></li></ol><h3>Further Reading</h3><p>Gregor helps you document your successes:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:140892407,&quot;url&quot;:&quot;https://newsletter.eng-leadership.com/p/keep-a-brag-list-of-the-wins-you&quot;,&quot;publication_id&quot;:1115815,&quot;publication_name&quot;:&quot;Engineering Leadership&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%2F0845c094-23e3-40d0-86f3-d1ff19631211_317x317.png&quot;,&quot;title&quot;:&quot;Keep a brag list of the wins you achieved, thank me later&quot;,&quot;truncated_body_text&quot;:&quot;Intro It&#8217;s really important to work and focus on things that are impactful and try to provide as much value as possible to the organization, but it&#8217;s also very important to note down what you achieved and have it ready whenever someone asks you for your achievements.&quot;,&quot;date&quot;:&quot;2024-01-21T16:02:59.225Z&quot;,&quot;like_count&quot;:68,&quot;comment_count&quot;:19,&quot;bylines&quot;:[{&quot;id&quot;:106098672,&quot;name&quot;:&quot;Gregor Ojstersek&quot;,&quot;handle&quot;:&quot;gregorojstersek&quot;,&quot;previous_name&quot;:&quot;Gregor&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdbe0558-3b80-4d09-9925-34ff44ed066e_400x400.jpeg&quot;,&quot;bio&quot;:&quot;CTO | Author of Engineering Leadership newsletter - Helping you become a great engineering leader!&quot;,&quot;profile_set_up_at&quot;:&quot;2022-10-03T11:48:31.646Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1066676,&quot;user_id&quot;:106098672,&quot;publication_id&quot;:1115815,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:1115815,&quot;name&quot;:&quot;Engineering Leadership&quot;,&quot;subdomain&quot;:&quot;gregorojstersek&quot;,&quot;custom_domain&quot;:&quot;newsletter.eng-leadership.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Weekly newsletter for becoming a great engineering leader.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0845c094-23e3-40d0-86f3-d1ff19631211_317x317.png&quot;,&quot;author_id&quot;:106098672,&quot;theme_var_background_pop&quot;:&quot;#FF0000&quot;,&quot;created_at&quot;:&quot;2022-10-03T11:49:36.188Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Gregor Ojstersek&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}}],&quot;twitter_screen_name&quot;:&quot;gregorojstersek&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:100}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://newsletter.eng-leadership.com/p/keep-a-brag-list-of-the-wins-you?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!9opu!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0845c094-23e3-40d0-86f3-d1ff19631211_317x317.png"><span class="embedded-post-publication-name">Engineering Leadership</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Keep a brag list of the wins you achieved, thank me later</div></div><div class="embedded-post-body">Intro It&#8217;s really important to work and focus on things that are impactful and try to provide as much value as possible to the organization, but it&#8217;s also very important to note down what you achieved and have it ready whenever someone asks you for your achievements&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 years ago &#183; 68 likes &#183; 19 comments &#183; Gregor Ojstersek</div></a></div><p>John&#8217;s newsletter is full of engaging challenges to help you learn and practice:</p><div class="embedded-publication-wrap" data-attrs="{&quot;id&quot;:1483213,&quot;name&quot;:&quot;Coding Challenges&quot;,&quot;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%2F14c3fd5e-953d-4509-ab4c-cbbb37d99969_1080x1080.png&quot;,&quot;base_url&quot;:&quot;https://codingchallenges.substack.com&quot;,&quot;hero_text&quot;:&quot;A weekly Coding Challenge to help software engineers level up.&quot;,&quot;author_name&quot;:&quot;John Crickett&quot;,&quot;show_subscribe&quot;:true,&quot;logo_bg_color&quot;:&quot;#ffffff&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPublicationToDOMWithSubscribe"><div class="embedded-publication show-subscribe"><a class="embedded-publication-link-part" native="true" href="https://codingchallenges.substack.com?utm_source=substack&amp;utm_campaign=publication_embed&amp;utm_medium=web"><img class="embedded-publication-logo" src="https://substackcdn.com/image/fetch/$s_!tr2O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14c3fd5e-953d-4509-ab4c-cbbb37d99969_1080x1080.png" width="56" height="56" style="background-color: rgb(255, 255, 255);"><span class="embedded-publication-name">Coding Challenges</span><div class="embedded-publication-hero-text">A weekly Coding Challenge to help software engineers level up.</div><div class="embedded-publication-author-name">By John Crickett</div></a><form class="embedded-publication-subscribe" method="GET" action="https://codingchallenges.substack.com/subscribe?"><input type="hidden" name="source" value="publication-embed"><input type="hidden" name="autoSubmit" value="true"><input type="email" class="email-input" name="email" placeholder="Type your email..."><input type="submit" class="button primary" value="Subscribe"></form></div></div><div><hr></div><h1>The OWASP Top 10</h1><p>As a senior member of engineering teams at two organizations, I often interviewed developer candidates for mid- and senior-level positions. One question I liked to include was: &#8220;What security risks should engineers be aware of when developing SaaS applications?&#8221;</p><p>Very few candidates could list more than 3 or 4 security concerns, and almost no one mentioned OWASP or other security standards they could reference.</p><p>Application security is a critical and often required facet of modern software development. Knowledge of security risks should be included in your broad knowledge, alongside things like programming languages, databases, etc.</p><p>The <a href="https://owasp.org/">Open Worldwide Application Security Project</a> (OWASP) is a nonprofit foundation that works to improve the security of software. Launched in December 2001, its programming includes open source projects, 250+ local chapters worldwide, industry-leading educational and training conferences, and more.</p><p>The <a href="https://owasp.org/Top10/">OWASP Top 10</a> is a standard awareness document for developers and web application security. <strong>It represents a broad consensus about the most critical security risks to web applications. </strong>It was started in 2003 to help organizations and developers with a starting point for secure development. Over the years it's grown into a standard used as a baseline for compliance, education, and vendor tools.</p><h2>Why should you care about the Top 10?</h2><p><strong>Security is not optional.</strong> Creating secure code is inherently part of the value we provide businesses as software engineers. This is especially true (and required by law) for software surrounding payments, medical records, and other highly-regulated sensitive data.</p><p><strong>Security is important for the business.</strong> Sometimes it&#8217;s difficult for developers to understand what is important to their employer and the business as a whole. Avoiding costly security breeches, lawsuits, or other ramifications of insecure applications is one thing any good business will prioritize.</p><p><strong>Considering security helps you think about more than the happy path.</strong> By imagining how your software will be used in ways other than its normal intended functionality, you can ensure a better experience overall. The UI, code quality, tests, and more all will increase in quality.</p><p><strong>It makes you look better in interviews.</strong> When I interviewed candidates, I expected engineers to have enough knowledge about security to understand how it impacts their role. By mentioning the OWASP Top 10, you demonstrate awareness and an authoritative resource you can rely on without needing to be a subject matter expert.</p><p><strong>It&#8217;s knowledge and experience!</strong> &#8220;Never stop learning&#8221; is a common theme here at Become a Senior Engineer. You never know when you&#8217;ll be in a situation where the Top 10 could save you, your team, or your business the headaches of dealing with a security exploitation.</p><p>Knowing what it is and why it should be in your toolbox, <a href="https://owasp.org/Top10/">head over to the Top 10</a> to see what the risks are, examples of each, ad how to mitigate them in your apps.</p><div><hr></div><h1>Is it a console, terminal, or&#8230;?</h1><p>No real nuggets of senior wisdom to go along with this, just something fun to nerd out on:</p><p><a href="https://unix.stackexchange.com/questions/4126/what-is-the-exact-difference-between-a-terminal-a-shell-a-tty-and-a-con">What is the exact difference between a 'terminal', a 'shell', a 'tty' and a 'console'?</a></p><div><hr></div><h1>Things &amp; Happenings</h1><ul><li><p>&#10024; <a href="https://charmui.com/">CharmUI</a>, beautiful production-ready components built with React and Tailwind CSS &#8211; by my friend Tim Wilson</p></li><li><p><a href="https://workchronicles.com/">Work Chronicles</a>, a web comic</p></li><li><p><a href="https://pathlesspath.com">Pathless Path</a> by Paul Millerd is now free to download</p></li><li><p><a href="https://asdf-vm.com/">ASDF</a>, a runtime version manager</p></li><li><p><a href="https://tally.so/">Tally</a>, a really nice looking free form builder</p></li><li><p><a href="https://www.tealhq.com/">Teal</a>, an AI resume builder and job app tracker</p></li><li><p><a href="https://www.golinks.io/">go/links</a>, an internal URL shortener to easily find important info</p></li></ul>]]></content:encoded></item><item><title><![CDATA[A Newsletter & Content Shift]]></title><description><![CDATA[A pivot to how BASE content is published. Spoiler alert: we're just getting started!]]></description><link>https://newsletter.becomeaseniorengineer.com/p/a-newsletter-and-content-shift</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/a-newsletter-and-content-shift</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Tue, 23 Jan 2024 16:00:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kHuJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96291e47-1a3c-456c-9d96-b181c7193205_1024x1024.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_!kHuJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96291e47-1a3c-456c-9d96-b181c7193205_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kHuJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96291e47-1a3c-456c-9d96-b181c7193205_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!kHuJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96291e47-1a3c-456c-9d96-b181c7193205_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!kHuJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96291e47-1a3c-456c-9d96-b181c7193205_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!kHuJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96291e47-1a3c-456c-9d96-b181c7193205_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kHuJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96291e47-1a3c-456c-9d96-b181c7193205_1024x1024.png" width="572" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96291e47-1a3c-456c-9d96-b181c7193205_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:572,&quot;bytes&quot;:2461566,&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_!kHuJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96291e47-1a3c-456c-9d96-b181c7193205_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!kHuJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96291e47-1a3c-456c-9d96-b181c7193205_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!kHuJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96291e47-1a3c-456c-9d96-b181c7193205_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!kHuJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96291e47-1a3c-456c-9d96-b181c7193205_1024x1024.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">DALL-E nailed it this week &#8211; this image is dope</figcaption></figure></div><p>Starting a newsletter is a journey, <em>especially</em> if you&#8217;ve never done it before like me. Every issue is a learning opportunity for the process, the business, who you are as a writer, and all that jazz.</p><p>I wanted this newsletter to be a revenue generator for me, as I am currently a solo entrepreneur trying to be self-sustaining. The chances of that becoming a reality in a short enough amount of time is low. So, I&#8217;m pivoting a bit.</p><p>Starting now, 98% of BASE content will be free. The paid tier is still available (now reduced to $5/mo) in a &#8220;support the creator&#8221; capacity, but will not include much in the way of exclusive content for now.</p><p>The newsletter will be reduced to one scheduled release a week, with occasional supplements. It&#8217;ll be a little more casual, yet always emphasizing how to use the knowledge shared as a senior would.</p><p>If you ever enjoy a piece of content, the format of the newsletter, or have any advice to share, just hit reply and send me an email. I&#8217;d love to hear from you.</p><p>But wait, there&#8217;s more! <em>(insert cheesy infomercial music)</em></p><p>Replacing the reduced newsletter content will be a new blog on the .com, where more formal or long-form content will be added, especially anything code-heavy. While there is no promised release schedule there, all relevant content will be highlighted through the newsletter.</p><p>I&#8217;m working with some other engineers, managers, and creators on content for the blog. Stay tuned for that.</p><div><hr></div><p>Here&#8217;s a preview of this week&#8217;s newsletter, releasing tomorrow (Wednesday Jan. 24):</p><ul><li><p>Preparing for a possible layoff</p></li><li><p>A senior&#8217;s security resource: the OWASP Top 10</p></li><li><p>Is it a console, or a terminal, or&#8230;?</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.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://newsletter.becomeaseniorengineer.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>If you&#8217;d like to follow my solo entrepreneur journey, <a href="https://www.linkedin.com/in/AkenRoberts">connect with me on LinkedIn</a>.</p><p>Thanks for coming along on this ride with me!</p><p>Aken &#128153;</p>]]></content:encoded></item><item><title><![CDATA[A Snowy Last-Minute Friday Edition]]></title><description><![CDATA[Good afternoon, devs!]]></description><link>https://newsletter.becomeaseniorengineer.com/p/a-snowy-last-minute-friday-edition</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/a-snowy-last-minute-friday-edition</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Fri, 12 Jan 2024 20:43:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!w3z9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04bc0f1-1099-4447-8906-b351c1bed125_2000x1500.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Good afternoon, devs! How did your week go?</p><p>This week has been a very productive one for me, but not when it comes to being prepared for the scheduled newsletters. So I apologize for this one being a little half-assed. &#128578;</p><p>Having multiple blizzards this week here in Wisconsin hasn&#8217;t helped!</p><p>Here are some random tidbits for your Friday. I&#8217;ll see you next week with the regular actionable issues. &#128153; &#10052;&#65039;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w3z9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04bc0f1-1099-4447-8906-b351c1bed125_2000x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w3z9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04bc0f1-1099-4447-8906-b351c1bed125_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!w3z9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04bc0f1-1099-4447-8906-b351c1bed125_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!w3z9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04bc0f1-1099-4447-8906-b351c1bed125_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!w3z9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04bc0f1-1099-4447-8906-b351c1bed125_2000x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w3z9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04bc0f1-1099-4447-8906-b351c1bed125_2000x1500.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f04bc0f1-1099-4447-8906-b351c1bed125_2000x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:697961,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&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_!w3z9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04bc0f1-1099-4447-8906-b351c1bed125_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!w3z9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04bc0f1-1099-4447-8906-b351c1bed125_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!w3z9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04bc0f1-1099-4447-8906-b351c1bed125_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!w3z9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04bc0f1-1099-4447-8906-b351c1bed125_2000x1500.jpeg 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><h1>Friday is the perfect day for reflection.</h1><p>Do you reflect on your job and career often?</p><p>Fridays are a perfect time to do so. Here are ways to reflect on your week as an engineer:</p><ul><li><p>How did you feel this week? Did you enjoy work? Find ways to do more of that work you enjoyed. Did you have a crappy week? How come? Recognize your emotions and how they impact your job, whether they&#8217;re caused by your job or not.</p></li><li><p>What did you learn this week? Take time to actually think about it. Probably more than you realized once you quantify it.</p></li><li><p>Check in with your people. Did a teammate have a good or bad week? Reflect on it with them. You will improve your influence on the team by sharing your attention and showing you care about them.</p></li><li><p>Write down your successes. Big ones are great for your r&#233;sum&#233;. Small ones are great for you &#8211; every success is a bit of experience and growth.</p></li><li><p>Write down your failures. Ask how you got to that failure point and what you learned to make sure it won&#8217;t happen again. Share your failures with your team or network</p></li></ul><p>Sharing your failures is part of leaving everything better than you found it:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;20d3e88f-70c9-457e-acbb-0a8f727b18c3&quot;,&quot;caption&quot;:&quot;The book The Pragmatic Programmer by David Thomas and Andrew Hunt offers this passage about software entropy at the very beginning: There are many factors that can contribute to software rot. The most important one seems to be the psychology, or culture, at work on a project. Even if you are a team of one, your project&#8217;s psychology can be a very delicate thing. Despite the best-laid plans in the best people, a project can still experience ruin and decay during its lifetime. Yet there are other projects that, despite enormous difficulties and constant setbacks, successfully fight nature&#8217;s tendency toward disorder and manage to come out pretty well.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#5: Leave Everything Better Than You Found It&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:191012299,&quot;name&quot;:&quot;Aken Roberts&quot;,&quot;bio&quot;:&quot;Founder of Become a Senior Engineer, a resource for software devs to level up. Writes about entrepreneurship on LinkedIn &amp; Twitter.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3457fa7-5552-455f-9276-de2f0ffb6682_1158x1158.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-01-11T20:01:25.861Z&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%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://becomeaseniorengineer.substack.com/p/5-leave-everything-better-than-you&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:140570249,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Become a Senior 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%2F725bd1af-606e-42d0-be2d-94dd03dd4046_809x809.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h1>Happenings &amp; Findings</h1><h2>Articles</h2><p><a href="https://papereditor.app/dev">Mihhail Lapushkin reflects on and shares tips from building the Paper text editor for macOS &amp; iOS.</a></p><p><a href="https://www.cockroachlabs.com/blog/postgres-data-types/">PostgreSQL data types &#8211; what are they, and when to use each.</a></p><h2>Technologies</h2><p><a href="https://ui.shadcn.com/">shadcn/ui</a> &#8211; Beautifully designed components that you can copy and paste into your apps. Accessible. Customizable. Open Source.</p><p><a href="https://www.phoenixframework.org/">Phoenix Framework</a> &#8211; A web development framework for the Elixir programming language that gives you peace of mind from development to production.</p><h2>Jobs</h2><p>Flycore, building the next generation of software in aviation, <a href="https://ambiguous-cockatoo-488.notion.site/Flycore-Founding-Engineer-72f8d9009aea49599b3bd043250f82a5">is hiring a founding engineer</a>.</p><p>Flood is hiring a <a href="https://remoteok.com/remote-jobs/remote-web3-fullstack-engineer-flood-576226">remote Web3 full stack engineer</a>.</p><h1>How is BASE doing?</h1><ul><li><p>Newsletter free tier: 17 subscribers</p></li><li><p>Newsletter paid tier: 0</p></li><li><p>LinkedIn followers: 12</p></li><li><p>Twitter followers: 3</p></li></ul><p>Honestly not bad for a publication less than a month old, by a new author with almost zero existing following. I hope to improve those numbers through the end of January. I&#8217;d love to see 50 subscribers by then.</p><p>LinkedIn will continue to get attention as a driver to the newsletter. Twitter is not a priority, but will still get regular content.</p><p>I&#8217;d love it if you shared BASE with your colleagues to help me achieve these goals. It&#8217;s free, only takes a minute, and it helps me tremendously. And you can get a free upgrade to a paid subscription!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://becomeaseniorengineer.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Become a Senior Engineer&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://becomeaseniorengineer.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Become a Senior Engineer</span></a></p><h2>Community</h2><p>Subscriber Joel Clermont shares his favorite code editor feature:</p><blockquote><p>The GitHub PR feature in PHPStorm is great. Getting syntax highlighting in the PR is so nice!</p></blockquote><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;81e25a89-7e86-4396-8b99-1e532d43b537&quot;,&quot;caption&quot;:&quot;Senior engineers are focused on getting things done as quickly and efficiently as possible without sacrificing quality. They constantly analyze their workflows and look for optimizations to increase velocity and and reduce errors. Since the main goal of an engineer is to write code, your code editor is a natural place to start.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;#3: 15+ Code Editor Superpowers&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:191012299,&quot;name&quot;:&quot;Aken Roberts&quot;,&quot;bio&quot;:&quot;Founder of Become a Senior Engineer, a resource for software devs to level up. Writes about entrepreneurship on LinkedIn &amp; Twitter.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3457fa7-5552-455f-9276-de2f0ffb6682_1158x1158.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-01-02T14:01:40.953Z&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%2Fc9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://becomeaseniorengineer.substack.com/p/3-13-code-editor-superpowers&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:140133477,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Become a Senior 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%2F725bd1af-606e-42d0-be2d-94dd03dd4046_809x809.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><p>Hope you have an awesome weekend, and your 2024 is off to a happy and productive start. &#128153;</p>]]></content:encoded></item><item><title><![CDATA[#5: Leave Everything Better Than You Found It]]></title><description><![CDATA[Constant improvement of your surroundings adds up exponentially over time.]]></description><link>https://newsletter.becomeaseniorengineer.com/p/5-leave-everything-better-than-you</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/5-leave-everything-better-than-you</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Thu, 11 Jan 2024 20:01:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!O9zp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The book <em><a href="https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/">The Pragmatic Programmer</a></em><a href="https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/"> by David Thomas and Andrew Hunt</a> offers this passage about software entropy at the very beginning:</p><blockquote><p>There are many factors that can contribute to software rot. The most important one seems to be the psychology, or culture, at work on a project. Even if you are a team of one, your project&#8217;s psychology can be a very delicate thing. Despite the best-laid plans in the best people, a project can still experience ruin and decay during its lifetime. Yet there are other projects that, despite enormous difficulties and constant setbacks, successfully fight nature&#8217;s tendency toward disorder and manage to come out pretty well.</p><p>What makes the difference?</p><p>In inner cities, some buildings are beautiful and clean, while others are rotting hulks. Why? Researchers in the field of crime and urban decay discovered a fascinating trigger mechanism, one that very quickly turns a clean, intact, inhabited building into a smashed and abandoned derelict.</p><p>A broken window.</p><p>One broken window left unrepaired for any substantial length of time, instills in the inhabitants of the building a sense of abandonment. A sense that the powers that be don't care about the building. So another window gets broken. People start littering. Graffiti appears. Serious structural damage begins. In a relatively short span of time, the building becomes damaged beyond the owner&#8217;s desire to fix it, and the sense of abandonment becomes reality.</p></blockquote><p>Senior engineers regularly identify, fix, and prevent broken windows in their projects and teams by leaving everything better than they found it. Here&#8217;s how:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O9zp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O9zp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!O9zp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!O9zp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!O9zp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O9zp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1691284,&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_!O9zp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!O9zp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!O9zp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!O9zp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082ac6a0-ad15-4d53-9143-6852cd4e7e2f_1024x1024.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>&#128209; Improve Documentation</h2><p>An important trait of senior engineers is their ability to increase the success of those around them, not just themselves. Interacting individually with another person isn&#8217;t the only way to do that. By iteratively improving your project&#8217;s documentation, you enable others to easily access information necessary for doing their job successfully.</p><h4>Add New Documentation</h4><p>Are you adding a new feature or learning a process that hasn&#8217;t been documented yet? Add it for yourself and the next person.</p><h4>Update Existing Documentation</h4><p>Is a document you&#8217;re referencing wrong or out of date? Maybe a dependency has changed, or a related feature has been removed.</p><p>A great time to add or update docs is when you&#8217;re new to an organization, team, or project. As you onboard, you&#8217;re bound to find something not quite accurate. </p><h4>Turn Questions Into Documentation</h4><p>If you have a question that you have to go directly to another person to answer, or if someone comes to you with a question, consider documenting the answer. Not everything needs to be written down somewhere, but be aware of what information you or others are lacking and how it can be made accessible.</p><h2>&#128161;Expose Hard-to-find Resources</h2><p>Similar to documentation, sometimes resources and dependencies for your projects are not effectively shared or easily referenced. If you need to go hunting for something you need to do your job, make it so the next person can find it easily on their own.</p><h4>Share Files &amp; Credentials</h4><p>Sometimes project files that aren&#8217;t committed are passed around directly between engineers. Try to remove these manual processes and ensure everything is shared with those in need.</p><ul><li><p>Commit non-sensitive files to appropriate repositories</p></li><li><p>Created shared file drives for non-code resources</p></li><li><p>Utilize password managers to share credentials</p></li></ul><p>And remember, <strong>you can implement these things</strong>! Bring the solution to your boss and work together to determine how much of their help you&#8217;ll need. Your initiative will be recognized.</p><h4>Improve Logging &amp; Metrics</h4><p>Are you having trouble debugging, looking for performance insights, or generally investigating your application? Add appropriate logging and metrics.</p><p>Is there a lot of noise in the logs or metrics for things that really aren&#8217;t valuable? First, check with your team to confirm they aren&#8217;t valuable. You may not know the full context. If the team agrees, remove the noise.</p><h2>&#128105;&#127997;&#8205;&#128187; Clean Up Code As You Go</h2><p>This is a huge one. Listen up:</p><div class="pullquote"><p><strong>You will never be given proper time to address the shortcomings of your code.</strong></p></div><p>The reality is, software development is a means to achieving business value. Business value means <em>customer</em> value. And customers don&#8217;t see improvements to technical debt.</p><p><em>(I can feel you starting to argue with me. Of course there&#8217;s nuance in every situation, including yours. Forget your argument for a second and listen.)</em></p><p>There will always be something wrong in the code that you would like to fix. Always. And you&#8217;ll wish for a sprint or a month to tackle that debt. It will never happen. Instead, clean up code as you go. In small iterations, when you&#8217;re already working in that part of the code.</p><p>Making iterative improvements to your code as you work around it will significantly reduce the amount of technical debt in your code, without ever needing specific time dedicated to it.</p><p>Make it a part of your deliverables. Include a buffer of improvement time in your estimates. Check the code when doing your feature planning to see if you&#8217;re going to be touching anything ugly, so you can fix it along the way. You&#8217;ll never get a dedicated sprint, but you will get an equal amount of time and then some if you spread it out into each feature and deliverable you work on.</p><h4>Improvement Opportunities To Look Out For</h4><ul><li><p><strong>No tests.</strong> Add tests to important parts of your application that aren&#8217;t covered. Especially if the code is confusing or complicated &#8211; tests help document expectations.</p></li><li><p><strong>Repeated code.</strong> Keep things DRY (don&#8217;t repeat yourself).</p></li><li><p><strong>Hard dependencies.</strong> Is changing an implementation or adding test data difficult? Use good abstractions and dependency management.</p></li><li><p><strong>Difficult APIs.</strong> If a dependency is difficult to work with, create layers that can help &#8220;translate&#8221; the difficult part, separating the calling code from the difficult logic.</p></li></ul><p>All of these will be explained in more detail in future issues of Become a Senior Engineer. Subscribe today, and hit reply to tell me which topic you&#8217;d most like to learn about:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.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://newsletter.becomeaseniorengineer.com/subscribe?"><span>Subscribe now</span></a></p><h2>&#9881;&#65039; Implement Processes &amp; Standards</h2><p>The blending of many engineers and their own styles and opinions often leads to a more complicated code base. If everyone is implementing things in their own way, it becomes more difficult to comprehend and modify. It can also be accidentally insulting (<em>&#8220;Why did you change my code? There was nothing wrong with it!&#8221;</em>).</p><p>Senior engineers recognize the importance of having defined processes and standards that everyone can adhere to. It improves quality and understanding, while eliminating decision making and opinion clashes.</p><p>As you run into situations where a difference of opinion or a lack of standard creates multiple possible implementations or confusion, find a single solution the team can follow.</p><p>I know &#8211; this is harder than it sounds. Those differences in opinion will lead to some arguments. Thankfully, there&#8217;s a two step path to success:</p><ol><li><p><strong>Listen to everyone.</strong> After introducing your standard, listen to everyone&#8217;s responses. Create a shared document and show that you noted their thoughts. People want to be heard and considered &#8211; demonstrate that you have done so.</p></li><li><p><strong>Decide, then iterate.</strong> Don&#8217;t wait for a solution that everyone unanimously agrees on &#8211; it&#8217;ll never happen. Pick one that the majority approves of, implement it, and iterate from there based on what the team learns and experiences.</p></li></ol><h2>&#128683; Teach Your Failures</h2><p>This one is less tangible than changing documentation or code. The principle is the same, though: leaving your team better than you found it.</p><p>Senior engineers still have failures. Sometimes they&#8217;re even bigger due to the larger scopes of their projects.</p><p>What differentiates senior engineers is:</p><ul><li><p>They are not afraid of failure &#8211; they ensure risks are minimal, and have plans if things go wrong</p></li><li><p>They embrace failing as much as success, in that both are incredible teaching and experience moments</p></li><li><p>They take their failure and share it with the world</p></li></ul><p>By teaching your failures to your team / organization / blog / newsletter / social media, you add to the collective knowledge of your audience. You position others to eliminate a point of failure before it occurs.</p><p>You know not to eat a poisonous fruit or play in poison ivy,because someone before you unfortunately learned the hard way. While less life-threatening, the same is true for your failures on the job.</p><div><hr></div><h1>Audience Questions</h1><p>&#10024; &#127379; <strong>Answer any of these questions for a chance to win a free book!</strong></p><p>What is your favorite piece of documentation?</p><p>What recent action did you take to leave your project better than you found it?</p><p>What failure did you experience lately that could be a teaching moment? No failure is too small!</p><p>Hit reply to answer any and all of these, and I&#8217;ll highlight your answers in a future issue!</p><div><hr></div><p>Happy Thursday, engineers!</p>]]></content:encoded></item><item><title><![CDATA[My Introduction]]></title><description><![CDATA[From WYSIWYG editors to pizza delivery to six figures &#128176; My story of getting started in software development and where it has taken me along the way!]]></description><link>https://newsletter.becomeaseniorengineer.com/p/my-introduction</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/my-introduction</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Tue, 09 Jan 2024 21:55:57 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%2Fbd980f31-d4cb-4c16-aa6e-e791adb62420_640x480.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, I&#8217;m Aken &#128075;&#127996;</p><p>I&#8217;m the author of Become a Senior Engineer, a new educational and community endeavor. I&#8217;ve been been in professional software development for 20 years as a full-stack engineer.</p><p>Here&#8217;s my story of getting started in software development and where it has taken me along the way!</p><h1>The Early Days</h1><p>Like many people, I was likely predisposed to some sort of computer-based career due to my father. An electrical designer by day, we would spend evenings in his office playing with an old Apple IIe. It had a black-and-green screen that I&#8217;m reminded of every time I see The Matrix. I loved finding the large 5.5&#8221; floppy disks that had my favorite games to play. As I got older, Dad would show me some of the silly cartoons and newsletters he&#8217;d make on his Apple Macintosh (that he still has today).</p><p>When I was around 9 or 10 years old (1995-ish) we got a regular PC tower and <strong>the internet</strong>. &#129327; I thought websites were the coolest thing on the planet, and I wanted to learn how to make them.</p><p>The next few years or so was a trial-and-error journey of self teaching. Checking the source code of web pages, copying and pasting, changing things and seeing what happened. Netscape Navigator and Geocities dominated my desktop.</p><p>(I have a hand-drawn wireframe of a Geocities website somewhere that I desperately wanted to show in this article &#8211; couldn&#8217;t find it &#128545;. Literally drawings of gifs with their filenames listed underneath! The internet was so cute back then.)</p><p>Eventually I had a pretty good handle on HTML and CSS, and started introducing dynamic elements with JavaScript and PHP. Macromedia Dreamweaver was my editor of choice, allowing me to be hands-on with the code when I knew what I was doing, and using the WYSIWYG editor and built-in scripts when I didn&#8217;t.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qySF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd980f31-d4cb-4c16-aa6e-e791adb62420_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qySF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd980f31-d4cb-4c16-aa6e-e791adb62420_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qySF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd980f31-d4cb-4c16-aa6e-e791adb62420_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qySF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd980f31-d4cb-4c16-aa6e-e791adb62420_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qySF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd980f31-d4cb-4c16-aa6e-e791adb62420_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qySF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd980f31-d4cb-4c16-aa6e-e791adb62420_640x480.jpeg" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd980f31-d4cb-4c16-aa6e-e791adb62420_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55112,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&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_!qySF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd980f31-d4cb-4c16-aa6e-e791adb62420_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qySF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd980f31-d4cb-4c16-aa6e-e791adb62420_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qySF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd980f31-d4cb-4c16-aa6e-e791adb62420_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qySF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd980f31-d4cb-4c16-aa6e-e791adb62420_640x480.jpeg 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">My bedroom PC setup sometime during teenage years. Complete with dial-up modem!</figcaption></figure></div><h1>First Paid Gigs &amp; University</h1><p>After graduating high school (secondary school), I began freelancing as a PSD slicer. I would receive website designs as Photoshop files and turned them into static HTML and CSS. Freelancing taught me a lot about client communication, pricing and invoicing, and other fun intro to business lessons. Though I was still very much an 18-year-old not really thinking about careers. Web development was always just fun.</p><p>I began going to a local state university right after high school. I made it three semesters. School was never my favorite thing to do. University felt like <em>more</em> high school, except I was not forced to go and it cost money. I knew the university wasn&#8217;t for me when I had to take an &#8220;Intro to Computers&#8221; class as part of the computer science program.</p><p>I ended up taking a few basic jobs for a university-aged guy &#8211; retail, pizza delivery, that sort of thing. Meanwhile, I continued to freelance occasionally while learning and exploring more complex dynamic code solutions, particularly on the back-end which I am most drawn to.</p><p>This is the stage in my career I regret the most &#8211; not thinking of development as a permanent job. I very likely could&#8217;ve found a job as a junior engineer, or focused on freelancing full-time. I had a great time at this age with many friends and hobbies and shenanigans, but I could&#8217;ve incorporated my career also and progressed a lot quicker.</p><h1>E-Commerce</h1><p>In 2006 at 21 I moved to the East Bay area of California to join a friend&#8217;s online retail business. He had outgrown his solo home-based setup and rented a warehouse next to a small airport. Since we were friends for a while and often exchanged help and ideas for his business, he asked me to come be Employee #1.</p><p>Along with all the usual e-commerce tasks of logistics, customer support, purchasing, etc., he and I rebuilt the store platform from an off-the-shelf solution to a homegrown one. (Do NOT build your own e-commerce software platform unless you absolutely have to.)</p><p>Unfortunately I ended up pretty homesick, and moved back home near the end of the year. After a little more freelancing and another service industry job, I landed another online retail job, this time 100% focused on development. From then on, software engineering was my full-time career, that I&#8217;ve been doing ever since.</p><p>My next e-commerce gig was one of the more interesting ones, at least for the type of work. It seemed like every few months the owner would pivot to some new idea, and we&#8217;d have to build some custom functionality for it. Logistics integrations. Custom candle configurator. Pricing calculators. And for a while I was the only dev there doing everything.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9WwD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d940a59-e32b-4e4c-8a49-e2de5180b02d_3072x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9WwD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d940a59-e32b-4e4c-8a49-e2de5180b02d_3072x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9WwD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d940a59-e32b-4e4c-8a49-e2de5180b02d_3072x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9WwD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d940a59-e32b-4e4c-8a49-e2de5180b02d_3072x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9WwD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d940a59-e32b-4e4c-8a49-e2de5180b02d_3072x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9WwD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d940a59-e32b-4e4c-8a49-e2de5180b02d_3072x2048.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d940a59-e32b-4e4c-8a49-e2de5180b02d_3072x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1020993,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&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_!9WwD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d940a59-e32b-4e4c-8a49-e2de5180b02d_3072x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9WwD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d940a59-e32b-4e4c-8a49-e2de5180b02d_3072x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9WwD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d940a59-e32b-4e4c-8a49-e2de5180b02d_3072x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9WwD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d940a59-e32b-4e4c-8a49-e2de5180b02d_3072x2048.jpeg 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">The warehouse setup in California.</figcaption></figure></div><h1>Startup Life</h1><p>In 2013 I joined a local e-commerce agency startup. Literally overnight &#8211; I emailed about the job opening on a Wednesday afternoon, interviewed that evening, accepted their offer in a follow-up email, and started the very next day. What a turnaround!</p><p>I was employee #5, and we all worked out of the founder&#8217;s condo. The East Side of Milwaukee isn&#8217;t Silicon Valley, but it was still startup <strong>magic</strong>. There is nothing like a small group of people all invested in growing a business, working next to each other without formality or bureaucracy. Shit gets <strong>done</strong>, and it&#8217;s some of the most fun I&#8217;ve had in this industry.</p><p>While most of our customers were e-commerce focused, I worked on custom applications or individual components. Two of my largest accomplishments were SaaS apps for employee recognition and a learning management system.</p><p>The startup eventually got a real office and grew to nearly 40 employees, which included a satellite office in Europe. A little more formality and bureaucracy, but still a wonderful job. I doubled my salary, and even received a minor partnership stake.</p><p>I left when the custom application side of the agency was removed to focus on e-commerce. I took with me a lot of experience in both engineering and business growth, and long-term relationships with colleagues I still enjoy spending time with 10 years later.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gn4l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f806bc-211e-4812-a51b-d8b255b1bd4f_3264x2448.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gn4l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f806bc-211e-4812-a51b-d8b255b1bd4f_3264x2448.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gn4l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f806bc-211e-4812-a51b-d8b255b1bd4f_3264x2448.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gn4l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f806bc-211e-4812-a51b-d8b255b1bd4f_3264x2448.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gn4l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f806bc-211e-4812-a51b-d8b255b1bd4f_3264x2448.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gn4l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f806bc-211e-4812-a51b-d8b255b1bd4f_3264x2448.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a4f806bc-211e-4812-a51b-d8b255b1bd4f_3264x2448.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:746791,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&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_!gn4l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f806bc-211e-4812-a51b-d8b255b1bd4f_3264x2448.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gn4l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f806bc-211e-4812-a51b-d8b255b1bd4f_3264x2448.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gn4l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f806bc-211e-4812-a51b-d8b255b1bd4f_3264x2448.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gn4l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f806bc-211e-4812-a51b-d8b255b1bd4f_3264x2448.jpeg 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">Our workstation cluster in the startup founder&#8217;s condo.</figcaption></figure></div><h1>Solo Founder Failure</h1><p>When I left the startup my family was living with my in-laws. With a fresh start, a savings runway, and the cheapest cost of living I&#8217;d probably ever have, I decided to give my own startup a shot.</p><p>In 2018 I started developing Nicheket, the &#8220;niche marketplace&#8221;. I&#8217;m a toy collector, and I wanted to create a marketplace that would compete with eBay but be focused on specific niches. Interested only in diecast cars? Visit that section and you can search, buy, and sell within it. Buy from multiple sellers in the same transaction with one payment. All the bells and whistles.</p><p>I spent about 10 months building the first production release. I registered the business, got a bank account, all the usual new business actions.</p><p>Except I never built a customer following. No customers knew about Nicheket. No marketing was done. Nicheket made about $20 in revenue.</p><p>After about 6 months of expecting customers to appear out of thin air (pro tip: it never happens), I admitted to myself I didn&#8217;t have enough runway left to stay full-time on it. After considering starting another type of business with my wife, I began searching for another full-time dev job.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YslY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F845f1c32-75bf-47a4-b4f8-664b660cc542_1676x1412.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YslY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F845f1c32-75bf-47a4-b4f8-664b660cc542_1676x1412.png 424w, https://substackcdn.com/image/fetch/$s_!YslY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F845f1c32-75bf-47a4-b4f8-664b660cc542_1676x1412.png 848w, https://substackcdn.com/image/fetch/$s_!YslY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F845f1c32-75bf-47a4-b4f8-664b660cc542_1676x1412.png 1272w, https://substackcdn.com/image/fetch/$s_!YslY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F845f1c32-75bf-47a4-b4f8-664b660cc542_1676x1412.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YslY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F845f1c32-75bf-47a4-b4f8-664b660cc542_1676x1412.png" width="1456" height="1227" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/845f1c32-75bf-47a4-b4f8-664b660cc542_1676x1412.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1227,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:442337,&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_!YslY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F845f1c32-75bf-47a4-b4f8-664b660cc542_1676x1412.png 424w, https://substackcdn.com/image/fetch/$s_!YslY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F845f1c32-75bf-47a4-b4f8-664b660cc542_1676x1412.png 848w, https://substackcdn.com/image/fetch/$s_!YslY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F845f1c32-75bf-47a4-b4f8-664b660cc542_1676x1412.png 1272w, https://substackcdn.com/image/fetch/$s_!YslY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F845f1c32-75bf-47a4-b4f8-664b660cc542_1676x1412.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 screenshot of Nicheket&#8217;s homepage after launching.</figcaption></figure></div><h1>Six Figure SaaS</h1><p>After one bad employer that only lasted a month, I found a stable SaaS in the data collection ecosystem. They had a recent investment and were growing their engineering department by 2-3x.</p><p>After all of my experience at this point, I <em>really</em> wanted to break the six-figure barrier: $100,000+ USD in compensation. It&#8217;s one of those milestones that really helps you feel like you made it. At least to this millennial who had 15 years of experience already &#8211; those of you new to the field in the last 3-5 years might have this salary even at a junior or mid position.</p><p>Because of a bit of self-doubt and imposter syndrome, I didn&#8217;t feel like I was worth asking for much more. So, I asked for $105-110k as an initial range.</p><p>They hired me at $110k. I made it! &#127882;</p><p>Later on, I learned from the hiring manager that one of the lead engineers messaged him in the middle of one interview saying &#8220;Can we just hire Aken right now?&#8221; So much for that self-doubt, eh?</p><p>Over the next four years I was a part of many major projects and features, CI/CD improvements, hiring processes, mid-level mentoring, healthy debates about code organization, and all the fun and nuance that comes with it. I was part of an engineering team who helped deliver the shift in our product to a more valuable B2B offering, that resulted in regularly increasing revenues.</p><p>Along the way, I also received a substantial pay increase as part of a market adjustment. Kudos to the organization for recognizing some of our turnover and hiring challenges were due to lower rates, and they made the adjustment for both existing and new engineers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q53l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F066884b9-9464-4964-94bf-856f2f25fee4_3541x2656.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q53l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F066884b9-9464-4964-94bf-856f2f25fee4_3541x2656.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Q53l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F066884b9-9464-4964-94bf-856f2f25fee4_3541x2656.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Q53l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F066884b9-9464-4964-94bf-856f2f25fee4_3541x2656.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Q53l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F066884b9-9464-4964-94bf-856f2f25fee4_3541x2656.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q53l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F066884b9-9464-4964-94bf-856f2f25fee4_3541x2656.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/066884b9-9464-4964-94bf-856f2f25fee4_3541x2656.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1142917,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&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_!Q53l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F066884b9-9464-4964-94bf-856f2f25fee4_3541x2656.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Q53l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F066884b9-9464-4964-94bf-856f2f25fee4_3541x2656.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Q53l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F066884b9-9464-4964-94bf-856f2f25fee4_3541x2656.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Q53l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F066884b9-9464-4964-94bf-856f2f25fee4_3541x2656.jpeg 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">Kayaking in Arizona during a company reunion.</figcaption></figure></div><h1>Fired Into Today</h1><p>In September 2023, I was fired from that SaaS position.</p><p>It&#8217;s important to tell you that for many reasons. I want to be honest, relatable, vulnerable. I want to show that failure doesn&#8217;t define you, and you will always be better for it.</p><p>I was a great employee in many ways, and difficult in others. Those difficulties were a combination of traits that were incompatible with the company and the team (sometimes things aren&#8217;t a good fit, not really anyone&#8217;s fault), and skills which I need to improve on. Skills I intend to practice along with you, because<strong> you should never stop learning and seeking to improve yourself</strong>.</p><p>After taking time to process, grieve, and adjust, I found myself back in the same spot as 2018. A fresh start, a savings runway, and a new found desire to never be in a position to be fired again.</p><p>That brings us to today! I&#8217;m once again a solo entrepreneur, attempting to create one or more successful products that can sustain a full-time income as a founder and business owner.</p><p>Become a Senior Engineer is one of those products, and this newsletter is only the beginning. Please consider becoming a subscriber. Paid subscribers receive exclusive actionable content, and as part of the founding audience you can receive 50% forever. Check with your employer to see if you can expense educational content at no cost to you!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.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://newsletter.becomeaseniorengineer.com/subscribe?"><span>Subscribe now</span></a></p><p>And please share this newsletter with anyone you believe it would be valuable to. Sharing is free, takes only a minute or two, and it&#8217;s incredibly helpful for me. I&#8217;d be honored.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Become a Senior Engineer&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.becomeaseniorengineer.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Become a Senior Engineer</span></a></p><h1>Thank You! &#128522;</h1><p>I appreciate you taking the time to learn a bit about my professional background. I&#8217;m looking forward to more opportunities to share stories and anecdotes, and to hear yours!</p><p>Hit reply and tell me your favorite part of becoming a software engineer, or one of your best career wins.</p><p>For more of me personally, you can find me on X at <a href="https://twitter.com/AkenRoberts">@AkenRoberts</a> and on the web at <a href="https://akenroberts.com">AkenRoberts.com</a></p><p>#KeepSpritzing &#128153;</p><p>Aken</p>]]></content:encoded></item><item><title><![CDATA[#4: Read ALL The Documentation]]></title><description><![CDATA[Read The &#129324;ing Manual! How senior engineers consume documentation to improve their knowledge and productivity.]]></description><link>https://newsletter.becomeaseniorengineer.com/p/4-read-all-the-documentation</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/4-read-all-the-documentation</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Thu, 04 Jan 2024 14:00:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!W0vu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c043df-262e-4f10-bd58-2cd959d37fa3_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Technical documentation is the #1 online resource for learning how to code.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><p>As a software engineer, you&#8217;re already reading various docs. Programming languages, frameworks, pipelines, SaaS tools, and more are all referenced on a regular basis.</p><p>When&#8217;s the last time you read <strong>all</strong> of the docs offered by a particular language or tool?</p><p>I know, I know &#8211; your language&#8217;s standard library docs are far too vast and dull to read. Let me explain how senior engineers consume documentation:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W0vu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c043df-262e-4f10-bd58-2cd959d37fa3_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W0vu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c043df-262e-4f10-bd58-2cd959d37fa3_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!W0vu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c043df-262e-4f10-bd58-2cd959d37fa3_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!W0vu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c043df-262e-4f10-bd58-2cd959d37fa3_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!W0vu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c043df-262e-4f10-bd58-2cd959d37fa3_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W0vu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c043df-262e-4f10-bd58-2cd959d37fa3_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5c043df-262e-4f10-bd58-2cd959d37fa3_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1777902,&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_!W0vu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c043df-262e-4f10-bd58-2cd959d37fa3_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!W0vu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c043df-262e-4f10-bd58-2cd959d37fa3_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!W0vu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c043df-262e-4f10-bd58-2cd959d37fa3_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!W0vu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c043df-262e-4f10-bd58-2cd959d37fa3_1024x1024.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>Start by, well, actually reading the docs!</h2><p>I hope you&#8217;re already reading documentation. &#128270;</p><p>Manuals and docs are there to help you use the software and tools to their fullest. If you are only skimming through documentation and jumping right into the code, well, I don&#8217;t ever want to assemble an IKEA bookcase with you!</p><p>Don&#8217;t make assumptions.</p><p>Don&#8217;t read the source code first (as fun as that is).</p><p>Don&#8217;t rely on third-party information that might be out of date.</p><p>Seniors ensure the information they&#8217;re consuming is relevant, accurate, and useful.</p><h2>Okay, so I don&#8217;t mean <em>all</em> of the docs&#8230; &#129763;</h2><p>Reading literally every word of documentation for a language, framework, or tool is usually not the best way to spend your time.</p><p>Here&#8217;s how seniors make the most out of documentation:</p><h2>Guides vs. Reference</h2><p>Documentation usually consists of two types of content: guides and reference material.</p><p>Guides such as &#8220;Getting Started&#8221; are meant to tell more of a story; to walk (<em>guide</em>) you through the steps of understanding the software, a particular feature, concept, etc. They help you get from nothing to a finished goal (shout out to our favorite &#8220;Hello, World!&#8221;)</p><p>Reference material usually documents specific parts of the software. API endpoints, standard library functions, client libraries, that sort of thing. Reference material is read more like a dictionary.</p><p>Seniors know whether guides or reference material contains the information most likely to help with their needs.</p><h2>Must Read Sections</h2><p>Whether checking out a brand new piece of tech or returning to an old favorite, here are some must-read sections of documentation:</p><ul><li><p><strong>Release Notes / Change Logs</strong> &#8211; Check out what&#8217;s new, especially if you&#8217;re using the product already. &#128161; <em>Seniors think:</em> <em>When was this last updated? What release cadence is used? Is there anything new that would be useful for us?</em></p></li><li><p><strong>Installation &amp; Upgrade Guides</strong> &#8211; Some tools have strict installation requirements or complex steps. A tool you already use might have a new, more convenient way to install it. &#128161; <em>Seniors think: Can I install this in our existing stack easily? How difficult will it be to maintain?</em></p></li><li><p><strong>Best Practices</strong> &#8211; The authors and community that know the software best have already solved a lot of problems for you. Follow their lead. &#128161; <em>Seniors think: Is there anything we&#8217;re already doing that we can improve? What should we watch out for as we get started?</em></p></li><li><p><strong>Fundamentals / Architecture Concepts</strong> &#8211; Understand the core principles that the software employs, and the fundamentals that drive its development moving forward. &#128161; <em>Seniors think: Does this align with what our team is used to? What&#8217;s critical for us to know?</em></p></li></ul><h2>When Looking For A Specific Thing</h2><p><strong>Have a problem to solve.</strong> Docs are great at helping you solve problems, but they aren&#8217;t going to come up with the problems for you. If you aren&#8217;t sure what you&#8217;re trying to accomplish, the docs might be harder to read. They don&#8217;t usually have a plot, after all. Seniors come to the docs with a clear problem to solve.</p><p><strong>Utilize search.</strong> Both internal and external (e.g. Google), search for the specific topic or issue you&#8217;re having. Google pro tip: include the documentation&#8217;s URL to search within the docs when they don&#8217;t provide an internal search:</p><pre><code>how to refund a customer site:https://stripe.com/docs</code></pre><p><strong>Check for community comments.</strong> If the docs support it, see if the community has made any comments about the reference material you&#8217;re using. Communities are great at pointing out common gotchas or better options. If the docs don&#8217;t have community options, a quick Google should help.</p><p><strong>Look around a bit!</strong> If you&#8217;re in a reference section that&#8217;s pretty dry, maybe looking at a function in the standard library of a language, take some time to wander around a bit! See what related methods do. You never know what bits of information might stick in the back of your brain and become useful later in your career.</p><h2>I Still Don&#8217;t Get It</h2><p>Still feeling hesitant about why you need to read so many parts of the docs?</p><p><strong>Reading = Learning.</strong> Never turn down a chance to learn.</p><p><strong>Learning = Experience.</strong> Okay, I&#8217;m stretching a little on this one, but hear me out. Part of being a senior means having experience. But not all experience needs to be raw, hands-on work. Knowing about a tool and what situations it fits well into can be equally valuable when a future scenario calls for it.</p><p><strong>They know better!</strong> Even as a senior with 20 years of experience, I&#8217;ve been surprised when the Best Practices section has a tip for a situation I tried to solve myself only looking up reference material.</p><p><strong>It&#8217;s practice.</strong> You&#8217;ll read documentation for the rest of your engineering career. Get good at it.</p><p><strong>It&#8217;s part of your job.</strong> Of course writing code is the <em>fun</em> part of your job, but that doesn&#8217;t mean you can ignore the boring parts. Still better than meetings!</p><p><strong>It can make you more useful to your team.</strong> The better you understand, the more you can be a reference to your teammates. Even if that means sharing a link to a piece of documentation, you have information that can level up those around you. That&#8217;s what being a senior is about.</p><h2>Write Documentation When You Can</h2><p>Senior engineers look for opportunities to document and teach others. It is a exercise in communicating with those without the knowledge you possess, which translates well into teaching engineers more junior than you. It also makes you appreciate good documentation and the effort that goes into it.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p><a href="https://survey.stackoverflow.co/2023/#section-learning-to-code-online-resources-to-learn-how-to-code">Stack Overflow 2023 Developer Survey</a></p></div></div>]]></content:encoded></item><item><title><![CDATA[#3: 15+ Code Editor Superpowers]]></title><description><![CDATA[Use your IDE or code editor to its fullest by utilizing these 15+ features.]]></description><link>https://newsletter.becomeaseniorengineer.com/p/3-13-code-editor-superpowers</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/3-13-code-editor-superpowers</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Tue, 02 Jan 2024 14:01:40 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%2Fc9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Senior engineers are focused on getting things done as quickly and efficiently as possible without sacrificing quality. They constantly analyze their workflows and look for optimizations to increase velocity and and reduce errors. Since the main goal of an engineer is to write code, your code editor is a natural place to start.</p><p>Modern code editors and integrated development environments (IDEs) come with a fabulous suite of tools to aid in writing and ensuring the quality of your code. Here are 15+ that will superpower your development today:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3NQa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3NQa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!3NQa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!3NQa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!3NQa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3NQa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.png" width="416" height="416" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:416,&quot;bytes&quot;:2299435,&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_!3NQa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!3NQa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!3NQa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!3NQa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a493d2-a979-4bfa-a77d-b64619d9872b_1024x1024.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><h3>Syntax Highlighting</h3><p>A staple of all good editors, syntax highlighting helps you quickly read and understand code. You&#8217;re probably using this already. If you&#8217;ve never switched beyond your IDE&#8217;s default color scheme, there are many great ones out there! I use a customized version of the default <a href="https://material-theme.com/">Oceanic Material theme</a> on my <a href="https://www.jetbrains.com/">JetBrains IDEs</a>.</p><h3>Code Analysis &amp; Inspections</h3><p>One of the most powerful features of IDEs is built-in code analysis and inspection. Automatically check your code for quality and adherence to standards, including but not limited to:</p><ul><li><p>Static analysis &#8211; usage errors, type safety, unreachable code</p></li><li><p>Unused or deprecated code warnings</p></li><li><p>Style guide adherence</p></li><li><p>Typos</p></li></ul><h3>Keyboard Shortcuts</h3><p>Fully customizable keyboard shortcuts let you perform most tasks without needing to move your hands away from the keyboard, including most features mentioned here!</p><p>There are even plugins for IDEs that will teach you the keyboard shortcut for a function you perform manually.</p><h3>Refactoring</h3><p>Refactoring means restructuring code without changing its original functionality. Moving or renaming parts of your code are common practice, but can be tedious if the code is already implemented. IDEs can refactor your source code <em>and</em> usages simultaneously.</p><h3>Code &amp; File Templates</h3><p>Use a specific code template every time you create files of a particular type, such as class or test. Include headers, comments, copyright information, or necessary boilerplate.</p><p>Create brief triggers that expand into more complex code blocks that are commonly used. <code>ifelse + tab</code> automatically becomes a full conditional block.</p><h3>Code Completion + AI</h3><p>Who doesn&#8217;t like writing code faster? Code completion tools can help automatically fill in method calls, parameters, structures, and way more. Framework- and tool-specific plugins add autocomplete for your favorite stack.</p><p>Many IDEs now come with AI-powered tools to write entire code blocks based on prompts. <a href="https://github.com/features/copilot/">GitHub Copilot</a> is a notable example, with many others including plugins powered by <a href="https://openai.com/blog/chatgpt">ChatGPT</a>. <a href="https://cursor.sh/">There&#8217;s even an AI-first editor</a>!</p><h3>Multiple Cursors + Text Utilities</h3><p>Use multiple cursors to write or modify multiple sections or lines of text simultaneously.</p><p>Automatically adjust and format text such as reordering, case formatting (e.g. make all TitleCase), reversing, </p><h3>Program &amp; Test Execution</h3><p>When configured, you can run and view the output of code and tests directly from your IDE. </p><h3>Debugging</h3><p><code>print</code> debugging only gets you so far. Enable a debugging session in your IDE to pause at specific breakpoints, inspect the state of your application at any given point, step through function and method calls, and more.</p><h3>Profiling</h3><p>A wonderful companion to debugging, profiling helps you understand the performance of your code. Find where your code is slowing down, how an unexpected loop is occurring, and why all that memory is being used.</p><h3>Pair Programming</h3><p>Modern IDEs offer real-time code collaboration tools, allowing multiple developers to watch, follow, and code alongside each other. Combined with a video call or voice chat, remote pair programming is just as effective as sitting next to each other at the same computer.</p><p>Checkout <a href="https://www.jetbrains.com/code-with-me/">JetBrains&#8217; Code With Me</a> and <a href="https://visualstudio.microsoft.com/services/live-share/">Visual Studio&#8217;s Live Share</a> for two popular solutions, or search for what your IDE of choice offers!</p><h3>Database &amp; SQL</h3><p>Connect to your database software and view table structure, list and query data, run <code>explain</code> queries, perform imports and exports, and more.</p><h3>HTTP Client</h3><p>While not as full-featured as a dedicated client like Postman, your IDE can probably make basic HTTP calls and make use of <code>.http</code> files. Make one-off calls during development to figure out a third-party endpoint. Use them for automated testing or CI/CD pipelines. Skip the cURL syntax and stay in your IDE.</p><h3>Version Control, Diffs</h3><p>Do you prefer GUIs instead of the command line, or simply like interacting with as few tools as possible? IDEs offer first-class support for Git, version control, and common workflows such as Git Flow.</p><p>Highlight differences between version control history, open files, or even a file and your clipboard using your IDE&#8217;s built in diff tools.</p><p>Are you using GitHub? Many IDEs integrate with GitHub offerings such as pull requests, issues, and releases. Create PRs, do code reviews, and mark off completed issues right from your editor.</p><h3>Integration &amp; Automation</h3><p>Docker, CI/CD platforms, package managers, command line terminals, build tools&#8230; You name it, your IDE likely integrates with it. When it doesn&#8217;t, there&#8217;s usually a scripting option that allows you to hook into the workflow exactly when you need.</p><h3>Graphical User Interface</h3><p>Many developers enjoy working with a clean UI that provides all the information needed during development at a glance or easily accessible in one place. Color schemes and customization options help make the editor feel like home. Other modes like distraction-free and presentation offer optimal screens for specific tasks.</p><h3>Remote Code</h3><p>Harness the power of the cloud by editing and debugging remotely-hosted code as if it lived on your local machine, without sacrificing any IDE features.</p><h3>Programming Language Support</h3><p>Some IDEs are built to have first-class support for a specific programming language. They come set up with most tooling and integrations popular for that language. If you&#8217;re new to a language, getting an IDE meant specifically for it could give you a head start in writing efficiently.</p><h3>Plugins &amp; Extensions</h3><p>Extend the default capabilities of your IDE in many, many ways using their plugin or extension ecosystems. Add autocomplete and tooling for all the languages and frameworks in your stack. Integrate with third-party platforms and applications. Simplify your workflow by allowing as much functionality as possible in one GUI.</p><div><hr></div><h1>Audience Questions</h1><p>&#10024; &#127379; <strong>Answer any of these questions for a chance to win a free book!</strong></p><p>What is your favorite IDE or editor?</p><p>What feature does your IDE have that you appreciate the most?</p><p>What feature do you wish your IDE had? (Have you checked? Now&#8217;s a great time!)</p><p>Did I miss a capability that should be listed here?</p><p>Hit reply to answer any and all of these, and I&#8217;ll highlight your answers in a future issue!</p>]]></content:encoded></item><item><title><![CDATA[Join our new subscriber chat!]]></title><description><![CDATA[A private space for us to converse and connect]]></description><link>https://newsletter.becomeaseniorengineer.com/p/join-our-new-subscriber-chat</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/join-our-new-subscriber-chat</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Thu, 28 Dec 2023 14:00:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2H2-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9a23d49f-76bd-4f75-baac-0ae5733774bd_1456x743.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today I&#8217;m announcing a brand new addition to my Substack publication: the Become a Senior Engineer subscriber chat.</p><p>This is a conversation space in the Substack app set up exclusively for my subscribers &#8212; kind of like a group chat or live hangout. I&#8217;ll post short prompts, thoughts, and updates that come our way, and you can jump into the discussion. </p><p><strong>To join our chat, you&#8217;ll need to download the <a href="https://substack.com/app/app-store-redirect">Substack app</a>, now available for both iOS and Android.</strong> Chats are sent via the app, not email, so turn on push notifications so you don&#8217;t miss conversation as it happens.</p><div><hr></div><h2>How to get started</h2><ol><li><p><strong>Download the app by clicking <a href="https://substack.com/app/app-store-redirect">this link</a> or the button below.</strong> Substack Chat is now available on both iOS and Android.</p></li></ol><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.com/app/app-store-redirect&quot;,&quot;text&quot;:&quot;Get app&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://substack.com/app/app-store-redirect"><span>Get app</span></a></p><ol start="2"><li><p><strong>Open the app and tap the Chat icon.</strong> It looks like two bubbles in the bottom bar, and you&#8217;ll see a row for my chat inside.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2H2-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9a23d49f-76bd-4f75-baac-0ae5733774bd_1456x743.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2H2-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9a23d49f-76bd-4f75-baac-0ae5733774bd_1456x743.png 424w, https://substackcdn.com/image/fetch/$s_!2H2-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9a23d49f-76bd-4f75-baac-0ae5733774bd_1456x743.png 848w, https://substackcdn.com/image/fetch/$s_!2H2-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9a23d49f-76bd-4f75-baac-0ae5733774bd_1456x743.png 1272w, https://substackcdn.com/image/fetch/$s_!2H2-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9a23d49f-76bd-4f75-baac-0ae5733774bd_1456x743.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2H2-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9a23d49f-76bd-4f75-baac-0ae5733774bd_1456x743.png" width="542" height="276.5837912087912" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/9a23d49f-76bd-4f75-baac-0ae5733774bd_1456x743.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:743,&quot;width&quot;:1456,&quot;resizeWidth&quot;:542,&quot;bytes&quot;:501468,&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;: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_!2H2-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9a23d49f-76bd-4f75-baac-0ae5733774bd_1456x743.png 424w, https://substackcdn.com/image/fetch/$s_!2H2-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9a23d49f-76bd-4f75-baac-0ae5733774bd_1456x743.png 848w, https://substackcdn.com/image/fetch/$s_!2H2-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9a23d49f-76bd-4f75-baac-0ae5733774bd_1456x743.png 1272w, https://substackcdn.com/image/fetch/$s_!2H2-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9a23d49f-76bd-4f75-baac-0ae5733774bd_1456x743.png 1456w" sizes="100vw" loading="lazy" 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><ol start="3"><li><p><strong>That&#8217;s it!</strong> Jump into my thread to say hi, and if you have any issues, check out <a href="https://support.substack.com/hc/en-us/sections/360007461791-Frequently-Asked-Questions">Substack&#8217;s FAQ</a>.</p></li></ol><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/pub/becomeaseniorengineer/chat&quot;,&quot;text&quot;:&quot;Join chat&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://open.substack.com/pub/becomeaseniorengineer/chat"><span>Join chat</span></a></p>]]></content:encoded></item><item><title><![CDATA[#2: Should you be in this meeting?]]></title><description><![CDATA[Your time is precious &#8211; protect it.]]></description><link>https://newsletter.becomeaseniorengineer.com/p/2-should-you-be-in-this-meeting</link><guid isPermaLink="false">https://newsletter.becomeaseniorengineer.com/p/2-should-you-be-in-this-meeting</guid><dc:creator><![CDATA[Aken Roberts]]></dc:creator><pubDate>Wed, 27 Dec 2023 14:01:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!T9w5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686ddc87-a3af-4283-a815-de68ef193ac6_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Meetings can be a powerful and valuable tool to engineers. But they come with a cost: time.</p><p>Meetings quietly cost more time than scheduled. Engineers often need to context switch before and after meetings. You may be in the middle of developing an algorithm or hunting an elusive bug. Stopping that work prematurely for an unrelated meeting loses your momentum. After the meeting you need to figure out where you left off and what to do next. Or maybe you have <em>another</em> meeting on a separate topic right afterwards that you have to context switch into.</p><p>Engineers are paid to write and maintain code. That is your core value-add to an organization. Taking time away from that core mission should be done carefully and with intention.</p><p>Maximize the effectiveness of your time by attending meetings that are valuable to you and your team. In those meetings you should accomplish at least one of three worthwhile actions:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.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://newsletter.becomeaseniorengineer.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_!T9w5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686ddc87-a3af-4283-a815-de68ef193ac6_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T9w5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686ddc87-a3af-4283-a815-de68ef193ac6_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!T9w5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686ddc87-a3af-4283-a815-de68ef193ac6_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!T9w5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686ddc87-a3af-4283-a815-de68ef193ac6_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!T9w5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686ddc87-a3af-4283-a815-de68ef193ac6_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T9w5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686ddc87-a3af-4283-a815-de68ef193ac6_1024x1024.png" width="446" height="446" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/686ddc87-a3af-4283-a815-de68ef193ac6_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:446,&quot;bytes&quot;:1503865,&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_!T9w5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686ddc87-a3af-4283-a815-de68ef193ac6_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!T9w5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686ddc87-a3af-4283-a815-de68ef193ac6_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!T9w5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686ddc87-a3af-4283-a815-de68ef193ac6_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!T9w5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686ddc87-a3af-4283-a815-de68ef193ac6_1024x1024.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><h3>&#127891; Learning Something</h3><p>Will the meeting contain a knowledge share of some kind? Improving your skills and capacities as an engineer is always valuable. That&#8217;s why you&#8217;re reading this newsletter, after all!</p><p>One caveat to learning is you don&#8217;t always need to learn directly from the source. Keep reading to learn how to decline a meeting you would still like to learn from.</p><h3>&#129489;&#127997;&#8205;&#127979; Teaching Something</h3><p>On the other end of learning is teaching. Do you have knowledge to share about a current project, a change at the organization, or a presentation on a new technique or piece of software? Senior engineers actively help by spreading knowledge and leveling up those around them.</p><h3>&#129781;&#127996; Making a Decision</h3><p>Is there an outstanding question needing answering, or a direction to be set? Make sure you&#8217;re available to remove any confusion and blockers for your team.</p><div><hr></div><h2>Assessing A Meeting Request</h2><p>Now that you know what activities make your presence in a meeting valuable, how do you know which meetings to attend?</p><ul><li><p><strong>Ensure the meeting has an agenda. </strong>What is the intention of the meeting? What is the desired outcome?</p></li><li><p><strong>Clarify your role.</strong> When you aren&#8217;t sure how you fit into the agenda, ask the organizer or another colleague how you can contribute.</p></li><li><p><strong>Check your calendar and workload.</strong> What else are you doing that day? Is the meeting at a weird time? Do you have a difficult task and want to minimize distractions and context switching? Meetings can work around your schedule.</p></li></ul><p>If you aren&#8217;t learning, teaching, or making a decision, your time is better spent on other tasks. Decline the meeting.</p><div><hr></div><h2>How To Decline a Meeting</h2><p>You&#8217;re going to love this:</p><p><strong>Just decline it, with a short message why.</strong></p><p>That&#8217;s it! People vastly overthink the repercussions of not attending a meeting at work, and feel obligated to attend everything they&#8217;re invited to.</p><p>The only rule: have a good reason why. &#8220;Meetings suck!&#8221; isn&#8217;t going to win you any influence at an organization (even though a lot of times it&#8217;s true). Your reason should explain why your time is better spent elsewhere.</p><h3>Examples</h3><blockquote><p><strong>I am a bit behind on my current feature development, and would like to maintain focus on that so I can meet our sprint goals.</strong></p></blockquote><p>The meeting might be valuable, but sacrificing your current goals for the meeting isn&#8217;t worth the trade off. You can always ask for an update after the meeting with any learnings or decisions.</p><blockquote><p><strong>Amit and Jarrod are already attending, they&#8217;re more than capable of getting you up to speed without me.</strong></p></blockquote><p>Do you really need <em>everyone</em> invited to accomplish a goal? Share the responsibilities of your team. You aren&#8217;t required to learn or decide everything. Teammates can fill you in or own that part of your team&#8217;s knowledge.</p><p><strong>Bonus tip: </strong>As a senior, you can protect the time of your teammates by &#8220;falling on the grenade&#8221; and handling meetings on their behalf.</p><blockquote><p><strong>I&#8217;m not sure where I fit into this meeting. Please add to the itinerary and invite me again if appropriate.</strong></p></blockquote><p>This may be a clarifying question via company chat or email first before an outright decline, but the goal is the same: if you aren&#8217;t sure what value <strong>you</strong> have by attending a meeting, don&#8217;t go.</p><blockquote><p><strong>My Tuesday is really busy and I have an important task to do that day. Can we shift this meeting to Wednesday?</strong></p></blockquote><p>Most things are flexible, just ask.</p><h3>What if I <em>have</em> to be there?</h3><p>What if you want to decline a meeting but someone has specifically requested your attendance? <strong>Clarify the value.</strong> The person asking for your attention needs <em>something</em>, you should understand what that is. Outright declining leaves them feeling unimportant and makes you look unhelpful or unreliable, and they <em>still</em> have a problem to solve.</p><p>What if the meeting request comes from a person of authority, like your boss, and you feel obligated to attend? Like other scenarios, start by clarifying the value. Is it your CTO giving an engineering-wide update about something? Missing it might not be a huge deal &#8211; you can be caught up after. Is it a one-on-one meeting about your performance? Very valuable, must attend.</p><p>What are your reasons for wanting to decline? Are you swamped with work and worried about missing a deadline? Let them know.</p><p>Any time you attend a meeting you feel obligated to and it doesn&#8217;t end up being valuable to you, share that feedback. If you&#8217;re not sure the meeting was valuable, talk to a more experienced teammate that was there with you. Ask them what value they found, what takeaways they believe were valuable to you, and help you contextualize the experience for next time.</p><div><hr></div><h1>Meetings still suck. What else can I do?</h1><p>Most likely, your growth into a senior engineer will be accompanied by more meetings. What else can you do to optimize meetings and your productivity?</p><p>In future issues of Become a Senior Engineer, we&#8217;ll discuss topics such as:</p><ul><li><p>Making meetings as effective as possible for all attendees</p></li><li><p>How to listen and observe in meetings</p></li><li><p>How to keep meetings on track</p></li><li><p>How to avoid having meetings in the first place through asynchronous conversations</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.becomeaseniorengineer.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://newsletter.becomeaseniorengineer.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>What did you think of this content? Do you have any questions or items I can clarify? Did you try any advice here and have success or difficulty? I&#8217;d love to hear about your experiences! Reply to this email and share your story. &#128226;</p>]]></content:encoded></item></channel></rss>