<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://ondfisk.dk//feed.xml" rel="self" type="application/atom+xml" /><link href="https://ondfisk.dk//" rel="alternate" type="text/html" hreflang="en-GB" /><updated>2026-05-02T12:58:09+00:00</updated><id>https://ondfisk.dk//feed.xml</id><title type="html">ondfisk - rants from the cloud</title><subtitle>Personal site/blog of Rasmus Lystrøm. This site, its content and opinions are my own.</subtitle><author><name>Rasmus Lystrøm</name></author><entry><title type="html">Post “Accelerate”: Why are we still failing at adopting DevOps in the Enterprise?</title><link href="https://ondfisk.dk//post-accelerate-gotech-world-2025/" rel="alternate" type="text/html" title="Post “Accelerate”: Why are we still failing at adopting DevOps in the Enterprise?" /><published>2025-11-11T07:00:00+00:00</published><updated>2025-11-11T07:00:00+00:00</updated><id>https://ondfisk.dk//post-accelerate-gotech-world</id><content type="html" xml:base="https://ondfisk.dk//post-accelerate-gotech-world-2025/"><![CDATA[<p>Keynote given at <a href="https://www.gotech.world/agenda-developers-stage-day1"><em>GoTech World 2025</em></a> – in Bucharest November 11, 2025.</p>

<p>Opening keynote for GoTech World Developer’s Stage 11 November 2025.</p>

<p>Reflecting on decades of experience working with the largest enterprises around Europe I try to give you my take on why we fail at changing anything in the enterprise and give you my take on what to do about it.</p>

<!--more-->

<h2 id="slides">Slides</h2>

<script defer="" class="speakerdeck-embed" data-id="3e863a7302f24181914e54ef000c50f6" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>]]></content><author><name>Rasmus Lystrøm</name></author><category term="devops" /><summary type="html"><![CDATA[Keynote given at GoTech World 2025 – in Bucharest November 11, 2025. Opening keynote for GoTech World Developer’s Stage 11 November 2025. Reflecting on decades of experience working with the largest enterprises around Europe I try to give you my take on why we fail at changing anything in the enterprise and give you my take on what to do about it.]]></summary></entry><entry><title type="html">Reflections of AI: A Trilogy in Four Parts</title><link href="https://ondfisk.dk//reflections-of-ai-gotocph-2025/" rel="alternate" type="text/html" title="Reflections of AI: A Trilogy in Four Parts" /><published>2025-10-03T00:00:00+00:00</published><updated>2025-10-03T00:00:00+00:00</updated><id>https://ondfisk.dk//reflections-of-ai-gotocph</id><content type="html" xml:base="https://ondfisk.dk//reflections-of-ai-gotocph-2025/"><![CDATA[<p>Talk given at <a href="https://gotocph.com/2025/sessions/3743/reflections-of-ai-a-trilogy-in-four-parts"><em>GOTO; Copenhagen 2025</em></a> October 3, 2025.</p>

<p>Reflecting on the era of AI, I present my views as “A Trilogy in Four Parts”:</p>

<ol>
  <li>The impact of generative AI adoption</li>
  <li>The [hidden] price of AI adoption</li>
  <li>Useful AI in a world saturated with LLMs</li>
  <li>How to build [valuable AI] solutions</li>
</ol>

<!--more-->

<p>We start with a nod to Douglas Adams and discussion on the latest research showing the dark side of AI but ends on a silver lining on possible uses of AI.</p>

<p>I promise a mix of rants, wakeup calls, and laughs.</p>

<h2 id="references">References</h2>

