&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Essays on Jerry Mannel Reghunadh</title>
    <link>https://jerrymannel.me/essays/</link>
    <description>Essays on engineering judgment — tradeoffs, decisions, and the calls that don&#39;t have a right answer.</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <atom:link href="https://jerrymannel.me/essays/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>AI Makes Development Easy, But Engineering Is Still Hard</title>
      <link>https://jerrymannel.me/writing/2026/software-engineering-is-hard/</link>
      <pubDate>Wed, 20 May 2026 21:07:00 -0500</pubDate>
      <guid>https://jerrymannel.me/writing/2026/software-engineering-is-hard/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Software engineering is hard.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Even with AI, it is hard.&lt;/p&gt;
&lt;p&gt;But software development? That is becoming easy.&lt;/p&gt;
&lt;p&gt;With today&amp;rsquo;s agentic tools, applications we once shelved for lack of time can now be built in an afternoon. &amp;ldquo;Vibe-coding&amp;rdquo; a frontend and wiring it up to a backend takes hours. Your friends and team will try it, and they won’t care if it crashes, leaks data, or looks unpolished. Kudos to everyone making their ideas a reality. It’s a great start.&lt;/p&gt;
&lt;p&gt;But let&amp;rsquo;s not confuse &lt;em&gt;software development&lt;/em&gt; with &lt;strong&gt;software engineering&lt;/strong&gt;. What you have built is a working prototype. At best a high school project.&lt;/p&gt;
&lt;p&gt;Software engineering is hard because of what comes after the prototype. The engineering feat begins when you have to solve for:&lt;/p&gt;
&lt;p&gt;• multi-tenancy and access control&lt;br&gt;
• making it globally available&lt;br&gt;
• data security - in transit and at rest&lt;br&gt;
• packaging, deployment, monitoring&lt;/p&gt;
&lt;p&gt;AI can suggest architectures, but the right decision doesn&amp;rsquo;t come from a prompt. It comes from intuition and judgement.&lt;/p&gt;
&lt;p&gt;The intuition and judgement that you honed by trial and error. It comes from the scars of tough lessons. It comes from the baggy eyes from late-night debugging sessions. It comes from the euphoria of fixing a critical bug.&lt;/p&gt;
&lt;p&gt;AI can assist in ideation. It can debate with you on whether you should use a document DB or a relational DB (btw, the answer is document DB 99% of the time 😀). But choosing the path forward, that requires weighing in the pros and the cons of each option.&lt;/p&gt;
&lt;p&gt;You have to think about the user personas and the context of the business. You have to think about the data you are processing and the SLAs you need to target. You have to think about the business impact of each option. That translation of business reality into technical architecture is where the engineering happens.&lt;/p&gt;
&lt;p&gt;With AI, generating a feature takes 10 minutes. Deciding whether that feature should exist is the hard part. The prompt is easy; the judgement is hard.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sequoiacap.com/people/julien-bek/&#34;&gt;Julien Bek&lt;/a&gt;, a partner at &lt;a href=&#34;https://sequoiacap.com/&#34;&gt;Sequoia Capital&lt;/a&gt;, noted in his article &amp;ldquo;Services: The New Software&amp;rdquo; &lt;a href=&#34;https://sequoiacap.com/article/services-the-new-software/&#34;&gt;https://sequoiacap.com/article/services-the-new-software/&lt;/a&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Writing code is mostly intelligence. Knowing what to build next is judgement.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This isn&amp;rsquo;t a comforting claim that engineering roles are completely safe from automation.&lt;/p&gt;
&lt;p&gt;They aren&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Bek also points out that as AI systems accumulate proprietary data on what good judgement looks like, the frontier will shift. The time and effort spent on basic code generation is collapsing, and it will continue to do so.&lt;/p&gt;
&lt;p&gt;The only logical response is to intentionally build your judgement. You need to understand the patterns, signals, and architectural trade-offs. Use AI to speed up your execution and expose you to patterns you might miss, but take the time to reflect on why a solution works.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d rather see 20 unfinished, highly experimental projects on your GitHub than one perfectly vibe-coded app that you don&amp;rsquo;t actually understand.&lt;/p&gt;
&lt;p&gt;Build your intuition. Focus on judgement.&lt;/p&gt;
&lt;p&gt;Show off your scars!&lt;/p&gt;
&lt;p&gt;✌🏽&lt;/p&gt;
&lt;div class=&#34;signoff&#34;&gt;&lt;span&gt;./J&lt;/span&gt;&lt;/div&gt;

