<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marco</title>
    <description>The latest articles on DEV Community by Marco (@marco13moo).</description>
    <link>https://dev.to/marco13moo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4075032%2Fa20d9ca5-581a-4a78-a7f5-ee6aad8134f5.jpg</url>
      <title>DEV Community: Marco</title>
      <link>https://dev.to/marco13moo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marco13moo"/>
    <language>en</language>
    <item>
      <title>Daily Dose of DevOps — Kubernetes scheduling: with multi-tenant isolation</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Fri, 25 Sep 2026 12:29:54 +0000</pubDate>
      <link>https://dev.to/marco13moo/daily-dose-of-devops-kubernetes-scheduling-with-multi-tenant-isolation-26m7</link>
      <guid>https://dev.to/marco13moo/daily-dose-of-devops-kubernetes-scheduling-with-multi-tenant-isolation-26m7</guid>
      <description>&lt;h1&gt;
  
  
  Kubernetes scheduling: with multi-tenant isolation
&lt;/h1&gt;

&lt;p&gt;A platform capability becomes dangerous when ownership is implicit but authority is broad. For &lt;strong&gt;kubernetes scheduling with multi-tenant isolation&lt;/strong&gt;, the decisive question is not whether a team can demonstrate the technology once. It is whether the organisation can operate it repeatedly, audit its decisions, and recover when assumptions fail.&lt;/p&gt;

&lt;h2&gt;
  
  
  The operating problem
&lt;/h2&gt;

&lt;p&gt;Treat kubernetes scheduling as part of a multi-tenant Kubernetes platform with declarative reconciliation and bounded workload privileges. Define the consumer, owner, support boundary, change policy, and recovery objective before selecting implementation details. When operating kubernetes scheduling with multi-tenant isolation, undocumented authority and ambiguous ownership create more risk than a missing feature.&lt;/p&gt;

&lt;p&gt;A credible design measures saturation, scheduling latency, error-budget burn, reconciliation failure, and recovery time. Those measures should be visible to both the platform owner and consuming teams. If the measurements cannot distinguish adoption from coercion, or reliability from mere activity, the operating model is not yet falsifiable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical control
&lt;/h2&gt;

&lt;p&gt;Start with a narrow contract that can be tested automatically. The implementation should encode tested admission policy, workload identity, resource envelopes, progressive delivery, and explicit tenancy boundaries. The following fragment is illustrative; production values must be derived from workload evidence and organisational policy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;policy/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;PodDisruptionBudget&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;critical-api&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;minAvailable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;80%&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;critical-api&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Roll the control out to one representative service, observe failure behaviour, and exercise rollback before broad adoption. Record exceptions as expiring decisions with an accountable owner, not permanent bypasses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trade-offs
&lt;/h2&gt;

&lt;p&gt;Standardisation reduces cognitive load and makes controls observable, but an excessively rigid path displaces complexity into workarounds. Flexibility improves local fit, but every variant expands the support surface and weakens fleet-wide guarantees. For kubernetes scheduling with multi-tenant isolation, prefer a small mandatory safety kernel surrounded by replaceable implementation choices.&lt;/p&gt;

&lt;p&gt;The organisation must also pay for operability. More validation increases feedback time; more telemetry increases cost and cardinality risk; stronger isolation can reduce utilisation. Make those costs explicit and compare them with the blast radius and recovery cost they buy down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams get wrong
&lt;/h2&gt;

&lt;p&gt;The recurrent anti-pattern is treating Kubernetes defaults as an operating model and allowing every team to invent cluster policy. Teams then measure task completion instead of production outcomes, accumulate exceptions without expiry, and discover during an incident that the nominal control has no tested recovery path.&lt;/p&gt;

&lt;p&gt;Another error is adopting a reference architecture without its assumptions. Validate identity boundaries, dependency failure, capacity pressure, partial rollout, rollback, and audit reconstruction in the environment that will actually carry production traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treat kubernetes scheduling as an owned product and control system, not a tool installation.&lt;/li&gt;
&lt;li&gt;Design for the constraints captured by “with multi-tenant isolation”; document the authority, failure domain, and recovery objective.&lt;/li&gt;
&lt;li&gt;Measure saturation, scheduling latency, error-budget burn, reconciliation failure, and recovery time.&lt;/li&gt;
&lt;li&gt;Automate tested admission policy, workload identity, resource envelopes, progressive delivery, and explicit tenancy boundaries.&lt;/li&gt;
&lt;li&gt;Test degraded operation and rollback before scaling adoption.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>infrastructure</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>Daily Dose of DevOps — Golden path: for service ownership models</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Thu, 24 Sep 2026 12:28:28 +0000</pubDate>
      <link>https://dev.to/marco13moo/daily-dose-of-devops-golden-path-for-service-ownership-models-4lb3</link>
      <guid>https://dev.to/marco13moo/daily-dose-of-devops-golden-path-for-service-ownership-models-4lb3</guid>
      <description>&lt;h1&gt;
  
  
  Golden path: for service ownership models
&lt;/h1&gt;