<ul>
  <li><a href="https://arxiv.org/pdf/2302.06590">The Impact of AI on Developer Productivity: Evidence from GitHub Copilot</a></li>
  <li><a href="https://www.blueoptima.com/resource/llm-paper-1/">BlueOptima: The Impact of Generative AI on Software Developer Performance</a></li>
  <li><a href="https://www.nber.org/papers/w33777">Large Language Models, Small Labor Market Effects</a></li>
  <li><a href="https://ml-site.cdn-apple.com/papers/the-illusion-of-thinking.pdf">Apple: The Illusion of Thinking: Understanding the Strengths and Limitations of Reasoning Models via the Lens of Problem Complexity</a></li>
  <li><a href="https://github.blog/news-insights/product-news/github-copilot-meet-the-new-coding-agent/">GitHub Copilot: Meet the new coding agent</a></li>
  <li><a href="https://www.gitclear.com/ai_assistant_code_quality_2025_research">GitClear: AI Copilot Code Quality</a></li>
  <li><a href="https://hbr.org/2025/09/ai-generated-workslop-is-destroying-productivity">AI-Generated “Workslop” Is - Destroying Productivity</a></li>
  <li><a href="https://www.wheresyoured.at/the-era-of-the-business-idiot/">The Era of the Business Idiot</a></li>
  <li><a href="https://www.ft.com/content/c9f905a0-cbfc-4a0a-ac4f-0d68d0fc64aa">AI is not killing jobs, US study finds</a></li>
  <li><a href="https://nyheder.tv2.dk/samfund/2024-06-27-kunstig-intelligens-viser-oploeftende-resultater-i-at-opdage-brystkraeft">Breast Cancer</a></li>
  <li><a href="https://www.microsoft.com/en-us/research/wp-content/uploads/2025/01/lee_2025_ai_critical_thinking_survey.pdf">The Impact of Generative AI on Critical Thinking: Self-Reported Reductions in Cognitive Effort and Confidence Effects From a Survey - of Knowledge Workers</a></li>
  <li><a href="https://link.springer.com/article/10.1007/s10676-024-09775-5">ChatGPT is Bullshit</a></li>
  <li><a href="https://www.forbes.com/sites/quickerbettertech/2024/03/13/klarnas-new-ai-tool-does-the-work-of-700-customer-service-reps/">Klarna’s New AI Tool Does The Work Of 700 Customer Service Reps</a></li>
  <li><a href="https://fortune.com/2025/05/09/klarna-ai-humans-return-on-investment/">As Klarna flips from AI-first to hiring people again, a new landmark survey reveals most AI projects fail to deliver</a></li>
  <li><a href="https://blog.gardeviance.org/2015/03/on-pioneers-settlers-town-planners-and.html">Wardley, Simon: Pioneers, Settlers, and Town Planners</a></li>
</ul>

<h2 id="slides">Slides</h2>

<script defer="" class="speakerdeck-embed" data-id="ce7164f8538d420696054118d6a49a34" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>

<h2 id="photos">Photos</h2>

<p><img src="/assets/gotocph-2025-1.jpg" alt="GOTO; Copenhagen 2025 - 1" title="GOTO; Copenhagen 2025 - 1" /></p>

<p><img src="/assets/gotocph-2025-2.jpg" alt="GOTO; Copenhagen 2025 - 2" title="GOTO; Copenhagen 2025 - 2" /></p>]]></content><author><name>Rasmus Lystrøm</name></author><category term="ai" /><summary type="html"><![CDATA[Talk given at GOTO; Copenhagen 2025 October 3, 2025. Reflecting on the era of AI, I present my views as “A Trilogy in Four Parts”: The impact of generative AI adoption The [hidden] price of AI adoption Useful AI in a world saturated with LLMs How to build [valuable AI] solutions]]></summary></entry><entry><title type="html">Reflections of AI: A Trilogy in Four Parts</title><link href="https://ondfisk.dk//reflections-of-ai-dau-2025/" rel="alternate" type="text/html" title="Reflections of AI: A Trilogy in Four Parts" /><published>2025-09-24T00:00:00+00:00</published><updated>2025-09-24T00:00:00+00:00</updated><id>https://ondfisk.dk//reflections-of-ai-dau</id><content type="html" xml:base="https://ondfisk.dk//reflections-of-ai-dau-2025/"><![CDATA[<p>Talk given at <a href="https://www.danskindustri.dk/arrangementer/soeg/arrangementer/medlemsforeninger/dau/unlocking-potential-in-production-real-world-applications-of-ai-iot-edge-and-cloud/"><em>Dansk Automationsselskab: Unlocking Potential in Production: Real-World Applications of AI, IoT, Edge, and Cloud</em></a> September 24, 2025.</p>

<p>In the context of automation, I present my views on the AI hype and trends in 2025 as a Trilogy in Four Parts:</p>

<ol>
  <li>The impact of generative AI adoption</li>
  <li>The [hidden] price of AI adoption</li>
  <li>Useful AI in a world saturated with LLMs</li>
  <li>How to build [valuable AI] solutions</li>
</ol>

<!--more-->

<h2 id="slides">Slides</h2>

<script defer="" class="speakerdeck-embed" data-id="b33af78faa884bbf804e3c9b163a5b2c" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>]]></content><author><name>Rasmus Lystrøm</name></author><category term="ai" /><summary type="html"><![CDATA[Talk given at Dansk Automationsselskab: Unlocking Potential in Production: Real-World Applications of AI, IoT, Edge, and Cloud September 24, 2025. In the context of automation, I present my views on the AI hype and trends in 2025 as a Trilogy in Four Parts: The impact of generative AI adoption The [hidden] price of AI adoption Useful AI in a world saturated with LLMs How to build [valuable AI] solutions]]></summary></entry><entry><title type="html">Reflections of AI: A Trilogy in Four Parts</title><link href="https://ondfisk.dk//reflections-of-ai-melbourne-2025/" rel="alternate" type="text/html" title="Reflections of AI: A Trilogy in Four Parts" /><published>2025-06-19T00:00:00+00:00</published><updated>2025-06-19T00:00:00+00:00</updated><id>https://ondfisk.dk//reflections-of-ai-melbourne</id><content type="html" xml:base="https://ondfisk.dk//reflections-of-ai-melbourne-2025/"><![CDATA[<p>Keynote given at <a href="https://yowcon.com/tech-leaders-melbourne-2025"><em>YOW! Tech Leaders Summit Melbourne 2025</em></a> June 19, 2025.</p>