</description>
    </item>
    <item>
      <title>From &#34;Half-Stack&#34; to Full-Value: Owning Your Deployment Pipeline</title>
      <link>https://jerrymannel.me/writing/2025/half-stack-engineer/</link>
      <pubDate>Thu, 02 Oct 2025 16:41:10 -0500</pubDate>
      <guid>https://jerrymannel.me/writing/2025/half-stack-engineer/</guid>
      <description>&lt;figure class=&#34;align-center &#34;&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;slide-01.png#center&#34;
         alt=&#34;Title slide: The Modern Full-Stack — Owning Your Deployment Pipeline&#34;/&gt; 
&lt;/figure&gt;

&lt;p&gt;I recently had the pleasure of speaking at the &lt;a href=&#34;https://www.commityourcode.com/&#34;&gt;Commit Your Code&lt;/a&gt; conference, where I presented my talk, &lt;strong&gt;&amp;ldquo;The Modern Full-Stack: Owning Your Deployment Pipeline.&amp;rdquo;&lt;/strong&gt; The core idea was to challenge our definition of what it means to be a &amp;ldquo;full-stack&amp;rdquo; developer in today&amp;rsquo;s world.&lt;/p&gt;
&lt;p&gt;For too long, we&amp;rsquo;ve defined full-stack as proficiency in front-end and back-end development. But I&amp;rsquo;d argue that this leaves a massive gap. If you write code but have no visibility or ownership over how it gets to users, you are not full-stack, you are &lt;strong&gt;&amp;ldquo;half-stack&amp;rdquo;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The modern full-stack engineer needs to be concerned with &lt;strong&gt;integration, deployment, and infrastructure&lt;/strong&gt;. When we own the pipeline, we build better software and deliver value more efficiently.&lt;/p&gt;
&lt;h2 id=&#34;whats-holding-us-back&#34;&gt;What&amp;rsquo;s Holding Us Back?&lt;/h2&gt;
&lt;figure class=&#34;align-center &#34;&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;slide-08.png#center&#34;
         alt=&#34;What&amp;#39;s Holding Us Back?&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;What&amp;rsquo;s Holding Us Back?&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;If owning the pipeline is so important, why isn&amp;rsquo;t everyone doing it? It usually boils down to fear and organizational silos.&lt;/p&gt;
&lt;h3 id=&#34;fear-of-the-unknown&#34;&gt;Fear of the Unknown&lt;/h3&gt;
&lt;p&gt;Many developers are comfortable in their IDEs, but the idea of a &amp;ldquo;terminal&amp;rdquo; can be intimidating. We&amp;rsquo;re dealing with configurations, not just code. This leads to crippling &amp;ldquo;what-if&amp;rdquo; scenarios: -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;What if I break production?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;What if I take down the whole system?&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;organizational-silos&#34;&gt;Organizational Silos&lt;/h3&gt;
&lt;p&gt;In many companies, there&amp;rsquo;s a cultural barrier, what I call &amp;ldquo;The Wall of &amp;lsquo;Not My Job&amp;rsquo;&amp;rdquo;. Responsibilities are so divided that simple actions get stuck behind a wall of bureaucracy and tickets. I get that sometimes, we need to have this layer. But why do that during the development and testing phases? This mindset prevents developers from taking the ownership necessary to innovate.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-core-principles&#34;&gt;The Core Principles&lt;/h2&gt;
&lt;p&gt;Overcoming these barriers starts with understanding the core principles that enable pipeline ownership. These aren&amp;rsquo;t magic; they are a set of practices and tools designed to make deployments safe, repeatable, and efficient.&lt;/p&gt;
&lt;figure class=&#34;align-center &#34;&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;slide-10.png#center&#34;
         alt=&#34;The Core Principles&#34;/&gt; 
&lt;/figure&gt;