&lt;p&gt;Enterprise reliability deteriorates when automation accelerates change without strengthening evidence. For &lt;strong&gt;golden path for service ownership models&lt;/strong&gt;, the decisive question is not whether a team can demonstrate the technology once. It is whether the organisation can operate it repeatedly, audit its decisions, and recover when assumptions fail.&lt;/p&gt;

&lt;h2&gt;
  
  
  The operating problem
&lt;/h2&gt;

&lt;p&gt;Treat golden path as part of a product-oriented internal platform with explicit service ownership and paved-road contracts. Define the consumer, owner, support boundary, change policy, and recovery objective before selecting implementation details. When operating golden path for service ownership models, undocumented authority and ambiguous ownership create more risk than a missing feature.&lt;/p&gt;

&lt;p&gt;A credible design measures adoption, successful self-service completion, lead time, and platform-induced toil. Those measures should be visible to both the platform owner and consuming teams. If the measurements cannot distinguish adoption from coercion, or reliability from mere activity, the operating model is not yet falsifiable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical control
&lt;/h2&gt;

&lt;p&gt;Start with a narrow contract that can be tested automatically. The implementation should encode versioned golden paths, discoverable ownership, policy guardrails, and measured developer outcomes. The following fragment is illustrative; production values must be derived from workload evidence and organisational policy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;backstage.io/v1alpha1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Component&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;payments-api&lt;/span&gt;
  &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;platform.example/owner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;payments&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;service&lt;/span&gt;
  &lt;span class="na"&gt;lifecycle&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Roll the control out to one representative service, observe failure behaviour, and exercise rollback before broad adoption. Record exceptions as expiring decisions with an accountable owner, not permanent bypasses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trade-offs
&lt;/h2&gt;

&lt;p&gt;Standardisation reduces cognitive load and makes controls observable, but an excessively rigid path displaces complexity into workarounds. Flexibility improves local fit, but every variant expands the support surface and weakens fleet-wide guarantees. For golden path for service ownership models, prefer a small mandatory safety kernel surrounded by replaceable implementation choices.&lt;/p&gt;

&lt;p&gt;The organisation must also pay for operability. More validation increases feedback time; more telemetry increases cost and cardinality risk; stronger isolation can reduce utilisation. Make those costs explicit and compare them with the blast radius and recovery cost they buy down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams get wrong
&lt;/h2&gt;

&lt;p&gt;The recurrent anti-pattern is centralising delivery behind a ticket queue while calling the result self-service. Teams then measure task completion instead of production outcomes, accumulate exceptions without expiry, and discover during an incident that the nominal control has no tested recovery path.&lt;/p&gt;

&lt;p&gt;Another error is adopting a reference architecture without its assumptions. Validate identity boundaries, dependency failure, capacity pressure, partial rollout, rollback, and audit reconstruction in the environment that will actually carry production traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treat golden path as an owned product and control system, not a tool installation.&lt;/li&gt;
&lt;li&gt;Design for the constraints captured by “for service ownership models”; document the authority, failure domain, and recovery objective.&lt;/li&gt;
&lt;li&gt;Measure adoption, successful self-service completion, lead time, and platform-induced toil.&lt;/li&gt;
&lt;li&gt;Automate versioned golden paths, discoverable ownership, policy guardrails, and measured developer outcomes.&lt;/li&gt;
&lt;li&gt;Test degraded operation and rollback before scaling adoption.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>devops</category>
      <category>sre</category>
    </item>
    <item>
      <title>Daily Dose of DevOps — Telemetry design: during migration programs</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Wed, 23 Sep 2026 12:29:18 +0000</pubDate>
      <link>https://dev.to/marco13moo/daily-dose-of-devops-telemetry-design-during-migration-programs-770</link>
      <guid>https://dev.to/marco13moo/daily-dose-of-devops-telemetry-design-during-migration-programs-770</guid>
      <description>&lt;h1&gt;
  
  
  Telemetry design: during migration programs
&lt;/h1&gt;

&lt;p&gt;Scale converts an informal convention into an outage mechanism. For &lt;strong&gt;telemetry design during migration programs&lt;/strong&gt;, the decisive question is not whether a team can demonstrate the technology once. It is whether the organisation can operate it repeatedly, audit its decisions, and recover when assumptions fail.&lt;/p&gt;

&lt;h2&gt;
  
  
  The operating problem
&lt;/h2&gt;

&lt;p&gt;Treat telemetry design as part of an SLO-led telemetry platform that connects service behaviour to customer-visible outcomes. Define the consumer, owner, support boundary, change policy, and recovery objective before selecting implementation details. When operating telemetry design during migration programs, undocumented authority and ambiguous ownership create more risk than a missing feature.&lt;/p&gt;

&lt;p&gt;A credible design measures error-budget burn, tail latency, cardinality growth, telemetry loss, and diagnostic time. Those measures should be visible to both the platform owner and consuming teams. If the measurements cannot distinguish adoption from coercion, or reliability from mere activity, the operating model is not yet falsifiable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical control
&lt;/h2&gt;

&lt;p&gt;Start with a narrow contract that can be tested automatically. The implementation should encode stable semantic conventions, tiered retention, cardinality budgets, sampling policy, and telemetry pipeline SLOs. The following fragment is illustrative; production values must be derived from workload evidence and organisational policy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;processors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;memory_limiter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;limit_mib&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;512&lt;/span&gt;
  &lt;span class="na"&gt;batch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;send_batch_size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1024&lt;/span&gt;