<p>Reflecting on the era of AI, I present my views as a Trilogy in Four Parts:</p>

<ul>
  <li>The <em>impact</em> of generative AI adoption</li>
  <li>The [hidden] price of AI adoption</li>
  <li>Useful AI in a world saturated with LLMs</li>
  <li>How to build [valuable AI] solutions</li>
</ul>

<!--more-->

<h2 id="slides">Slides</h2>

<script defer="" class="speakerdeck-embed" data-id="9be9875727eb4fbaa71e01443e113e4f" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>]]></content><author><name>Rasmus Lystrøm</name></author><category term="ai" /><summary type="html"><![CDATA[Keynote given at YOW! Tech Leaders Summit Melbourne 2025 June 19, 2025. Reflecting on the era of AI, I present my views as a Trilogy in Four Parts: The impact of generative AI adoption The [hidden] price of AI adoption Useful AI in a world saturated with LLMs How to build [valuable AI] solutions]]></summary></entry><entry><title type="html">Reflections of AI: A Trilogy in Four Parts</title><link href="https://ondfisk.dk//reflections-of-ai-sydney-2025/" rel="alternate" type="text/html" title="Reflections of AI: A Trilogy in Four Parts" /><published>2025-06-18T00:00:00+00:00</published><updated>2025-06-18T00:00:00+00:00</updated><id>https://ondfisk.dk//reflections-of-ai-sydney</id><content type="html" xml:base="https://ondfisk.dk//reflections-of-ai-sydney-2025/"><![CDATA[<p>Keynote given at <a href="https://yowcon.com/tech-leaders-sydney-2025"><em>YOW! Tech Leaders Summit Sydney 2025</em></a> June 18, 2025.</p>

<p>Reflecting on the era of AI, I present my views as a Trilogy in Four Parts:</p>

<ul>
  <li>The <em>impact</em> of generative AI adoption</li>
  <li>The [hidden] price of AI adoption</li>
  <li>Useful AI in a world saturated with LLMs</li>
  <li>How to build [valuable AI] solutions</li>
</ul>

<!--more-->

<h2 id="slides">Slides</h2>

<script defer="" class="speakerdeck-embed" data-id="728f93ec6f12455caed38b2001e0f0d1" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>]]></content><author><name>Rasmus Lystrøm</name></author><category term="ai" /><summary type="html"><![CDATA[Keynote given at YOW! Tech Leaders Summit Sydney 2025 June 18, 2025. Reflecting on the era of AI, I present my views as a Trilogy in Four Parts: The impact of generative AI adoption The [hidden] price of AI adoption Useful AI in a world saturated with LLMs How to build [valuable AI] solutions]]></summary></entry><entry><title type="html">Reflections of AI: A Trilogy in Four Parts</title><link href="https://ondfisk.dk//reflections-of-ai-brisbane-2025/" rel="alternate" type="text/html" title="Reflections of AI: A Trilogy in Four Parts" /><published>2025-06-17T00:00:00+00:00</published><updated>2025-06-17T00:00:00+00:00</updated><id>https://ondfisk.dk//reflections-of-ai-brisbane</id><content type="html" xml:base="https://ondfisk.dk//reflections-of-ai-brisbane-2025/"><![CDATA[<p>Keynote given at <a href="https://yowcon.com/tech-leaders-brisbane-2025"><em>YOW! Tech Leaders Summit Brisbane 2025</em></a> June 17, 2025.</p>

<p>Reflecting on the era of AI, I present my views as a Trilogy in Four Parts:</p>

<ul>
  <li>The <em>impact</em> of generative AI adoption</li>
  <li>The [hidden] price of AI adoption</li>
  <li>Useful AI in a world saturated with LLMs</li>
  <li>How to build [valuable AI] solutions</li>
</ul>

<!--more-->

<h2 id="slides">Slides</h2>

