<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Horace Nelson</title>
    <description>The latest articles on Forem by Horace Nelson (@horaceshmorace).</description>
    <link>https://forem.com/horaceshmorace</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F150510%2F7d2ec588-288a-43c4-ab7f-7aa7eff5b830.jpg</url>
      <title>Forem: Horace Nelson</title>
      <link>https://forem.com/horaceshmorace</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/horaceshmorace"/>
    <language>en</language>
    <item>
      <title>Latency is the Growth Killer</title>
      <dc:creator>Horace Nelson</dc:creator>
      <pubDate>Fri, 25 Jul 2025 16:35:58 +0000</pubDate>
      <link>https://forem.com/horaceshmorace/latency-is-the-growth-killer-oo</link>
      <guid>https://forem.com/horaceshmorace/latency-is-the-growth-killer-oo</guid>
      <description>&lt;p&gt;The most overlooked growth bottleneck across marketing, product, and engineering teams is latency. It’s not a theoretical issue or a vanity metric. It’s a direct, measurable drag on performance at every stage of the user journey.&lt;/p&gt;

&lt;p&gt;Most teams focus their growth efforts on messaging — copy, creative, onboarding flows. But the speed at which users access that message is usually treated as a technical afterthought, dealt with reactively, relegated to the bottom of backlogs instead of acted upon proactively as a first principle and a first class requirement. That’s the real problem. How fast someone can engage with what you’ve built isn’t just an engineering detail. It’s a core business lever that drives conversion, engagement, and trust.&lt;/p&gt;

&lt;p&gt;Latency is one of the few factors that improves performance across the entire funnel. It lowers bounce rates, increases engagement, and lifts conversions without needing to guess at intent or segment audiences, which are guesses, whereas latency is precisely quantifiable.&lt;/p&gt;

&lt;p&gt;Start with real-world metrics like Time to First Byte, Largest Contentful Paint, and Time to Interactive. Then layer that data against funnel performance analytics to see where latency is quietly eroding outcomes.&lt;/p&gt;

&lt;p&gt;Most fixes are straightforward: tune the backend, preload key assets, optimize edge caching, and load scripts and styles intelligently. These improvements aren’t just technical wins — they multiply the impact of everything else you’re already doing. They are outcome multipliers.&lt;/p&gt;

&lt;p&gt;The truth is, that speed accelerates everything, and treating it as just technical debt leaves free (if not guaranteed and compounding) growth on the table.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>growthengineering</category>
      <category>programming</category>
    </item>
    <item>
      <title>TypeScript =/= SOLID</title>
      <dc:creator>Horace Nelson</dc:creator>
      <pubDate>Sun, 18 May 2025 17:26:50 +0000</pubDate>
      <link>https://forem.com/horaceshmorace/typescript-solid-19hl</link>
      <guid>https://forem.com/horaceshmorace/typescript-solid-19hl</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“Design is about managing change. The cost of change increases with the number of reasons code has to change.” — Sandi Metz, &lt;em&gt;Practical Object-Oriented Design&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Single Responsibility Principle (SRP, or the “S” in “SOLID”) is often cited but poorly understood. It doesn’t say “do one thing.” It says: a module should have one reason to change. That phrase is precise. It reframes SRP not as a matter of functional scope, but of &lt;strong&gt;change triggers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This applies not just to runtime behavior, but to source code.&lt;/strong&gt; SRP is about scope of responsibility. A change is only appropriate if it falls within what the module is meant to handle. When a module must change to satisfy both domain logic and tooling rules, that’s a sign those concerns are improperly coupled. That’s a violation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“When you write a software module, you want to make sure that when changes are requested, those changes can only originate from one person, or rather, one tightly-coupled group of stakeholders.” — Robert C. Martin, &lt;em&gt;Clean Architecture&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;TypeScript introduces a second reason to change&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7bccrmch172276m47kf0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7bccrmch172276m47kf0.png" alt="Two people debating SRP vs TypeScript" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TypeScript is a static type system. It doesn’t add behavior. It doesn’t affect runtime. Its value is entirely in compile-time enforcement. And yet, satisfying the TypeScript compiler requires changes to application code. Inline annotations, type declarations, structural rewrites, complex generic definitions, and rigid configuration constraints — all of this modifies source files that would otherwise work perfectly in JavaScript. &lt;strong&gt;This is application code authored for the type system, not for the application’s purpose&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This introduces a second reason to change the module: compliance with a compile-time validator. That validator doesn’t exist in production. It doesn’t add safety at runtime. It isn’t required for the application to function. So why are we &lt;strong&gt;modifying the application logic&lt;/strong&gt; to satisfy it?&lt;/p&gt;

&lt;p&gt;Some will argue that TypeScript isn’t adding external syntax at all, that it’s the base language, and JavaScript is just a subset of it. But this reframing is a gaslight. Developers use TypeScript to build JavaScript applications. The runtime target is JavaScript. The logic is JavaScript. The type system is the addition. Anders Hejlsberg, the lead architect of TypeScript, has said himself that it’s “a tool to make JavaScript development safer.” That makes it extrinsic by design. So whether or not TypeScript is technically a superset, the reality is that developers are forced to modify their &lt;strong&gt;application syntax and logic&lt;/strong&gt; to satisfy a tool that exists purely outside the runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The cost in real code&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgm1qra5rv0owhdky4qfw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgm1qra5rv0owhdky4qfw.png" alt="A person throwing bags of money into the gears of a giant machine" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This isn’t an abstract nitpick. In a large codebase, the amount of code written purely to appease the type system is staggering. This added weight bears real costs in both maintenance time spent and levels of effort, and those translate to real $$$. Entire hierarchies of types, overloads, inferred utilities, and &lt;strong&gt;workaround constructs&lt;/strong&gt; exist solely to satisfy the compiler. It’s not auxiliary code. It’s embedded in the modules themselves.&lt;/p&gt;

&lt;p&gt;That’s the tell. As touched on earlier:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When business logic must be rewritten, rearranged, or wrapped only to make the tooling happy, the application code now serves two masters. One of them is the domain. The other is the infrastructure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Intrusion vs Observation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To be clear, this isn’t an argument against type safety. It’s a critique of how TypeScript intrudes on domain logic. They offer feedback or enforce constraints, but they don’t require you to embed their rules into your logic. TypeScript does. They surround the logic. TypeScript infiltrates it.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How is this different from Test-Driven Development?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Some will claim this is no different than test-driven development. In both cases, you write code to pass a test. But that comparison falls apart quickly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tests live outside the module.&lt;/strong&gt; Tests don’t alter your application logic just to pass. They test it from the outside.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests prove what your code does. TypeScript only guesses.&lt;/strong&gt; Tests run your code and confirm its behavior. TypeScript checks types. That’s prediction, not proof.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests can be deleted.&lt;/strong&gt; The app still runs. If you remove TypeScript, your code will likely no longer build.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests help you explore. TypeScript forces conformance.&lt;/strong&gt; TDD helps evolve design through feedback. TypeScript enforces constraints by static rules.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Test-driven development guides design through optional, external tests. TypeScript demands conformance inside your application logic. They are not the same.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But while TypeScript isn't TDD, it &lt;strong&gt;&lt;em&gt;is&lt;/em&gt;&lt;/strong&gt; testing...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Isn’t syntax checking the same thing?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Some will compare this to syntax validation. That’s a dodge at best. Syntax rules are intrinsic to the language. They validate that code &lt;strong&gt;&lt;em&gt;can execute&lt;/em&gt;&lt;/strong&gt;. They care nothing about safety, intent, or correctness. TypeScript, by contrast, is not validation. It is static testing, an assertion framework for types. It forces you to write extra application code not to make the application work, but to make the type system agree that it will.&lt;/p&gt;