&lt;h3 id=&#34;1-continuous-integration-ci&#34;&gt;1. Continuous Integration (CI)&lt;/h3&gt;
&lt;p&gt;CI is the practice of automating builds and tests every time a developer pushes code to a central repository. This helps find and fix bugs early.&lt;/p&gt;
&lt;h3 id=&#34;2-continuous-deliverydeployment-cd&#34;&gt;2. Continuous Delivery/Deployment (CD)&lt;/h3&gt;
&lt;p&gt;CD automates the entire software release process, enabling consistent and reliable deployments. This is how you can deliver new features to users faster and with less risk.&lt;/p&gt;
&lt;h3 id=&#34;3-infrastructure-as-code-iac&#34;&gt;3. Infrastructure as Code (IaC)&lt;/h3&gt;
&lt;p&gt;IaC is the practice of defining and managing your infrastructure (servers, networks, databases) using code instead of manual configuration. This is the key to creating consistent and reproducible environments automatically.&lt;/p&gt;
&lt;h3 id=&#34;4-observability&#34;&gt;4. Observability&lt;/h3&gt;
&lt;p&gt;Observability is about instrumenting your application to collect detailed logs, metrics, and traces. It allows you to ask deep questions about your system&amp;rsquo;s behavior and understand &lt;em&gt;why&lt;/em&gt; an issue is happening, not just &lt;em&gt;what&lt;/em&gt; is happening.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;understanding-the-configurations&#34;&gt;Understanding the configurations&lt;/h2&gt;
&lt;p&gt;Since most configurations are written in plain text, you can simply open the files and read through them.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;figure class=&#34;align-center &#34;&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;dockerfile.png#center&#34;
         alt=&#34;Sample dockerfile&#34; width=&#34;650&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;Sample dockerfile&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/td&gt;
          &lt;td&gt;&lt;figure class=&#34;align-center &#34;&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;yaml.png#center&#34;
         alt=&#34;Sample Kubernetes deployment yaml file&#34; width=&#34;400&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;Sample Kubernetes deployment yaml file&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If you read through these files, it&amp;rsquo;s quite easy to understand what the configuration file is trying to achieve.&lt;/p&gt;
&lt;p&gt;Then the question is as developers are we supposed to memorize all these configurations? &lt;strong&gt;Absolutely not!&lt;/strong&gt; You need to build these configurations once, the right way and then templatize it for the next app.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a sample templatized kubernetes deployment yaml file that I keep. I replace the sections that starts and ends with &lt;code&gt;--&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;apps/v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Deployment&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--&lt;span class=&#34;l&#34;&gt;app-name--&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--&lt;span class=&#34;l&#34;&gt;namespace--&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;replicas&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;matchLabels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--&lt;span class=&#34;l&#34;&gt;app-name--&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--&lt;span class=&#34;l&#34;&gt;app-name--&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;containers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--&lt;span class=&#34;l&#34;&gt;app-name--&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--&lt;span class=&#34;l&#34;&gt;image--&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;containerPort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--&lt;span class=&#34;l&#34;&gt;port--&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;best-practices&#34;&gt;Best Practices&lt;/h2&gt;
&lt;p&gt;Adopting the tools is one thing, but truly owning your deployment pipeline requires a shift in mindset. It&amp;rsquo;s about cultivating habits that prioritize stability, security, and speed. Here are four essential best practices to guide you on this journey.&lt;/p&gt;
&lt;figure class=&#34;align-center &#34;&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;slide-17.png#center&#34;
         alt=&#34;Best Practices&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;Best Practices&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&#34;shift-security-left&#34;&gt;Shift Security Left.&lt;/h3&gt;