<script defer="" class="speakerdeck-embed" data-id="aa955f746cd2434a90dcb83f1620b3d5" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>]]></content><author><name>Rasmus Lystrøm</name></author><category term="ai" /><summary type="html"><![CDATA[Keynote given at YOW! Tech Leaders Summit Brisbane 2025 June 17, 2025. Reflecting on the era of AI, I present my views as a Trilogy in Four Parts: The impact of generative AI adoption The [hidden] price of AI adoption Useful AI in a world saturated with LLMs How to build [valuable AI] solutions]]></summary></entry><entry><title type="html">Post “Accelerate”: Why are we still failing at adopting DevOps in the Enterprise?</title><link href="https://ondfisk.dk//post-accelerate-aarhus-2025/" rel="alternate" type="text/html" title="Post “Accelerate”: Why are we still failing at adopting DevOps in the Enterprise?" /><published>2025-04-29T08:00:00+00:00</published><updated>2025-04-29T08:00:00+00:00</updated><id>https://ondfisk.dk//post-accelerate-aarhus</id><content type="html" xml:base="https://ondfisk.dk//post-accelerate-aarhus-2025/"><![CDATA[<p>Ignite Talk given at <a href="https://devopsdays.org/events/2025-aarhus/"><em>DevOpsDays Aarhus 2025</em></a> – in Aarhus April 30, 2025.</p>

<p>24 years of agile, 17 years of DevOps and 6 years after “Accelerate” got published we see enterprises doing business as usual reaping no real benefits of either agile nor DevOps. Reflecting back on 10 years as a principal consultant and cloud solution architect at Microsoft working with practically all the major Danish enterprises and a big number of European ones, I want to share my views on why enterprises fail at adopting DevOps and what we should be doing to change that.</p>

<!--more-->

<h2 id="slides">Slides</h2>

<script defer="" class="speakerdeck-embed" data-id="acd03c51630944b5b0073c280ebb9f4d" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>

<h2 id="photos">Photos</h2>

<p><img src="/assets/devopsdays-aarhus-141.jpg" alt="DevOps Days Aarhus 2025 - 141" title="DevOps Days Aarhus 2025 - 141" /></p>

<p><img src="/assets/devopsdays-aarhus-143.jpg" alt="DevOps Days Aarhus 2025 - 143" title="DevOps Days Aarhus 2025 - 143" /></p>

<p><img src="/assets/devopsdays-aarhus-144.jpg" alt="DevOps Days Aarhus 2025 - 144" title="DevOps Days Aarhus 2025 - 144" /></p>

<p><img src="/assets/devopsdays-aarhus-146.jpg" alt="DevOps Days Aarhus 2025 - 146" title="DevOps Days Aarhus 2025 - 146" /></p>

<p><img src="/assets/devopsdays-aarhus-184.jpg" alt="DevOps Days Aarhus 2025 - 184" title="DevOps Days Aarhus 2025 - 184" /></p>

<p><img src="/assets/devopsdays-aarhus-185.jpg" alt="DevOps Days Aarhus 2025 - 185" title="DevOps Days Aarhus 2025 - 185" /></p>]]></content><author><name>Rasmus Lystrøm</name></author><category term="devops" /><summary type="html"><![CDATA[Ignite Talk given at DevOpsDays Aarhus 2025 – in Aarhus April 30, 2025. 24 years of agile, 17 years of DevOps and 6 years after “Accelerate” got published we see enterprises doing business as usual reaping no real benefits of either agile nor DevOps. Reflecting back on 10 years as a principal consultant and cloud solution architect at Microsoft working with practically all the major Danish enterprises and a big number of European ones, I want to share my views on why enterprises fail at adopting DevOps and what we should be doing to change that.]]></summary></entry><entry><title type="html">A simplified Azure Landing Zones alternative</title><link href="https://ondfisk.dk//a-simplified-azure-landing-zones-alternative/" rel="alternate" type="text/html" title="A simplified Azure Landing Zones alternative" /><published>2025-03-24T09:00:00+00:00</published><updated>2025-03-24T09:00:00+00:00</updated><id>https://ondfisk.dk//a-simplified-azure-landing-zones-alternative</id><content type="html" xml:base="https://ondfisk.dk//a-simplified-azure-landing-zones-alternative/"><![CDATA[<p>Since before the <a href="https://en.wikipedia.org/wiki/COVID-19_pandemic">plague</a> a number of <em>reference architectures</em> for a <a href="https://learn.microsoft.com/en-us/azure/architecture/landing-zones/landing-zone-deploy"><em>Azure Landing Zones</em></a> have emerged. From a Microsoft perspective it seems to have started with the <em>North Star</em> project which eventually became <a href="https://github.com/Azure/Enterprise-Scale/">Azure Landing Zones (Enterprise-Scale) - Reference Implementation</a> (first commit May 2020) using <em>ARM</em> templates. A <em>Terraform</em> version – <a href="https://github.com/Azure/terraform-azurerm-caf-enterprise-scale">Azure landing zones Terraform module</a> – and a <em>Bicep</em> version <a href="https://github.com/Azure/ALZ-Bicep">Azure Landing Zones (ALZ) - Bicep</a> soon followed.</p>