&lt;span class="na"&gt;exporters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;otlp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;telemetry-gateway:4317&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Roll the control out to one representative service, observe failure behaviour, and exercise rollback before broad adoption. Record exceptions as expiring decisions with an accountable owner, not permanent bypasses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trade-offs
&lt;/h2&gt;

&lt;p&gt;Standardisation reduces cognitive load and makes controls observable, but an excessively rigid path displaces complexity into workarounds. Flexibility improves local fit, but every variant expands the support surface and weakens fleet-wide guarantees. For telemetry design during migration programs, prefer a small mandatory safety kernel surrounded by replaceable implementation choices.&lt;/p&gt;

&lt;p&gt;The organisation must also pay for operability. More validation increases feedback time; more telemetry increases cost and cardinality risk; stronger isolation can reduce utilisation. Make those costs explicit and compare them with the blast radius and recovery cost they buy down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams get wrong
&lt;/h2&gt;

&lt;p&gt;The recurrent anti-pattern is collecting every available signal without ownership, retention economics, or an incident hypothesis. Teams then measure task completion instead of production outcomes, accumulate exceptions without expiry, and discover during an incident that the nominal control has no tested recovery path.&lt;/p&gt;

&lt;p&gt;Another error is adopting a reference architecture without its assumptions. Validate identity boundaries, dependency failure, capacity pressure, partial rollout, rollback, and audit reconstruction in the environment that will actually carry production traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treat telemetry design as an owned product and control system, not a tool installation.&lt;/li&gt;
&lt;li&gt;Design for the constraints captured by “during migration programs”; document the authority, failure domain, and recovery objective.&lt;/li&gt;
&lt;li&gt;Measure error-budget burn, tail latency, cardinality growth, telemetry loss, and diagnostic time.&lt;/li&gt;
&lt;li&gt;Automate stable semantic conventions, tiered retention, cardinality budgets, sampling policy, and telemetry pipeline SLOs.&lt;/li&gt;
&lt;li&gt;Test degraded operation and rollback before scaling adoption.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>monitoring</category>
      <category>sre</category>
    </item>
    <item>
      <title>Daily Dose of DevOps — Workload identity: for identity-driven access</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Tue, 22 Sep 2026 17:09:00 +0000</pubDate>
      <link>https://dev.to/marco13moo/daily-dose-of-devops-workload-identity-for-identity-driven-access-1o1o</link>
      <guid>https://dev.to/marco13moo/daily-dose-of-devops-workload-identity-for-identity-driven-access-1o1o</guid>
      <description>&lt;h1&gt;
  
  
  Workload identity: for identity-driven access
&lt;/h1&gt;

&lt;p&gt;Scale converts an informal convention into an outage mechanism. For &lt;strong&gt;workload identity for identity-driven access&lt;/strong&gt;, the decisive question is not whether a team can demonstrate the technology once. It is whether the organisation can operate it repeatedly, audit its decisions, and recover when assumptions fail.&lt;/p&gt;

&lt;h2&gt;
  
  
  The operating problem
&lt;/h2&gt;

&lt;p&gt;Treat workload identity as part of a zero-trust delivery system in which identity, provenance, and policy are evaluated continuously. Define the consumer, owner, support boundary, change policy, and recovery objective before selecting implementation details. When operating workload identity for identity-driven access, undocumented authority and ambiguous ownership create more risk than a missing feature.&lt;/p&gt;

&lt;p&gt;A credible design measures control coverage, policy exceptions, credential lifetime, remediation latency, and provenance verification. Those measures should be visible to both the platform owner and consuming teams. If the measurements cannot distinguish adoption from coercion, or reliability from mere activity, the operating model is not yet falsifiable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical control
&lt;/h2&gt;

&lt;p&gt;Start with a narrow contract that can be tested automatically. The implementation should encode short-lived identity, least privilege, immutable dependencies, signed provenance, and policy-as-code enforcement. The following fragment is illustrative; production values must be derived from workload evidence and organisational policy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
  &lt;span class="na"&gt;id-token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@&amp;lt;immutable-sha&amp;gt;&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cosign verify --certificate-identity-regexp='^https://github.com/example/' artifact&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Roll the control out to one representative service, observe failure behaviour, and exercise rollback before broad adoption. Record exceptions as expiring decisions with an accountable owner, not permanent bypasses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trade-offs
&lt;/h2&gt;

&lt;p&gt;Standardisation reduces cognitive load and makes controls observable, but an excessively rigid path displaces complexity into workarounds. Flexibility improves local fit, but every variant expands the support surface and weakens fleet-wide guarantees. For workload identity for identity-driven access, prefer a small mandatory safety kernel surrounded by replaceable implementation choices.&lt;/p&gt;

&lt;p&gt;The organisation must also pay for operability. More validation increases feedback time; more telemetry increases cost and cardinality risk; stronger isolation can reduce utilisation. Make those costs explicit and compare them with the blast radius and recovery cost they buy down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams get wrong
&lt;/h2&gt;

