<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>DevOps on Chris Rants at Clouds</title>
    <link>https://chris.funderburg.me/categories/devops/</link>
    <description>Recent content in DevOps on Chris Rants at Clouds</description>
    <image>
      <title>Chris Rants at Clouds</title>
      <url>https://chris.funderburg.me/me.jpg</url>
      <link>https://chris.funderburg.me/me.jpg</link>
    </image>
    <generator>Hugo</generator>
    <language>en-gb</language>
    <lastBuildDate>Sat, 10 Jan 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://chris.funderburg.me/categories/devops/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>What a Platform Engineer Is (and why it’s basically DevOps with a sharper purpose)</title>
      <link>https://chris.funderburg.me/what-is-a-platform-engineer/</link>
      <pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://chris.funderburg.me/what-is-a-platform-engineer/</guid>
      <description>A practical, end-to-end definition of Platform Engineering as I do it: CI/CD, IaC, security, Kubernetes, data platforms, MLOps, AI infrastructure, developer experience, and operational excellence.</description>
      <content:encoded><![CDATA[<h2 id="the-simple-definition">The simple definition</h2>
<p>A <strong>Platform Engineer</strong> builds and runs the <strong>internal platform</strong> that software, data, and ML teams use to ship reliably: <strong>from code → to production</strong>, <strong>from data → to insights</strong>, <strong>from models → to production endpoints</strong>  -  <strong>while staying secure and observable</strong>.</p>
<p>That&rsquo;s the textbook version.</p>
<p>The version that matches reality: <strong>platform engineering is DevOps done deliberately</strong>, with a clear &ldquo;product&rdquo; mindset. The &ldquo;product&rdquo; is the platform itself: <strong>paved roads</strong>, reusable building blocks, guardrails, golden paths, and automation that make the <em>right</em> way the <em>easy</em> way.</p>
<p>And in the last few years, that platform increasingly includes not just application infrastructure, but also <strong>data pipelines, ML training and deployment, and AI infrastructure</strong> (LLMs, vector databases, prompt management). Same principles, broader scope.</p>
<hr>
<h2 id="platform-engineering-vs-devops">Platform Engineering vs DevOps</h2>
<h3 id="where-they-overlap-a-lot">Where they overlap (a lot)</h3>
<p>Platform Engineers and DevOps Engineers typically both end up being:</p>
<ul>
<li><strong>Masters of CI/CD</strong>: pipelines, environments, release strategies, artifact flows (whether that&rsquo;s containers, Python wheels, or trained models).</li>
<li><strong>Infrastructure-as-Code people</strong>: Terraform/OpenTofu, modules, state, multi-account / multi-env / multi-cloud patterns.</li>
<li><strong>Cloud and Kubernetes builders</strong>: networking, IAM, clusters, node scaling, ingress, service-to-service wiring.</li>
<li><strong>DevSecOps enforcers</strong>: policy-as-code, supply chain security, scanning, secrets, encryption, least privilege.</li>
<li><strong>SRE-adjacent operators</strong>: reliability, incident response, SLOs, runbooks, performance, cost control.</li>
<li><strong>Automation gremlins</strong>: everything repeatable, everything codified, minimal click-ops.</li>
<li><strong>Data and ML infrastructure wranglers</strong> (increasingly): orchestrating data pipelines, provisioning GPU clusters, managing feature stores, and deploying models.</li>
</ul>
<h3 id="the-difference-that-matters">The difference that matters</h3>
<p>The main distinction is <em>not</em> the tech. It’s the intent:</p>
<ul>
<li><strong>DevOps (as practised)</strong> often gets pulled into &ldquo;help this team ship this thing now.&rdquo;</li>
<li><strong>Platform Engineering (done well)</strong> is &ldquo;build the repeatable system so <em>every</em> team ships faster forever.&rdquo;</li>
</ul>
<p>So yes: same skills, same toolbelt. But platform engineering is <strong>DevOps with a product lens</strong>:</p>
<ul>
<li>clear interfaces,</li>
<li>opinionated defaults,</li>
<li>self-service,</li>
<li>documentation,</li>
<li>user feedback,</li>
<li>and measurable outcomes (lead time down, failures down, developer experience up).</li>
</ul>
<hr>
<h2 id="what-platform-engineer-means-in-my-day-to-day">What &ldquo;Platform Engineer&rdquo; means in my day-to-day</h2>
<p>In practice, I build platforms that answer these questions without drama:</p>
<h3 id="1-how-do-we-ship-software-from-code-to-production">1) &ldquo;How do we ship software from code to production?&rdquo;</h3>
<ul>
<li><strong>CI/CD standards</strong>: GitHub Actions, build caching for speed, environments, approvals, provenance, and enforced linting.</li>
<li><strong>Release patterns</strong>: trunk-based, feature flags, canary/blue-green where it makes sense.</li>
<li><strong>Artifact lifecycle</strong>: versioning, digests, promotion (dev → stage → prod), rollback paths.</li>
</ul>
<h3 id="2-how-do-we-build-infrastructure-safely-and-repeatably">2) &ldquo;How do we build infrastructure safely and repeatably?&rdquo;</h3>
<ul>
<li><strong>Terraform/OpenTofu modules</strong> that are readable, parameterised, and secure by default.</li>
<li><strong>Multi-account / multi-environment patterns</strong> (separation of duties and blast radius control).</li>
<li><strong>Encryption everywhere</strong> (in transit + at rest) with sensible KMS boundaries.</li>
<li><strong>Tagging, naming, and governance</strong> that doesn’t make engineers cry.</li>
</ul>
<h3 id="3-how-do-we-stay-secure-without-slowing-down">3) &ldquo;How do we stay secure without slowing down?&rdquo;</h3>
<ul>
<li><strong>Shift-left security</strong>: SAST, IaC scanning (Checkov), secret scanning, dependency scanning.</li>
<li><strong>Supply chain hardening</strong>: SBOMs, signing (Cosign), provenance, controlled registries.</li>
<li><strong>Identity-first design</strong>: least privilege IAM, OIDC federation, short-lived credentials.</li>
<li><strong>Policy as guardrails</strong>: automated checks that fail fast <em>before</em> bad things reach prod.</li>
</ul>
<h3 id="4-how-do-we-run-this-stuff-at-3am">4) &ldquo;How do we run this stuff at 3am?&rdquo;</h3>
<ul>
<li><strong>Observability as a platform feature</strong>: logs, metrics, traces, dashboards, alerting.</li>
<li><strong>Operational playbooks</strong>: runbooks, incident response, &ldquo;what good looks like.&rdquo;</li>
<li><strong>SLO-ish thinking</strong>: reliability targets, error budgets, real feedback loops.</li>
<li><strong>Cost and performance</strong>: scaling, right-sizing, autoscaling policies, avoiding surprise bills.</li>
</ul>
<h3 id="5-how-do-we-make-this-easy-for-developers">5) &ldquo;How do we make this easy for developers?&rdquo;</h3>
<p>This is the part that separates &ldquo;we run infra&rdquo; from &ldquo;we run a platform.&rdquo;</p>
<ul>
<li><strong>Golden paths</strong>: &ldquo;If you build a service this way, it deploys, scales, logs, and is compliant.&rdquo;</li>
<li><strong>Self-service</strong>: templates, scaffolding, portals, or simple CLI flows (whatever fits the org).</li>
<li><strong>Documentation like it’s a feature</strong>: not an afterthought, not tribal knowledge.</li>
<li><strong>Internal customer mindset</strong>: dev teams are users, and friction is a bug.</li>
</ul>
<h3 id="6-how-do-we-ship-data-products-reliably">6) &ldquo;How do we ship data products reliably?&rdquo;</h3>
<p>Data isn&rsquo;t just infrastructure input any more - it&rsquo;s a product. Platforms need to support:</p>
<ul>
<li><strong>Data pipeline orchestration</strong>: Airflow, Dagster, Prefect, Step Functions - whatever fits, provisioned as code.</li>
<li><strong>Storage patterns with governance</strong>: data lakes (S3/GCS), warehouses (Snowflake, BigQuery), lakehouse (Delta, Iceberg).</li>
<li><strong>Schema and catalog management</strong>: data contracts, schema registries (Glue, Unity Catalog), lineage tracking.</li>
<li><strong>Data quality as a first-class concern</strong>: Great Expectations, dbt (data build tool) tests, Monte Carlo - automated, version-controlled, visible.</li>
<li><strong>Secure, governed access</strong>: IAM for datasets, access logs, PII classification, compliance guardrails.</li>
<li><strong>Infrastructure-as-code for data</strong>: Terraform modules for warehouses, DBT Cloud projects, Databricks workspaces, streaming infra (Kafka, Kinesis).</li>
</ul>
<p>From a platform perspective: self-service data pipeline templates, standardized dbt projects, catalog-first workflows, quality checks baked into CI.</p>
<h3 id="7-how-do-we-train-deploy-and-monitor-models">7) &ldquo;How do we train, deploy, and monitor models?&rdquo;</h3>
<p>MLOps is platform engineering for machine learning:</p>
<ul>
<li><strong>Experiment tracking and model registry</strong>: MLflow, Weights &amp; Biases, SageMaker Model Registry - reproducibility and versioning.</li>
<li><strong>Training infrastructure</strong>: GPU/TPU provisioning (Kubernetes jobs, Kubeflow, managed services), spot instances for cost.</li>
<li><strong>Feature stores</strong>: Feast, Tecton, SageMaker Feature Store - reusable feature pipelines, point-in-time correctness.</li>
<li><strong>Model deployment patterns</strong>: batch inference, real-time endpoints, A/B testing, canary rollouts, shadow deployments for models.</li>
<li><strong>Model observability</strong>: drift detection (data drift, concept drift), performance degradation, retraining triggers.</li>
<li><strong>Reproducibility as a requirement</strong>: data versioning (DVC), containerized training, artifact lineage, &ldquo;what model is running where.&rdquo;</li>
<li><strong>Compliance for ML</strong>: explainability, bias detection, audit trails, responsible AI guardrails.</li>
</ul>
<p>What the platform provides: golden paths for &ldquo;train → register → deploy → monitor,&rdquo; self-service model deployment, automated retraining pipelines, observability dashboards for model performance alongside app metrics.</p>
<h3 id="8-how-do-we-enable-safe-cost-effective-ai-llms-genai">8) &ldquo;How do we enable safe, cost-effective AI (LLMs, GenAI)?&rdquo;</h3>
<p>The newest frontier - infrastructure for generative AI and LLMs:</p>
<ul>
<li><strong>LLM serving infrastructure</strong>: vLLM, Text Generation Inference (TGI), Ray Serve, modal/replicate patterns, managed endpoints (Bedrock, Vertex AI).</li>
<li><strong>Vector databases for RAG</strong>: Pinecone, Weaviate, pgvector, ChromaDB - retrieval-augmented generation infrastructure.</li>
<li><strong>Prompt management and versioning</strong>: LangSmith, PromptLayer, prompts-as-code, evaluation frameworks.</li>
<li><strong>Cost and rate limiting</strong>: GPU cost management, token usage tracking, quota enforcement, smart caching (semantic caching, KV caching).</li>
<li><strong>Security for AI</strong>: prompt injection protection, PII scrubbing in requests/responses, model access control, compliance with AI regulations, and most importantly, treating <strong>everything</strong> as potentially hostile input.</li>
<li><strong>Guardrails and evaluation</strong>: content filtering, toxicity checks, output validation, automated evaluation pipelines (RAGAS, LangChain evals).</li>
</ul>
<p>Platform-wise, this means: self-service LLM endpoints with cost controls, RAG-as-a-service patterns, standardized evaluation frameworks, responsible AI checks baked into deployment, observability for token usage and latency.</p>
<hr>
<h2 id="the-platform-end-to-end-a-mental-model">The platform, end-to-end (a mental model)</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">                       +--------------------------------------------------+
</span></span><span class="line"><span class="cl">                       |      Platform Engineering (paved road)           |
</span></span><span class="line"><span class="cl">                       | (standards, automation, guardrails, golden paths)|
</span></span><span class="line"><span class="cl">                       +--------------------------------------------------+
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">+-------------+                                    +--------------------+
</span></span><span class="line"><span class="cl">| Developer/  |  push code/data/models             |    Git Repos       |
</span></span><span class="line"><span class="cl">| Data Eng/   | ------------------------------&gt;    | - app code         |
</span></span><span class="line"><span class="cl">| ML Eng      |                                    | - IaC              |
</span></span><span class="line"><span class="cl">+-------------+                                    | - data pipelines   |
</span></span><span class="line"><span class="cl">                                                   | - ML training code |
</span></span><span class="line"><span class="cl">                                                   | - prompts/configs  |
</span></span><span class="line"><span class="cl">                                                   +--------------------+
</span></span><span class="line"><span class="cl">                                                            |
</span></span><span class="line"><span class="cl">                                                            | triggers
</span></span><span class="line"><span class="cl">                                                            v
</span></span><span class="line"><span class="cl">                                                   +-------------------+
</span></span><span class="line"><span class="cl">                                                   |   CI Pipelines    |
</span></span><span class="line"><span class="cl">                                                   | - app: test/build |
</span></span><span class="line"><span class="cl">                                                   | - data: validate  |
</span></span><span class="line"><span class="cl">                                                   | - ML: train/eval  |
</span></span><span class="line"><span class="cl">                                                   +-------------------+
</span></span><span class="line"><span class="cl">                                                            |
</span></span><span class="line"><span class="cl">                                                            v
</span></span><span class="line"><span class="cl">                                         +----------------------------------+
</span></span><span class="line"><span class="cl">                                         |          Artifacts               |
</span></span><span class="line"><span class="cl">                                         | - containers (app services)      |
</span></span><span class="line"><span class="cl">                                         | - Python wheels, dbt packages    |
</span></span><span class="line"><span class="cl">                                         | - trained models + metadata      |
</span></span><span class="line"><span class="cl">                                         | - SBOM, signatures, lineage      |
</span></span><span class="line"><span class="cl">                                         +----------------------------------+
</span></span><span class="line"><span class="cl">                                                            |
</span></span><span class="line"><span class="cl">                                                            | promote/deploy
</span></span><span class="line"><span class="cl">                                                            v
</span></span><span class="line"><span class="cl">                                         +----------------------------------+
</span></span><span class="line"><span class="cl">                                         |        CD / Deployment           |
</span></span><span class="line"><span class="cl">                                         | - GitOps (apps)                  |
</span></span><span class="line"><span class="cl">                                         | - Airflow DAGs (data)            |
</span></span><span class="line"><span class="cl">                                         | - Model serving endpoints (ML)   |
</span></span><span class="line"><span class="cl">                                         +----------------------------------+
</span></span><span class="line"><span class="cl">                                                            |
</span></span><span class="line"><span class="cl">                                                            | rollout
</span></span><span class="line"><span class="cl">                                                            v
</span></span><span class="line"><span class="cl">       +----------------------+    +------------------------+     +--------------------+
</span></span><span class="line"><span class="cl">       | App Runtime          |    |   Data Platform        |     | ML/AI Platform     |
</span></span><span class="line"><span class="cl">       | - K8s/Cloud services |    | - Warehouses/Lakes     |     | - Model endpoints  |
</span></span><span class="line"><span class="cl">       | - APIs, jobs         |    | - Pipelines (Airflow)  |     | - Feature stores   |
</span></span><span class="line"><span class="cl">       +----------------------+    | - dbt transformations  |     | - Vector DBs (RAG) |
</span></span><span class="line"><span class="cl">                |                  +------------------------+     | - LLM serving      |
</span></span><span class="line"><span class="cl">                |                             |                   +--------------------+
</span></span><span class="line"><span class="cl">                |                             |                             |
</span></span><span class="line"><span class="cl">                +-----------------------------+-----------------------------+
</span></span><span class="line"><span class="cl">                                              |
</span></span><span class="line"><span class="cl">                                              v
</span></span><span class="line"><span class="cl">                               +------------------------------+
</span></span><span class="line"><span class="cl">                               |      Observability           |
</span></span><span class="line"><span class="cl">                               | - logs, metrics, traces      |
</span></span><span class="line"><span class="cl">                               | - data quality metrics       |
</span></span><span class="line"><span class="cl">                               | - model drift, performance   |
</span></span><span class="line"><span class="cl">                               | - cost (compute, tokens)     |
</span></span><span class="line"><span class="cl">                               +------------------------------+
</span></span><span class="line"><span class="cl">                                              |
</span></span><span class="line"><span class="cl">                                              | alerts/SLOs
</span></span><span class="line"><span class="cl">                                              v
</span></span><span class="line"><span class="cl">                     +-------------------+          +--------------------+
</span></span><span class="line"><span class="cl">                     | Security / Policy | &lt;------  |  Feedback Loop     |
</span></span><span class="line"><span class="cl">                     | - IAM/OIDC        |  informs | - incidents        |
</span></span><span class="line"><span class="cl">                     | - secrets/KMS     |  priors  | - perf/cost        |
</span></span><span class="line"><span class="cl">                     | - data governance |          | - data quality     |
</span></span><span class="line"><span class="cl">                     | - AI guardrails   |          | - model drift      |
</span></span><span class="line"><span class="cl">                     | - checks/controls |          | - dev/data/ML UX   |
</span></span><span class="line"><span class="cl">                     +-------------------+          +--------------------+
</span></span><span class="line"><span class="cl">                                                    |
</span></span><span class="line"><span class="cl">                                                    | fixes/improvements
</span></span><span class="line"><span class="cl">                                                    v
</span></span><span class="line"><span class="cl">                                     +------------------------------+
</span></span><span class="line"><span class="cl">                                     | Teams (Dev/Data/ML/AI Eng)   |
</span></span><span class="line"><span class="cl">                                     +------------------------------+
</span></span></code></pre></div><hr>
<h2 id="platform-engineering-for-data-ml-and-ai-same-principles-new-artifacts">Platform Engineering for Data, ML, and AI: Same Principles, New Artifacts</h2>
<p><strong>Platform engineering principles don&rsquo;t change</strong> when you move from apps to data to ML to AI. What changes is <em>what flows through the platform</em>.</p>
<table>
	<thead>
			<tr>
					<th><strong>Domain</strong></th>
					<th><strong>Artifacts</strong></th>
					<th><strong>Deployment Target</strong></th>
					<th><strong>Observability Focus</strong></th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Apps</strong></td>
					<td>Containers, binaries, configs</td>
					<td>Kubernetes, serverless</td>
					<td>Logs, metrics, traces, SLOs</td>
			</tr>
			<tr>
					<td><strong>Data</strong></td>
					<td>Datasets, schemas, dbt models</td>
					<td>Warehouses, lakes, pipelines</td>
					<td>Freshness, quality, lineage, cost</td>
			</tr>
			<tr>
					<td><strong>ML</strong></td>
					<td>Trained models, feature pipelines</td>
					<td>Batch jobs, real-time endpoints</td>
					<td>Drift, accuracy, latency, retrain</td>
			</tr>
			<tr>
					<td><strong>AI (GenAI)</strong></td>
					<td>LLM endpoints, prompts, vector indexes</td>
					<td>GPU clusters, managed APIs</td>
					<td>Token usage, cost, toxicity, evals</td>
			</tr>
	</tbody>