&lt;p&gt;I already know what some of you are thinking: something like “TypeScript isn’t testing!” or even “type-checking isn’t testing!” That point is pedantic when, functionally, TypeScript enforces a &lt;strong&gt;static test suite&lt;/strong&gt; via annotations injected directly into source code. As Anders Hejlsberg, himself, said: “The [TypeScript] compiler is just another test.” That’s unassailable testimony against any claim that TypeScript isn’t a testing framework. I rest my case.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Bringing it back to SRP&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If a module must be rewritten for both behavioral requirements and tooling compliance, it has two reasons to change. It no longer has a single, clean responsibility. The logic is entangled with infrastructure.&lt;/p&gt;

&lt;p&gt;Any tool that forces change in core application code without adding runtime capability breaks that principle. It’s not a stylistic debate. It’s an architectural cost, and a high one.&lt;/p&gt;

&lt;p&gt;And SRP has something to say about that.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>typescript</category>
      <category>solidprinciples</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Understanding the CSS Box Model: content-box vs border-box, inline vs. block elements</title>
      <dc:creator>Horace Nelson</dc:creator>
      <pubDate>Sun, 18 Aug 2024 00:50:09 +0000</pubDate>
      <link>https://forem.com/horaceshmorace/understanding-the-css-box-model-content-box-vs-border-box-inline-vs-block-elements-1amh</link>
      <guid>https://forem.com/horaceshmorace/understanding-the-css-box-model-content-box-vs-border-box-inline-vs-block-elements-1amh</guid>
      <description>&lt;p&gt;As a frontend developer, understanding the CSS box model is &lt;em&gt;make-or-break&lt;/em&gt; for being able to deliver pixel-perfect layouts. Let's dive right in and discuss how both inline and block elements behave differently in the context of the two box model types—&lt;code&gt;content-box&lt;/code&gt; and &lt;code&gt;border-box&lt;/code&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Basics: What’s in the Box?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqux7wqojff7kxs31xhr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqux7wqojff7kxs31xhr.png" alt="Brad Pitt from Seven's " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before we go into the details, it's worth it to recap what the box model even is. Every single element on your page is a box (yes, even the ones that don't actually seem boxy in shape). Boxes may be within, containing, and/or alongside other boxes.&lt;/p&gt;