&lt;p&gt;The recurrent anti-pattern is adding ceremonial approval gates without constraining capabilities or verifying the produced artifact. Teams then measure task completion instead of production outcomes, accumulate exceptions without expiry, and discover during an incident that the nominal control has no tested recovery path.&lt;/p&gt;

&lt;p&gt;Another error is adopting a reference architecture without its assumptions. Validate identity boundaries, dependency failure, capacity pressure, partial rollout, rollback, and audit reconstruction in the environment that will actually carry production traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treat workload identity as an owned product and control system, not a tool installation.&lt;/li&gt;
&lt;li&gt;Design for the constraints captured by “for identity-driven access”; document the authority, failure domain, and recovery objective.&lt;/li&gt;
&lt;li&gt;Measure control coverage, policy exceptions, credential lifetime, remediation latency, and provenance verification.&lt;/li&gt;
&lt;li&gt;Automate short-lived identity, least privilege, immutable dependencies, signed provenance, and policy-as-code enforcement.&lt;/li&gt;
&lt;li&gt;Test degraded operation and rollback before scaling adoption.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>Daily Dose of DevOps — Observability strategy: for platform reliability reviews</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Sat, 19 Sep 2026 11:44:25 +0000</pubDate>
      <link>https://dev.to/marco13moo/daily-dose-of-devops-observability-strategy-for-platform-reliability-reviews-2ind</link>
      <guid>https://dev.to/marco13moo/daily-dose-of-devops-observability-strategy-for-platform-reliability-reviews-2ind</guid>
      <description>&lt;h1&gt;
  
  
  Observability strategy: for platform reliability reviews
&lt;/h1&gt;

&lt;p&gt;Enterprise reliability deteriorates when automation accelerates change without strengthening evidence. For &lt;strong&gt;observability strategy for platform reliability reviews&lt;/strong&gt;, the decisive question is not whether a team can demonstrate the technology once. It is whether the organisation can operate it repeatedly, audit its decisions, and recover when assumptions fail.&lt;/p&gt;

&lt;h2&gt;
  
  
  The operating problem
&lt;/h2&gt;

&lt;p&gt;Treat observability strategy as part of an SLO-led telemetry platform that connects service behaviour to customer-visible outcomes. Define the consumer, owner, support boundary, change policy, and recovery objective before selecting implementation details. When operating observability strategy for platform reliability reviews, undocumented authority and ambiguous ownership create more risk than a missing feature.&lt;/p&gt;

&lt;p&gt;A credible design measures error-budget burn, tail latency, cardinality growth, telemetry loss, and diagnostic time. Those measures should be visible to both the platform owner and consuming teams. If the measurements cannot distinguish adoption from coercion, or reliability from mere activity, the operating model is not yet falsifiable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical control
&lt;/h2&gt;

&lt;p&gt;Start with a narrow contract that can be tested automatically. The implementation should encode stable semantic conventions, tiered retention, cardinality budgets, sampling policy, and telemetry pipeline SLOs. The following fragment is illustrative; production values must be derived from workload evidence and organisational policy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;processors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;memory_limiter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;limit_mib&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;512&lt;/span&gt;
  &lt;span class="na"&gt;batch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;send_batch_size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1024&lt;/span&gt;
&lt;span class="na"&gt;exporters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;otlp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;telemetry-gateway:4317&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Roll the control out to one representative service, observe failure behaviour, and exercise rollback before broad adoption. Record exceptions as expiring decisions with an accountable owner, not permanent bypasses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trade-offs
&lt;/h2&gt;

&lt;p&gt;Standardisation reduces cognitive load and makes controls observable, but an excessively rigid path displaces complexity into workarounds. Flexibility improves local fit, but every variant expands the support surface and weakens fleet-wide guarantees. For observability strategy for platform reliability reviews, prefer a small mandatory safety kernel surrounded by replaceable implementation choices.&lt;/p&gt;

&lt;p&gt;The organisation must also pay for operability. More validation increases feedback time; more telemetry increases cost and cardinality risk; stronger isolation can reduce utilisation. Make those costs explicit and compare them with the blast radius and recovery cost they buy down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What teams get wrong
&lt;/h2&gt;

&lt;p&gt;The recurrent anti-pattern is collecting every available signal without ownership, retention economics, or an incident hypothesis. Teams then measure task completion instead of production outcomes, accumulate exceptions without expiry, and discover during an incident that the nominal control has no tested recovery path.&lt;/p&gt;

&lt;p&gt;Another error is adopting a reference architecture without its assumptions. Validate identity boundaries, dependency failure, capacity pressure, partial rollout, rollback, and audit reconstruction in the environment that will actually carry production traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treat observability strategy as an owned product and control system, not a tool installation.&lt;/li&gt;
&lt;li&gt;Design for the constraints captured by “for platform reliability reviews”; document the authority, failure domain, and recovery objective.&lt;/li&gt;
&lt;li&gt;Measure error-budget burn, tail latency, cardinality growth, telemetry loss, and diagnostic time.&lt;/li&gt;
&lt;li&gt;Automate stable semantic conventions, tiered retention, cardinality budgets, sampling policy, and telemetry pipeline SLOs.&lt;/li&gt;
&lt;li&gt;Test degraded operation and rollback before scaling adoption.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>monitoring</category>
      <category>sre</category>
    </item>
    <item>
      <title>Daily Dose of DevOps — What is CI/CD and why it matters</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Fri, 18 Sep 2026 12:01:00 +0000</pubDate>
      <link>https://dev.to/marco13moo/daily-dose-of-devops-what-is-cicd-and-why-it-matters-2mj8</link>
      <guid>https://dev.to/marco13moo/daily-dose-of-devops-what-is-cicd-and-why-it-matters-2mj8</guid>
      <description>&lt;h1&gt;
  
  
  CI/CD as a Control System: From Commit Entropy to Production Evidence
