<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.0.1">Jekyll</generator><link href="https://architectfwd.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://architectfwd.com/" rel="alternate" type="text/html" /><updated>2026-07-18T10:53:19+00:00</updated><id>https://architectfwd.com/feed.xml</id><title type="html">architectFWD™ - enterprise architecture and digital transformation</title><subtitle>architectfwd&amp;trade; enterprise architecture and digital transformation. Remote Enterprise Architect available to work with you on your biggest challenges and opportunities.</subtitle><author><name>Q</name><email>architect@architectfwd.com</email></author><entry><title type="html">Quarantining the Codebase: The Street-Smart Guide to Managing Technical Debt</title><link href="https://architectfwd.com/architectfwd/digital-products/2026/07/18/architectfwd-forward-technical-debt-log-digital-products/" rel="alternate" type="text/html" title="Quarantining the Codebase: The Street-Smart Guide to Managing Technical Debt" /><published>2026-07-18T07:30:00+00:00</published><updated>2026-07-18T07:30:00+00:00</updated><id>https://architectfwd.com/architectfwd/digital-products/2026/07/18/architectfwd-forward-technical-debt-log-digital-products</id><content type="html" xml:base="https://architectfwd.com/architectfwd/digital-products/2026/07/18/architectfwd-forward-technical-debt-log-digital-products/"><![CDATA[<p>The phrase “technical debt” has lost its bite. Over the years, it has evolved into a generic catch-all term engineers use to describe any codebase section they find ugly, outdated, or frustrating to work with.</p>

<p>When engineering leaders approach product managers or executive stakeholders demanding time to fix “technical debt,” they are frequently met with blank stares or polite deferrals.</p>

<p>To the business, an engineered refactor that results in zero visible feature changes looks like a massive waste of capital. If you cannot explain the real-world operational impact of your code liabilities in terms of time and money, you will never secure the sprint capacity necessary to fix them.</p>

<h2 id="the-reality-of-system-drag">The Reality of System Drag</h2>

<p>Technical debt behaves exactly like credit card debt. It provides a brief injection of speed upfront—allowing a team to skip edge-case handling or cut architectural corners to hit a critical market deadline—in exchange for a compounding interest rate down the road.</p>

<p>That interest rate manifests as pure system drag:</p>

<ul>
  <li>Development cycles start taking twice as long.</li>
  <li>Production regressions skyrocket out of nowhere.</li>
  <li>Your elite engineering team spends all day manually triaging bugs instead of building revenue-driving features.</li>
</ul>

<p>When the interest outpaces your output, your feature velocity drops to zero. You are officially paying only the interest on your debt, completely unable to touch the principal.</p>

<h2 id="the-friction-matrix-interaction-vs-blast-radius">The Friction Matrix: Interaction vs. Blast Radius</h2>

<p>To fix the communication gap between product management and engineering, you need to strip away emotional complaints (“this code is messy”) and replace them with two basic, non-technical metrics: <em>How often do we touch it?</em> and <em>How bad is it if it breaks?</em></p>

<h3 id="1-likelihood-of-interaction">1. Likelihood of Interaction</h3>

<p>How frequently does your team actually modify, extend, or deploy code in this specific domain?</p>

<ul>
  <li>A poorly written legacy batch script that runs once a quarter and requires no maintenance is a low-traffic zone. You can safely ignore it.</li>
  <li>A messy, tightly coupled payment routing module that teams have to modify every single week is a high-traffic hazard.</li>
</ul>

<h3 id="2-severity-of-blast-radius">2. Severity of Blast Radius</h3>

<p>If this component suffers a critical failure in production, what is the scope of the damage?</p>

<ul>
  <li>Does a bug here bring down the entire user login and checkout pipeline? That is a catastrophic blast radius.</li>
  <li>Or does it simply cause a visual rendering bug on an internal settings dashboard that nobody looks at? That is a minor inconvenience.</li>
</ul>

<p>When you look at debt through this lens, prioritization becomes incredibly obvious. You stop wasting hours rewriting harmless legacy code and focus exclusively on the high-traffic, high-damage hazards that are actively threatening the business.</p>

<h2 id="translating-debt-into-boardroom-reality">Translating Debt into Boardroom Reality</h2>

<p>When you present technical debt to non-technical leaders using this risk framework, the conversation shifts instantly. You are no longer asking for permission to “clean up the codebase.” You are presenting an explicit risk mitigation strategy.</p>

<p>Instead of saying:</p>

<blockquote>
  <p>“We need two sprints to rewrite the database extraction layer because the code is messy and hard to read.”</p>
</blockquote>

<p>You present the data-backed reality:</p>

<blockquote>
  <p>“Our database extraction layer is our highest-traffic system component, and its current limitations are putting a 35% time penalty on every single feature we try to ship. Spending two sprints here clears this bottleneck and reclaims that lost team capacity.”</p>
</blockquote>

<h2 id="the-technical-debt-ledger-is-your-shield">The Technical Debt Ledger is Your Shield</h2>

<p>Elite engineering governance requires an active, living registry. By institutionalizing a lean technical debt ledger, technical leaders gain an unshakeable map of their systemic liabilities. It stops subjective arguments, removes emotion from sprint planning, and ensures that every engineering hour spent refactoring delivers undeniable business value.</p>

<div class="blog-gallery-grid" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin: 2rem 0; width: 100%;">
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/TechnicalDebtLog/Technical_Debt_Log.001.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/TechnicalDebtLog/Technical_Debt_Log.001.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Technical Debt Log Slide 1" />
      </a>
    </div>
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/TechnicalDebtLog/Technical_Debt_Log.002.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/TechnicalDebtLog/Technical_Debt_Log.002.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Technical Debt Log Slide 2" />
      </a>
    </div>
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/TechnicalDebtLog/Technical_Debt_Log.003.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/TechnicalDebtLog/Technical_Debt_Log.003.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Technical Debt Log Slide 3" />
      </a>
    </div>
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/TechnicalDebtLog/Technical_Debt_Log.004.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/TechnicalDebtLog/Technical_Debt_Log.004.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Technical Debt Log Slide 4" />
      </a>
    </div>
  
</div>

<p>👉 <strong><a href="https://architectforward.gumroad.com/l/LeanTechnicalDebtLedger-standalone" target="_blank">Secure your copy of The Lean Technical Debt Ledger on Gumroad today and clone the framework straight into your workspace.</a></strong></p>

<p><strong>Architect Forward and Transform.</strong></p>

<hr />

<div style="text-align: center; ">
<a href="https://architectfwd.com/" target="_blank">
<img src="/images/architectfwd_logo_final2702_031a.jpeg" style="max-width:200px; " /></a>

<a href="https://enterprise.architectfwd.com/" target="_blank">
<img src="/images/architectfwdenterprise_logo_final2702_031a.jpeg" style="max-width:200px; " /></a>