</table>
<p>The <strong>platform playbook stays the same</strong>:</p>
<ul>
<li><strong>Golden paths</strong>: &ldquo;Do it this way, and it just works.&rdquo;</li>
<li><strong>Self-service</strong>: Engineers provision what they need without waiting for tickets.</li>
<li><strong>IaC everywhere</strong>: Terraform/OpenTofu modules for warehouses, GPU clusters, vector DBs, feature stores.</li>
<li><strong>Security by default</strong>: IAM least privilege, encryption, compliance checks, PII handling, AI guardrails.</li>
<li><strong>Observability built-in</strong>: Whether it&rsquo;s API latency or data freshness or model drift - if it&rsquo;s in prod, it&rsquo;s monitored.</li>
<li><strong>Feedback loops</strong>: Cost reports, quality metrics, developer friction - measure, improve, repeat.</li>
</ul>
<h3 id="in-practice">In practice</h3>
<p><strong>Data platforms:</strong></p>
<ul>
<li>A data engineer runs <code>terraform apply</code> on a module that spins up a dbt Cloud project + Snowflake warehouse + Airflow DAG, all wired together.</li>
<li>Data quality tests (Great Expectations, dbt tests) run in CI before merging.</li>
<li>Schema changes are tracked in a catalog (Glue, Unity) with lineage from source → warehouse → BI dashboards.</li>
<li>Freshness and row count anomalies trigger alerts just like app SLOs.</li>
</ul>
<p><strong>ML platforms:</strong></p>
<ul>
<li>An ML engineer uses a &ldquo;train-and-deploy&rdquo; template: Docker + GPU Kubernetes job + model registry (MLflow) + endpoint deployment (SageMaker or KServe).</li>
<li>Feature store is provisioned as code; training uses versioned features with point-in-time correctness.</li>
<li>Model drift monitoring runs automatically; retraining pipelines trigger when drift exceeds thresholds.</li>
<li>Rollback is as simple as promoting a previous model version - just like rolling back a container.</li>
</ul>
<p><strong>AI infrastructure:</strong></p>
<ul>
<li>A team provisions an LLM endpoint (vLLM on GPU instances) + vector DB (Pinecone) + prompt versioning (LangSmith) via Terraform.</li>
<li>Prompts are version-controlled; evaluation pipelines (RAGAS) run on every PR.</li>
<li>Guardrails (toxicity filters, PII scrubbers) are enforced at the platform level before responses reach users.</li>
<li>Token usage and cost are tracked per team/project; quota limits prevent runaway bills.</li>
<li>RAG pipelines are standardized: ingest → embed → index → retrieve → generate, with observability at every step.</li>
</ul>
<hr>
<h2 id="why-bother">Why bother?</h2>
<p>Whether you&rsquo;re shipping containers, data pipelines, ML models, or LLM-powered features, the value proposition is the same:</p>
<ol>
<li><strong>Speed</strong>: Teams move faster because the platform handles the undifferentiated heavy lifting.</li>
<li><strong>Safety</strong>: Guardrails (security, compliance, cost, quality) are baked in, not bolted on.</li>
<li><strong>Scale</strong>: One platform team enables dozens (or hundreds) of product/data/ML teams.</li>
<li><strong>Consistency</strong>: &ldquo;It works on my machine&rdquo; becomes &ldquo;it works the same way everywhere.&rdquo;</li>
<li><strong>Observability</strong>: You can&rsquo;t improve what you don&rsquo;t measure - platforms make measurement automatic.</li>
</ol>
<p>And in 2026, that platform increasingly needs to support <strong>not just apps, but data products, ML models, and AI-powered features</strong>. Same principles, broader scope.</p>
<hr>
<h2 id="wrapping-up">Wrapping up</h2>
<p><strong>Platform Engineering</strong> is building the roads so everyone else can drive fast and safe.</p>
<p>Whether that road carries Docker images to Kubernetes, dbt models to Snowflake, or trained models to SageMaker endpoints doesn&rsquo;t change the core job: <strong>make the right way the easy way, automate everything, stay secure and observable, and treat internal users like customers</strong>.</p>
<p>If you&rsquo;re doing DevOps, you&rsquo;re already most of the way there. Platform engineering is just DevOps with a product mindset - and these days, that product increasingly includes data, ML, and AI infrastructure.</p>
<p>The tools change. The principles don&rsquo;t.</p>
<p>Now go build some roads.</p>
<pre tabindex="0"><code></code></pre>]]></content:encoded>
    </item>
  </channel>
</rss>