<!--more-->

<p>The current guidance is to use <a href="https://github.com/Azure/bicep-registry-modules/">Azure Verified Modules (AVM)</a> to deploy an <em>Azure Landing Zones</em> implementation.</p>

<p>To monitor your Azure platform, deploying an additional project: <a href="https://github.com/Azure/azure-monitor-baseline-alerts/">Azure Monitor Baseline Alerts (AMBA)</a> seems to be the <a href="https://learn.microsoft.com/en-us/azure/azure-monitor/alerts/alerts-overview#using-azure-policies-for-alerting-at-scale"><em>official</em></a> recommendation.</p>

<h2 id="complexity">Complexity</h2>

<p>All the reference implementations above suffer from the authors’ incessant need to continuously add more <em>stuff</em>. The implementations have very large and daunting code bases, which means that they are almost impossible to get a grip on - let alone understand how to extend.</p>

<p>To remedy these challenges we introduce a <em>simplified</em> implementation which should allow platform teams to much more easily reason about and understand what they are trying to build.</p>

<p>The <em>simplified</em> version can be found at <a href="https://github.com/ondfisk/AzureLandingZonesDemo">Azure Landing Zones Demo</a>.</p>

<p>To compare the complexity and maintainability of the solutions mentioned, we can use <a href="https://github.com/AlDanial/cloc"><em>cloc</em></a> to get an overall idea of the number of files and lines of code in each implementation. We will only count <em>infrastructure as code</em> and scripts: <code class="language-plaintext highlighter-rouge">JSON</code>, <code class="language-plaintext highlighter-rouge">HCL</code>, <code class="language-plaintext highlighter-rouge">Bicep</code>, <code class="language-plaintext highlighter-rouge">Bash</code>, and <code class="language-plaintext highlighter-rouge">PowerShell</code>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cloc <span class="nt">--include-lang</span><span class="o">=</span>JSON,PowerShell,Bourne<span class="se">\ </span>Shell,HCL,Standard<span class="se">\ </span>ML,YAML <span class="nt">--force-lang</span><span class="o">=</span><span class="s2">"Standard ML,bicep"</span> <span class="o">[</span>path]
</code></pre></div></div>

<table>
  <thead>
    <tr>
      <th>Language</th>
      <th style="text-align: right">ARM</th>
      <th style="text-align: right">Terraform</th>
      <th style="text-align: right">Bicep</th>
      <th style="text-align: right">AVM</th>
      <th style="text-align: right">AMBA</th>
      <th style="text-align: right">Simplified</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Bicep</td>
      <td style="text-align: right">420</td>
      <td style="text-align: right"> </td>
      <td style="text-align: right">11,692</td>
      <td style="text-align: right">172,920</td>
      <td style="text-align: right">103,483</td>
      <td style="text-align: right">1,150</td>
    </tr>
    <tr>
      <td>HCL</td>
      <td style="text-align: right"> </td>
      <td style="text-align: right">9,142</td>
      <td style="text-align: right"> </td>
      <td style="text-align: right"> </td>
      <td style="text-align: right"> </td>
      <td style="text-align: right"> </td>
    </tr>
    <tr>
      <td>JSON</td>
      <td style="text-align: right">119,990</td>
      <td style="text-align: right">41,072</td>
      <td style="text-align: right">75,722</td>
      <td style="text-align: right">593,406</td>
      <td style="text-align: right">738,156</td>
      <td style="text-align: right">1,328</td>
    </tr>
    <tr>
      <td>YAML</td>
      <td style="text-align: right">740</td>
      <td style="text-align: right">801</td>
      <td style="text-align: right">3,063</td>
      <td style="text-align: right">17,225</td>
      <td style="text-align: right">18,120</td>
      <td style="text-align: right">886</td>
    </tr>
    <tr>
      <td>PowerShell</td>
      <td style="text-align: right">5,431</td>
      <td style="text-align: right">685</td>
      <td style="text-align: right">1,439</td>
      <td style="text-align: right">12,912</td>
      <td style="text-align: right">2,030</td>
      <td style="text-align: right">455</td>
    </tr>
    <tr>
      <td>Bash</td>
      <td style="text-align: right"> </td>
      <td style="text-align: right">406</td>
      <td style="text-align: right">13</td>
      <td style="text-align: right">331</td>
      <td style="text-align: right"> </td>
      <td style="text-align: right"> </td>
    </tr>
    <tr>
      <td><strong>SUM</strong></td>
      <td style="text-align: right"><strong>126,581</strong></td>
      <td style="text-align: right"><strong>52,106</strong></td>
      <td style="text-align: right"><strong>91,929</strong></td>
      <td style="text-align: right"><strong>796,794</strong></td>
      <td style="text-align: right"><strong>861,789</strong></td>
      <td style="text-align: right"><strong>3,819</strong></td>
    </tr>
    <tr>
      <td><em>Files</em></td>
      <td style="text-align: right"><em>441</em></td>
      <td style="text-align: right"><em>442</em></td>
      <td style="text-align: right"><em>690</em></td>
      <td style="text-align: right"><em>2,475</em></td>
      <td style="text-align: right"><em>3,066</em></td>
      <td style="text-align: right"><em>82</em></td>
    </tr>
  </tbody>