<a href="https://prfrm.architectfwd.com/" target="_blank">
<img src="/images/architectfwdprfrm_logo_final2702_031a.jpeg" style="max-width:200px;" /></a>
</div>]]></content><author><name>Q</name><email>architect@architectfwd.com</email></author><category term="architectfwd" /><category term="digital-products" /><summary type="html"><![CDATA[The phrase “technical debt” has lost its bite. Over the years, it has evolved into a generic catch-all term engineers use to describe any codebase section they find ugly, outdated, or frustrating to work with.]]></summary></entry><entry><title type="html">Scaling Engineering Velocity via Lean Governance: The Architecture Decision Record</title><link href="https://architectfwd.com/architectfwd/digital-products/2026/07/18/architectfwd-forward-architecture-decision-record-log-digital-products/" rel="alternate" type="text/html" title="Scaling Engineering Velocity via Lean Governance: The Architecture Decision Record" /><published>2026-07-18T06:21:00+00:00</published><updated>2026-07-18T06:21:00+00:00</updated><id>https://architectfwd.com/architectfwd/digital-products/2026/07/18/architectfwd-forward-architecture-decision-record-log-digital-products</id><content type="html" xml:base="https://architectfwd.com/architectfwd/digital-products/2026/07/18/architectfwd-forward-architecture-decision-record-log-digital-products/"><![CDATA[<p>In high-growth engineering environments, speed is often weaponized against quality. Teams race to push code to production, operating under the dangerous assumption that documentation is a luxury reserved for slower enterprises. This false dichotomy between shipping speed and architectural logging is exactly how companies end up trapped by legacy drag.</p>

<p>When engineering teams double or triple in size, their single greatest points of failure shift away from raw computing complexity toward institutional amnesia. Critical engineering architecture shifts occur during casual Slack conversations, emergency Zoom triage rooms, or quick GitHub pull requests. Without structure, the contextual boundaries behind those design iterations evaporate.</p>

<h2 id="the-cost-of-historical-amnesia">The Cost of Historical Amnesia</h2>

<p>Consider a standard engineering crossroad: an engineering squad swaps out a highly synchronous HTTP communication channel for an asynchronous architecture powered by AWS SQS. At the time, the decision makes perfect sense—the payload processing volumes required decoupling to isolate resource exhaustion. However, two years later, during a major microservice migration, a new senior engineering hire observes the layout and brands it an overly complex architectural anti-pattern.</p>

<p>Without an unshakeable audit trail, the new team spends months refactoring the asynchronous pipeline <em>back</em> into a synchronous flow, only to inevitably hit the exact same structural walls that the original team defeated two years prior. This circular cycle represents a massive loss of capital, a catastrophic blow to morale, and a critical structural failure known as Technical Amnesia.</p>

<h2 id="applying-blast-radius-to-architectural-choice">Applying Blast Radius to Architectural Choice</h2>

<p>To fix this, technical leaders must introduce a lightweight framework that segregates decisions by risk and reversibility. We achieve this by mapping the classic corporate governance models into system choices: Type 1 and Type 2 decisions.</p>

<h3 id="1-one-way-doors-type-1-decisions">1. One-Way Doors (Type 1 Decisions)</h3>

<p>If you walk through the door, you cannot easily walk back. Swapping your primary database from PostgreSQL to DynamoDB, altering data residency protocols to meet strict compliance mandates like SOC2, or redesigning the core billing logic fall squarely into Type 1. These require heavy internal transparency, comprehensive validation, and mandatory logging in a record.</p>

<h3 id="2-two-way-doors-type-2-decisions">2. Two-Way Doors (Type 2 Decisions)</h3>

<p>Choosing a specific logging package, establishing variable naming styles within a localized module, or selecting a front-end UI visual library are low-impact items. These shouldn’t face layers of committee approvals. Teams must execute Type 2 choices immediately to keep engineering velocity at its peak, logging them in a quick, two-line lean registry for future reference.</p>

<h2 id="implementing-the-lean-adr-workflow">Implementing the Lean ADR Workflow</h2>

<p>An Architecture Decision Record (ADR) should never read like an academic thesis. It is a lean, highly specific document. To succeed operationally, every record must capture exactly four core dimensions:</p>

<ul>
  <li><strong>Context:</strong> What real-world technical or business operational constraint forced this choice? What structural limitation did we encounter?</li>
  <li><strong>Decision:</strong> What is the concrete, active technical step we are taking? Is it a Type 1 or Type 2 door?</li>
  <li><strong>Consequences:</strong> What do we give up? (Every true architectural choice is a trade-off. If your ADR lists zero downsides, you haven’t thought deeply enough about the architecture).</li>
  <li><strong>Status:</strong> Is this actively Proposed, Accepted, or has it already been Superceded by a subsequent design record (ADR-n &gt; ADR-current)?</li>
</ul>

<div class="blog-gallery-grid" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin: 2rem 0; width: 100%;">
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/ArchitectureDecisionRecordsLog/Architecture_Decision_Records_Log.001.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/ArchitectureDecisionRecordsLog/Architecture_Decision_Records_Log.001.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Architecture Decision Records Log Slide 1" />
      </a>
    </div>
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/ArchitectureDecisionRecordsLog/Architecture_Decision_Records_Log.002.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/ArchitectureDecisionRecordsLog/Architecture_Decision_Records_Log.002.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Architecture Decision Records Log Slide 2" />
      </a>
    </div>
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/ArchitectureDecisionRecordsLog/Architecture_Decision_Records_Log.003.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/ArchitectureDecisionRecordsLog/Architecture_Decision_Records_Log.003.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Architecture Decision Records Log Slide 3" />
      </a>
    </div>
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/ArchitectureDecisionRecordsLog/Architecture_Decision_Records_Log.004.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/ArchitectureDecisionRecordsLog/Architecture_Decision_Records_Log.004.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Architecture Decision Records Log Slide 4" />
      </a>
    </div>
  
</div>

<h2 id="strategic-alignment-from-the-code-to-the-boardroom">Strategic Alignment from the Code to the Boardroom</h2>

<p>By forcing your engineering squads to maintain a clean, centralized ADR registry, you build a protective perimeter around your system velocity. New senior engineers get up to speed in days because they can read the chronological history of the system layout from ADR-001 to the present. More importantly, when executive leadership or external auditors question technical infrastructure shifts, you don’t offer vague hand-waving—you provide a transparent, high-context operational map.</p>

<p>Governance shouldn’t be a bureaucratic bottleneck. When done cleanly, lean governance is the ultimate accelerator.</p>

<p>👉 <strong><a href="https://architectforward.gumroad.com/l/LeanArchitectureDecisionRecord-ADR-Log" target="_blank">Secure your copy of The Architecture Decision Record Log on Gumroad today and clone the framework straight into your workspace.</a></strong></p>

<p><strong>Architect Forward and Transform.</strong></p>

<hr />

<div style="text-align: center; ">
<a href="https://architectfwd.com/" target="_blank">
<img src="/images/architectfwd_logo_final2702_031a.jpeg" style="max-width:200px; " /></a>

<a href="https://enterprise.architectfwd.com/" target="_blank">
<img src="/images/architectfwdenterprise_logo_final2702_031a.jpeg" style="max-width:200px; " /></a>