&lt;/h1&gt;

&lt;p&gt;CI/CD is often reduced to automation, but its deeper purpose is epistemic: it converts uncertain changes into evidence about whether a system remains safe to operate. A pipeline is a feedback controller. Source changes are disturbances; tests, policy checks, and telemetry are sensors; deployment strategies are actuators; service-level objectives define acceptable operating bounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The control loop
&lt;/h2&gt;

&lt;p&gt;Continuous integration reduces integration entropy by keeping change sets small and repeatedly testing their composition. Continuous delivery preserves a deployable state; continuous deployment automatically promotes changes after policy gates succeed. These are distinct maturity levels, and conflating them creates unsafe expectations.&lt;/p&gt;

&lt;p&gt;A defensible pipeline evaluates more than functional correctness:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Provenance:&lt;/strong&gt; Can every artifact be traced to reviewed source and a reproducible build?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security:&lt;/strong&gt; Were dependencies, secrets, permissions, and artifact signatures evaluated?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operability:&lt;/strong&gt; Do latency, saturation, error-rate, and rollback signals exist before promotion?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change risk:&lt;/strong&gt; Is rollout scope proportional to uncertainty?
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;promote&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;unit&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;integration&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;policy&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;sbom&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
  &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cosign verify --key cosign.pub artifact.example/app:$GIT_SHA&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deploy --strategy=canary --initial-traffic=1%&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;verify-slo --window=15m --max-error-budget-burn=2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why small batches dominate
&lt;/h2&gt;

&lt;p&gt;If each changed component has some independent probability of introducing a defect, larger batches increase both the probability of failure and the diagnostic search space. Independence is an imperfect assumption—software dependencies are correlated—but the conclusion survives: small batches shorten feedback latency and improve causal attribution. Deployment frequency is therefore valuable only when paired with fast recovery and trustworthy verification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure modes
&lt;/h2&gt;

&lt;p&gt;Pipeline success is not proof of production safety. Tests may encode incomplete specifications; staging traffic rarely matches production; mutable tags can sever provenance; and approval gates can become ceremonial. A mature design treats every gate as a falsifiable claim and continuously measures its predictive power. Flaky tests, for example, are not harmless noise: they weaken the statistical meaning of a green build and train operators to ignore alarms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CI/CD is a socio-technical feedback system, not merely a collection of scripts.&lt;/li&gt;
&lt;li&gt;Optimize for evidence quality, small batch size, bounded blast radius, and reversible change.&lt;/li&gt;
&lt;li&gt;A green pipeline is a risk estimate; production telemetry must close the control loop.&lt;/li&gt;
&lt;li&gt;Measure lead time and deployment frequency alongside change-failure rate and recovery time.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>automation</category>
      <category>cicd</category>
      <category>devops</category>
      <category>sre</category>
    </item>
    <item>
      <title>Daily Dose of DevOps — GitHub Actions basics for DevOps</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Thu, 17 Sep 2026 12:21:20 +0000</pubDate>
      <link>https://dev.to/marco13moo/daily-dose-of-devops-github-actions-basics-for-devops-5gcj</link>
      <guid>https://dev.to/marco13moo/daily-dose-of-devops-github-actions-basics-for-devops-5gcj</guid>
      <description>&lt;h1&gt;
  
  
  GitHub Actions as a Capability System: Secure Automation by Construction
&lt;/h1&gt;

&lt;p&gt;GitHub Actions combines an event system, workflow scheduler, ephemeral compute, and credential broker. Its primary security question is not “Does the YAML run?” but “What authority can untrusted input exercise?” A workflow triggered by pull-request content sits on a trust boundary: branch names, commit contents, issue text, and third-party action outputs may all be attacker-controlled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Minimize authority
&lt;/h2&gt;

&lt;p&gt;Permissions should be explicit and job-scoped. Build jobs usually need read-only repository access; deployment jobs can receive stronger rights only after protected-environment controls succeed. OpenID Connect is preferable to long-lived cloud credentials because it exchanges a short-lived, claim-bound identity at runtime.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
    &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
      &lt;span class="na"&gt;id-token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@&amp;lt;immutable-commit-sha&amp;gt;&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm ci --ignore-scripts&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm test&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./scripts/deploy.sh&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pin third-party actions to immutable commit SHAs, review their provenance, and use dependency automation to propose controlled updates. Tags are readable but mutable. Treat workflow logs and artifacts as potential exfiltration channels; masking is not a substitute for preventing secret exposure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproducibility and concurrency
&lt;/h2&gt;