</table>

<p>Assuming you prefer <em>Terraform</em>, you need to <em>inherit</em>, <em>support</em>, <em>understand</em>, and <em>reason</em> about at least <strong>52,106</strong> lines of code across <em>442</em> files! Then extend the code with your own requirements. This is going to be really <em>hard</em> even with a reasonably sized team (4-6 people)</p>

<p>Worst case scenario: You have deployed the original <em>Enterprise Scale</em> version using the <em>Portal Experience</em> [read: <em>ClickOps</em>] and added <em>Baseline Alerts</em>. You now need somehow reverse engineer your setup into <em>Infrastructure as Code</em> while trying to <em>support</em>, <em>understand</em>, and <em>reason</em> about and alert framework consisting of <em>796,794</em> lines of code across <em>2,475</em> files! This is not <em>hard</em>. This is completely <em>impossible</em> regardless of team size.</p>

<p>Compare this to the <em>simplified</em> version with <em>3,819</em> lines of code across <em>82</em> files.</p>

<p>Which version would you rather start with?</p>

<h2 id="what-does-simplified-mean-here">What does <em>simplified</em> mean here?</h2>

<p>To quote the docs:</p>

<blockquote>
  <p>The conceptual architecture is greatly simplified compared to the official one, as we empower DevOps teams to build and run their own thing.</p>

  <p>We do not want to manage network from a centralized perspective. All applications will be deployed as islands with no inter-network connectivity.</p>

  <p>We adopt a <a href="https://learn.microsoft.com/en-us/security/zero-trust/zero-trust-overview">Zero Trust</a> approach where identity and encryption trumps and often replaces Network Security.</p>

  <p>We do not require nor encourage the use of <a href="https://azure.microsoft.com/en-gb/products/private-link/">Azure Private Link</a>.</p>

  <p>We allow most services to have <strong>Public Network Access: Enabled</strong> because we rely on enforcing <strong>Entra ID authentication</strong> and <strong>HTTPS/TLS 1.2+</strong>.</p>

  <h3 id="online-landing-zones">Online Landing Zones</h3>

  <p>These are the most important landing zones - all newer applications should be deployed here - even if data resides on-premises.</p>

  <p>Connection to on-premises resources should be managed using zero-trust approaches with resources like:</p>

  <ul>
    <li><a href="https://learn.microsoft.com/en-us/azure/azure-relay/">Azure Relay</a></li>
    <li><a href="https://learn.microsoft.com/en-us/azure/service-bus-messaging/">Azure Service Bus</a></li>
    <li><a href="https://learn.microsoft.com/en-us/azure/api-management/">Azure API Management</a></li>
    <li><a href="https://azure.microsoft.com/en-us/products/azure-arc/">Azure Arc</a></li>
  </ul>

  <h3 id="corp-landing-zones">Corp Landing Zones</h3>

  <p>Corp landing zones should exclusively be used for lift-and-shift scenarios (and avoided all together if possible). This is reserved for applications which do not support modern authentication and relies on Kerberos (Windows Active Directory).</p>

  <p>– <a href="https://github.com/ondfisk/AzureLandingZonesDemo">Azure Landing Zones Demo</a></p>
</blockquote>

<h2 id="comparing-policy-driven-governance-to-verified-modules">Comparing policy-driven governance to <em>verified modules</em></h2>

<p>Using <a href="https://learn.microsoft.com/en-us/azure/governance/policy/overview">Azure Policy</a> we supply a number of number of policies for popular resources: <a href="https://azure.microsoft.com/en-us/products/app-service/web">Web Apps</a>, <a href="https://azure.microsoft.com/en-us/products/storage/blobs/">Blob Storage</a>, <a href="https://azure.microsoft.com/en-us/products/key-vault/">Key Vault</a>, and <a href="https://azure.microsoft.com/en-us/products/azure-sql">SQL</a>.</p>

<p>Having deployed these policies we enforce the following security defaults on storage accounts:</p>