&lt;p&gt;For decades, we’ve treated security as the final boss battle of a project. Developers would code for months, then toss the finished product over the wall to a security team, hoping it would pass the review. This &amp;ldquo;gatekeeper&amp;rdquo; model is slow, inefficient, and creates an adversarial relationship.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The modern approach is to &amp;ldquo;shift security left,&amp;rdquo;&lt;/strong&gt; embedding it into the earliest stages of development. Instead of a final inspection, security becomes a continuous practice. Automated tools can be integrated directly into your CI pipeline to scan for vulnerabilities on every single commit.&lt;/p&gt;
&lt;p&gt;By doing this, you get feedback in minutes, not months. You learn if you’ve introduced a vulnerability while the code is still fresh in your mind, transforming security from a roadblock into a real-time guideline for writing safer code.&lt;/p&gt;
&lt;h3 id=&#34;make-small-reversible-changes&#34;&gt;Make Small, Reversible Changes.&lt;/h3&gt;
&lt;p&gt;The goal of a powerful deployment pipeline is not to make it easier to ship massive, high-stakes changes. It&amp;rsquo;s the exact opposite: &lt;strong&gt;the goal is to make deployments so frequent, small, and routine that they become boring.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Big-bang releases are terrifying because they bundle hundreds of changes, making it impossible to pinpoint the cause of a problem. The modern full-stack developer works in small, incremental steps. Every pull request should represent a minimal, logical unit of work.&lt;/p&gt;
&lt;p&gt;Crucially, every change must be easily reversible. While a &lt;code&gt;git revert&lt;/code&gt; is a good start, a far more powerful technique is to wrap new features in &lt;strong&gt;feature flags&lt;/strong&gt;. If a new feature starts causing problems in production, you don&amp;rsquo;t need to roll back the deployment and kick off a frantic debugging session. You simply flip a switch, deactivating the feature for users while you investigate the issue in a low-stress environment.&lt;/p&gt;
&lt;h3 id=&#34;use-blueprints-not-sculptures&#34;&gt;Use Blueprints, Not Sculptures.&lt;/h3&gt;
&lt;p&gt;Think about how we&amp;rsquo;ve traditionally managed servers. We treat them like delicate sculptures. Each one is a unique masterpiece, handcrafted over time with manual package installations, SSH sessions, and tweaked configuration files. If one of these &amp;ldquo;sculptures&amp;rdquo; breaks, it&amp;rsquo;s a catastrophe, and rebuilding it from memory is a nightmare.&lt;/p&gt;
&lt;p&gt;This is where Infrastructure as Code (IaC) changes the game. &lt;strong&gt;We stop being artisans and start being architects.&lt;/strong&gt; Our infrastructure is no longer a sculpture; it&amp;rsquo;s built from a blueprint.&lt;/p&gt;
&lt;p&gt;Our Terraform files, CloudFormation templates, and Dockerfiles become the single source of truth.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Need a new staging environment? Run the blueprint.&lt;/li&gt;
&lt;li&gt;A production server fails? Automation terminates it and spins up a perfect, identical replacement from the blueprint in minutes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This approach, sometimes referred to as treating servers like &amp;ldquo;cattle, not pets,&amp;rdquo; guarantees consistency, eliminates configuration drift, and makes disaster recovery a fast, predictable, and automated process.&lt;/p&gt;
&lt;h3 id=&#34;build-for-observability&#34;&gt;Build for Observability.&lt;/h3&gt;
&lt;p&gt;Your responsibility as an engineer doesn&amp;rsquo;t end when your code is deployed. It ends when you can verify that your feature is working as intended for real users in the chaos of production.&lt;/p&gt;
&lt;p&gt;This is why we must &lt;strong&gt;build for observability&lt;/strong&gt;. It&amp;rsquo;s the practice of instrumenting our applications so they emit signals about their health and performance. As you code a new feature, you should constantly be asking: &lt;em&gt;&amp;ldquo;How will I know this is working? How will I know if it&amp;rsquo;s failing?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This means going beyond simple print statements. It means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Structured Logs&lt;/strong&gt;: Writing logs in a machine-readable format (like JSON) that can be easily searched and filtered.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Metrics&lt;/strong&gt;: Tracking the &amp;ldquo;golden signals&amp;rdquo; for your feature—request rate, error rate, and latency.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distributed Tracing&lt;/strong&gt;: Creating a complete picture of how a request flows through your various microservices.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Shipping a feature without the ability to observe it is like launching a satellite without any instruments. It might be up there, but you have no idea if it&amp;rsquo;s working or why it&amp;rsquo;s not. True ownership means having the visibility to answer those questions confidently.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;your-3-step-challenge-to-get-started&#34;&gt;Your 3-Step Challenge to Get Started&lt;/h2&gt;
&lt;p&gt;Taking ownership doesn&amp;rsquo;t happen overnight. It starts with small, intentional steps. Here is my three-step challenge to help you begin this journey.&lt;/p&gt;
&lt;figure class=&#34;align-center &#34;&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;slide-19.png#center&#34;
         alt=&#34;3-Step Challenge&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;3-Step Challenge&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Get Curious&lt;/strong&gt;: Find your project’s CI/CD pipeline configuration file. You don&amp;rsquo;t have to understand everything, just read it. See what it&amp;rsquo;s doing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learn the Fundamentals&lt;/strong&gt;: Pick one area—like Docker or CI/CD—and learn the basics. A fantastic free resource for this is &lt;a href=&#34;https://roadmap.sh/devops&#34;&gt;https://roadmap.sh/devops&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Raise Your Hand&lt;/strong&gt;: The next time a small, deployment-related task comes up, volunteer. It could be as simple as updating a dependency in a Dockerfile or adding a new test step to the CI pipeline.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The goal is to &lt;strong&gt;stop being a developer who just writes code&lt;/strong&gt;. &lt;strong&gt;Become the engineer who confidently delivers value&lt;/strong&gt;. That journey begins when you decide to own your deployment pipeline.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;resources&#34;&gt;Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;./The%20Modern%20Full-Stack%20Owning%20Your%20Deployment%20Pipeline.pdf&#34;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div class=&#34;signoff&#34;&gt;&lt;span&gt;./J&lt;/span&gt;&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Adopt AI-Assisted Code Development. Now!</title>
      <link>https://jerrymannel.me/writing/2024/adopt-ai-assisted-code-development/</link>
      <pubDate>Mon, 16 Dec 2024 13:50:05 -0600</pubDate>
      <guid>https://jerrymannel.me/writing/2024/adopt-ai-assisted-code-development/</guid>
      <description>&lt;p&gt;The productivity improvements an AI-assisted code development tool can bring to your workflow are significant.&lt;/p&gt;