&lt;p&gt;Use lockfiles and deterministic installation commands. Separate build from deployment, promote the same verified artifact, and attach provenance rather than rebuilding per environment. Apply concurrency groups to prevent stale deployments from racing newer commits, while choosing cancellation semantics carefully for stateful operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Model workflows as programs executing with capabilities and untrusted inputs.&lt;/li&gt;
&lt;li&gt;Grant the minimum token permissions at the narrowest job scope.&lt;/li&gt;
&lt;li&gt;Prefer short-lived federated identity and immutable dependencies.&lt;/li&gt;
&lt;li&gt;Build once, verify provenance, and promote the identical artifact through environments.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>automation</category>
      <category>devops</category>
      <category>github</category>
      <category>security</category>
    </item>
    <item>
      <title>Daily Dose of DevOps — Terraform remote state explained</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Wed, 16 Sep 2026 12:21:49 +0000</pubDate>
      <link>https://dev.to/marco13moo/daily-dose-of-devops-terraform-remote-state-explained-2f56</link>
      <guid>https://dev.to/marco13moo/daily-dose-of-devops-terraform-remote-state-explained-2f56</guid>
      <description>&lt;h1&gt;
  
  
  Terraform Remote State: A Consistency Boundary for Infrastructure Control
&lt;/h1&gt;

&lt;p&gt;Terraform state is not a cache that can be casually regenerated. It is the controller’s mapping between declarative addresses and real provider objects, including dependency metadata and sensitive attributes. Remote state turns that mapping into a shared consistency boundary for teams and automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  State, locking, and serializability
&lt;/h2&gt;

&lt;p&gt;Concurrent applies are competing writers. Without coordination, each run may calculate a valid plan from the same prior snapshot and then overwrite the other’s observations—a lost-update anomaly. A backend lock approximates single-writer serializability, but only if every writer honors it and lock leases are handled safely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;backend&lt;/span&gt; &lt;span class="s2"&gt;"s3"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;bucket&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"org-terraform-state"&lt;/span&gt;
    &lt;span class="nx"&gt;key&lt;/span&gt;          &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"production/network.tfstate"&lt;/span&gt;
    &lt;span class="nx"&gt;region&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"eu-west-1"&lt;/span&gt;
    &lt;span class="nx"&gt;encrypt&lt;/span&gt;      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="nx"&gt;use_lockfile&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Encryption at rest is necessary but insufficient. Use narrowly scoped identities, transport encryption, access logs, object versioning, retention controls, and tested recovery. State often contains credentials or connection material even when configuration marks outputs as sensitive; “sensitive” primarily controls presentation, not storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Partition by failure domain
&lt;/h2&gt;

&lt;p&gt;A single monolithic state increases lock contention, plan latency, privilege breadth, and blast radius. Excessive fragmentation, however, produces brittle cross-state dependencies and coordination overhead. Prefer boundaries aligned with ownership, lifecycle, privilege, and failure domains. Exchange stable identifiers through explicit interfaces rather than exposing entire state snapshots.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recovery discipline
&lt;/h2&gt;

&lt;p&gt;Never repair state by editing JSON under pressure. First stop writers, preserve the current object and its versions, compare state with provider reality, and use supported operations such as import, moved blocks, or state move. A backend backup is only credible after a restore exercise demonstrates recovery point and recovery time objectives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Remote state is a critical consistency and security boundary.&lt;/li&gt;
&lt;li&gt;Locking prevents competing writers only when all automation uses the same backend discipline.&lt;/li&gt;
&lt;li&gt;Partition state along operational boundaries, not arbitrary directory structure.&lt;/li&gt;
&lt;li&gt;Version, audit, encrypt, restrict, and regularly test restoration.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>infrastructure</category>
      <category>terraform</category>
    </item>
    <item>
      <title>Daily Dose of DevOps — Kubernetes readiness vs liveness probes</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Tue, 15 Sep 2026 12:24:00 +0000</pubDate>
      <link>https://dev.to/marco13moo/daily-dose-of-devops-kubernetes-readiness-vs-liveness-probes-2mpk</link>
      <guid>https://dev.to/marco13moo/daily-dose-of-devops-kubernetes-readiness-vs-liveness-probes-2mpk</guid>
      <description>&lt;h1&gt;
  
  
  Kubernetes Probes as Failure Detectors: Semantics, Timing, and Cascading Risk
&lt;/h1&gt;

&lt;p&gt;Kubernetes probes are distributed-systems failure detectors with different control effects. A readiness failure removes a Pod from Service endpoints; a liveness failure asks the kubelet to restart the container. The distinction matters because detection is necessarily imperfect: aggressive thresholds reduce detection latency but increase false positives under transient load.&lt;/p&gt;

&lt;h2&gt;
  
  
  Readiness protects traffic; liveness repairs deadlock
&lt;/h2&gt;

&lt;p&gt;Readiness should answer: “Can this replica safely accept new work now?” It may include critical local state and indispensable downstream dependencies, but indiscriminately probing every dependency can create a cascade: one database slowdown marks every replica unready, eliminating all capacity precisely when graceful degradation is needed.&lt;/p&gt;