<a href="https://prfrm.architectfwd.com/" target="_blank">
<img src="/images/architectfwdprfrm_logo_final2702_031a.jpeg" style="max-width:200px;" /></a>
</div>]]></content><author><name>Q</name><email>architect@architectfwd.com</email></author><category term="architectfwd" /><category term="digital-products" /><summary type="html"><![CDATA[In high-growth engineering environments, speed is often weaponized against quality. Teams race to push code to production, operating under the dangerous assumption that documentation is a luxury reserved for slower enterprises. This false dichotomy between shipping speed and architectural logging is exactly how companies end up trapped by legacy drag.]]></summary></entry><entry><title type="html">The Boardroom Bottleneck: How to Align Engineering Governance with Executive Reality</title><link href="https://architectfwd.com/architectfwd/digital-products/2026/07/18/architectfwd-forward-architecture-decisions-technical-debt-engineering-governance-pack-digital-products/" rel="alternate" type="text/html" title="The Boardroom Bottleneck: How to Align Engineering Governance with Executive Reality" /><published>2026-07-18T06:20:23+00:00</published><updated>2026-07-18T06:20:23+00:00</updated><id>https://architectfwd.com/architectfwd/digital-products/2026/07/18/architectfwd-forward-architecture-decisions-technical-debt-engineering-governance-pack-digital-products</id><content type="html" xml:base="https://architectfwd.com/architectfwd/digital-products/2026/07/18/architectfwd-forward-architecture-decisions-technical-debt-engineering-governance-pack-digital-products/"><![CDATA[<p>As an engineering leader—whether you’re a CTO, VP, or Tech Lead—your day-to-day challenge rarely comes down to writing code. Your real battle is alignment. It’s the constant, exhausting friction of trying to translate deep technical strategy into high-level executive business goals.</p>

<p>When engineering reality fails to translate into boardroom language, the organization grinds to a halt in two specific, highly destructive ways:</p>

<ul>
  <li><strong>Analysis Paralysis:</strong> Critical architectural decisions stall indefinitely because stakeholders don’t understand the technical trade-offs.</li>
  <li><strong>Invisible Technical Debt:</strong> High-risk code liabilities quietly accumulate behind the scenes until they inevitably tank your team’s feature delivery speed.</li>
</ul>

<p>If you want to protect your system from catastrophic technical debt while supercharging your engineering velocity, you don’t need more meetings. You need operational structure. You need a system that balances strategic direction with true operational liability.</p>

<h2 id="the-cost-of-historical-amnesia">The Cost of “Historical Amnesia”</h2>

<p>Think about the last major architectural decision your team made. Where is it documented? Is it buried in a dead Slack thread? Stale Confluence pages? Or worse, does it only live inside the heads of two senior developers who might leave next quarter?</p>

<p>When systems grow without a unified governance framework, companies suffer from historical amnesia. Two years from now, when you bring on new senior hires, they will waste weeks trying to reverse-engineer why your infrastructure was built a certain way.</p>

<p>True governance isn’t about red tape or slowing down development. True governance is about creating clean context—building a living ledger of your technical choices so your team can move fast without breaking the foundations.</p>

<h2 id="introducing-the-scaling-engineering-governance-pack">Introducing the Scaling Engineering Governance Pack</h2>

<p>To bridge the gap between deep infrastructure planning and executive visibility, we built <strong>The Scaling Engineering Governance Pack</strong>.</p>

<p>Crafted directly inside Notion, this is a production-ready, highly modular command center designed to give engineering leaders a unified executive cockpit. It brings your strategic roadmap and your active system risks into a single, scannable lens optimized beautifully for both desktop and mobile layouts.</p>

<div class="blog-gallery-grid" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin: 2rem 0; width: 100%;">
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/ScalingEngineeringGovernancePackv202607/Scaling_Engineering_Governance_Pack.001.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/ScalingEngineeringGovernancePackv202607/Scaling_Engineering_Governance_Pack.001.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Scaling Engineering Governance Pack Slide 1" />
      </a>
    </div>
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/ScalingEngineeringGovernancePackv202607/Scaling_Engineering_Governance_Pack.002.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/ScalingEngineeringGovernancePackv202607/Scaling_Engineering_Governance_Pack.002.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Scaling Engineering Governance Pack Slide 2" />
      </a>
    </div>
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/ScalingEngineeringGovernancePackv202607/Scaling_Engineering_Governance_Pack.003.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/ScalingEngineeringGovernancePackv202607/Scaling_Engineering_Governance_Pack.003.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Scaling Engineering Governance Pack Slide 3" />
      </a>
    </div>
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/ScalingEngineeringGovernancePackv202607/Scaling_Engineering_Governance_Pack.004.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/ScalingEngineeringGovernancePackv202607/Scaling_Engineering_Governance_Pack.004.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Scaling Engineering Governance Pack Slide 4" />
      </a>
    </div>
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/ScalingEngineeringGovernancePackv202607/Scaling_Engineering_Governance_Pack.005.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/ScalingEngineeringGovernancePackv202607/Scaling_Engineering_Governance_Pack.005.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Scaling Engineering Governance Pack Slide 5" />
      </a>
    </div>
  
    <div style="aspect-ratio: 16 / 9; overflow: hidden; border-radius: 8px; border: 1px solid rgba(142, 110, 88, 0.15); background-color: #faf9f7; box-shadow: 0 4px 12px rgba(142, 110, 88, 0.05); transition: transform 0.2s ease;">
      <a href="/images/blog/20270718/ScalingEngineeringGovernancePackv202607/Scaling_Engineering_Governance_Pack.006.jpeg" target="_blank" style="display: block; width: 100%; height: 100%;">
        <img src="/images/blog/20270718/ScalingEngineeringGovernancePackv202607/Scaling_Engineering_Governance_Pack.006.jpeg" style="width: 100%; height: 100%; object-fit: cover; display: block;" alt="Scaling Engineering Governance Pack Slide 6" />
      </a>
    </div>
  
</div>

<p>Here is how the framework transforms your engineering operations:</p>

<h3 id="1-kill-decision-fatigue-with-the-lean-adr-log">1. Kill Decision Fatigue with the Lean ADR Log</h3>

<p>Decisions shouldn’t all take the same amount of time. Fueled by Jeff Bezos’ famous framework of Type 1 (One-Way Door) and Type 2 (Two-Way Door) decisions, our lean Architecture Decision Record (ADR) Log lets your team instantly categorize choices by their reversibility.</p>

<ul>
  <li><strong>Type 2 choices</strong> can be walked through quickly, allowing your developers to ship low-risk features instantly.</li>
  <li><strong>Type 1 choices</strong> (critical, irreversible infrastructure shifts) are flagged for deliberate, precise architectural review.</li>
</ul>

<h3 id="2-stop-arguing-for-refactoring-time">2. Stop Arguing for “Refactoring Time”</h3>

<p>Every tech lead has lost the battle of asking product managers for a generic “refactoring sprint.” Business partners don’t care about clean code; they care about business risk.</p>