<ul>
  <li>HTTPS only (<code class="language-plaintext highlighter-rouge">supportsHttpsTrafficOnly</code>)</li>
  <li>TLS 1.2 (<code class="language-plaintext highlighter-rouge">minimumTlsVersion</code>)</li>
  <li>Disallow blob public access (<code class="language-plaintext highlighter-rouge">allowBlobPublicAccess</code>)</li>
  <li>Disallow cross tenant replication (<code class="language-plaintext highlighter-rouge">allowCrossTenantReplication</code>)</li>
  <li>Disallow shared key access (<code class="language-plaintext highlighter-rouge">allowSharedKeyAccess</code>)</li>
  <li>Default to OAuth (<code class="language-plaintext highlighter-rouge">defaultToOAuthAuthentication</code>)</li>
  <li>Enable <a href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/defender-for-storage-introduction">Defender for Storage</a></li>
</ul>

<p><strong>NB</strong>: We use <a href="https://learn.microsoft.com/en-us/azure/governance/policy/concepts/effect-modify"><em>modify</em></a> and <a href="https://learn.microsoft.com/en-us/azure/governance/policy/concepts/effect-deploy-if-not-exists">deploy if not exists</a> policy effects to ensure that issues with existing storage accounts are automatically remediated.</p>

<p><strong>NBB</strong>: Security relies on <a href="https://learn.microsoft.com/en-us/security/zero-trust/"><em>zero trust</em></a> principles of identity-based security (disabling keys) and encryption in transit (HTTPS/TLS 1.2).</p>

<p>Having done this, a storage account can be deployed with a very simple <em>Bicep</em> template:</p>

<div class="language-bicep highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">param</span> <span class="n">location</span> <span class="kt">string</span> <span class="p">=</span> <span class="nf">resourceGroup</span><span class="p">().</span><span class="n">location</span>
<span class="k">param</span> <span class="n">storageAccountName</span> <span class="kt">string</span>

<span class="k">resource</span> <span class="n">storageAccount</span> <span class="s1">'Microsoft.Storage/storageAccounts@2023-05-01'</span> <span class="p">=</span> <span class="pi">{</span>
  <span class="py">name</span><span class="p">:</span> <span class="n">storageAccountName</span>
  <span class="py">location</span><span class="p">:</span> <span class="n">location</span>
  <span class="py">kind</span><span class="p">:</span> <span class="s1">'StorageV2'</span>
  <span class="py">sku</span><span class="p">:</span> <span class="pi">{</span>
    <span class="py">name</span><span class="p">:</span> <span class="s1">'Standard_LRS'</span>
  <span class="pi">}</span>
  <span class="py">properties</span><span class="p">:</span> <span class="pi">{}</span>
<span class="pi">}</span>
</code></pre></div></div>

<p>or using <a href="https://learn.microsoft.com/en-us/cli/azure/">Azure CLI</a>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>az storage account create <span class="nt">-n</span> storage42 <span class="nt">-g</span> group <span class="nt">-l</span> swedencentral <span class="nt">--sku</span> Standard_LRS
</code></pre></div></div>

<p>The policies ensure that the platform enforces a <em>reasonable</em> set of security defaults, relieving developers from the task.</p>

<p>Compare the <strong>12</strong> lines of code in <em>Bicep</em> above to the <a href="https://github.com/Azure/bicep-registry-modules/blob/main/avm/res/storage/storage-account"><em>Azure Verified Module</em></a> version which contains <strong>3,531</strong> lines of <em>Bicep</em> across <strong>29</strong> files (<strong>738</strong> lines in the root file).</p>

<p>Yes, the <em>official</em> module can do more stuff (mostly <a href="https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it">YAGNI</a>), but we must ask the question: Which implementation would you rather reason about and support going forward?</p>

<p>The same principles apply for web apps, key vaults, and SQL. This can be extended quite easily but we deliberately want to keep the reference implementation <em>simple</em>. <em>Pull requests</em> are welcome, though.</p>

<h2 id="what-about-the-corporate-network">What about the corporate network?</h2>

<p>Cloud applications should <em>never</em> be connected to the on-premises network on the network layer. Doing so adds an unnecessary dependency and makes things less secure. Even for lift and shift of legacy applications where a connection to the on-premises network seems like the only option there are often more secure alternatives like <a href="https://azure.microsoft.com/en-us/products/microsoft-entra-ds/">Microsoft Entra Domain Services</a>. If all else fails and you must connect on-premises with IPv4 this will be equal parts expensive and complex while relying on your organisation’s existing network setup. Because of this we do not want to or mandate a <em>reference architecture</em>. This must be done bespoke every time.</p>

<p>Once again, we still recommend to <em>not</em> connect the corporate network at all and rely on <em>Azure Relay</em> and <em>Azure Service Bus</em> instead.</p>

<h2 id="conclusion">Conclusion</h2>