&lt;p&gt;Liveness should answer a narrower question: “Is the process irrecoverably stuck such that restart is the best available remediation?” It should not fail because a remote dependency is unavailable. Restarting healthy processes during a network partition adds cold-start pressure without repairing the dependency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;startupProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;httpGet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;/health/startup&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;8080&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
  &lt;span class="na"&gt;failureThreshold&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;
&lt;span class="na"&gt;readinessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;httpGet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;/health/ready&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;8080&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
  &lt;span class="na"&gt;failureThreshold&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="na"&gt;livenessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;httpGet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;/health/live&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;8080&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
  &lt;span class="na"&gt;failureThreshold&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The startup probe creates a temporal firewall: until initialization succeeds, liveness checks are suppressed. This prevents slow but valid startup from entering a restart loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deriving thresholds
&lt;/h2&gt;

&lt;p&gt;Probe timing should follow measured distributions, not folklore. Let the check interval be &lt;em&gt;p&lt;/em&gt;, timeout &lt;em&gt;t&lt;/em&gt;, and failure threshold &lt;em&gt;f&lt;/em&gt;. Approximate worst-case detection latency is &lt;em&gt;p × f&lt;/em&gt;, plus request timeout effects. Choose this against the service’s recovery-time objective and the cost of a false positive. Then validate under CPU throttling, garbage-collection pauses, dependency latency, and node pressure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Readiness changes routing; liveness triggers restart; startup protects initialization.&lt;/li&gt;
&lt;li&gt;Keep liveness local and conservative.&lt;/li&gt;
&lt;li&gt;Design readiness for graceful degradation rather than dependency-amplified outages.&lt;/li&gt;
&lt;li&gt;Derive timings from latency distributions and test them under realistic resource pressure.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>sre</category>
    </item>
    <item>
      <title>Daily Dose of DevOps — What is CI/CD and why it matters</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Mon, 14 Sep 2026 13:33:02 +0000</pubDate>
      <link>https://dev.to/marco13moo/daily-dose-of-devops-what-is-cicd-and-why-it-matters-3l1l</link>
      <guid>https://dev.to/marco13moo/daily-dose-of-devops-what-is-cicd-and-why-it-matters-3l1l</guid>
      <description>&lt;h1&gt;
  
  
  CI/CD as a Control System: From Commit Entropy to Production Evidence
&lt;/h1&gt;

&lt;p&gt;CI/CD is often reduced to automation, but its deeper purpose is epistemic: it converts uncertain changes into evidence about whether a system remains safe to operate. A pipeline is a feedback controller. Source changes are disturbances; tests, policy checks, and telemetry are sensors; deployment strategies are actuators; service-level objectives define acceptable operating bounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The control loop
&lt;/h2&gt;

&lt;p&gt;Continuous integration reduces integration entropy by keeping change sets small and repeatedly testing their composition. Continuous delivery preserves a deployable state; continuous deployment automatically promotes changes after policy gates succeed. These are distinct maturity levels, and conflating them creates unsafe expectations.&lt;/p&gt;

&lt;p&gt;A defensible pipeline evaluates more than functional correctness:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Provenance:&lt;/strong&gt; Can every artifact be traced to reviewed source and a reproducible build?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security:&lt;/strong&gt; Were dependencies, secrets, permissions, and artifact signatures evaluated?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operability:&lt;/strong&gt; Do latency, saturation, error-rate, and rollback signals exist before promotion?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change risk:&lt;/strong&gt; Is rollout scope proportional to uncertainty?
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;promote&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;unit&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;integration&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;policy&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;sbom&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
  &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cosign verify --key cosign.pub artifact.example/app:$GIT_SHA&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deploy --strategy=canary --initial-traffic=1%&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;verify-slo --window=15m --max-error-budget-burn=2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why small batches dominate
&lt;/h2&gt;

&lt;p&gt;If each changed component has some independent probability of introducing a defect, larger batches increase both the probability of failure and the diagnostic search space. Independence is an imperfect assumption—software dependencies are correlated—but the conclusion survives: small batches shorten feedback latency and improve causal attribution. Deployment frequency is therefore valuable only when paired with fast recovery and trustworthy verification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure modes
&lt;/h2&gt;

&lt;p&gt;Pipeline success is not proof of production safety. Tests may encode incomplete specifications; staging traffic rarely matches production; mutable tags can sever provenance; and approval gates can become ceremonial. A mature design treats every gate as a falsifiable claim and continuously measures its predictive power. Flaky tests, for example, are not harmless noise: they weaken the statistical meaning of a green build and train operators to ignore alarms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CI/CD is a socio-technical feedback system, not merely a collection of scripts.&lt;/li&gt;
&lt;li&gt;Optimize for evidence quality, small batch size, bounded blast radius, and reversible change.&lt;/li&gt;
&lt;li&gt;A green pipeline is a risk estimate; production telemetry must close the control loop.&lt;/li&gt;
&lt;li&gt;Measure lead time and deployment frequency alongside change-failure rate and recovery time.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>automation</category>
      <category>cicd</category>
      <category>devops</category>
    </item>
    <item>
      <title>Daily Dose of DevOps — GitHub Actions basics for DevOps</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Sun, 13 Sep 2026 12:29:13 +0000</pubDate>
      <link>https://dev.to/marco13moo/daily-dose-of-devops-github-actions-basics-for-devops-5f3f</link>
      <guid>https://dev.to/marco13moo/daily-dose-of-devops-github-actions-basics-for-devops-5f3f</guid>
      <description>&lt;h1&gt;
  
  
  GitHub Actions as a Capability System: Secure Automation by Construction