&lt;p&gt;If you are not convinced, allow me to give you one recent experience of mine.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Me, like many of you, have a bunch of personal projects that I work on in my spare time. I&amp;rsquo;m currently building something around AWS, using the &lt;a href=&#34;https://github.com/aws/aws-sdk-js&#34;&gt;AWS JS SDK&lt;/a&gt; and &lt;a href=&#34;https://nextjs.org/&#34;&gt;Next.js&lt;/a&gt;. In one of the pages, I want to list all the EC2 instances in my account. The table should also list the tags for each instance. But the way AWS stores tags is not very convenient to work with when you want to display them in a table.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Tags[]&lt;/code&gt; property, which is of type &lt;code&gt;EC2.TagList&lt;/code&gt; has the following definition:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Tags&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;Key&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;Value&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This definition gives you values in the following format:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;My EC2 Instance&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Environment&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Production&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Owner&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;John Doe&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;I will be rendering this in a table, so I would rather have the data in the following format, which is easier to work with.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;My EC2 Instance&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;Environment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Production&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;Owner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;John Doe&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The definition I want for this, would be,&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Tags&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;key&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;I want to redefine the &lt;code&gt;Tags&lt;/code&gt; property to the format I want, while keeping all the other properties of &lt;code&gt;AWS.EC2&lt;/code&gt;. Or in other words, I want to &lt;strong&gt;extend&lt;/strong&gt; the &lt;code&gt;AWS.EC2&lt;/code&gt; type definition but change the &lt;code&gt;Tags&lt;/code&gt; property to the format I want. This is the code I wrote and the error I got,&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;interface&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ExtendedEC2Instance&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;AWS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;EC2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Instance&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nx&#34;&gt;Tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;key&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nx&#34;&gt;Region&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Interface &amp;#39;ExtendedEC2Instance&amp;#39; incorrectly extends interface &amp;#39;Instance&amp;#39;.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//   Types of property &amp;#39;Tags&amp;#39; are incompatible.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//     Type &amp;#39;{ [key: string]: string; }&amp;#39; is missing the following properties from type &amp;#39;Tag[]&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This is where the AI-assisted code development comes in. Instead of spending time searching and understanding the error message, and then figuring out how to fix it, my IDE can do it for me.&lt;/p&gt;
&lt;p&gt;I use &lt;a href=&#34;https://www.cursor.com/&#34;&gt;Cursor&lt;/a&gt;. It understands the code and the context of the code. I asked it to fix the error for me and it gave me the following code,&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;interface&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ExtendedEC2Instance&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Omit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;AWS.EC2.Instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Tags&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nx&#34;&gt;Tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;key&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nx&#34;&gt;Region&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;TIL, about &lt;code&gt;Omit&lt;/code&gt; in TypeScript.&lt;/p&gt;
&lt;p&gt;Explanation:&lt;/p&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;cursor.explanation.png&#34;
         alt=&#34;Cursor explanation&#34;/&gt; 
&lt;/figure&gt;

&lt;p&gt;It&amp;rsquo;s the ability of the assistant to explain the code that amazes me every time. If I had to figure out the solution myself, it would have taken quite some time. But with that suggestion, I was able to understand the problem, learn something new, and get back to what I was doing.&lt;/p&gt;
&lt;p&gt;Over time, these incremental improvements adds up. You can finish whole modules in a matter of minutes. &lt;a href=&#34;https://www.cursor.com/pricing&#34;&gt;$20 a month&lt;/a&gt; of this kind of productivity is a small price to pay for the time you save.&lt;/p&gt;
&lt;hr&gt;
&lt;div style=&#34;width: 100%;border: 1px solid #eaecee;padding: 10px;border-radius: 5px; display: block; background-color: #ffcdd2;font-size: 0.8rem;box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2);&#34;&gt;
&lt;p style=&#34;margin: 0;&#34;&gt;Cursor or any other AI-assisted code development tool is analyzing your code in real-time and that&#39;s how it understands your code and the context of the code.&lt;/p&gt;
&lt;p style=&#34;margin: 0;&#34;&gt;If you are working on a project that is not open source or sensitive in nature, you might want to check with your organization before adopting any kind of tool.&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div class=&#34;signoff&#34;&gt;&lt;span&gt;./J&lt;/span&gt;&lt;/div&gt;