<p>The <strong>Tech Debt Dashboard &amp; Risk Registry</strong> provides a plug-and-play matrix that quantifies code liabilities into actionable, mathematical risk scores. By visualizing systemic risks clearly, you stop begging for maintenance windows and start getting voluntary sprint allocations to clear bottlenecks.</p>

<h3 id="3-speak-the-language-of-the-boardroom">3. Speak the Language of the Boardroom</h3>

<p>The pack includes our exclusive Executive Guide: <em>“Translating Engineering Risk into Business Impact.”</em> This is your definitive boardroom playbook. Use this to reframe engineering friction into the commercial realities—like revenue risk, compliance exposure, and opportunity cost—that get immediate buy-in from your CEO, CFO, and CRO.</p>

<h2 id="built-for-high-velocity-teams">Built for High-Velocity Teams</h2>

<p>The Scaling Engineering Governance Pack isn’t a rigid, over-engineered system full of hidden databases or aesthetic bloat. It’s built cleanly for Notion, fully modular, and ready for immediate deployment. You can run the components as standalone trackers or seamlessly drop the linked database windows into your current workspace master pages.</p>

<p>Stop letting misaligned priorities slow down your ship cycles. Build a scalable foundation that keeps your velocity high and your operational risk low.</p>

<p>👉 <strong><a href="https://architectforward.gumroad.com/l/ScalingEngineeringGovernancePack" target="_blank">Secure your copy of The Scaling Engineering Governance Pack on Gumroad today and clone the framework straight into your workspace.</a></strong></p>

<p><strong>Architect Forward and Transform.</strong></p>

<hr />

<div style="text-align: center; ">
<a href="https://architectfwd.com/" target="_blank">
<img src="/images/architectfwd_logo_final2702_031a.jpeg" style="max-width:200px; " /></a>

<a href="https://enterprise.architectfwd.com/" target="_blank">
<img src="/images/architectfwdenterprise_logo_final2702_031a.jpeg" style="max-width:200px; " /></a>

<a href="https://prfrm.architectfwd.com/" target="_blank">
<img src="/images/architectfwdprfrm_logo_final2702_031a.jpeg" style="max-width:200px;" /></a>
</div>]]></content><author><name>Q</name><email>architect@architectfwd.com</email></author><category term="architectfwd" /><category term="digital-products" /><summary type="html"><![CDATA[As an engineering leader—whether you’re a CTO, VP, or Tech Lead—your day-to-day challenge rarely comes down to writing code. Your real battle is alignment. It’s the constant, exhausting friction of trying to translate deep technical strategy into high-level executive business goals.]]></summary></entry><entry><title type="html">ArchitectFWD™ Practical AI - learning by doing</title><link href="https://architectfwd.com/architectfwd/advisory_and_platforms/ai/artificial-intelligence/practical-ai/2026/03/07/architectfwd-forward-practical-ai-learning-by-doing/" rel="alternate" type="text/html" title="ArchitectFWD™ Practical AI - learning by doing" /><published>2026-03-07T18:20:23+00:00</published><updated>2026-03-07T18:20:23+00:00</updated><id>https://architectfwd.com/architectfwd/advisory_and_platforms/ai/artificial-intelligence/practical-ai/2026/03/07/architectfwd-forward-practical-ai-learning-by-doing</id><content type="html" xml:base="https://architectfwd.com/architectfwd/advisory_and_platforms/ai/artificial-intelligence/practical-ai/2026/03/07/architectfwd-forward-practical-ai-learning-by-doing/"><![CDATA[<p>Its better to be able to say you know something by learning it rather than just by having read about it. Back in December 2024 I started experimenting with building using AI and now my AI-assisted workflows have helped me execute. Shipping is important, else its all theory.</p>

<p>At first it felt like <strong>Stack Overflow on steroids</strong>.</p>

<p>I needed an answer → AI gave me something plausible → copy, paste, run.</p>

<p>A lot of what people now call <em>“vibe coding”</em>.</p>

<p>Prompt something.
Accept what comes back.
Fix errors as they appear.
Repeat until it works.</p>

<p>It’s messy, but it’s also an incredible way to learn quickly.</p>

<p>Early on I experimented with everything I could get my hands on.</p>

<p>Running models locally on my Mac through Ollama.
Trying different open models.
Testing dev workflows.</p>

<p>It was interesting technically, but the development experience wasn’t great and iteration was too slow. I eventually moved fully to cloud models.</p>

<p>Claude and ChatGPT became the main tools.</p>

<p>At that stage the workflow looked something like:</p>

<p>prompt → generate → paste → run → debug → repeat.</p>

<p>I was learning UI patterns, databases, application structure — while also learning how to prompt effectively.</p>

<p>Back then the Claude free-tier memory limits slowed things down at times, so I bounced between Claude and ChatGPT depending on what I needed.</p>

<p>Eventually I actually got something running.</p>

<p><strong>And I was excited</strong>.</p>

<p>Then the scope widened. things starting coming together for me under <a href="https://architectfwd.com/" target="_blank">ArchitectFWD™</a> as I thought about the opportunity.</p>

<p>I started using AI for things outside the code:</p>

<ul>
  <li>voiceover scripts</li>
  <li>AI voice tools</li>
  <li>image generation for socials</li>
  <li>content drafts</li>
</ul>

<p>At some point this all turned into two separate products.</p>

<ul>
  <li>
    <p><strong>prfrm</strong> — first I tested and learnt here. I focused on performance management for individuals and teams.
AI-assisted goal creation, alignment and progress visibility.</p>
  </li>
  <li>
    <p><strong>Enterprise</strong> — a platform for strategy, architecture and organisational alignment. I am <strong>super excited</strong> at how this will change outcomes for organisations who choose to join me on this journey.</p>
  </li>
</ul>

<p>Two very different problems. Two very different ways of thinking. But they’re aligned - <strong>Strategy and Execution. Structure and organisation. people, assisted by AI.</strong></p>

<p>Trying to juggle both in ad-hoc AI chats stopped working pretty quickly.</p>

<p>Around the same time my Google Workspace renewal rolled around and I started using <strong>Gemini</strong> more heavily. That shifted things again.</p>

<p>Less Claude.
Less ChatGPT.
No more local Ollama.</p>

<p>The workflow became much more structured.</p>

<p>I started introducing:</p>

<ul>
  <li>Product requirements documents (PRDs)</li>
  <li>explicit VS Code rules settings</li>
  <li>better context engineering</li>
  <li>more deliberate prompts</li>
</ul>

<p>Most of my work now happens inside the IDE, with AI acting more like an assistant than the driver.</p>

<p>Gemini and ChatGPT still help with quick domain questions, explanations, and research — but the development experience and flow is much tighter.</p>

<p>There have definitely been mistakes along the way.</p>

<ul>
  <li>Lost code.</li>
  <li>Poor commit discipline.</li>
  <li>Letting AI refactor too much at once.</li>
  <li>Learning the hard way where guardrails matter.</li>
  <li>Tests and migrations breaking databases</li>
</ul>

<p>But the practices are improving.</p>

<p>Is it fully spec-driven development?</p>