<p>We hope this project can serve as a reminder that often <em>less is more</em> and getting started should never require you to deploy almost a million lines of code you don’t understand.</p>

<p>Check out <a href="https://github.com/ondfisk/AzureLandingZonesDemo">Azure Landing Zones Demo</a> and let us know what you think using <em>Issues</em>, <em>Stars</em>, and <em>Pull Requests</em>.</p>]]></content><author><name>Rasmus Lystrøm</name></author><category term="azure" /><summary type="html"><![CDATA[Since before the plague a number of reference architectures for a Azure Landing Zones have emerged. From a Microsoft perspective it seems to have started with the North Star project which eventually became Azure Landing Zones (Enterprise-Scale) - Reference Implementation (first commit May 2020) using ARM templates. A Terraform version – Azure landing zones Terraform module – and a Bicep version Azure Landing Zones (ALZ) - Bicep soon followed.]]></summary></entry><entry><title type="html">Post “Accelerate”: Why are we still failing at adopting DevOps in the Enterprise?</title><link href="https://ondfisk.dk//post-accelerate-zurich-2025/" rel="alternate" type="text/html" title="Post “Accelerate”: Why are we still failing at adopting DevOps in the Enterprise?" /><published>2025-03-13T07:00:00+00:00</published><updated>2025-03-13T07:00:00+00:00</updated><id>https://ondfisk.dk//post-accelerate-zurich</id><content type="html" xml:base="https://ondfisk.dk//post-accelerate-zurich-2025/"><![CDATA[<p>Ignite Talk given at <a href="https://www.devopsdays.ch/"><em>DevOpsDays Zürich 2025</em></a> – in Zürich March 13, 2025.</p>

<p>24 years of agile, 17 years of DevOps and 6 years after “Accelerate” got published we see enterprises doing business as usual reaping no real benefits of either agile nor DevOps. Reflecting back on 10 years as a principal consultant and cloud solution architect at Microsoft working with practically all the major Danish enterprises and a big number of European ones, I want to share my views on why enterprises fail at adopting DevOps and what we should be doing to change that.</p>

<!--more-->

<h2 id="slides">Slides</h2>

<script defer="" class="speakerdeck-embed" data-id="16886a4b26b74ac7b6b0012a42b4ea78" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>

<h2 id="recording">Recording</h2>

<p><a href="https://vimeo.com/1070639488">Rasmus Lystrøm: Post “Accelerate”: Why are we still failing at adopting DevOps in the Enterprise?</a></p>]]></content><author><name>Rasmus Lystrøm</name></author><category term="devops" /><summary type="html"><![CDATA[Ignite Talk given at DevOpsDays Zürich 2025 – in Zürich March 13, 2025. 24 years of agile, 17 years of DevOps and 6 years after “Accelerate” got published we see enterprises doing business as usual reaping no real benefits of either agile nor DevOps. Reflecting back on 10 years as a principal consultant and cloud solution architect at Microsoft working with practically all the major Danish enterprises and a big number of European ones, I want to share my views on why enterprises fail at adopting DevOps and what we should be doing to change that.]]></summary></entry><entry><title type="html">Reflections of AI: The Art of AI Adoption</title><link href="https://ondfisk.dk//reflections-of-ai-copenhagen-2025/" rel="alternate" type="text/html" title="Reflections of AI: The Art of AI Adoption" /><published>2025-02-27T09:00:00+00:00</published><updated>2025-02-27T09:00:00+00:00</updated><id>https://ondfisk.dk//reflections-of-ai-copenhagen</id><content type="html" xml:base="https://ondfisk.dk//reflections-of-ai-copenhagen-2025/"><![CDATA[<p>Keynote given at <a href="https://trifork.info/ai-tools-for-developers-2025"><em>AI Tools for Developers: Leveraging AI Tools for Enhanced Software Development</em></a> in Copenhagen February 27, 2025.</p>

<p>A trilogy in four parts:</p>

<ul>
  <li>How [not] to adopt Generative AI</li>
  <li>The [hidden] price of AI adoption</li>
  <li>Useful AI in a world saturated with LLMs</li>
  <li>How to build [valuable] AI solutions</li>
</ul>

<!--more-->

<h2 id="slides">Slides</h2>

<script defer="" class="speakerdeck-embed" data-id="d01b860f02504ff48d4e6b22764836cd" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>]]></content><author><name>Rasmus Lystrøm</name></author><category term="ai" /><summary type="html"><![CDATA[Keynote given at AI Tools for Developers: Leveraging AI Tools for Enhanced Software Development in Copenhagen February 27, 2025. A trilogy in four parts: How [not] to adopt Generative AI The [hidden] price of AI adoption Useful AI in a world saturated with LLMs How to build [valuable] AI solutions]]></summary></entry></feed>