</description>
    </item>
    <item>
      <title>The Sunday Test</title>
      <link>https://jerrymannel.me/writing/2024/the-sunday-test/</link>
      <pubDate>Sun, 22 Sep 2024 20:23:44 -0500</pubDate>
      <guid>https://jerrymannel.me/writing/2024/the-sunday-test/</guid>
      <description>&lt;p&gt;Recently I read an article about how Stripe built one of the best engineering teams. I have used their products and I have to admit that it&amp;rsquo;s just well built. Clean, precise and easy to use. Love their documentation too. When i came across &lt;a href=&#34;https://review.firstround.com/how-stripe-built-one-of-silicon-valleys-best-engineering-teams/&#34;&gt;this article&lt;/a&gt; I wanted to know how they built their team.&lt;/p&gt;
&lt;p&gt;What stood out for me was the section about &amp;ldquo;&lt;strong&gt;The Sunday Test&lt;/strong&gt;&amp;rdquo;.&lt;/p&gt;
&lt;h1 id=&#34;the-sunday-test&#34;&gt;The Sunday Test&lt;/h1&gt;
&lt;p&gt;While other sections about treating recruiting as marketing, valuing rejection experiences, and leveraging existing engineers for talent sourcing were valuable, &lt;strong&gt;The Sunday Test&lt;/strong&gt; was different.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;If this person were alone in the office on a Sunday, would that make you more likely to come in and want to work with them? If the answer is not a clear yes, then don&amp;rsquo;t make the hire.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This is brilliant!&lt;/p&gt;
&lt;p&gt;Reflect on those times you sacrificed weekends or worked late nights to meet deadlines. What memories do they evoke? Are they stories you&amp;rsquo;d share fondly, or tales of exhaustion? The best work stories revolve around the joy of creation, where time becomes irrelevant. The memories evokes endorphins and that incredible feeling of accomplishment.&lt;/p&gt;
&lt;p&gt;The worst ones? Tales of misery endured for the sake of a paycheck.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Sunday Test&lt;/strong&gt; just summarized all of that. I&amp;rsquo;m adding that into my hiring-rulebook!&lt;/p&gt;
&lt;p&gt;This seems like the ideal time to share my assessment process. Post technical evaluation, I categorize candidates into specific buckets.&lt;/p&gt;
&lt;h1 id=&#34;my-hiring-rubric&#34;&gt;My hiring rubric&lt;/h1&gt;
&lt;p&gt;This is not something that I came up with. I borrowed this from an acquaintence. You can find other variations of this on the internet. But this is what I have adapted for my hiring process.&lt;/p&gt;
&lt;p&gt;Ideally, any candidate I hire fits into at least 2 of these 3 categories:&lt;/p&gt;
&lt;h2 id=&#34;hacker&#34;&gt;Hacker&lt;/h2&gt;
&lt;p&gt;Is the person a hacker?&lt;/p&gt;
&lt;p&gt;Is this person a knowledge powerhouse? Do they possess near-encyclopedic understanding of the topic at hand, be it a language, framework, or technology? Are they so skilled that their experience surpasses most?&lt;/p&gt;
&lt;p&gt;That is the Hacker!&lt;/p&gt;
&lt;h2 id=&#34;hustler&#34;&gt;Hustler&lt;/h2&gt;
&lt;p&gt;Is the person a hustler?&lt;/p&gt;
&lt;p&gt;Is this person driven? Do they overcome knowledge gaps with determination? Will they utilize every resource available to achieve their goals? They refuse to be hindered by limitations.&lt;/p&gt;
&lt;p&gt;That is the Huslter!&lt;/p&gt;
&lt;h2 id=&#34;artist&#34;&gt;Artist&lt;/h2&gt;
&lt;p&gt;Is the person an artist?&lt;/p&gt;
&lt;p&gt;Does this person infuse creativity into their work? Do they produce elegant designs, self-documenting code, and clear solutions? They take pride in their craft and readily share it.&lt;/p&gt;
&lt;p&gt;That is the Artist!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;What you need in a candidate is a comnbination of any two of the above 3 skills.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hacker + Hustler&lt;/li&gt;
&lt;li&gt;Hustler + Artist&lt;/li&gt;
&lt;li&gt;Artist + Hacker&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  &lt;figure&gt;
    &lt;img src=&#34;https://jerrymannel.me/writing/2024/the-sunday-test/art_hu_76abb732331a3bb9.webp&#34;
         srcset=&#34;https://jerrymannel.me/writing/2024/the-sunday-test/art_hu_d565a65287ba408d.webp 640w, https://jerrymannel.me/writing/2024/the-sunday-test/art_hu_76abb732331a3bb9.webp 1024w, https://jerrymannel.me/writing/2024/the-sunday-test/art_hu_a965c94c8fe7a4c0.webp 1400w&#34;
         sizes=&#34;(max-width: 768px) 100vw, 700px&#34;
         width=&#34;1024&#34; height=&#34;799&#34;
         alt=&#34;Illustration of the artist and hacker archetypes&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;
  &lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Someone with all 3 skills, awesome!&lt;/p&gt;