<p>Not yet.</p>

<p>But prompts are increasingly behaving like specifications.</p>

<p>I’m also starting to ask for tests. Do I run them?</p>

<p>Is it proper TDD? Probably not.</p>

<p>But let’s be honest — how many teams claiming TDD actually do it well?</p>

<p>I am experimenting now with something closer to <strong>spec-driven development</strong>. It’s not there yet.</p>

<ul>
  <li>Write the intent.</li>
  <li>Set the rules.</li>
  <li>Let the AI implement.</li>
  <li>Test</li>
  <li>Commit</li>
  <li>Ship</li>
</ul>

<p>Sometimes the responses still need steering.</p>

<p>But the speed difference is remarkable.</p>

<p>Issue a prompt.
Tell the AI to follow the rules.
Lock the screen.
Come back later.</p>

<p>It’s a pretty interesting way to build. 🚀</p>

<p>This is architecture, moving forward.</p>

<p><strong>Architect Forward and Transform.</strong></p>

<hr />

<div style="text-align: center; ">
<a href="https://architectfwd.com/" target="_blank">
<img src="/images/architectfwd_logo_final2702_031a.jpeg" style="max-width:200px; " /></a>

<a href="https://enterprise.architectfwd.com/" target="_blank">
<img src="/images/architectfwdenterprise_logo_final2702_031a.jpeg" style="max-width:200px; " /></a>

<a href="https://prfrm.architectfwd.com/" target="_blank">
<img src="/images/architectfwdprfrm_logo_final2702_031a.jpeg" style="max-width:200px;" /></a>
</div>]]></content><author><name>Q</name><email>architect@architectfwd.com</email></author><category term="architectfwd" /><category term="advisory_and_platforms" /><category term="ai" /><category term="artificial-intelligence" /><category term="practical-ai" /><summary type="html"><![CDATA[Its better to be able to say you know something by learning it rather than just by having read about it. Back in December 2024 I started experimenting with building using AI and now my AI-assisted workflows have helped me execute. Shipping is important, else its all theory.]]></summary></entry><entry><title type="html">ArchitectFWD™ Designing Forward Momentum</title><link href="https://architectfwd.com/architectfwd/advisory_and_platforms/2026/02/27/architectfwd-forward-momentum/" rel="alternate" type="text/html" title="ArchitectFWD™ Designing Forward Momentum" /><published>2026-02-27T06:55:02+00:00</published><updated>2026-02-27T06:55:02+00:00</updated><id>https://architectfwd.com/architectfwd/advisory_and_platforms/2026/02/27/architectfwd-forward-momentum</id><content type="html" xml:base="https://architectfwd.com/architectfwd/advisory_and_platforms/2026/02/27/architectfwd-forward-momentum/"><![CDATA[<p>In a world full of frameworks and buzzwords, organisations don’t struggle with ideas — they struggle with alignment.</p>

<p><a href="https://architectfwd.com/" target="_blank">ArchitectFWD™</a> was built to close that gap.</p>

<p>We believe architecture isn’t documentation.</p>

<p>It’s direction.</p>

<p>Architecture is how strategy becomes real — how intent becomes coordinated action, and complexity becomes momentum.</p>

<p><img src="/images/architectfwd_logo_final2702_008.jpeg" alt="Architect Forward (architectFWD™)" /></p>

<p>The forward motion in FWD™ isn’t decorative. It’s deliberate.</p>

<p>It represents progress over perfection. Clarity over noise. Movement over stagnation.</p>

<p>ArchitectFWD™ isn’t a single product. It’s a structured ecosystem of <strong>advisory and platforms</strong> designed to support leaders navigating growth, scale, and transformation.</p>

<p>Every part of ArchitectFWD™ answers one question:</p>

<p><strong>What’s the next right move — and how do we execute it well?</strong></p>

<p>This is architecture, moving forward.</p>

<p><strong>Architect Forward and Transform.</strong></p>

<hr />

<div style="text-align: center; ">
<a href="https://architectfwd.com/" target="_blank">
<img src="/images/architectfwd_logo_final2702_031a.jpeg" style="max-width:200px; " /></a>

<a href="https://enterprise.architectfwd.com/" target="_blank">
<img src="/images/architectfwdenterprise_logo_final2702_031a.jpeg" style="max-width:200px; " /></a>

<a href="https://prfrm.architectfwd.com/" target="_blank">
<img src="/images/architectfwdprfrm_logo_final2702_031a.jpeg" style="max-width:200px;" /></a>
</div>]]></content><author><name>Q</name><email>architect@architectfwd.com</email></author><category term="architectfwd" /><category term="advisory_and_platforms" /><summary type="html"><![CDATA[In a world full of frameworks and buzzwords, organisations don’t struggle with ideas — they struggle with alignment.]]></summary></entry><entry><title type="html">ArchitectFWD™ branding and logo updates for 2026</title><link href="https://architectfwd.com/architectfwd/brand/2026/01/31/architectfwd-branding-updates-2026/" rel="alternate" type="text/html" title="ArchitectFWD™ branding and logo updates for 2026" /><published>2026-01-31T10:12:33+00:00</published><updated>2026-01-31T10:12:33+00:00</updated><id>https://architectfwd.com/architectfwd/brand/2026/01/31/architectfwd-branding-updates-2026</id><content type="html" xml:base="https://architectfwd.com/architectfwd/brand/2026/01/31/architectfwd-branding-updates-2026/"><![CDATA[<p>The architectFWD™ branding is updating. Stay tuned to see how we evolve.</p>

<p>The architectFWD™ ecosystem as we call it is maturing and we want the branding to reflect that.</p>

<p>ArchitectFWD™ provides trusted strategy, architecture, and advisory expertise, expressed through a family of purpose-built platforms.</p>

<p>ArchitectFWD™ Enterprise is the flagship platform of the ArchitectFWD ecosystem for strategy, architecture &amp; alignment.</p>

<p><a href="https://enterprise.architectfwd.com/" target="_blank">Access ArchitectFWD Enterprise Platform - Software as a Service Now</a></p>

<p>ArchitectFWD™ prfrm™ is all about team and organisational performance &amp; execution.</p>

<p><a href="https://prfrm.architectfwd.com/" target="_blank">check out prfrm™ - by ArchitectFWD - Software as a Service</a></p>

<h2 id="closing-thoughts">Closing thoughts</h2>