&lt;/h1&gt;

&lt;p&gt;GitHub Actions combines an event system, workflow scheduler, ephemeral compute, and credential broker. Its primary security question is not “Does the YAML run?” but “What authority can untrusted input exercise?” A workflow triggered by pull-request content sits on a trust boundary: branch names, commit contents, issue text, and third-party action outputs may all be attacker-controlled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Minimize authority
&lt;/h2&gt;

&lt;p&gt;Permissions should be explicit and job-scoped. Build jobs usually need read-only repository access; deployment jobs can receive stronger rights only after protected-environment controls succeed. OpenID Connect is preferable to long-lived cloud credentials because it exchanges a short-lived, claim-bound identity at runtime.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
    &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
      &lt;span class="na"&gt;id-token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@&amp;lt;immutable-commit-sha&amp;gt;&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm ci --ignore-scripts&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm test&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./scripts/deploy.sh&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pin third-party actions to immutable commit SHAs, review their provenance, and use dependency automation to propose controlled updates. Tags are readable but mutable. Treat workflow logs and artifacts as potential exfiltration channels; masking is not a substitute for preventing secret exposure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproducibility and concurrency
&lt;/h2&gt;

&lt;p&gt;Use lockfiles and deterministic installation commands. Separate build from deployment, promote the same verified artifact, and attach provenance rather than rebuilding per environment. Apply concurrency groups to prevent stale deployments from racing newer commits, while choosing cancellation semantics carefully for stateful operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Model workflows as programs executing with capabilities and untrusted inputs.&lt;/li&gt;
&lt;li&gt;Grant the minimum token permissions at the narrowest job scope.&lt;/li&gt;
&lt;li&gt;Prefer short-lived federated identity and immutable dependencies.&lt;/li&gt;
&lt;li&gt;Build once, verify provenance, and promote the identical artifact through environments.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>automation</category>
      <category>cicd</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>Daily Dose of DevOps — Terraform remote state explained</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Sat, 12 Sep 2026 11:25:02 +0000</pubDate>
      <link>https://dev.to/marco13moo/daily-dose-of-devops-terraform-remote-state-explained-33h5</link>
      <guid>https://dev.to/marco13moo/daily-dose-of-devops-terraform-remote-state-explained-33h5</guid>
      <description>&lt;h1&gt;
  
  
  Terraform Remote State: A Consistency Boundary for Infrastructure Control
&lt;/h1&gt;

&lt;p&gt;Terraform state is not a cache that can be casually regenerated. It is the controller’s mapping between declarative addresses and real provider objects, including dependency metadata and sensitive attributes. Remote state turns that mapping into a shared consistency boundary for teams and automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  State, locking, and serializability
&lt;/h2&gt;

&lt;p&gt;Concurrent applies are competing writers. Without coordination, each run may calculate a valid plan from the same prior snapshot and then overwrite the other’s observations—a lost-update anomaly. A backend lock approximates single-writer serializability, but only if every writer honors it and lock leases are handled safely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;backend&lt;/span&gt; &lt;span class="s2"&gt;"s3"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;bucket&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"org-terraform-state"&lt;/span&gt;
    &lt;span class="nx"&gt;key&lt;/span&gt;          &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"production/network.tfstate"&lt;/span&gt;
    &lt;span class="nx"&gt;region&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"eu-west-1"&lt;/span&gt;
    &lt;span class="nx"&gt;encrypt&lt;/span&gt;      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="nx"&gt;use_lockfile&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Encryption at rest is necessary but insufficient. Use narrowly scoped identities, transport encryption, access logs, object versioning, retention controls, and tested recovery. State often contains credentials or connection material even when configuration marks outputs as sensitive; “sensitive” primarily controls presentation, not storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Partition by failure domain
&lt;/h2&gt;

&lt;p&gt;A single monolithic state increases lock contention, plan latency, privilege breadth, and blast radius. Excessive fragmentation, however, produces brittle cross-state dependencies and coordination overhead. Prefer boundaries aligned with ownership, lifecycle, privilege, and failure domains. Exchange stable identifiers through explicit interfaces rather than exposing entire state snapshots.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recovery discipline
&lt;/h2&gt;

&lt;p&gt;Never repair state by editing JSON under pressure. First stop writers, preserve the current object and its versions, compare state with provider reality, and use supported operations such as import, moved blocks, or state move. A backend backup is only credible after a restore exercise demonstrates recovery point and recovery time objectives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Remote state is a critical consistency and security boundary.&lt;/li&gt;
&lt;li&gt;Locking prevents competing writers only when all automation uses the same backend discipline.&lt;/li&gt;
&lt;li&gt;Partition state along operational boundaries, not arbitrary directory structure.&lt;/li&gt;
&lt;li&gt;Version, audit, encrypt, restrict, and regularly test restoration.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>infrastructure</category>
      <category>terraform</category>
    </item>
  </channel>
</rss>