&lt;p&gt;However, someone fulfilling only one skill is undesirable. Why?&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Now I layer &lt;strong&gt;The Sunday Test&lt;/strong&gt; on top. If they pass the hacker-artist-hustler rating, then do they pass &lt;strong&gt;The Sunday Test&lt;/strong&gt;?&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.forbes.com/sites/andyellwood/2012/08/22/the-dream-team-hipster-hacker-and-hustler/&#34;&gt;The Dream Team: Hipster, Hacker, and Hustler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/pulse/hustler-hacker-storyteller-singer-artist-walk-bar-shawn-nason/&#34;&gt;A HUSTLER, HACKER, STORYTELLER, SINGER AND ARTIST WALK INTO A BAR!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div class=&#34;signoff&#34;&gt;&lt;span&gt;./J&lt;/span&gt;&lt;/div&gt;

</description>
    </item>
    <item>
      <title>To Care!</title>
      <link>https://jerrymannel.me/writing/2023/to-give-a-damn/</link>
      <pubDate>Thu, 13 Jul 2023 23:10:18 -0500</pubDate>
      <guid>https://jerrymannel.me/writing/2023/to-give-a-damn/</guid>
      <description>&lt;p&gt;
  &lt;img src=&#34;https://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Pale_Blue_Dot.png/442px-Pale_Blue_Dot.png#center&#34; alt=&#34;Pale blue dot&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;