<p>Join me in welcoming this new phase of the architectFWD strategic, transformation and advisory function increasing its reach through the architectFWD ecosystem platforms <a href="https://enterprise.architectfwd.com/" target="_blank">ArchitectFWD Enterprise Platform</a> 
 and <a href="https://prfrm.architectfwd.com/" target="_blank">prfrm™ - by ArchitectFWD</a> .</p>]]></content><author><name>Q</name><email>architect@architectfwd.com</email></author><category term="architectfwd" /><category term="brand" /><summary type="html"><![CDATA[The architectFWD™ branding is updating. Stay tuned to see how we evolve.]]></summary></entry><entry><title type="html">Gemini Code Assist v2.59.0 panic runtime error on Mac</title><link href="https://architectfwd.com/architecture/platforms/artificial-intelligence/gemini-code-assist/vs-code/2025/11/22/gemini-code-assist-vs-code-extension-runtime-error/" rel="alternate" type="text/html" title="Gemini Code Assist v2.59.0 panic runtime error on Mac" /><published>2025-11-22T08:38:12+00:00</published><updated>2025-11-22T08:38:12+00:00</updated><id>https://architectfwd.com/architecture/platforms/artificial-intelligence/gemini-code-assist/vs-code/2025/11/22/gemini-code-assist-vs-code-extension-runtime-error</id><content type="html" xml:base="https://architectfwd.com/architecture/platforms/artificial-intelligence/gemini-code-assist/vs-code/2025/11/22/gemini-code-assist-vs-code-extension-runtime-error/"><![CDATA[<p>Gemini Code Assist v2.59.0 in VS code on my Mac M1 is giving this error without fail - 
tokenizeFunc: context canceled
panic: runtime error: invalid memory address or nil pointer dereference</p>

<h2 id="the-issue">The issue</h2>

<p>This error is a known, recurring bug within the Gemini Code Assist extension for VS Code, specifically affecting users on certain operating systems or hardware configurations, including some on macOS M1/M2 chips.</p>

<p>The traceback shows a Go language panic (panic: runtime error: invalid memory address or nil pointer dereference), which is an internal crash within the extension’s backend process (written in Go), often triggered during the code analysis/tokenization phase (tokenizeFunc).</p>

<p>Since version 2.57, similar issues have been widely reported. The most reliable solution is to downgrade the extension version.</p>

<p><a href="https://enterprise.architectfwd.com/early-access" target="_blank"><img src="/images/blog/20250530/architectfwd-enterprise-landing-intro-hero-31052025.png" alt="Early access to Architect Forward (architectFWD™) Enterprise" /></a></p>

<h2 id="the-fix">The fix</h2>

<p>Recommended Fix: Downgrade the Extension
The version you are running, v2.59.0, appears to be affected by this instability. The best immediate fix is to roll back to a known stable version.</p>

<ol>
  <li>
    <p>Open Extensions View: In VS Code, go to the Extensions tab (Cmd+Shift+X on Mac).</p>
  </li>
  <li>
    <p>Find the Extension: Search for Gemini Code Assist.</p>
  </li>
  <li>
    <p>Access Downgrade Menu: Click the gear icon (⚙️) next to the extension.</p>
  </li>
  <li>
    <p>Select Downgrade: Choose “Install Another Version…”</p>
  </li>
  <li>
    <p>Install Stable Version: Select a version prior to 2.57.0, such as 2.56.0 or 2.55.0. These older versions are frequently cited by users as stable.</p>
  </li>
  <li>
    <p>Disable Auto-Update: To prevent VS Code from immediately updating it again, click the gear icon (⚙️) again and select “Disable Auto Update” for the extension.</p>
  </li>
  <li>
    <p>Restart VS Code: Completely close and reopen VS Code to ensure the downgraded version loads correctly.</p>
  </li>
</ol>

<h2 id="closing-thoughts">Closing thoughts</h2>

<p>I performed the downgrade and its been around 5 minutes, looks like it fixed it. Let’s wait for that new version. Right, back to getting some things done.</p>]]></content><author><name>Q</name><email>architect@architectfwd.com</email></author><category term="architecture" /><category term="platforms" /><category term="artificial-intelligence" /><category term="gemini-code-assist" /><category term="vs-code" /><summary type="html"><![CDATA[Gemini Code Assist v2.59.0 in VS code on my Mac M1 is giving this error without fail - tokenizeFunc: context canceled panic: runtime error: invalid memory address or nil pointer dereference]]></summary></entry><entry><title type="html">AWS EC2 Amazon Linux 2023 Patching and Updates</title><link href="https://architectfwd.com/architecture/platforms/aws/ec2/linux/2025/11/21/aws-ec2-amazon-linux-2023-patching-and-updates/" rel="alternate" type="text/html" title="AWS EC2 Amazon Linux 2023 Patching and Updates" /><published>2025-11-21T10:55:23+00:00</published><updated>2025-11-21T10:55:23+00:00</updated><id>https://architectfwd.com/architecture/platforms/aws/ec2/linux/2025/11/21/aws-ec2-amazon-linux-2023-patching-and-updates</id><content type="html" xml:base="https://architectfwd.com/architecture/platforms/aws/ec2/linux/2025/11/21/aws-ec2-amazon-linux-2023-patching-and-updates/"><![CDATA[<p>When that friendly, slightly intimidating message about a newer Amazon Linux release pops up, you face the sysadmin’s fundamental dilemma: Speed and simplicity (in-place update) versus absolute certainty (migration).</p>

<h2 id="zero-downtime-or-zero-risk-your-ec2-update-strategy">Zero-Downtime or Zero-Risk? Your EC2 Update Strategy</h2>

<p>I run my services using a mix of AWS managed services and also EC2. For EC2, breaking a running stack to apply a patch is a massive failure. So, here are the two strategies to handle EC2 updates.</p>

<p><a href="https://enterprise.architectfwd.com/early-access" target="_blank"><img src="/images/blog/20250530/architectfwd-enterprise-landing-intro-hero-31052025.png" alt="Early access to Architect Forward (architectFWD™) Enterprise" /></a></p>

<h2 id="option-1-the-zero-risk-strategy-migration">Option 1: The Zero-Risk Strategy (Migration)</h2>

<p>This is the gold standard for any major OS version change, and the safest strategy for any update if your uptime requirements are near 100%. The premise is simple: We build a perfect new server, test it, and then swap the traffic.</p>

<h3 id="1-prep--backup">1. Prep &amp; Backup</h3>
<p>Before you touch anything on the old server, create a complete recovery point.</p>

<ul>
  <li><strong>Create an AMI</strong>: In the EC2 Console, select your instance → Actions → Image and templates → Create Image. This is your instant, guaranteed rollback.</li>
  <li><strong>Backup Data</strong>: Use <code class="highlighter-rouge">scp</code> or <code class="highlighter-rouge">aws s3 sync</code> to copy your application, data and config files to a separate location.</li>
</ul>

<h3 id="2-build--configure-the-new-instance">2. Build &amp; Configure The New Instance</h3>
<p>Launch a new EC2 instance using the latest Amazon Linux 2023 AMI.</p>

<ul>
  <li><strong>Match Settings</strong>: Use the same Instance Type, VPC, and Security Group as the old server.</li>
  <li><strong>Install Packages</strong>: SSH into the new instance and install your stack:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>dnf update <span class="nt">-y</span>
<span class="nb">sudo </span>dnf <span class="nb">install </span>nginx certbot python3-certbot-nginx <span class="nt">-y</span> <span class="c"># and your specific packages</span>
</code></pre></div>    </div>
  </li>
  <li><strong>Configure &amp; Migrate</strong>: Copy your Nginx configuration files, Certbot files, and application code/data from the old server to the new one. Ensure file permissions are correct.</li>