&lt;p&gt;The box model applies to all of them and consists of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content Box:&lt;/strong&gt; An HTML element or CSS pseudo-element in which your actual content lives—text, images, what-have-you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Padding:&lt;/strong&gt; The space between your content and the border.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Border:&lt;/strong&gt; The line wrapping around the padding and content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Margin:&lt;/strong&gt; The space outside the border that pushes other elements away.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So nearly every HTML element within and including the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;, and every CSS pseudo-element, is a box. The "walls" of that box are your border, and can be given a thickness (or width. Between the that content and the walls of that box you have padding. Between those walls and other boxes, you have margin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Differences Between Inline and Block Elements
&lt;/h2&gt;

&lt;p&gt;It's crucial to understand the key differences in how the box model impacts inline versus block elements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Width:&lt;/strong&gt; Block elements expand to fill their container by default. Inline elements? They take up just enough space for their content.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Height:&lt;/strong&gt; For block elements, padding, border, and margin will all increase the height. Inline elements stay within the line height, regardless of vertical padding or borders.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Layout Impact:&lt;/strong&gt; Block elements influence both horizontal and vertical layout. Inline elements are all about horizontal flow, with minimal impact on vertical spacing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Margin Collapsing:&lt;/strong&gt; Margin collapsing is a behavior specific to block elements, where adjacent vertical margins can merge (so a &lt;code&gt;margin-bottom:20px&lt;/code&gt; on one element can collapse into a &lt;code&gt;margin-top:20px&lt;/code&gt; on a following element, creating one &lt;code&gt;20px&lt;/code&gt; margin). Inline elements don’t play this game.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now that we know the components of the box model and the difference between inline and block elements, let’s see how content boxes are affected by the &lt;code&gt;box-sizing&lt;/code&gt; property according to whether they're an inline or block element.&lt;/p&gt;

&lt;h2&gt;
  
  
  Box-Sizing: &lt;code&gt;content-box&lt;/code&gt; vs. &lt;code&gt;border-box&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;box-sizing&lt;/code&gt; property controls how the width and height of an element are calculated, and it can significantly impact the layout.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;content-box&lt;/code&gt; with Inline Elements
&lt;/h3&gt;

&lt;p&gt;When &lt;code&gt;box-sizing: content-box&lt;/code&gt; is applied to an inline element:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Width and Height:&lt;/strong&gt; The width is determined solely by the content. Padding, border, and margin are added on top of this width.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layout Impact:&lt;/strong&gt; Since inline elements don't break the flow of text, the element’s width is only as wide as the content. Vertical padding and borders are visually present but don’t affect the height of the surrounding line.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;content-box&lt;/code&gt; with Block Elements
&lt;/h3&gt;

&lt;p&gt;When &lt;code&gt;box-sizing: content-box&lt;/code&gt; is applied to a block element:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Width and Height:&lt;/strong&gt; The specified width or height applies only to the content area. Padding and border are added outside of this, increasing the overall size of the element.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layout Impact:&lt;/strong&gt; Block elements expand to the full width of their container by default unless otherwise specified. Padding and borders increase the element’s size, pushing adjacent elements further away.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;border-box&lt;/code&gt; with Inline Elements
&lt;/h3&gt;

&lt;p&gt;When &lt;code&gt;box-sizing: border-box&lt;/code&gt; is applied to an inline element:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Width and Height:&lt;/strong&gt; The width includes the content, padding, and border. The content area shrinks to accommodate padding and borders within the specified width.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layout Impact:&lt;/strong&gt; The element’s width is still determined by the content, but now padding and borders are included within this width. Vertical padding and borders remain visually present but don’t alter the line height.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;code&gt;border-box&lt;/code&gt; with Block Elements
&lt;/h3&gt;

&lt;p&gt;When &lt;code&gt;box-sizing: border-box&lt;/code&gt; is applied to a block element:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Width and Height:&lt;/strong&gt; The specified width and height include the content, padding, and border. This means the element's total size stays consistent with the specified dimensions, no matter how much padding or border you add.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layout Impact:&lt;/strong&gt; The block element’s size is more predictable because padding and border are contained within the specified width. This makes layout design easier to manage, especially when aligning elements side by side.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's worth calling out that while &lt;code&gt;content-box&lt;/code&gt; is the default, &lt;code&gt;border-box&lt;/code&gt; is widely considered to be more intuitive and provide the greatest degree of control.&lt;/p&gt;




&lt;p&gt;The CSS box model isn’t just a powerful concept—it’s a foundational tool in your frontend dev arsenal. By understanding how &lt;code&gt;box-sizing&lt;/code&gt; affects inline and block elements differently, you can begin to create flawless layouts that are both sharp and functional without the annoyance of troubleshooting misbehaving layouts.&lt;/p&gt;

&lt;p&gt;If you enjoyed this download on the Box Model, then hover over that heart-shaped box at the top-left and show this post all the love!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>beginners</category>
      <category>ui</category>
    </item>
    <item>
      <title>Building Better Devs: Assessing software developer language proficiency</title>
      <dc:creator>Horace Nelson</dc:creator>
      <pubDate>Tue, 13 Aug 2024 18:28:01 +0000</pubDate>
      <link>https://forem.com/horaceshmorace/building-better-devs-assessing-software-developer-language-proficiency-1p9k</link>
      <guid>https://forem.com/horaceshmorace/building-better-devs-assessing-software-developer-language-proficiency-1p9k</guid>
      <description>&lt;p&gt;I've been coding professionally for 26 years across several languages, including C, Perl, ASP v1-3 in JScript, JavaScript since way back in &lt;a href="https://www.youtube.com/watch?v=GxouWy-ZE80" rel="noopener noreferrer"&gt;the &lt;em&gt;Before Time&lt;/em&gt;&lt;/a&gt; when it was LiveScript, CSS from its alpha, PHP and Node (its JavaScript runtime) from their betas, and more recently, Python, Dart, and lately a little Go. If you asked, I’d tell you with boundless confidence that I'm an expert developer, but how do I really know that? It’s easy to spot a bad engineer over time, but how do we qualify a good one? More importantly, how do we build one? What are the qualities or skills that we must not only identify in hiring, but actively cultivate in our teams and ourselves?&lt;/p&gt;

&lt;p&gt;The following is an organically-developed model I’ve used in which developers descend deeper through a progression in a "Language Proficiency" skill set: how much they understand the core skills within a specific language. These skills are the same for all languages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Syntax and Grammar:&lt;/strong&gt; Basic rules and structure of the language, as well as foundational programming concepts as implemented by the language (e.g., inheritance, abstraction, polymorphism, encapsulation).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Idiomatic Coding:&lt;/strong&gt; Writing code in a way that is natural and considered best practice within the language community, leveraging language-specific features and idioms.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Patterns and Standards:&lt;/strong&gt; Utilizing approaches deemed best practice by the language community, adhering to regulatory compliance, and being aware of relevant standards.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internals and Ecosystem&lt;/strong&gt; (which I like to call the “Ins and Outs”)&lt;strong&gt;:&lt;/strong&gt; A deep understanding of applicable translators (e.g., compilers, interpreters, etc.), engines, runtimes, debugging techniques, and the intent and configuration of supporting technologies like IDEs, bundling, test runners, linters, and frameworks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The levels of progression through these skills might be:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;novel familiarity:&lt;/strong&gt; low proficiency (&amp;lt; 15%)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;actively learning:&lt;/strong&gt; low-medium proficiency (15-50%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;proficient:&lt;/strong&gt; medium-to-high proficiency (50-85%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mastery:&lt;/strong&gt; high proficiency (&amp;gt; 85%)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The naming here is not as important as the expertise each implies, nor are their exact values for proficiency percentages as important as the fact that the different levels exist.&lt;/p&gt;

&lt;p&gt;This is the progression from intern to expert:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpzo9w1u4a3fkik8fs46.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpzo9w1u4a3fkik8fs46.png" alt="A table depicting language comprehension skill by career level" width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a work-in-progress rubric for determining mastery level:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29d2k6dbwo7y787uyo9q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29d2k6dbwo7y787uyo9q.png" alt="Image of a table providing a Language Proficiency Rubric" width="800" height="787"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Achieving a level of mastery in a software language isn’t about ticking off boxes. It's about evolving as craftspersons through progressively deeper and broader understanding of the technologies we use. As we advance, each skill informs and reinforces the next, empowering us to craft code with an ever-growing appreciation for quality and maintainability, ultimately delivering more value to our products and to the developers with whom we collaborate to create that value.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>learning</category>
      <category>management</category>
    </item>
    <item>
      <title>Frontend Challenge: I have *had* it with these motherfriggin' *crickets* on this motherfriggin' *field*!</title>
      <dc:creator>Horace Nelson</dc:creator>
      <pubDate>Wed, 31 Jul 2024 04:21:32 +0000</pubDate>
      <link>https://forem.com/horaceshmorace/fighting-friggin-crickets-for-fun-and-profit-1pn7</link>
      <guid>https://forem.com/horaceshmorace/fighting-friggin-crickets-for-fun-and-profit-1pn7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2024-07-24"&gt;Frontend Challenge v24.07.24&lt;/a&gt;, Glam Up My Markup: Recreation&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;A page for the fictional &lt;strong&gt;New York Recreational Cricket League&lt;/strong&gt;! I wanted to build something whimsical and satirical that [intentionally] misinterprets the theme (since I know nothing about any sport).&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Here's an embed, but no one designs for that form factor, so go ahead and &lt;strong&gt;&lt;a href="https://codepen.io/HoraceShmorace/live/ExBZWEE" rel="noopener noreferrer"&gt;view the full-page version on Codepen&lt;/a&gt;&lt;/strong&gt;.&lt;br&gt;
&lt;iframe height="600" src="https://codepen.io/HoraceShmorace/embed/ExBZWEE?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;Using the provided markup, I drafted a one-page website in vertical slideshow format, with CSS snap points, sticky headers, and weird parallax imagery.&lt;/p&gt;

&lt;p&gt;TBH, I wanted to do this as fast as possible using only skills I could pull from memory. The HTML is unmodified, albeit gently and minimally manipulated via JavaScript (to make all linkable things linkable, like email, phone, and dates). Gratuitous use of flexbox ensued, but it's all pretty standard, if not basic.&lt;/p&gt;

&lt;p&gt;The units are a little sloppy (px instead of rem), but I'm feeling okay about it.&lt;/p&gt;

&lt;p&gt;Images are courtesy of the genders at OpenAI and ChatGPT 4o.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Stay Compliant, Mitigate Risks: Understanding AML and KYC as a technologist</title>
      <dc:creator>Horace Nelson</dc:creator>
      <pubDate>Fri, 19 Jul 2024 02:16:54 +0000</pubDate>
      <link>https://forem.com/horaceshmorace/stay-compliant-mitigate-risks-understanding-amlkyc-as-a-technologist-5go3</link>
      <guid>https://forem.com/horaceshmorace/stay-compliant-mitigate-risks-understanding-amlkyc-as-a-technologist-5go3</guid>
      <description>&lt;p&gt;Effective Anti-Money Laundering (AML) and Know Your Customer (KYC) strategies and processes are essential for financial institutions and other regulated entities. The regulatory landscape is rich with laws and enforcing agencies and organizations. As a software engineer, understanding these laws and requirements is crucial for implementing effectively compliant systems, safeguarding your organization from excessive regulatory auditing and penalization (including potentially steep fines).&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Activities
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Customer Due Diligence
&lt;/h3&gt;

&lt;p&gt;Intended to verify customer identities and assess their risk profiles, Customer Due Diligence (CDD) is critical to effective AML strategies. CDD employs systems and software providing for (1) identity verification and (2) risk assessment, collecting and verifying detailed customer information—ranging from personally identifying details to financial behaviors—to accurately assess risk. Utilizing advanced identity verification techniques like biometric authentication, document verification, and behavioral analytics can ensure with high confidence that a customer is who they claim to be. Then using risk assessment methodologies and algorithms, institutions can categorize clients based on their potential for suspicious activities, allowing high-risk customers to be flagged for further review. Implementing a rigorous CDD practice not only fortifies the trust between institutions and their clients by guaranteeing transparent and secure financial operations, but it also protects against audits by regulatory bodies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Transaction Monitoring
&lt;/h3&gt;

&lt;p&gt;Systems involved in Transaction Monitoring can sift through veritable torrents of financial data in real-time to detect and flag suspicious activities. Beyond just spotting the overt red flags, the right processes enhanced by modern tools can also expose the subtle anomalies that hint at illicit behavior. By leveraging tools that enable and monitor streaming data we can build systems that process massive volumes of data with increasingly greater precision. Implementing sophisticated algorithms and machine learning models accelerates our ability to detect and respond to threats swiftly and effectively.&lt;/p&gt;

&lt;h3&gt;
  
  
  Record-Keeping
&lt;/h3&gt;

&lt;p&gt;Maintain detailed records of transactions and report suspicious activities to authorities. Effective reporting leverages purpose-built providers like &lt;a href="https://www.niceactimize.com/" rel="noopener noreferrer"&gt;Actimize&lt;/a&gt; or NASDAQ’s &lt;a href="https://verafin.com/" rel="noopener noreferrer"&gt;Verafin&lt;/a&gt;, more general logging tools like &lt;a href="https://www.splunk.com/" rel="noopener noreferrer"&gt;Splunk&lt;/a&gt; or &lt;a href="https://www.loggly.com/" rel="noopener noreferrer"&gt;Loggly&lt;/a&gt;, or proprietary systems built on technologies like &lt;a href="https://www.elastic.co/elastic-stack" rel="noopener noreferrer"&gt;&lt;em&gt;ELK&lt;/em&gt;&lt;/a&gt; stacks (Elasticsearch, Logstash, and Kibana) or SQL and NoSQL databases with standard visualization tools like &lt;a href="https://www.tableau.com/" rel="noopener noreferrer"&gt;Tableau&lt;/a&gt;, to facilitate the identification of unusual patterns and ensure compliance with legal requirements, thereby playing a crucial role in the overall AML/KYC framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reporting
&lt;/h3&gt;

&lt;p&gt;Reporting in AML/KYC involves the timely and accurate submission of regulatory filings, such as Suspicious Activity Reports (SARs) and Currency Transaction Reports (CTRs), to relevant authorities. The former (SARS) involves detailing and reporting any illicit or even suspicious activity, including customer information and a narrative explanation. The latter (CTRs) must be filed in response to particularly large transactions (over $10,000 in the U.S.) to assist in detecting and preventing potential money laundering or other financial crimes. &lt;/p&gt;

&lt;h2&gt;
  
  
  Technologies Enhancing AML and KYC
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Machine Learning and AI
&lt;/h3&gt;

&lt;p&gt;Machine learning techniques empower automated systems to detect and learn patterns and anomalies across enormous datasets, optimizing the accuracy of fraud detection. Libraries like &lt;a href="https://www.tensorflow.org/" rel="noopener noreferrer"&gt;TensorFlow&lt;/a&gt; or &lt;a href="https://pytorch.org/" rel="noopener noreferrer"&gt;PyTorch&lt;/a&gt; are extensively used to build predictive models that can identify suspicious transaction patterns, enhancing the effectiveness of your AML/KYC processes. You can find publicly available models on sites like &lt;a href="https://huggingface.co/docs/hub/en/models-the-hub" rel="noopener noreferrer"&gt;Hugging Face Model Hub&lt;/a&gt; and &lt;a href="https://www.kaggle.com/models" rel="noopener noreferrer"&gt;Kaggle&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Blockchain
&lt;/h3&gt;

&lt;p&gt;Blockchain technology allows for indelible public ledgers that ensure the transparency and traceability of transactions, making it harder to disguise illicit activities. Leverage blockchain platforms like &lt;a href="https://ethereum.org/en/developers/" rel="noopener noreferrer"&gt;Ethereum&lt;/a&gt; or &lt;a href="https://stellar.org/learn/smart-contract-basics" rel="noopener noreferrer"&gt;Stellar&lt;/a&gt; smart contracts to enforce immutable transaction records. Smart contracts can even automate compliance checks and reporting, ensuring transactions are in-line with AML/KYC regulations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Analytics
&lt;/h3&gt;

&lt;p&gt;Data analytics tools are essential for assessing customer risk and monitoring transactions. While you can build your own stack using data visualization tools like &lt;a href="https://www.tableau.com/" rel="noopener noreferrer"&gt;Tableau&lt;/a&gt; or &lt;a href="https://www.microsoft.com/en-us/power-platform/products/power-bi" rel="noopener noreferrer"&gt;Power BI&lt;/a&gt; to create dashboards displaying real-time risk assessments and transaction monitoring results, there are a number of SaaS tools that provide easier to implement reporting, like &lt;a href="https://www.niceactimize.com/" rel="noopener noreferrer"&gt;Actimize&lt;/a&gt;, &lt;a href="https://www.sas.com/en_us/software/anti-money-laundering.html" rel="noopener noreferrer"&gt;SAS Anti-Money Laundering&lt;/a&gt;, or &lt;a href="https://www.oracle.com/financial-services/analytics/" rel="noopener noreferrer"&gt;Oracle Financial Services Analytical Applications&lt;/a&gt;. These dashboards will empower compliance officers to quickly identify and respond to suspicious activities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Global and Local Regulatory Bodies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  United States:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;FinCEN (Financial Crimes Enforcement Network):&lt;/strong&gt; A bureau of the U.S. Department of the Treasury that collects and analyzes information about financial transactions to combat money laundering, terrorist financing, and other financial crimes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;OCC (Office of the Comptroller of the Currency):&lt;/strong&gt; Regulates and supervises national banks and federal savings associations to ensure they operate in a safe and sound manner and comply with applicable laws and regulations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;FDIC (Federal Deposit Insurance Corporation):&lt;/strong&gt; Insures deposits at banks and savings associations and examines and supervises financial institutions for safety, soundness, and consumer protection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Federal Reserve:&lt;/strong&gt; Provides central banking services and supervises and regulates banking institutions to ensure safety, soundness, and compliance with applicable laws and regulations.&lt;br&gt;
SEC (Securities and Exchange Commission): Enforces laws against market manipulation and oversees securities exchanges, brokerage firms, and investment advisors.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  International:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;FATF (Financial Action Task Force):&lt;/strong&gt; An intergovernmental organization that develops policies to combat money laundering and terrorist financing. FATF sets international standards and promotes the effective implementation of legal, regulatory, and operational measures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;EU AMLD (European Union Anti-Money Laundering Directives):&lt;/strong&gt; A series of directives issued by the European Union to prevent money laundering and terrorist financing. These directives require member states to implement comprehensive AML/CFT measures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;FINMA (Swiss Financial Market Supervisory Authority):&lt;/strong&gt; Switzerland's regulatory body responsible for financial regulation, including AML/CFT compliance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;APRA (Australian Prudential Regulation Authority):&lt;/strong&gt; Regulates and supervises financial institutions in Australia to ensure financial stability and compliance with AML/CFT regulations.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Data Privacy
&lt;/h2&gt;

&lt;p&gt;Data privacy laws govern the collection, use, and protection of personal data, especially Personally Identifiable Information (PII). Compliance with these laws ensures that financial institutions handle sensitive customer information securely and transparently while conducting core AML/KYC activities. Balancing AML/KYC requirements with data privacy regulations helps protect individual rights and maintain trust while meeting legal obligations. The laws regarding data privacy may change according to the geographic location in which business is being conducted. Key data privacy laws include:&lt;/p&gt;

&lt;h3&gt;
  
  
  United States:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CCPA (California Consumer Privacy Act):&lt;/strong&gt; Grants California residents rights regarding their personal data, including the right to know what data is collected, the right to delete personal data, and the right to opt-out of data sale.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CPRA (California Privacy Rights Act):&lt;/strong&gt; Expands the CCPA by adding new privacy rights for California residents and creating the California Privacy Protection Agency for enforcement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NY SHIELD Act (New York Stop Hacks and Improve Electronic Data Security Act):&lt;/strong&gt; Imposes data security requirements on businesses to protect New York residents' private information and mandates breach notification procedures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Virginia CDPA (Consumer Data Protection Act):&lt;/strong&gt; Provides Virginia residents with rights over their personal data and imposes obligations on businesses to ensure data protection and privacy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Colorado Privacy Act (CPA):&lt;/strong&gt; Grants Colorado residents similar data rights as those in CCPA and imposes requirements on businesses regarding data handling and protection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Utah Consumer Privacy Act (UCPA):&lt;/strong&gt; Provides Utah residents with data rights and imposes obligations on businesses to handle personal data responsibly.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  International:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GDPR (General Data Protection Regulation):&lt;/strong&gt; An EU regulation that mandates strict data protection and privacy measures for individuals within the European Union. It grants individuals rights over their personal data and imposes significant obligations on organizations to ensure data protection and privacy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;LGPD (Lei Geral de Proteção de Dados):&lt;/strong&gt; Brazil's data protection law that regulates the processing of personal data and grants individuals rights over their data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PIPEDA (Personal Information Protection and Electronic Documents Act):&lt;/strong&gt; Canada's federal privacy law that sets rules for how businesses must handle personal information during commercial activities.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Integrating AML and KYC Solutions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  System Integration
&lt;/h3&gt;

&lt;p&gt;Seamless integration of AML and KYC solutions with existing systems is critical for effective automation. Use middleware platforms like &lt;a href="https://www.mulesoft.com/" rel="noopener noreferrer"&gt;MuleSoft&lt;/a&gt; (commercial) or &lt;a href="https://camel.apache.org/" rel="noopener noreferrer"&gt;Apache Camel&lt;/a&gt; (open source) to facilitate data exchange or deeper integrations between many disparate systems. Integration testing to ensure faithful and ongoing interoperability between both proprietary and 3rd-party systems should be rigorous and will ensure that a misconfiguration, a poorly architected subsystem, or a bit of rogue code doesn’t threaten your compliance and expose you or your customer to risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  APIs and Interoperability
&lt;/h3&gt;

&lt;p&gt;APIs are often the key to enabling interoperability between AML/KYC solutions and other systems. Design APIs following RESTful principles—using libraries like &lt;a href="https://expressjs.com/" rel="noopener noreferrer"&gt;ExpressJs&lt;/a&gt; (JavaScript), &lt;a href="https://flask.palletsprojects.com/en/3.0.x/" rel="noopener noreferrer"&gt;Flask&lt;/a&gt; (Python), or &lt;a href="https://actix.rs/" rel="noopener noreferrer"&gt;Actix Web&lt;/a&gt; (Rust)—ensuring they are stateless and support the JSON/XML formats expected by most systems. Use &lt;a href="https://swagger.io/" rel="noopener noreferrer"&gt;Swagger&lt;/a&gt; to generate detailed documentation for RESTful APIs to facilitate integration and ensure your APIs are easily consumable by other systems. If you’re building GraphQL APIs, using tools like &lt;a href="https://www.apollographql.com/docs/apollo-server/" rel="noopener noreferrer"&gt;Apollo Server&lt;/a&gt;, &lt;a href="https://www.prisma.io/graphql" rel="noopener noreferrer"&gt;Prisma&lt;/a&gt;, or &lt;a href="https://graphene-python.org/" rel="noopener noreferrer"&gt;Graphene&lt;/a&gt; will allow for self-documenting APIs (through GraphQL introspection).&lt;/p&gt;

&lt;h3&gt;
  
  
  Scalability and Performance
&lt;/h3&gt;

&lt;p&gt;Ensure that the processing and throughput requirements of your AML/KYC solutions can handle appropriately sized volumes of data and transactions for your organization’s needs efficiently. A microservices architecture using tools like &lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or &lt;a href="https://kubernetes.io/" rel="noopener noreferrer"&gt;Kubernetes &lt;/a&gt; for proprietary systems can help to ensure scalability, allowing you to scale individual components as needed.  Exploit load balancing and caching mechanisms to improve performance and ensure your system can handle peak loads without degradation in service. Taking it a step further, serverless technologies like &lt;a href="https://aws.amazon.com/lambda/" rel="noopener noreferrer"&gt;AWS Lambda&lt;/a&gt; and &lt;a href="https://cloud.google.com/functions" rel="noopener noreferrer"&gt;Google Cloud Functions&lt;/a&gt; can provide an architecture that scales automatically, and the &lt;em&gt;pay-only-for-what-you-use&lt;/em&gt; fee structures are optimally cost effective.&lt;/p&gt;

&lt;h3&gt;
  
  
  Continuous Optimization
&lt;/h3&gt;

&lt;p&gt;Regularly update AML/KYC processes to incorporate advancements in technology and changes in regulations. Set up a feedback loop involving compliance officers, software engineers, and auditors to review and improve AML/KYC systems continuously. Stay informed about regulatory changes and emerging technologies to keep your systems up-to-date and effective.&lt;/p&gt;

&lt;h2&gt;
  
  
  It’s a deep topic
&lt;/h2&gt;

&lt;p&gt;As a software engineer, mastering the specifics of AML and KYC is essential for developing compliant and efficient systems. By focusing on key principles, leveraging advanced technologies, and ensuring seamless integration, you can contribute significantly to the regulatory performance of your organization’s financial systems. Stay informed about regulatory changes and continuously seek to aggressively improve your AML/KYC posture to stay ahead in the ever-evolving landscape of financial compliance.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>compliance</category>
      <category>finance</category>
      <category>defi</category>
    </item>
    <item>
      <title>The Secret to Getting Ahead: the Right Things in the Right Proportions</title>
      <dc:creator>Horace Nelson</dc:creator>
      <pubDate>Wed, 17 Jul 2024 16:37:00 +0000</pubDate>
      <link>https://forem.com/horaceshmorace/the-secret-to-getting-ahead-or-promoted-is-not-just-about-doing-the-right-things-but-doing-them-in-the-right-proportions-j6c</link>
      <guid>https://forem.com/horaceshmorace/the-secret-to-getting-ahead-or-promoted-is-not-just-about-doing-the-right-things-but-doing-them-in-the-right-proportions-j6c</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxrur852msrktfpl1scw4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxrur852msrktfpl1scw4.png" alt="The Four Altitudes" width="800" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Success isn't just about doing more and moving faster. Providing optimal value in your role is about focusing your time and effort on the right things in the right amounts for that role. This means operating effectively within different contexts. I like to visualize these contexts as "altitudes'' that we need to shift between throughout our day. From lowest-level to highest: the technical, the tactical, the strategic, and the political. These altitudes are not skill sets, but contexts to which we allocate our time and effort, and understanding the proportions in which we should focus on each one is key to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Providing the exact right value at your organizational or career level.&lt;/li&gt;
&lt;li&gt;Understanding the exact right value to expect from subordinates, and to coach them to achieve it.&lt;/li&gt;
&lt;li&gt;Understanding how to show that you’re ready for a promotion, and how your role changes when you do.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Technical
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpjtwyepsupz3mu5w7zz1.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpjtwyepsupz3mu5w7zz1.webp" alt="The Technical Altitude" width="800" height="261"&gt;&lt;/a&gt;&lt;br&gt;
At the lowest level, the Technical, we are performing hands-on tasks. This should not be confused with “tech” or “technology,” but rather should be associated with working to generate some sort of deliverable, whether it be a project requirements document (PRD) for a Product Manager, an organization roadmap for a Program Manager, or a Software Developer coding a new feature. All disciplines have a “technical” level. This altitude is about output, or creating something of value to the delivery process.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tactical
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flvcm25r45wexncte6d9z.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flvcm25r45wexncte6d9z.webp" alt="The Tactical Altitude" width="800" height="266"&gt;&lt;/a&gt;&lt;br&gt;
The next higher level, the Tactical, concerns itself with the orchestration of one or more work streams (e.g., one or more people working on an effort) and their dependencies. In software development, this will involve everything from refining a backlog, planning and executing a sprint, various levels of quality testing, all the way to deploying a new release to the user. In book publishing, this might involve editing a manuscript, typesetting, cover design, all the way to distribution. This altitude is about delivery, or coordinating collective processes and resources to optimally deliver value.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Strategic
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3y84umt9t61fwj2ao2b7.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3y84umt9t61fwj2ao2b7.webp" alt="The Strategic Altitude" width="800" height="266"&gt;&lt;/a&gt;&lt;br&gt;
At the penultimate level, the Strategic, we systematically determine goals and develop comprehensive plans aligned with those goals. While the lower two levels are about how and the “why of the how,” the Strategic is about what and the “why of the what.” That “why” will usually include business analytics, marketing research, user experience research, and the well-informed assumptions born of deep experience. This altitude is about achievement, or determining the optimal path to achieving business objectives.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Political
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6cci45fgdzshkdnn0egh.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6cci45fgdzshkdnn0egh.webp" alt="The Political Altitude" width="800" height="252"&gt;&lt;/a&gt;&lt;br&gt;
It's a professionally immature attitude to "hate corporate politics," associating it only with its worst expression: some selfish and underhanded games we apparently must play in order to get ahead. Intention is important, and at its best, the Political is about an appreciation that we all have our own goals and we all interpret corporate goals according to our own biases, and it behooves us to align our goals with those of others in a way that benefits us all, especially within an organization. This altitude is about synergy, or building relationships through respect, establishing common ground, and working toward greater benefit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Changing Altitudes
&lt;/h3&gt;

&lt;p&gt;The different organizational levels (or ranks) within the same discipline should allocate their time across these four altitudes according to their responsibilities and expertise. For instance, a senior software developer might spend most of their time on technical tasks while contributing a finite amount of time to tactical planning (typically through Scrum events), but will engage in strategic planning and political networking minimally. Conversely, a CTO will primarily operate at the strategic and political levels, rarely (if ever in an enterprise environment) dropping into the tactical or technical.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmpecpgf62e4lv0w2cjmq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmpecpgf62e4lv0w2cjmq.png" alt="The proportions of altitudes by organizational level" width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, not everyone will agree with the distributions here. All maps are generalizations of the terrain, most are subjective, and by their very nature none are perfect. As with recipes, you should &lt;em&gt;salt and pepper to taste&lt;/em&gt;. What's important is that there &lt;strong&gt;&lt;em&gt;are&lt;/em&gt;&lt;/strong&gt; distributions. Different roles need to operate more or less in different contexts. Leaders, in particular, typically have to learn to adeptly change altitudes in order to “face the fight where it happens,” context switching as needed. This is particularly true in smaller companies or startups where senior leadership might need to be more hands-on, or in enterprises in which a leader might need to cover for the lack of competence of more junior leaders. A leader might have to dive into the tactical and even technical details just to get sh… things done. For instance, a startup’s technical founder/co-founder might distribute her time initially with focus primarily on the technical and strategic altitudes. Or a VP with an underperforming Director might need to descend into the Tactical a bit more often to mitigate missing competencies and coach the Director and his direct reports in proper delivery.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3euof38bhliy0m03dtw7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3euof38bhliy0m03dtw7.png" alt="Alternate roles" width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  You’re the pilot.
&lt;/h3&gt;

&lt;p&gt;Mastering the art of operating at different altitudes and understanding the degree to which you dedicate your time and energies to each is key to maximizing your value to your superiors, your organization, and your users, customers, or clients. By understanding when and how to shift between technical, tactical, strategic, and political levels, you can optimize your performance and lead your team more effectively. Embrace the fluidity required to navigate these altitudes, and you can not only elevate your own career but also contribute to the overall success of your organization, especially those you lead. Pull up when you can, dive when you need, and don’t forget to "&lt;em&gt;kick the tires and light the fires&lt;/em&gt;".&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fltfgkzekor42exm1zm61.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fltfgkzekor42exm1zm61.webp" alt="Kick the tires and light the fires" width="540" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>software</category>
      <category>leadership</category>
      <category>development</category>
    </item>
    <item>
      <title>The Power of Intentional (and Aggressive) Optimization</title>
      <dc:creator>Horace Nelson</dc:creator>
      <pubDate>Fri, 10 May 2024 21:46:07 +0000</pubDate>
      <link>https://forem.com/horaceshmorace/building-a-better-product-is-totally-so-super-easy-2h7b</link>
      <guid>https://forem.com/horaceshmorace/building-a-better-product-is-totally-so-super-easy-2h7b</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvi3wxusqimiyhw7sp1fh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvi3wxusqimiyhw7sp1fh.png" alt="Aggressive Optimization" width="711" height="730"&gt;&lt;/a&gt;&lt;br&gt;
If you're not using analytics to maximize user acquisition, engagement, and technical performance, your progress is haphazard. Web analytics aren't just data points that peak interest without inspiring action; they must drive intentional product improvements in each SDLC iteration. The focus is not only on expanding your featureset but also on aggressively optimizing your product, because continually introducing new features without strengthening implemented ones just constructs a house of cards. Define meaningful KPIs, establish benchmarks, and schedule regular analyses. Use insights from each change to prescribe change in the next iteration. Treating analytics as essential to iterative and aggressive optimization ensures your web applications are robust and aligned with maximal business success.&lt;/p&gt;

</description>
      <category>product</category>
      <category>software</category>
      <category>analysis</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Scrum was a revolution. Is it time for another?</title>
      <dc:creator>Horace Nelson</dc:creator>
      <pubDate>Tue, 07 May 2024 14:29:32 +0000</pubDate>
      <link>https://forem.com/horaceshmorace/scrum-was-a-revolution-is-it-time-for-another-20g2</link>
      <guid>https://forem.com/horaceshmorace/scrum-was-a-revolution-is-it-time-for-another-20g2</guid>
      <description>&lt;p&gt;Scrum was an indisputable game-changer in the world of software product development. Its iterative approach has long empowered teams to attack projects in manageable, time-boxed chunks, adapting on the fly and improving the process as they go. And yet, industry lore is littered with anecdotes of dysfunctional Scrum teams. Scrum’s prized “agility” and self-organized teams generally require a prohibitively high caliber of discipline and communication across team members and organizations to truly access its many storied benefits. In an industry in which such skills and qualities vary wildly across individuals, are Scrum’s promises too often just too hard to collect on?&lt;/p&gt;

&lt;h2&gt;
  
  
  Scrum just cares about one thing.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29eajn23i2aio7ovk989.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29eajn23i2aio7ovk989.png" alt="Gears and dials" width="800" height="417"&gt;&lt;/a&gt;&lt;br&gt;
Scrum isn’t trying to solve all problems, just one: maximizing productivity (a.k.a., velocity). There are plenty of other considerations that Scrum intentionally leaves up to the implementer. Such activities can occur during the Sprint (while not being defined by Scrum) — like quality assurance — or can occur entirely outside of the Scrum workflow — like business metrics analysis. Scrum is, by design, single-minded.&lt;/p&gt;

&lt;p&gt;The issue lies in how Scrum prescribes distinct roles tailored specifically for its single-minded mission. Over time, these Scrum-specific roles have been adopted as standardized organizational positions, despite not being designed for such broad application. We’ve adopted a one-size-fits-all solution with defined roles that are, by their very definitions, primarily focused on delivery — ignoring other crucial aspects like engagement, correctness, performance, and financial KPIs. Consequently, our organizational structures are often built around these roles, which is problematic. The official definitions of Scrum roles are insufficient for broader organizational purposes, often leaving individuals in these roles unsure of how to bridge the gaps in a Scrum-compatible way. Perhaps what’s important is not the Scrum roles themselves, but the activities for which they’re accountable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A cacophony of collaboration.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31u010b2t4jlid8yxisd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31u010b2t4jlid8yxisd.png" alt="A group of professionals working in mayhem in a disaster of an office" width="800" height="406"&gt;&lt;/a&gt;&lt;br&gt;
Additionally, Scrum’s emphasis on self-organizing teams is often highlighted as a major advantage, suggesting that teams who have their decision making power more distributed will operate more effectively. However, the effectiveness of this approach is highly debatable. It can be argued that without the clarity and direction provided by traditional leadership roles (most of which still exist anyway, causing even more confusion), self-organizing teams can struggle. One experienced leader can make faster, better decisions than “decisioning by committee,” and such leaders are ready to go on-hire, having already gone through their learning curve. Most importantly, if I learned anything from my time in the military it’s that delegation is more efficient and effective than collaboration (and consciously valuing delegation does not preclude abundant collaboration). While collaboration gives people the warm fuzzies, it requires deliberation and buy-in. Delegation gets shit done.&lt;/p&gt;

&lt;p&gt;Not to mention that, in practice, self-organization is so dramatically difficult an ideal to achieve that many teams tend to just iteratively fumble their commitments and/or the quality of their deliverables. Self-organization for a team requires a lot of a very particular level of knowledge, self-discipline, and the assertiveness necessary to hold each other accountable. Either that or an enormous amount of specially trained staff (Scrum Masters and Coaches) to train teams on and reinforce the virtues of self-organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  A strong tool might not be the best tool.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw7zvapmzo58m020e663w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw7zvapmzo58m020e663w.png" alt="A hammer and a screw" width="800" height="344"&gt;&lt;/a&gt;&lt;br&gt;
It has been more than three decades since Scrum was first introduced. Yet, despite the array of organizations and committees involved, its core definition has remained largely in the hands of the same select few. For an industry that openly lauds innovation, we can be absurdly dogmatic. Even the most successful and historically useful solution isn’t necessarily right for every team or project.&lt;/p&gt;

&lt;p&gt;Scrum was a revolution. Should it now, itself, be overthrown? Of course not. It’s a heavy weight champ, and as of now there are still no real contenders. But perhaps now is the time to critically evaluate whether its once-revolutionary principles still merit their unchallenged standing, or if we are ready to develop new paradigms of productivity and leadership.&lt;/p&gt;

</description>
      <category>agile</category>
      <category>scrum</category>
      <category>software</category>
      <category>engineering</category>
    </item>
    <item>
      <title>The First 30 Days: A short primer for engineering leaders joining a new org</title>
      <dc:creator>Horace Nelson</dc:creator>
      <pubDate>Mon, 29 Apr 2024 23:59:47 +0000</pubDate>
      <link>https://forem.com/horaceshmorace/the-first-30-days-a-short-primer-for-engineering-leaders-joining-a-new-org-39b5</link>
      <guid>https://forem.com/horaceshmorace/the-first-30-days-a-short-primer-for-engineering-leaders-joining-a-new-org-39b5</guid>
      <description>&lt;p&gt;An incoming leader needs to quickly gain an intimate understanding of how effectively &lt;strong&gt;people&lt;/strong&gt; are producing and being developed, the efficacy and adoption of the &lt;strong&gt;processes&lt;/strong&gt; being employed, and the attention to true quality that is being paid to the &lt;strong&gt;projects&lt;/strong&gt; (performance, maintainability, stability, etc.).&lt;/p&gt;

&lt;p&gt;Joining a new engineering organization as their leader will generally involve the challenge (and ultimate goal) of elevating variably performing teams to become consistently high-performing units that effectively meet both technical and business objectives through mindful yet aggressive &lt;strong&gt;realignment&lt;/strong&gt; and &lt;strong&gt;optimization&lt;/strong&gt;. However, one must first figure out what's working, what isn’t, and what should be done about it. The answer to these questions will feed the development of a &lt;em&gt;comprehensive&lt;/em&gt; Transformation Plan that delineates a holistic approach to achieve peak optimization across the team’s people, processes, and projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  The First 30 Days
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Validate what the Team is doing right:&lt;/strong&gt; Assess and affirm the strengths of the current engineering practices, codifying the team’s effective strategies, tactics, and achievements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Identify opportunities for optimization:&lt;/strong&gt; Pinpoint areas where technical, operational, or organizational changes can lead to enhanced performance and alignment within and across your teams. These adjustments may range from significant overhauls to minute refinements but each will contribute incrementally to overall effectiveness. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Develop a Transformation Plan to optimize people, processes, and projects:&lt;/strong&gt; Include recommendations to reorganize the team or greater organization, coaching plans for individuals, and process corrections or improvements, all of which will foster a robust product engineering culture. Ensure the plan includes clear milestones aligned with the organization’s broader business goals.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach ensures a comprehensive understanding of the entire state of the software development lifecycle (SDLC) being inherited by conducting 1:1 meetings, assessing performance reviews, observing Scrum ceremonies and supporting meetings, inspecting the team’s artifacts (like code repositories, Scrum boards, product requirements, design specifications, documentation, DevOps pipelines, automation scripts, and supporting organizational policies), and if available, analyzing metrics from tools like Pluralsight Flow, which analyze IC behavior in Git, Github, and Jira to provide actionable insights.&lt;/p&gt;

&lt;p&gt;The aim is to create a plan in which targeted and tailored transformations lead to significant, sustainable enhancements in time to market, product quality, and personal agency across the team(s).&lt;/p&gt;

&lt;h2&gt;
  
  
  Some Prerequisites
&lt;/h2&gt;

&lt;p&gt;The ability to correctly observe and analyze existing behaviors and artifacts, and then develop a plan for positive transformation involves several skills that you’ll need to acquire or strengthen as an engineering leader. These include knowing and understanding:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;How to identify broken processes within your project management workflow (likely Agile Scrum these days) and how to fix them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to select the appropriate technical solutions to build your stack, including the right tooling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DevOps principles like CI/CD strategies, serverless vs containerization, and infrastructure-as-code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to evaluate talent, identify opportunities for growth, and draft and follow a coaching plan.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Other skills, like balancing (A) engineering skill sets, (B) perceived career paths, and even (C) personal dynamics within the team.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How do I do any of that?
&lt;/h2&gt;

&lt;p&gt;That's a question the answer to which could fill a book. Follow me for upcoming posts in which I’ll detail many one of these key skills for engineering leaders, as well as what goes into developing a Comprehensive Transformation Plan.&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>leadership</category>
      <category>newrole</category>
    </item>
    <item>
      <title>Generalized Software Engineering Ranks and Progression Tracks</title>
      <dc:creator>Horace Nelson</dc:creator>
      <pubDate>Mon, 29 Apr 2024 16:17:00 +0000</pubDate>
      <link>https://forem.com/horaceshmorace/generalized-software-engineering-ranks-and-progression-tracks-f3h</link>
      <guid>https://forem.com/horaceshmorace/generalized-software-engineering-ranks-and-progression-tracks-f3h</guid>
      <description>&lt;p&gt;I get A LOT of messages from recruiters for roles that are too junior. Understanding the career progression in software engineering can help you make more informed decisions about which job opportunities align with candidates' goals and aspirations. I threw together this [hopefully] helpful reference diagram of ranks and promotion tracks in the industry. It may be extremely generalized--and convention is completely ignored in the banking industry, where you'll find roles like "Senior Software Engineer, VP"--but it serves as a a fairly standard and useful starting point for anyone navigating the world of software engineering career paths.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpav1im4pugphfcaz78cv.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpav1im4pugphfcaz78cv.jpeg" alt="Generalized Software Engineering Ranks and Progression Tracks" width="800" height="618"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s a PDF version: &lt;a href="https://drive.google.com/file/d/16k9hz_sY7ZJ1DKE3LPEWzSuw60Y2v4BQ/view?usp=drive_link" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/16k9hz_sY7ZJ1DKE3LPEWzSuw60Y2v4BQ/view?usp=drive_link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>careerprogression</category>
      <category>recruiting</category>
    </item>
    <item>
      <title>A Simple Hack to Supercharge Your Skills and Your Portfolio</title>
      <dc:creator>Horace Nelson</dc:creator>
      <pubDate>Thu, 15 Jul 2021 16:49:19 +0000</pubDate>
      <link>https://forem.com/horaceshmorace/a-simple-hack-to-supercharge-your-skills-and-your-portfolio-2b48</link>
      <guid>https://forem.com/horaceshmorace/a-simple-hack-to-supercharge-your-skills-and-your-portfolio-2b48</guid>
      <description>&lt;p&gt;Yes, that title is totally click bait, but it's also totally true. I'm about to drop the absolute most effective way to both &lt;strong&gt;acquire&lt;/strong&gt; and &lt;strong&gt;showcase&lt;/strong&gt; developer skills. No other method or methodology even comes close. Here's my secret:&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop attempting big, personal projects. Do a ton of &lt;em&gt;micro-projects&lt;/em&gt;.
&lt;/h2&gt;

&lt;p&gt;Not convinced? Here are 3 simple facts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Big projects waste your time&lt;/strong&gt;&lt;br&gt;
It sucks to admit, but you'll probably &lt;strong&gt;&lt;em&gt;never&lt;/em&gt;&lt;/strong&gt; finish that big personal software project. While it's certainly possible and some devs certainly do it, statistically that probably ain't you. Life is rather distracting, and we devs always seem to run out of &lt;em&gt;steam&lt;/em&gt; on such things. I have about 30 or so private Github repos of big ideas that only made it 5-50% of the way. Many of them from years ago, and some over a decade old. Let's be realistic and honest with ourselves. Smaller projects—those that take a few hours to a few weeks—are easy to follow through on, and as a bonus can more often give you that gratification of having created (and finished) something.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Big projects are worse for your portfolio&lt;/strong&gt; &lt;br&gt;
You don't need a portfolio of big projects in order to show off your skills. In fact, they are really terrible for that. Other people (like prospective employers) might have to really dig into the code of big projects to reverse engineer what skills are demonstrated, and they'll never discover all of the ones you really want to showcase. Smaller projects are easier for others to consume and comprehend, and allow you to demonstrate specific skills very clearly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Big projects make you learn slower&lt;/strong&gt;&lt;br&gt;
Big projects bog you down in boiler plate and stuff you already know. That stuff is time consuming and tedious, and trying to plug-in new tech that you don't quite understand can result in too many moving pieces to really grok those new concepts. Smaller projects let you focus on specific technologies and techniques that you want to acquire or better understand.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Micro-projects
&lt;/h2&gt;

&lt;p&gt;Micro-projects allow you to acquire skills and build a showcase of those skills very quickly. The key here—and maybe, yeah, the &lt;em&gt;secret&lt;/em&gt;—is to pick tiny, manageable projects that focus on a discrete feature scope. A video carousel in React. A page scraping service in Go. A CSS demo of box shadows. Choose projects that you can easily complete in a week, a few days, or even a few hours.&lt;/p&gt;

&lt;p&gt;In fact, I'd recommend trying &lt;em&gt;mini&lt;/em&gt;, &lt;em&gt;micro&lt;/em&gt;, &lt;strong&gt;&lt;em&gt;and&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;nano&lt;/em&gt; projects. What tf is the difference here? In the software world, examples are always useful. Here are some such projects I've worked on recently that illustrate this difference while also allowing me to shamelessly plug some of my own micro-projects:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://codepen.io/HoraceShmorace/pen/xxRjoEe" rel="noopener noreferrer"&gt;Doubly-Linked List&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;size: nano&lt;br&gt;
time to complete: &amp;lt; 1 hour&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No one should ever need a Linked or Doubly-Linked List in JavaScript, but it's the kind of exercise that &lt;em&gt;always&lt;/em&gt; comes up in job interviews. I decided to whip up proof that I know what these things are, which took all of 40 minutes, tops.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://codepen.io/HoraceShmorace/pen/bZXeKd" rel="noopener noreferrer"&gt;Side Scroller w/ Sticky Headers + Snap Points&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;size: nano&lt;br&gt;
time to complete: 2 hours&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An example "widget" in HTML and CSS (no JS) that scrolls horizontally through slides with sticky vertical headers and snap points. I know... what? Click the link to find out. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/horaceshmorace/creating-a-full-featured-stopwatch-in-react-js-and-css-35a0"&gt;React Stopwatch&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;size: micro&lt;br&gt;
time to complete: 3 days&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After completing a coding challenge to create a clock in vanilla JS and CSS—which I did in record time (ha, pun!)—I was inspired to try an interactive stopwatch in React and SCSS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://codepen.io/HoraceShmorace/pen/ewNXyr" rel="noopener noreferrer"&gt;Particle Soup&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;size: micro&lt;br&gt;
time to complete: 3-4 days&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Having trouble coming up with a project idea? Find someone else's project that inspires you, fork it, and make it better. That's what I did when I took this vanilla JS project on Codepen and made it into a streamlined micro React app.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://dev.to/horaceshmorace/an-open-source-and-completely-serverless-image-resizing-service-in-aws-589b"&gt;Image Flex&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;size: mini&lt;br&gt;
time to complete: 1 week&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A robust, secure, and easily deployable image resizing service that resizes, optimizes, and caches images on "the edge," on the fly, built on AWS Serverless technologies.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Very few of us have the actual time to do anything substantial on the side. What we &lt;em&gt;can&lt;/em&gt; do is reduce the size and scope of a project down to something manageable—&lt;strong&gt;&lt;em&gt;micro&lt;/em&gt;&lt;/strong&gt;—while still creating something of value, and even worthy of acclaim. I'll play myself out with a list of free "code playgrounds" (mostly  front-end and Node.js) to create and run your mini, micro, and nano projects:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://codepen.io/HoraceShmorace" rel="noopener noreferrer"&gt;Codepen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://glitch.com/" rel="noopener noreferrer"&gt;Glitch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jsfiddle.net/" rel="noopener noreferrer"&gt;JSFiddle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jsbin.com/" rel="noopener noreferrer"&gt;JSBin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://plnkr.co/" rel="noopener noreferrer"&gt;Plunkr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://replit.com/" rel="noopener noreferrer"&gt;Replit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://runkit.com/HoraceShmorace" rel="noopener noreferrer"&gt;Runkit&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Of course, for open source, share your code (and follow me) on &lt;a href="https://github.com/HoraceShmorace" rel="noopener noreferrer"&gt;Github&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>microprojects</category>
      <category>skills</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