&lt;/p&gt;
&lt;p&gt;Take a look at the photo 🌌. It almost looks like a photo taken by an amateur stargazer. Grainy streaks of sunlight.&lt;/p&gt;
&lt;p&gt;But this photo was taken in 1990 and was not taken from Earth. A machine took it, the right technical term being space probe. It was called Voyager 1, and it was launched in 1977. Voyager 1 traveled 13 years and 6 billion kilometers into deep space, very, very far from home, to take that photo using instruments that were cutting-edge in 1977.&lt;/p&gt;
&lt;p&gt;Let’s look at the photo again. Notice that streak of light towards the right side of the photo. Zoom into the photo, and you can see a very bright pixel somewhere around the middle. Looks blueish and could easily be dismissed as an overexposed pixel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That’s Earth!&lt;/strong&gt; 🌏&lt;/p&gt;
&lt;p&gt;Carl Sagan, in his book &lt;em&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/61663.Pale_Blue_Dot&#34;&gt;Pale Blue Dot&lt;/a&gt;&lt;/em&gt; comments on what he sees as the greater significance of the photograph, writing&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;From this distant vantage point, the Earth might not seem of any particular interest. But for us, it’s different. Consider again that dot. That’s here. That’s home. That’s us. On it everyone you love, everyone you know, everyone you ever heard of, every human being who ever was, lived out their lives. The aggregate of our joy and suffering, thousands of confident religions, ideologies, and economic doctrines, every hunter and forager, every hero and coward, every creator and destroyer of civilization, every king and peasant, every young couple in love, every mother and father, hopeful child, inventor and explorer, every teacher of morals, every corrupt politician, every “superstar,” every “supreme leader,” every saint and sinner in the history of our species lived there – on a mote of dust suspended in a sunbeam.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Why am I talking about this?&lt;/p&gt;
&lt;p&gt;There was a phase that I went through where I questioned everything. I came across this photo and quote by Carl Sagan, and it greatly impacted me.&lt;/p&gt;
&lt;p&gt;It started off with “&lt;em&gt;Nothing we do matters&lt;/em&gt;“. A phase of fuck it attitude towards life and everything. The mote of dust we are on can be wiped off by a rock or radiation. Then why even care? Thankfully, that phase didn’t last. Realised that I do love and care about some things in my life. Things I don’t care about might be something others care about. Because I believe in something, I cannot ask someone to think and act like me. (Except when it comes to tech and designs). Let them be. Everybody has “stuff” they care about and crap to deal with. You might not even be aware of that. The best I can be is not to become another cause of worry they have to deal with.&lt;/p&gt;
&lt;p&gt;These days, I try to leave everything in a better state than I found it – people, relationships, places, pieces of code. It keeps me happy and satisfied mentally. More often than not, things do not pan out that way. As human beings, we are flawed. Mistakes happen, and I try to fix them as much as possible. But most of the time, I’m a fucking goldfish. (Thanks to &lt;a href=&#34;https://en.wikipedia.org/wiki/Ted_Lasso&#34;&gt;Ted Lasso&lt;/a&gt;, there&amp;rsquo;s a word for it now!)&lt;/p&gt;
&lt;p&gt;💥 Boom!, light bulb 💡 moment!&lt;/p&gt;
&lt;p&gt;So thanks to Voyager 1 and that photo, at any given time, I don’t, and I do give a sh-t about things. Like the famous cat in the box! 🐈📦☠️&lt;/p&gt;
&lt;p&gt;The difference between the cat and me? I’m pretty sure I’m alive. Or am I?&lt;/p&gt;
&lt;div class=&#34;signoff&#34;&gt;&lt;span&gt;./J&lt;/span&gt;&lt;/div&gt;

</description>
    </item>
    <item>
      <title>The Underappreciated Skill of Comprehension</title>
      <link>https://jerrymannel.me/writing/2023/the-underappreciated-skill-of-comprehension/</link>
      <pubDate>Wed, 12 Jul 2023 23:09:43 -0500</pubDate>
      <guid>https://jerrymannel.me/writing/2023/the-underappreciated-skill-of-comprehension/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Comprehension is the understanding and interpretation of what is read.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Documents at work are rarely 140 characters or 140 words or even a single-page document. Whoever wrote that document has put their thoughts into words. It would have been peer-reviewed. Revisions made and approved for general consumption. It might not be the best-written technical document or the best way to string words together, but it nevertheless captures an idea.&lt;/p&gt;
&lt;p&gt;You might be a super-star developer or a kick-ass architect, but it’s a big red flag for me if you don’t know how to read and understand a document/mail/incident report without someone explaining it. It is a skill that lets me measure your ability to work independently.&lt;/p&gt;
&lt;p&gt;I’ve seen this happen time and time again with new graduates. They’re brilliant at their technical skills but struggle to comprehend written information. They ask questions already answered in the document and make mistakes because they can’t understand the instructions.&lt;/p&gt;
&lt;p&gt;This is a concern because it slows the team and leads to errors. It’s also frustrating for the people who have to explain things repeatedly.&lt;/p&gt;
&lt;p&gt;Check this question,&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It’s the second question at &lt;a href=&#34;https://projecteuler.net/problem=2?ref=betweentech.ghost.io&#34;&gt;Project Euler&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is one of my interview questions. Most people I interview generate four million numbers or the first few numbers in a Fibonacci sequence. People deserve second chances. So I ask them to reread the question carefully. Still, the majority can’t understand what is expected as a result.&lt;/p&gt;
&lt;h3 id=&#34;how-to-improve&#34;&gt;How to improve?&lt;/h3&gt;
&lt;p&gt;So what can you do to improve your comprehension skills? Here are a few tips:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Read regularly.&lt;/strong&gt; The more you read, the better you’ll understand written information.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pay attention to the author’s style.&lt;/strong&gt; How does the author structure their sentences? What kind of vocabulary do they use? The more you pay attention to the author’s style, the easier it will be to follow their train of thought.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ask questions.&lt;/strong&gt; If you don’t understand something, don’t be afraid to ask for clarification. It’s better to ask a question than to make a mistake.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So please, pick up a book, newspaper, online article, or anything longer than a page, and make it a habit to read and do it daily.&lt;/p&gt;
&lt;div class=&#34;signoff&#34;&gt;&lt;span&gt;./J&lt;/span&gt;&lt;/div&gt;

</description>
    </item>
  </channel>
</rss>