</ul>

<h3 id="3-testing">3. Testing</h3>
<p>This step ensures the new server is flawless before the public sees it.</p>

<ul>
  <li><strong>Local Host File Trick</strong>: Temporarily edit your local machine’s <code class="highlighter-rouge">hosts</code> file to point your domain names to the new instance’s Public IP. Or set up new certs in ACM / certbot and routes in AWS Route 53 if preferred.</li>
  <li><strong>Test Everything</strong>: Browse both your sites. Check all features, forms, and database interactions. Once satisfied, remove the entries from your hosts file.</li>
</ul>

<h3 id="4-cutover-the-switch">4. Cutover (The Switch)</h3>
<p>When you are 100% confident, update your DNS records to point the domain names to the new instance’s Public IP (or Elastic IP). Wait for the DNS TTL to expire. Traffic is now safely serving from the updated server.</p>

<p>You could likely make another AMI image at this point or during the process so you have it as a recovery point.</p>

<h2 id="option-2-the-high-speed-strategy-in-place-upgrade">Option 2: The High-Speed Strategy (In-Place Upgrade)</h2>

<p>If your upgrade is a minor version bump within the same OS (like AL2023.6 to AL2023.9), an in-place upgrade is faster. This is how I handle routine patching, but you must follow the safety protocol.</p>

<h3 id="1-first-step-mandatory">1. First Step (Mandatory)</h3>
<p>Just like the migration, your AMI backup is non-negotiable.</p>

<p><strong>Action</strong>: Create an AMI (Amazon Machine Image) now. Do not skip this.</p>

<h3 id="2--risk-assessment-what-could-break">2. 🔎 Risk Assessment: What Could Break</h3>
<p>Since Nginx relies on OpenSSL and the kernel, these are your potential failure points. Breaking changes are rare in minor AL2023 updates, but they do happen via dependency bumps.</p>

<table>
  <thead>
    <tr>
      <th>Component</th>
      <th>Primary Risk</th>
      <th>Mitigation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>OpenSSL 3.x Update</td>
      <td>Nginx may fail to start if it uses deprecated SSL/TLS directives.</td>
      <td>Check config before rebooting: <code class="highlighter-rouge">sudo nginx -t</code></td>
    </tr>
    <tr>
      <td>Kernel Update</td>
      <td>System fails to boot after restart.</td>
      <td>The AMI backup is your safeguard.</td>
    </tr>
  </tbody>
</table>

<p>Now we update.</p>

<h3 id="3-the-targeted-update">3. The Targeted Update</h3>
<p>AL2023 uses versioned repositories. We need to specifically target the latest version (e.g., <code class="highlighter-rouge">2023.9.20251117</code>) to pull all patches.</p>

<p>SSH in and run these commands sequentially:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 1. Preview the changes (see which packages will be touched)</span>
<span class="nb">sudo </span>dnf check-update <span class="nt">--releasever</span><span class="o">=</span>2023.9.20251117

<span class="c"># 2. Execute the upgrade command</span>
<span class="nb">sudo </span>dnf upgrade <span class="nt">--releasever</span><span class="o">=</span>2023.9.20251117 <span class="nt">-y</span>
</code></pre></div></div>

<h3 id="4-final-checks-and-verification">4. Final Checks And Verification</h3>
<p>The new packages are installed, but the old kernel and services may still be running.</p>

<ul>
  <li><strong>Verify Nginx Config</strong>: Run this immediately after the upgrade:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>nginx <span class="nt">-t</span>
</code></pre></div>    </div>
  </li>
  <li><strong>Reboot</strong>: If the kernel was updated, you must reboot.
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>reboot
</code></pre></div>    </div>
  </li>
  <li><strong>Final Check</strong>: Once back up, ensure Nginx is running and your sites are online:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>systemctl status nginx
</code></pre></div>    </div>
  </li>
</ul>

<h2 id="closing-thoughts">Closing thoughts</h2>

<p>For major OS version changes (e.g., AL2 to AL2023), <strong>Migrate</strong>.</p>

<p>For minor patches within AL2023, the <strong>In-Place Upgrade</strong> is quick and efficient—as long as you have that fresh AMI backup.</p>]]></content><author><name>Q</name><email>architect@architectfwd.com</email></author><category term="architecture" /><category term="platforms" /><category term="aws" /><category term="ec2" /><category term="linux" /><summary type="html"><![CDATA[When that friendly, slightly intimidating message about a newer Amazon Linux release pops up, you face the sysadmin’s fundamental dilemma: Speed and simplicity (in-place update) versus absolute certainty (migration).]]></summary></entry><entry><title type="html">Stripe CLI - error api key expired when in listening mode.</title><link href="https://architectfwd.com/architecture/platforms/stripe/payments/2025/10/23/stripe-cli-api-key-expired/" rel="alternate" type="text/html" title="Stripe CLI - error api key expired when in listening mode." /><published>2025-10-23T08:01:35+00:00</published><updated>2025-10-23T08:01:35+00:00</updated><id>https://architectfwd.com/architecture/platforms/stripe/payments/2025/10/23/stripe-cli-api-key-expired</id><content type="html" xml:base="https://architectfwd.com/architecture/platforms/stripe/payments/2025/10/23/stripe-cli-api-key-expired/"><![CDATA[<p>Getting the error ‘API Key Expired’ while testing your Stripe integration using the stripe cli? Here’s how to update the keys.</p>

<h2 id="stripe">Stripe</h2>

<p>Stripe is integrated into my apps for payments and subscription plans. I also use a concept of AI credits for my apps and so those need to be refreshed for each active subscription period.</p>

<p>I was adding some new functionality to ArchitectFWD Enterprise <a href="https://enterprise.architectfwd.com/" target="_blank">(check out ArchitectFWD Enterprise Platform - Software as a Service)</a> and so to test the AI credits and Stripe subscriptions, I started up the stripe cli listener from the command line.</p>

<blockquote>
  <p>FATAL Error while authenticating with Stripe: Authorization failed, status=401, body={
  “error”: {
    “code”: “api_key_expired”,
    “doc_url”: “https://stripe.com/docs/error-codes/api-key-expired”,
    “message”: “Expired API Key provided: rk_test_<strong>**</strong><strong>**</strong><strong>**</strong><strong>**</strong><strong>**</strong><strong>**</strong><strong>**</strong><strong>**</strong><strong>**</strong><strong>**</strong><strong>**</strong><strong>**</strong><strong>**</strong><strong>**</strong><strong>**</strong>***….”,
    “type”: “invalid_request_error”
  }
}</p>
</blockquote>

<h2 id="the-fix">The fix</h2>

<p>Log back into the Stripe dashboard and enable test mode. I’ve not yet set up the new sandbox functionality but test mode still works so I continued to set the new API keys in test mode.</p>

<p>Go to API Keys in the Stripe dashboard and under the standard API Keys, rotate the keys Publishable Key and Secret Key.</p>

<p>Then also refresh the webhook key on the Stripe developer console in the dashboard.</p>

<p>Go back to the command line and type</p>

<blockquote>
  <p>stripe config –set test_mode_pub_key pk_test_XXXXXXXX</p>
</blockquote>

<p>Then the other key</p>

<blockquote>
  <p>stripe config –set test_mode_api_key sk_test_XXXXXXXX</p>
</blockquote>

<p>These keys you should have from having performed the key rotations.</p>

<p>Then try start up the CLI again</p>

<blockquote>
  <p>stripe listen –forward-to http://localhost:8000/stripe/webhook</p>
</blockquote>

<p>You should see this</p>
<blockquote>
  <p>Ready! You are using Stripe API Version [2024-06-20]. Your webhook signing secret is XXXXX</p>
</blockquote>

<p>Set your webhook signing secret in your app and give it a test. I just created a new subscription in test mode in the Stripe dashboard.</p>

<p>Start up the Stripe cli -</p>
<blockquote>
  <p>2025-10-23 21:11:32   –&gt; setup_intent.created [evt</p>
</blockquote>

<p>looking at my logs for testing I can see</p>
<blockquote>
  <p>local.INFO: [StripeWebHookListener] Stripe Event setup_intent.created Payload: {“id”:”evt_…”</p>
</blockquote>

<p><img src="/images/blog/20251023/architectfwd-enterprise-20251023-stripe-cli-refresh-active-in-team-settings.png" alt="Architect Forward (architectFWD™) Enterprise test subscription active after using stripe cli in test mode" /></p>

<p>Looking good.</p>

<h2 id="closing-thoughts">Closing thoughts</h2>

<p>The test keys seem to have a maximum expiry length of 7 days, so get to testing and ship that feature!</p>]]></content><author><name>Q</name><email>architect@architectfwd.com</email></author><category term="architecture" /><category term="platforms" /><category term="stripe" /><category term="payments" /><summary type="html"><![CDATA[Getting the error ‘API Key Expired’ while testing your Stripe integration using the stripe cli? Here’s how to update the keys.]]></summary></entry><entry><title type="html">AI / AWS Bedrock Claude V2 - This model version has reached the end of its life.</title><link href="https://architectfwd.com/architecture/platforms/amazon-web-servers-aws/ai/aws-bedrock-studio/2025/09/13/ai-aws-bedrock-this-model-version-has-reached-the-end-of-its-life/" rel="alternate" type="text/html" title="AI / AWS Bedrock Claude V2 - This model version has reached the end of its life." /><published>2025-09-13T07:07:34+00:00</published><updated>2025-09-13T07:07:34+00:00</updated><id>https://architectfwd.com/architecture/platforms/amazon-web-servers-aws/ai/aws-bedrock-studio/2025/09/13/ai-aws-bedrock-this-model-version-has-reached-the-end-of-its-life</id><content type="html" xml:base="https://architectfwd.com/architecture/platforms/amazon-web-servers-aws/ai/aws-bedrock-studio/2025/09/13/ai-aws-bedrock-this-model-version-has-reached-the-end-of-its-life/"><![CDATA[<p>I received this error tonight while working on my apps that use AWS Bedrock.”This model version has reached the end of its life. Please refer to the AWS documentation for more details.” I was still using it happily a few days back, and didn’t get any notifications so let’s take a look at this a little more.</p>

<h2 id="aws-bedrock">AWS Bedrock</h2>

<p>I am using AWS Bedrock and the API to embed AI in two apps I’m building currently.</p>

<p>When calling the API earlier I was given this error:</p>

<blockquote>
  <p>Error: Error executing “InvokeModel” on “https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-v2/invoke”; AWS HTTP error: Client error: <code class="highlighter-rouge">POST https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-v2/invoke</code> resulted in a <code class="highlighter-rouge">404 Not Found</code> response: {“message”:”This model version has reached the end of its life. Please refer to the AWS documentation for more details.” (truncated…) ResourceNotFoundException (client): This model version has reached the end of its life. Please refer to the AWS documentation for more details.</p>
</blockquote>

<h3 id="model-lifecycles">Model Lifecycles</h3>

<p>The message “This model version has reached the end of its life” indicates that the specific version of Anthropic’s Claude 2 model, identified as anthropic.claude-v2, is no longer supported or available for use on Amazon Bedrock.</p>

<p>This means that any applications or integrations relying on this particular model version will need to be updated to use a newer, supported Claude model. Anthropic and AWS typically provide information on model deprecations and recommended replacements.</p>

<p>I didnt get any notice perhaps its in the console.</p>

<p>Users are advised to migrate their usage to a suitable replacement model before the retirement date, as requests to deprecated models will fail after that point.
For example, users who were utilizing anthropic.claude-v2 would need to migrate to a newer version like Claude 3 or Claude 4 models (e.g., Claude Sonnet 4, Claude Opus 4.1) which are available on Amazon Bedrock. Thorough testing of applications with the new models is recommended before the full transition.</p>

<p><a href="https://docs.aws.amazon.com/bedrock/latest/userguide/model-lifecycle.html#versions-for-eol" target="_blank">Read the Bedrock model lifecycle page</a>. It says “Amazon Bedrock is continuously working to bring the latest versions of foundation models that have better capabilities, accuracy, and safety. As we launch new model versions, you can test them with the Amazon Bedrock console or API, and migrate your applications to benefit from the latest model versions.</p>

<p>A model offered on Amazon Bedrock can be in one of these states: Active, Legacy, or End-of-Life (EOL)”</p>

<p>That link proceeds to give a information and list of active versions, legacy versions and end-of-life versions.</p>

<p>For legacy versions the page says “We will notify you when a model provider moves a model to the Legacy state. A model will be in the Legacy state for at least 6 months before the EOL date. While you can continue to use a Legacy model during this period, you should plan to transition to an Active model before the EOL date. New customers can’t use Legacy models and existing customers may lose access to Legacy models due to inactivity.”</p>

<p>For EOL models “EOL — After the EOL date, a model will be marked EOL in the console and in the following table. On, or soon after the EOL date, the model is no longer available for use in all AWS Regions and requests made to this version will fail, unless there is a private arrangement between you and the provider for continued access. You will need to migrate to the latest model by updating your application code before the EOL date. Migration will not happen automatically.”</p>

<p>The EOL page suggests I move to Claude Sonnet 4. I’ll do so in coming days.</p>

<h2 id="closing-thoughts">Closing thoughts</h2>

<p>As part of your governance practices you will need to be monitoring model lifecycle.</p>

<p>I’ve got a gap in this control and now have some migration and testing to do. I also need to figure out where the notifications on model lifecycle changes can be viewed and more reasonably subscribed to.</p>]]></content><author><name>Q</name><email>architect@architectfwd.com</email></author><category term="architecture" /><category term="platforms" /><category term="amazon-web-servers-AWS" /><category term="ai" /><category term="aws-bedrock-studio" /><summary type="html"><![CDATA[I received this error tonight while working on my apps that use AWS Bedrock.”This model version has reached the end of its life. Please refer to the AWS documentation for more details.” I was still using it happily a few days back, and didn’t get any notifications so let’s take a look at this a little more.]]></summary></entry></feed>