<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged metrics</title>
<link>https://coderlegion.com/tag/metrics</link>
<description>Powered by Question2Answer</description>
<item>
<title>Centralizing Observability: Introducing the NKE Metrics Agent</title>
<link>https://coderlegion.com/27113/centralizing-observability-introducing-the-nke-metrics-agent</link>
<description>&lt;p&gt;Monitoring is a critical part of any cloud-native application. As Kubernetes environments grow, so does the complexity and resource cost of observing them. Today, we are excited to announce the general availability of Metrics Agent for the Nine Kubernetes Engine (NKE).&lt;/p&gt;
&lt;p&gt;This release marks a significant step forward in our “Global Metrics” initiative, designed to provide a centralized, efficient, and scalable observability platform for all Nine products.&lt;/p&gt;
&lt;h2 id=&quot;the-challenge-with-prometheus&quot;&gt;The Challenge with Prometheus&lt;/h2&gt;
&lt;p&gt;Monitoring in NKE involved running a full Prometheus instance within each cluster. While effective, this approach has downsides:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Resource Consumption: Prometheus can be memory and CPU intensive,&lt;br&gt;
eating into the resources available for your actual applications.&lt;/li&gt;
&lt;li&gt;Storage Complexity: Managing long-term persistent storage for&lt;br&gt;
metrics within the cluster is challenging and can be costly.&lt;/li&gt;
&lt;li&gt;Fragmentation: Metrics are locked inside each cluster, making it&lt;br&gt;
hard to get a unified view of your infrastructure.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Because of these reasons, Metrics Agent will eventually replace the standalone Prometheus product for NKE customers, providing a more efficient and centralized solution.&lt;/p&gt;
&lt;h2 id=&quot;enter-the-metrics-agent&quot;&gt;Enter the Metrics Agent&lt;/h2&gt;
&lt;p&gt;Metrics Agent is a lightweight component based on VictoriaMetrics. Instead of storing metrics locally, it collects them and pushes them to our centralized Global Metrics cluster.&lt;/p&gt;
&lt;p&gt;This architecture brings several immediate benefits:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Reduced Footprint: The agent runs on the NKE control plane, freeing&lt;br&gt;
up your worker nodes for your workloads.&lt;/li&gt;
&lt;li&gt;Centralized Storage: Your metrics are stored securely in our managed&lt;br&gt;
Global Metrics backend, ensuring durability and high availability&lt;br&gt;
without you needing to manage Persistent Volumes for monitoring.&lt;/li&gt;
&lt;li&gt;Standard Configuration: We leverage the popular Prometheus Operator&lt;br&gt;
ecosystem. You can continue to define your scraping targets using&lt;br&gt;
standard ServiceMonitor and PodMonitor resources.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Metrics Agent is currently limited to 100,000 unique time series per day. See the documentation for details.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot;&gt;How It Works&lt;/h2&gt;
&lt;p&gt;When you enable Metrics Agent on your NKE cluster, it deploys a vmagent (VictoriaMetrics Agent) into the nine-system namespace. This agent automatically discovers targets based on your configuration.&lt;/p&gt;
&lt;p&gt;To start scraping an application, you simply create a ServiceMonitor or PodMonitor and add the required label:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;labels:
  prometheus.nine.ch/&amp;lt;your-agent-name&amp;gt;: scrape
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note: Replace &amp;lt;your-agent-name&amp;gt; with the specific name of your metrics agent.&lt;/p&gt;
&lt;p&gt;The agent then scrapes the targets and forwards the data to our central store, where it becomes available for querying via Grafana.&lt;/p&gt;
&lt;p&gt;Note: Metrics Agent does not currently support Grafana Alerting. Use Alertmanager instead for alerting rules.&lt;/p&gt;
&lt;h2 id=&quot;pricing&quot;&gt;Pricing&lt;/h2&gt;
&lt;p&gt;Metrics Agent billing is based on your actual usage, plus a fixed fee per instance. For current pricing details, see the Metrics Agent documentation.&lt;/p&gt;
&lt;h2 id=&quot;migrating-from-prometheus&quot;&gt;Migrating from Prometheus&lt;/h2&gt;
&lt;p&gt;If you’re currently using Prometheus in your NKE cluster, migrating to Metrics Agent is straightforward. By naming your Metrics Agent the same as your existing Prometheus instance, it will automatically pick up all your existing ServiceMonitors and PodMonitors without any configuration changes.&lt;/p&gt;
&lt;p&gt;For detailed migration steps, see the migration guide in our documentation.&lt;/p&gt;
&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;Metrics Agent is available now for NKE. To get started, read the full Metrics Agent guide for detailed setup instructions.&lt;/p&gt;
&lt;h2 id=&quot;one-platform-for-all-metrics&quot;&gt;One Platform for All Metrics&lt;/h2&gt;
&lt;p&gt;The release of Metrics Agent is part of our broader vision for a unified observability platform. We are actively working on adding metrics from more of our managed services to this global storage, giving you a single pane of glass for your entire infrastructure at Nine.&lt;/p&gt;
&lt;p&gt;Users of our PaaS product, deplo.io, benefit from a similar observability experience: application metrics there can also be visualized via your own Grafana instance. You can learn more about this in the deplo.io observability documentation.&lt;/p&gt;
&lt;p&gt;We believe this new approach will significantly simplify how you monitor your applications on NKE. Activate Metrics Agent directly in Cockpit or follow the migration guide to switch from Prometheus. As always, we are here to help - if you have questions or need assistance, please reach out to our support team.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27113/centralizing-observability-introducing-the-nke-metrics-agent</guid>
<pubDate>Mon, 14 Sep 2026 04:39:27 +0000</pubDate>
</item>
<item>
<title>My Phone Was Talking Behind My Back. NextDNS Caught Every Word</title>
<link>https://coderlegion.com/25190/my-phone-was-talking-behind-my-back-nextdns-caught-every-word</link>
<description>&lt;p&gt;A few weeks ago I did something embarrassingly simple: I pointed my Android phone's DNS at NextDNS, turned on logging, and just left it alone. No apps opened, no browsing, phone face-down on the desk. I wanted to see what my phone talks about when I'm not the one talking to it.&lt;/p&gt;
&lt;p&gt;Turns out my phone has a lot to say. And almost none of it was to me.&lt;/p&gt;
&lt;h3 id=&quot;what-actually-showed-up-in-the-logs&quot;&gt;What actually showed up in the logs&lt;/h3&gt;
&lt;p&gt;Within the first hour, before I'd touched a single app, the query log was already scrolling. Analytics pings. Crash reporting handshakes. Push notification services checking in like clockwork. By the time I had a real sample size, close to a third of all outbound DNS queries from a phone that was, by any reasonable definition, just sitting there — were getting flagged and blocked as ads or trackers. Not &quot;I was scrolling Instagram&quot; traffic. Idle traffic. Screen off, no interaction, sitting on a desk being a small glowing brick.&lt;/p&gt;
&lt;p&gt;And here's the part that actually got under my skin: the single biggest source of that traffic, by a wide margin, wasn't some sketchy third-party SDK I'd never heard of. It was Google. Analytics, Ads, DoubleClick, Crashlytics — the whole in-house stack, running quietly underneath apps that had nothing to do with search or ads at all. Then a handful of the usual push-notification and analytics middlemen behind that. My phone runs Android. Of course a chunk of that traffic is Google's own OS talking to Google's own servers. But watching the actual volume, in real time, with domain names instead of vague reassurances, hits different than reading a privacy policy that says &quot;we may collect usage data to improve your experience.&quot;&lt;/p&gt;
&lt;p&gt;This is the part where I'd normally tell you I'm exaggerating for effect. I'm not. This is just what a stock Android phone does by default, and I hadn't even gotten to the browser yet.&lt;/p&gt;
&lt;h3 id=&quot;turns-out-this-isn-t-a-vibe-it-s-a-measured-peer-reviewed-fact&quot;&gt;Turns out this isn't a vibe, it's a measured, peer-reviewed fact&lt;/h3&gt;
&lt;p&gt;Here's where I stopped feeling paranoid and started feeling validated. Researcher Douglas Leith at Trinity College Dublin ran a formal study comparing telemetry traffic from Android and iOS handsets back to Google and Apple. The findings: both operating systems transmit telemetry even after a user explicitly opts out in settings. Both send data before you've ever logged in, in some cases before you've logged in at all. And Android sends dramatically more of it — on an idle handset, a Pixel checks in with Google's servers roughly every four and a half minutes, and Google collects something in the neighborhood of 20 times more telemetry volume than Apple does from an equivalent iPhone.&lt;/p&gt;
&lt;p&gt;This isn't a fringe theory some guy posted on a forum. It's peer-reviewed academic research, and it got expensive for Google to ignore: in July 2025, a California jury awarded $314.6 million against Google specifically over Android phones transferring data to Google's servers while idle — over cellular data, at the phone owner's own expense, functionally billing you for the privilege of being tracked. Google's spokesperson called the verdict a misunderstanding of services &quot;critical to the security, performance, and reliability of Android devices.&quot; Maybe. It's also, technically, the exact behavior an independent academic study measured and published years before a jury agreed a real person got harmed by it. A second case covering the other 49 U.S. states followed.&lt;/p&gt;
&lt;h3 id=&quot;google-isn-t-just-an-app-on-your-phone-it-s-most-of-the-pipe-your-phone-talks-through&quot;&gt;Google isn't just an app on your phone, it's most of the pipe your phone talks through&lt;/h3&gt;
&lt;p&gt;Step back from the DNS logs for a second, because the telemetry itself is only half the story. The other half is just how much of the internet's plumbing runs through one company by default, which is what makes &quot;opting out&quot; such a hilarious concept in practice.&lt;/p&gt;
&lt;p&gt;As of 2026, Android sits around 72-73% of global mobile OS market share. Chrome holds somewhere around 68-70% of the global browser market, meaning the majority of humans reading anything online right now are doing it through a piece of software built by the same company that runs the ad network deciding what you see next. Google Search still commands somewhere north of 90% of the search market globally, and in the U.S., a federal judge already ruled in August 2024 that this dominance constitutes an illegal monopoly under the Sherman Act — a ruling whose remedies trial is still working its way through 2026. The EU fined Google $3.5 billion in September 2025 for separate competition violations. None of that dented Search revenue through the most recent quarter on record. You can win the ruling and still lose nothing that matters financially, which tells you everything about how enforcement currently scales against companies this size.&lt;/p&gt;
&lt;p&gt;Put plainly: it's not that Google collects a lot of data. It's that Google built, owns, and operates the road, the car, and the tollbooth, and then also runs the billboard company. When one entity is the operating system, the browser, the search engine, and the ad exchange all at once, &quot;just don't use their products&quot; stops being a real option for the overwhelming majority of people on Earth, including, until three weeks ago, me.&lt;/p&gt;
&lt;h3 id=&quot;the-short-list-of-companies-who-actually-run-your-digital-life&quot;&gt;The short list of companies who actually run your digital life&lt;/h3&gt;
&lt;p&gt;Google isn't alone up there, it's just the one with the most complete vertical stack. Zoom out and the internet most people experience daily runs through a genuinely small handful of companies: Google for search, Android, and the ad exchange underneath a huge share of the web's monetization. Meta for the social graph most people's real-world relationships are mapped onto. Amazon for a meaningful chunk of the cloud infrastructure the rest of the internet physically runs on, AWS included. Apple for the hardware and app-store gate on the other half of the world's phones. Microsoft for enterprise identity, GitHub, and now a deepening AI stake across the stack. Five companies, functionally deciding the default conditions under which a few billion people work, communicate, and get recommended what to buy next.&lt;/p&gt;
&lt;p&gt;None of that requires a conspiracy. It's just what happens when infrastructure businesses win, at scale, for two decades straight, mostly unchallenged, while regulators wrote reports about it.&lt;/p&gt;
&lt;h3 id=&quot;so-what-do-you-actually-do-with-this&quot;&gt;So what do you actually do with this&lt;/h3&gt;
&lt;p&gt;I'm not going to tell you to abandon Android and disappear into a GrapheneOS bunker, that's not a realistic ask for most people reading this, myself included some days. But NextDNS, or Pi-hole if you'd rather self-host it, is a genuinely low-effort way to see the shape of what's happening instead of just trusting a privacy policy summary. It won't stop everything — plenty of this telemetry survives the opt-out toggle entirely, that's the whole point of the Trinity College study. But watching the actual query log for even 48 hours will change how you think about the phrase &quot;we only collect anonymous usage data to improve your experience,&quot; because you'll have a domain name and a timestamp proving otherwise, sitting right there in front of you.&lt;/p&gt;
&lt;p&gt;Turns out the most educational thing you can do with a smartphone isn't installing a new app. It's just watching, for once, what it does when you're not.&lt;/p&gt;
</description>
<category>Discussions</category>
<guid isPermaLink="true">https://coderlegion.com/25190/my-phone-was-talking-behind-my-back-nextdns-caught-every-word</guid>
<pubDate>Sun, 23 Aug 2026 18:29:06 +0000</pubDate>
</item>
<item>
<title>Prometheus 3.0 and OpenTelemetry: Native OTLP Support Explained</title>
<link>https://coderlegion.com/15636/prometheus-3-0-and-opentelemetry-native-otlp-support-explained</link>
<description>
&lt;p&gt;Seven years is a long time in observability. Since Prometheus 2.0 landed in 2017, the ecosystem has been transformed by cloud-native adoption, the rise of distributed tracing, and the emergence of OpenTelemetry as the de facto standard for instrumentation. Prometheus 3.0, released in November 2024, is the project&amp;rsquo;s answer to that transformation &amp;mdash; and its most significant change is the native ability to ingest OpenTelemetry metrics directly, without an intermediary collector standing in the way.&lt;/p&gt;



&lt;p&gt;This article goes deep on what Prometheus 3.0 actually changes for platform engineers and cloud architects who are running &amp;mdash; or planning to run &amp;mdash; OTel-instrumented workloads alongside Prometheus-based monitoring stacks. We will cover the native OTLP ingestion endpoint, UTF-8 metric name support, Remote Write 2.0, migration considerations, and the architectural patterns that still make sense even when native OTLP is available.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;What Changed in Prometheus 3.0: The OTel-Relevant Picture&lt;/h2&gt;



&lt;p&gt;Prometheus 3.0 ships a substantial set of changes. Not all of them are equally relevant to OpenTelemetry integration, so let&amp;rsquo;s focus on what actually moves the needle for OTel users before diving into each area in detail.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Native OTLP Ingestion&lt;/h3&gt;



&lt;p&gt;The flagship feature: Prometheus 3.0 ships with a built-in OTLP receiver that exposes an HTTP endpoint accepting metrics in the OpenTelemetry Protocol format. Applications instrumented with any OTel SDK can now push metrics directly to Prometheus without routing through an OpenTelemetry Collector. This is not a sidecar, not a plugin, not an external adapter &amp;mdash; it is a first-class endpoint in the Prometheus binary itself.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;UTF-8 Metric Names&lt;/h3&gt;



&lt;p&gt;Prometheus historically restricted metric names to &lt;code&gt;[a-zA-Z_:][a-zA-Z0-9_:]*&lt;/code&gt;. OpenTelemetry uses dots and slashes in metric names by convention &amp;mdash; &lt;code&gt;http.server.request.duration&lt;/code&gt; is a canonical OTel metric name. Prometheus 3.0 lifts this restriction and supports arbitrary UTF-8 characters in metric names and label names, which is the single most important compatibility change for OTel interoperability.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Remote Write 2.0&lt;/h3&gt;

&lt;h3 class=&quot;wp-block-heading&quot;&gt;Remote Write 2.0&lt;/h3&gt;



&lt;p&gt;Remote Write 2.0 replaces the original protocol with a more efficient encoding based on protobuf, adds native histogram support in the wire format, and reduces bandwidth consumption significantly for large-scale deployments. If you are federating metrics to Thanos, Mimir, or Cortex, this matters for operational cost.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;New UI&lt;/h3&gt;



&lt;p&gt;The Prometheus web UI has been completely rewritten. The new UI uses React, supports metric metadata exploration, and provides a significantly improved query-building experience. This is a quality-of-life improvement rather than an architectural change, but it reduces the dependency on external tools like Grafana for ad-hoc investigation.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Breaking Changes Summary&lt;/h3&gt;



&lt;p&gt;Prometheus 3.0 removes several features that were deprecated in 2.x. The most operationally significant are: removal of the &lt;code&gt;--web.enable-admin-api&lt;/code&gt; deprecated flag path, removal of certain legacy storage format options, changes to default scrape timeouts, and stricter validation of configuration that was previously silently accepted. We cover a migration checklist later in this article.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;The OTLP Receiver: How It Works and What It Accepts&lt;/h2&gt;



&lt;p&gt;The OTLP receiver in Prometheus 3.0 is implemented as an optional feature that must be explicitly enabled. Once enabled, it exposes an HTTP endpoint at &lt;code&gt;/api/v1/otlp/v1/metrics&lt;/code&gt; that accepts protobuf-encoded OTLP ExportMetricsServiceRequest payloads &amp;mdash; the same wire format used by the OpenTelemetry Collector&amp;rsquo;s OTLP exporter.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;What It Accepts (and What It Does Not)&lt;/h3&gt;



&lt;p&gt;This is critical to understand before you architect around native OTLP ingestion: &lt;strong&gt;Prometheus 3.0 OTLP support is metrics-only&lt;/strong&gt;. It does not accept traces or logs. OTLP is a unified protocol covering all three signals, but Prometheus is a metrics store &amp;mdash; the receiver handles only the metrics portion of the OTLP specification.&lt;/p&gt;



&lt;p&gt;Supported metric types in the OTLP receiver:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;&lt;li&gt;&lt;strong&gt;Gauge&lt;/strong&gt; &amp;mdash; maps directly to a Prometheus Gauge&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Sum (monotonic)&lt;/strong&gt; &amp;mdash; maps to a Prometheus Counter&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Sum (non-monotonic)&lt;/strong&gt; &amp;mdash; maps to a Prometheus Gauge&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Histogram (explicit bucket)&lt;/strong&gt; &amp;mdash; maps to a Prometheus Histogram&lt;/li&gt;&lt;li&gt;&lt;strong&gt;ExponentialHistogram&lt;/strong&gt; &amp;mdash; maps to Prometheus Native Histograms (a 3.0 feature)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt; &amp;mdash; maps to a Prometheus Summary&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;Resource attributes from the OTLP payload &amp;mdash; things like &lt;code&gt;service.name&lt;/code&gt;, &lt;code&gt;k8s.pod.name&lt;/code&gt;, &lt;code&gt;cloud.region&lt;/code&gt; &amp;mdash; are converted to Prometheus labels. This conversion is configurable, and by default Prometheus applies a promotion strategy that converts the most common resource attributes to labels while discarding ones that would create extremely high cardinality.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Enabling the OTLP Receiver&lt;/h3&gt;



&lt;p&gt;Enabling native OTLP ingestion requires two things: a feature flag and a configuration block in &lt;code&gt;prometheus.yml&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;Start the Prometheus binary with the feature flag:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --enable-feature=otlp-write-receiver&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Then add the OTLP receiver configuration to your &lt;code&gt;prometheus.yml&lt;/code&gt;:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;# prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

otlp:
  # Promote these OTLP resource attributes to Prometheus labels
  promote_resource_attributes:
    - service.name
    - service.namespace
    - service.instance.id
    - k8s.namespace.name
    - k8s.pod.name
    - k8s.node.name
    - cloud.region
    - deployment.environment&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;With this configuration, Prometheus will listen on port 9090 (default) and accept OTLP metrics at &lt;code&gt;http://&amp;lt;prometheus-host&amp;gt;:9090/api/v1/otlp/v1/metrics&lt;/code&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Resource Attribute Promotion Strategy&lt;/h3&gt;



&lt;p&gt;The &lt;code&gt;promote_resource_attributes&lt;/code&gt; list deserves careful thought. OTLP carries rich resource-level context &amp;mdash; every metric payload includes a ResourceMetrics object with attributes describing the source: service name, version, environment, Kubernetes pod, node, cluster, cloud provider details, and more. Prometheus labels are flat key-value pairs on each time series. Promoting too many resource attributes explodes cardinality; promoting too few loses important context.&lt;/p&gt;



&lt;p&gt;A pragmatic starting list for Kubernetes deployments:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;otlp:
  promote_resource_attributes:
    - service.name          # Critical: identifies the service
    - service.namespace     # Logical grouping
    - deployment.environment  # prod/staging/dev
    - k8s.namespace.name    # Kubernetes namespace
    - k8s.pod.name          # Pod-level cardinality &amp;mdash; consider omitting in high-scale
    - k8s.node.name         # Useful for infrastructure correlation&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Avoid blindly promoting &lt;code&gt;k8s.pod.name&lt;/code&gt; at scale &amp;mdash; in a cluster with thousands of short-lived pods, this creates significant cardinality pressure. Prefer &lt;code&gt;service.name&lt;/code&gt; and &lt;code&gt;service.namespace&lt;/code&gt; for most alerting use cases, reserving pod-level labels for debugging dashboards.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;UTF-8 Metric Names: Why This Is the Real Game-Changer&lt;/h2&gt;



&lt;p&gt;To appreciate why UTF-8 metric name support matters so much, you need to understand the friction it eliminates. OpenTelemetry semantic conventions define metric names using dots as namespace separators. The canonical HTTP server duration metric is &lt;code&gt;http.server.request.duration&lt;/code&gt;. The canonical database query duration is &lt;code&gt;db.client.operation.duration&lt;/code&gt;. These names are standardized across languages and frameworks &amp;mdash; your Go service and your Java service and your Python service all emit the same metric name when instrumented with OTel.&lt;/p&gt;



&lt;p&gt;Prometheus 2.x could not store these names. The dots are illegal characters in Prometheus metric naming. Every OTel-to-Prometheus bridge &amp;mdash; the OpenTelemetry Collector&amp;rsquo;s Prometheus exporter, prom-client compatibility layers, the older &lt;code&gt;prometheusremotewrite&lt;/code&gt; exporter &amp;mdash; had to translate these names, typically by replacing dots with underscores: &lt;code&gt;http_server_request_duration&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;This translation is lossy and creates multiple problems:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;&lt;li&gt;&lt;strong&gt;Name collisions&lt;/strong&gt;: &lt;code&gt;http.server.request_duration&lt;/code&gt; and &lt;code&gt;http.server.request.duration&lt;/code&gt; both become &lt;code&gt;http_server_request_duration&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dashboard breakage&lt;/strong&gt;: Grafana dashboards built against OTel semantic conventions don&amp;rsquo;t work against translated Prometheus metrics without modification&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Cross-signal correlation&lt;/strong&gt;: Trace attributes use dot notation; when metric names differ, automated correlation tools lose the thread&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Vendor lock-in pressure&lt;/strong&gt;: Teams end up with separate naming conventions for &amp;ldquo;Prometheus metrics&amp;rdquo; vs &amp;ldquo;OTel metrics&amp;rdquo; and maintain both&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;Prometheus 3.0 with UTF-8 support stores &lt;code&gt;http.server.request.duration&lt;/code&gt; natively. No translation. No collision. The metric name you instrument with is the metric name you query.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Enabling UTF-8 Metric Names&lt;/h3&gt;



&lt;p&gt;UTF-8 metric names require the &lt;code&gt;utf8-names&lt;/code&gt; feature flag:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --enable-feature=utf8-names \
  --enable-feature=otlp-write-receiver&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Once enabled, PromQL queries must use quoted metric names when the name contains characters outside the legacy character set:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;# Legacy metric name &amp;mdash; unquoted works fine
http_server_requests_total

# OTel metric name with dots &amp;mdash; requires quoting in PromQL
{&quot;__name__&quot;=&quot;http.server.request.duration&quot;}

# Or using the new PromQL syntax in Prometheus 3.0
http.server.request.duration{service_name=&quot;api-gateway&quot;}&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The PromQL parser in Prometheus 3.0 has been updated to handle quoted metric names as a first-class construct. Grafana&amp;rsquo;s PromQL engine has also been updated to handle this syntax &amp;mdash; verify your Grafana version (10.3+ has full support) before deploying.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;OTel SDK to Prometheus 3.0 Directly: No Collector Required&lt;/h2&gt;



&lt;p&gt;For teams that only need to get application metrics into Prometheus, native OTLP ingestion enables a dramatically simpler architecture. Here&amp;rsquo;s what it looks like with different OTel SDKs.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Go (OpenTelemetry SDK)&lt;/h3&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;package main

import (
    &quot;context&quot;
    &quot;time&quot;

    &quot;go.opentelemetry.io/otel&quot;
    &quot;go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp&quot;
    &quot;go.opentelemetry.io/otel/sdk/metric&quot;
    &quot;go.opentelemetry.io/otel/sdk/resource&quot;
    semconv &quot;go.opentelemetry.io/otel/semconv/v1.26.0&quot;
)

func initMetrics(ctx context.Context) (*metric.MeterProvider, error) {
    res, err := resource.New(ctx,
        resource.WithAttributes(
            semconv.ServiceName(&quot;my-api&quot;),
            semconv.ServiceNamespace(&quot;platform&quot;),
            semconv.DeploymentEnvironment(&quot;production&quot;),
        ),
    )
    if err != nil {
        return nil, err
    }

    // Point directly at Prometheus 3.0 OTLP endpoint
    exporter, err := otlpmetrichttp.New(ctx,
        otlpmetrichttp.WithEndpoint(&quot;prometheus:9090&quot;),
        otlpmetrichttp.WithURLPath(&quot;/api/v1/otlp/v1/metrics&quot;),
        otlpmetrichttp.WithInsecure(), // Use WithTLSClientConfig for production
    )
    if err != nil {
        return nil, err
    }

    provider := metric.NewMeterProvider(
        metric.WithResource(res),
        metric.WithReader(
            metric.NewPeriodicReader(exporter,
                metric.WithInterval(30*time.Second),
            ),
        ),
    )

    otel.SetMeterProvider(provider)
    return provider, nil
}&lt;/code&gt;&lt;/pre&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Python (OpenTelemetry SDK)&lt;/h3&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;from opentelemetry import metrics
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter
from opentelemetry.sdk.resources import Resource, SERVICE_NAME, SERVICE_NAMESPACE

resource = Resource.create({
    SERVICE_NAME: &quot;my-api&quot;,
    SERVICE_NAMESPACE: &quot;platform&quot;,
    &quot;deployment.environment&quot;: &quot;production&quot;,
})

exporter = OTLPMetricExporter(
    endpoint=&quot;http://prometheus:9090/api/v1/otlp/v1/metrics&quot;,
)

reader = PeriodicExportingMetricReader(
    exporter,
    export_interval_millis=30_000,
)

provider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(provider)

# Use the meter
meter = metrics.get_meter(&quot;my-api&quot;)
request_counter = meter.create_counter(
    name=&quot;http.server.request.count&quot;,
    description=&quot;Total HTTP server requests&quot;,
    unit=&quot;1&quot;,
)
request_duration = meter.create_histogram(
    name=&quot;http.server.request.duration&quot;,
    description=&quot;HTTP server request duration&quot;,
    unit=&quot;s&quot;,
)&lt;/code&gt;&lt;/pre&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Java (OpenTelemetry SDK with Spring Boot)&lt;/h3&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;# application.properties (Spring Boot with OTel auto-instrumentation)
otel.service.name=my-api
otel.resource.attributes=service.namespace=platform,deployment.environment=production

# Configure OTLP exporter to push directly to Prometheus
otel.metrics.exporter=otlp
otel.exporter.otlp.metrics.endpoint=http://prometheus:9090/api/v1/otlp/v1/metrics
otel.exporter.otlp.metrics.protocol=http/protobuf

# Export interval
otel.metric.export.interval=30000&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;With Spring Boot and the OTel Java agent, no code changes are required beyond configuration &amp;mdash; the agent instruments your HTTP server, database clients, and messaging systems automatically and pushes metrics using the names defined in OTel semantic conventions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;OTel Collector to Prometheus 3.0: When You Need the Intermediary&lt;/h2&gt;



&lt;p&gt;Native OTLP ingestion is compelling, but the OpenTelemetry Collector remains relevant for a significant set of use cases. Understanding when each pattern is appropriate is the core architectural decision you will face when adopting Prometheus 3.0 in an OTel environment.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Pattern 1: OTel Collector as Fan-Out Gateway&lt;/h3&gt;



&lt;p&gt;When you need to send metrics to multiple backends simultaneously &amp;mdash; Prometheus for alerting, a long-term store like Thanos for historical analysis, and a commercial observability platform for full-stack correlation &amp;mdash; the OTel Collector handles fan-out efficiently. Applications push once to the Collector; the Collector distributes to all backends.&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;# otel-collector-config.yaml
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

processors:
  batch:
    timeout: 10s
    send_batch_size: 1000
  memory_limiter:
    check_interval: 1s
    limit_mib: 512

exporters:
  # Push to Prometheus 3.0 via OTLP
  otlphttp/prometheus:
    endpoint: http://prometheus:9090/api/v1/otlp
    tls:
      insecure: true

  # Fan-out to Thanos via remote_write
  prometheusremotewrite/thanos:
    endpoint: http://thanos-receive:10908/api/v1/receive
    resource_to_telemetry_conversion:
      enabled: true

  # Fan-out to commercial backend
  otlp/datadog:
    endpoint: &lt;a href=&quot;https://otel-intake.datadoghq.com&quot; rel=&quot;nofollow&quot;&gt;https://otel-intake.datadoghq.com&lt;/a&gt;
    headers:
      DD-API-KEY: &quot;${DD_API_KEY}&quot;

service:
  pipelines:
    metrics:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [otlphttp/prometheus, prometheusremotewrite/thanos, otlp/datadog]&lt;/code&gt;&lt;/pre&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Pattern 2: Collector for Metric Transformation&lt;/h3&gt;



&lt;p&gt;The OTel Collector&amp;rsquo;s transform processor and metricstransform processor allow you to reshape metrics before they reach Prometheus: rename labels, add static attributes, filter out high-cardinality series, aggregate metrics to reduce storage cost, or apply unit conversions. These operations are not available in Prometheus&amp;rsquo;s native OTLP receiver.&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;processors:
  transform/metrics:
    metric_statements:
      - context: metric
        statements:
          # Drop internal debug metrics
          - delete_matching_keys(attributes, &quot;internal.*&quot;)
          # Normalize environment label values
          - set(attributes[&quot;deployment.environment&quot;], &quot;prod&quot;)
            where attributes[&quot;deployment.environment&quot;] == &quot;production&quot;

  filter/drop_debug:
    metrics:
      exclude:
        match_type: regexp
        metric_names:
          - &quot;.*\.debug\..*&quot;
          - &quot;runtime\.go\.internal\..*&quot;

  metricstransform:
    transforms:
      # Rename a metric to match your existing Prometheus naming convention
      - include: http.server.request.duration
        action: update
        new_name: http_server_request_duration_seconds&lt;/code&gt;&lt;/pre&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Pattern 3: Collector for Traces and Logs (Always Required)&lt;/h3&gt;



&lt;p&gt;If your architecture includes traces and logs alongside metrics &amp;mdash; and in 2025 it almost certainly does &amp;mdash; you need an OTel Collector regardless of what you do with metrics. Prometheus does not accept traces or logs. Jaeger, Tempo, and Loki all have their own ingestion protocols. The Collector is the universal routing layer for the three pillars of observability.&lt;/p&gt;



&lt;p&gt;In this architecture, it is usually simpler to route all three signals through the Collector and let it push metrics to Prometheus via OTLP or remote_write, rather than splitting metrics to go directly and everything else through the Collector.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;When to Use Native OTLP vs. OTel Collector: Decision Framework&lt;/h2&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Scenario&lt;/th&gt;&lt;th&gt;Native OTLP&lt;/th&gt;&lt;th&gt;OTel Collector&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Single metrics backend (Prometheus only)&lt;/td&gt;&lt;td&gt;Preferred&lt;/td&gt;&lt;td&gt;Overkill&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Multiple metrics backends&lt;/td&gt;&amp;lt;td&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;
</description>
<category>Other</category>
<guid isPermaLink="true">https://coderlegion.com/15636/prometheus-3-0-and-opentelemetry-native-otlp-support-explained</guid>
<pubDate>Mon, 27 Apr 2026 23:49:40 +0000</pubDate>
</item>
<item>
<title>Measuring productivity without freaking people out</title>
<link>https://coderlegion.com/15998/measuring-productivity-without-freaking-people-out</link>
<description>&lt;p&gt;You’ve settled on the key metrics to assess engineering team performance and satisfaction. Now, how do you ensure those metrics don’t become a source of stress or resentment?&lt;/p&gt;
&lt;p&gt;Any time you set a target – be it deployment frequency or mean time to recover – the spectre of Goodhart’s Law looms, where metrics can become gameable, toxic, or prioritized beyond the health of the wider team or organization. Engineering leaders need to be vigilant to balance the value of ambitious targets against the risk of damaging team health.&lt;/p&gt;
&lt;p&gt;This discussion explores tactics to choose and communicate metrics that balance high performance with a long term culture of continuous improvement.&lt;/p&gt;
&lt;p&gt;Key takeaways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Choose metrics your engineers won’t hate&lt;/li&gt;
&lt;li&gt;Finding a balance between productivity and collaboration&lt;/li&gt;
&lt;li&gt;How to set goals and use metrics to motivate your team&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Videos</category>
<guid isPermaLink="true">https://coderlegion.com/15998/measuring-productivity-without-freaking-people-out</guid>
<pubDate>Mon, 27 Apr 2026 15:39:18 +0000</pubDate>
</item>
<item>
<title>How To Measure AI’s Organizational Impact</title>
<link>https://coderlegion.com/15292/how-to-measure-ais-organizational-impact</link>
<description>&lt;p&gt;When organizations introduce AI, they often make a critical error: they create entirely new metrics to measure its impact. This approach misses the fundamental truth that AI is a tool to help achieve existing goals, not a reason to change what success looks like.&lt;/p&gt;
&lt;h3 id=&quot;-your-goals-haven-t-changed&quot;&gt; Your Goals Haven’t Changed&lt;/h3&gt;
&lt;p&gt;Consider the difference between Formula 1 racing and EcoRally Scotland. Formula 1 teams optimize for speed — whoever crosses the finish line first wins. EcoRally teams have a completely different challenge: complete a 500-kilometer route with the best regularity score while using the least energy possible.&lt;/p&gt;
&lt;p&gt;These teams need different strategies, different driving styles, and different metrics. The goals determine everything else.&lt;/p&gt;
&lt;p&gt;The same principle applies to your organization. When you introduce AI, your fundamental purpose remains unchanged. You still want to create the best quality speakers, save bees, or deliver whatever value you were creating before. AI is simply a new tool to help you achieve those existing goals more effectively.&lt;/p&gt;
&lt;h3 id=&quot;stick-with-what-already-works&quot;&gt;Stick With What Already Works&lt;/h3&gt;
&lt;p&gt;Organizations often have sophisticated measurement systems in place — financial metrics, mission-based indicators, and proxy measures that track different parts of their value stream. If you’ve already established that software delivery performance correlates with organizational outcomes, for example, then continue using those same measures to evaluate AI’s impact.&lt;/p&gt;
&lt;p&gt;The danger lies in creating new metrics specifically for AI adoption. These measures rarely connect to meaningful business outcomes and can lead you to optimize for activities that don’t actually move the needle on what matters most.&lt;/p&gt;
&lt;h3 id=&quot;the-local-optimization-trap&quot;&gt;The Local Optimization Trap&lt;/h3&gt;
&lt;p&gt;Here’s a common scenario: A development team starts using AI and reduces their feature delivery time from 16 hours to 12 hours — a 25% improvement that looks impressive on paper. However, when you examine the entire value stream, the lead time from customer request to delivered value remains unchanged at two weeks.&lt;/p&gt;
&lt;p&gt;This isn’t a new problem. Eli Goldratt explored this in “The Goal,” and Lean Software Development emphasizes optimizing for the whole system, not individual parts. AI amplifies this challenge because it’s easy to see immediate productivity gains in specific areas while missing the broader organizational impact.&lt;/p&gt;
&lt;h3 id=&quot;focus-on-what-truly-matters&quot;&gt;Focus On What Truly Matters&lt;/h3&gt;
&lt;p&gt;Most teams collect numerous metrics that help them improve their work and maintain standards. But organizationally, only a few metrics are truly critical — usually some combination of financial performance and mission-based indicators that track whether you’re making the intended difference in the world.&lt;/p&gt;
&lt;p&gt;AI only delivers real value when its benefits flow through to these crucial numbers. Everything else is just interesting data.&lt;/p&gt;
&lt;h3 id=&quot;-research-driven-implementation&quot;&gt; Research-Driven Implementation&lt;/h3&gt;
&lt;p&gt;The most effective approach follows basic research principles: form a hypothesis, design a test, then evaluate the results. Before implementing AI, articulate clearly how you expect it to impact your mission-level metrics. If you’ve already established relationships between local measures (like software delivery performance) and organizational outcomes, you can build your hypothesis on these proven connections.&lt;/p&gt;
&lt;p&gt;Too many organizations reverse this process — they implement AI first, then scramble to find metrics that show improvement. This backwards approach leads to hockey-stick charts that look impressive but don’t translate to meaningful business value. It’s the difference between running a business and running a marketing campaign.&lt;/p&gt;
&lt;h3 id=&quot;the-path-forward&quot;&gt;The Path Forward&lt;/h3&gt;
&lt;p&gt;AI will impact your business — that’s inevitable. But whether that impact is positive depends largely on how thoughtfully you approach adoption. By maintaining focus on your existing goals and proven metrics, you can ensure that AI becomes a genuine accelerator of your mission rather than an expensive distraction.&lt;/p&gt;
&lt;p&gt;The organizations that will see the greatest benefit from AI are those that resist the temptation to change their definition of success and instead use AI to achieve their existing definition of success more effectively.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/15292/how-to-measure-ais-organizational-impact</guid>
<pubDate>Mon, 20 Apr 2026 12:00:09 +0000</pubDate>
</item>
<item>
<title>The top 5 features of internal developer platforms</title>
<link>https://coderlegion.com/10099/the-top-5-features-of-internal-developer-platforms</link>
<description>&lt;p&gt;Our &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/publications/platform-engineering-pulse&quot;&gt;Platform Engineering Pulse report&lt;/a&gt; looked at many aspects of real-world practice, but one interesting study area was the themes for common platform features. We're launching a broader study to investigate this further, but here are the top 5 features the platform teams we asked had added to internal developer platforms.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Build automation&lt;/li&gt;
&lt;li&gt;Deployment automation&lt;/li&gt;
&lt;li&gt;Infrastructure automation&lt;/li&gt;
&lt;li&gt;Test automation&lt;/li&gt;
&lt;li&gt;Monitoring and observability&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;1-build-automation&quot;&gt;1. Build automation&lt;/h3&gt;
&lt;p&gt;Build automation should be triggered each time you change the code and provide you with fast feedback on your changes. If you're practicing Continuous Delivery, you'll commit changes to the main branch every few hours, with the feedback from the build process, including fast-running tests, arriving in around 5 minutes.&lt;/p&gt;
&lt;p&gt;The build process includes compilation, linking, and bundling. It usually consists of a suite of fast-running tests that validate the functionality and fitness of the application. In practice, this is typically a sequence of scripts or commands that run each tool in the build chain, but some build processes are more complex.&lt;/p&gt;
&lt;p&gt;The benefit of bringing build automation into your internal developer platform is the opportunity to harmonize pipelines and bring them all up to a common standard for fast and secure builds. For example, instead of each team having to invent a way to sign their package so it can be verified later in the deployment pipeline, platform teams can make this a standard part of the build.&lt;/p&gt;
&lt;p&gt;Development teams rarely touch their build process, compared to how much focus a platform team might put into builds. That means they are less familiar with the tools and may not be aware of features that could improve build performance or security.&lt;/p&gt;
&lt;h3 id=&quot;2-deployment-automation&quot;&gt;2. Deployment automation&lt;/h3&gt;
&lt;p&gt;Manual deployments are one of the primary reasons for bad paths to production. Even simple manual deployments can go drastically wrong, and when they do, the organization responds by introducing process steps that slow down the flow of change. This is well-meaning, but we've learned that reducing deployment frequency results in larger batches, which carry more risk and cause bigger problems.&lt;/p&gt;
&lt;p&gt;Deployment automation is the heart of change in your software delivery. When deployments are reliable, repeatable, and low-effort, you can teach the organization to do them more often. Automated deployments help you build trust and reduce heavyweight processes like change approval by committee, which universally clogs the ability to deploy small batches frequently and safely.&lt;/p&gt;
&lt;p&gt;The steps, process templates, project templates, and policies related to deployments are a perfect fit for Platform Engineering. The platform team can ensure crucial steps are included in all deployments, like verifying the provenance of the packages being deployed and ensuring the packages and deployment process have progressed through appropriate environments before reaching production.&lt;/p&gt;
&lt;p&gt;When the organization needs to level up security across all deployments, a platform team using the right deployment tools can quickly bring the whole organization into compliance with the new standards.&lt;/p&gt;
&lt;h3 id=&quot;3-infrastructure-automation&quot;&gt;3. Infrastructure automation&lt;/h3&gt;
&lt;p&gt;There was a time when ClickOps was the default for infrastructure changes. Modern software teams have rejected the idea of managing their infrastructure by clicking around in administration consoles, cloud portals, and command lines, as the result is that no two instances of anything are the same. These differences, though sometimes subtle, can cause production incidents that are difficult to identify and resolve.&lt;/p&gt;
&lt;p&gt;By treating infrastructure as code, the definitions can be stored in version control and follow the same review and promotion patterns developers apply to application code. When infrastructure is created and managed this way, each instance is an identical copy, and it's easier to scale out, recover from a disaster, or create ephemeral environments for testing.&lt;/p&gt;
&lt;p&gt;Platform teams can create standard setups for teams to use that are aligned to the technology choices in their golden pathways. Reducing the breadth of choice makes it easier to secure the infrastructure, control costs, and apply patches and updates.&lt;/p&gt;
&lt;h3 id=&quot;4-test-automation&quot;&gt;4. Test automation&lt;/h3&gt;
&lt;p&gt;Sometimes it seems there are automated tests everywhere, from unit tests that run continuously in the background as a developer makes changes, to tests used in the build process, to validate end-to-end functionality, and test the fitness of the application's performance and security. The reason for their prevalence is that testing really works.&lt;/p&gt;
&lt;p&gt;Without test automation, your team would need to perform the same checks manually, and when you don't do it, your customers do, which is incredibly frustrating.&lt;/p&gt;
&lt;p&gt;While platform teams don't typically write tests (the research shows the most effective automated tests are written by the developer creating the feature), they can provide the tools that make it easy to define tests and have them run throughout the software delivery process. Platform teams may also provide easy ways to consume test services, making it easy to spin up end-to-end tests or performance tests without managing infrastructure.&lt;/p&gt;
&lt;p&gt;To shorten feedback loops, all types of testing should be performed continuously and ideally represented by fast, reliable test automation suites. You should cover functional, security, and performance tests within your deployment pipeline.&lt;/p&gt;
&lt;p&gt;You should consider how test data is managed as part of your test automation strategy. The ability to set up data in a known state will help you make tests less flaky. Test automation lets developers know early if their change causes a fault, reduces team burnout, and increases software stability.&lt;/p&gt;
&lt;h3 id=&quot;5-monitoring-and-observability&quot;&gt;5. Monitoring and observability&lt;/h3&gt;
&lt;p&gt;While test automation covers a suite of expected scenarios, monitoring and observability help you expand your view to the entirety of your real-world software use. Monitoring implementations tend to start with resource usage metrics, but mature into measuring software from the customer and business perspective.&lt;/p&gt;
&lt;p&gt;The ability to see information-rich logs can help you understand how faults occur so you can design a more robust system.&lt;/p&gt;
&lt;h3 id=&quot;other-popular-features&quot;&gt;Other popular features&lt;/h3&gt;
&lt;p&gt;Though they didn't make it into the top 5, documentation, security scanning, one-click setup for new projects, artifact management, and secrets management are common features of internal developer platforms.&lt;/p&gt;
&lt;p&gt;The features are useful on their own, but when combined, they amplify their effects on overall software delivery and operational performance. Platform teams who provide a seamless toolchain from commit through to production and on to day 2 operations will find they have lifted a massive burden from developers.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=8292810976292894656&quot; alt=&quot;The relative popularity of the top 10 features&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;what-high-performers-do-differently&quot;&gt;What high performers do differently&lt;/h3&gt;
&lt;p&gt;The high-performing organizations used the amplification effect to provide a complete toolchain for deployment pipelines. Platforms that provided this set of functionality had more impact on the organization and its goals for Platform Engineering.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Builds  &lt;/li&gt;
&lt;li&gt;Test automation  &lt;/li&gt;
&lt;li&gt;Artifact management  &lt;/li&gt;
&lt;li&gt;Deployment automation  &lt;/li&gt;
&lt;li&gt;Infrastructure automation  &lt;/li&gt;
&lt;li&gt;Monitoring and observability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By creating a strong pipeline with equal consideration for long-term sustainability of the platform, you can create an offering that helps developers today and continues to help them as the organization navigates changing requirements, regulations, and competition.&lt;/p&gt;
&lt;p&gt;We also looked at organizations with low performance; they were often missing 3 key features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Test automation  &lt;/li&gt;
&lt;li&gt;Artifact management  &lt;/li&gt;
&lt;li&gt;Monitoring and observability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your platform is missing any of these, you may be missing an opportunity to amplify the benefits of platform adoption.&lt;/p&gt;
&lt;h3 id=&quot;platform-success&quot;&gt;Platform success&lt;/h3&gt;
&lt;p&gt;Throughout our study, we used each organization's individual definition of success for its platform. There are many different motivators for funding a platform initiative, and the ultimate test of a platform is whether it meets the specific goals it was founded to achieve.&lt;/p&gt;
&lt;p&gt;You can use the &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/devops/metrics/monk-metrics/&quot;&gt;MONK metrics&lt;/a&gt; to measure your Platform Engineering initiative. They balance benchmarkable metrics with contextual measures that track the platform's progress against the organization's goals.&lt;/p&gt;
&lt;p&gt;Despite the many different ways platforms are measured, the presence of a complete feature set increased the chances of success.&lt;/p&gt;
&lt;p&gt;Happy deployments!&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/10099/the-top-5-features-of-internal-developer-platforms</guid>
<pubDate>Tue, 20 Jan 2026 14:59:13 +0000</pubDate>
</item>
<item>
<title>How organizations measure Platform Engineering</title>
<link>https://coderlegion.com/9441/how-organizations-measure-platform-engineering</link>
<description>&lt;p&gt;Our Platform Engineering Pulse report is coming soon, containing insights, strategies, and real-world data on how organizations adopt and succeed with Platform Engineering. We’ll also launch a survey to deepen our understanding of the patterns, challenges, and future direction of successful platform building.&lt;/p&gt;
&lt;p&gt;One of the areas we explored in the &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/publications/platform-engineering-pulse&quot;&gt;Platform Engineering Pulse report&lt;/a&gt; was how organizations measure their internal developer platforms, with results that varied from technical measures to not collecting any metrics at all.&lt;/p&gt;
&lt;p&gt;This post looks at which metrics were popular and how you can use them to structure your measurement approach to avoid the zero-metric illusion.&lt;/p&gt;
&lt;h3 id=&quot;measurement-is-essential&quot;&gt;Measurement is essential&lt;/h3&gt;
&lt;p&gt;At the start of a &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/devops/platform-engineering/&quot;&gt;Platform Engineering&lt;/a&gt; initiative, the immediate problems take precedence, and measurement becomes an afterthought. This leaves platform teams without a pre-platform baseline, which makes it challenging to demonstrate the platform’s impact.&lt;/p&gt;
&lt;p&gt;The lack of measurement also increases the risk of platforms adding features that don’t align with the organization’s core motivations. For instance, a platform team might focus on standardization, only to discover that the primary driver for investing in Platform Engineering was to improve developer experience.&lt;/p&gt;
&lt;p&gt;Platforms often fail not because they are inherently bad, but because they target the wrong personas and attempt to solve the wrong problems.&lt;/p&gt;
&lt;p&gt;Even successful platforms struggle with ongoing justification and optimization when they lack clear goals, a robust measurement system that reflects those goals, and baseline data. The platform team may find leadership challenges continued investment if they can’t show the platform’s value.&lt;/p&gt;
&lt;p&gt;Therefore, it is crucial to measure platform performance against its established goals. But how are organizations currently approaching this?&lt;/p&gt;
&lt;h3 id=&quot;-what-organizations-measure&quot;&gt; What organizations measure&lt;/h3&gt;
&lt;p&gt;The survey found organizations focused on 3 key areas for measurement: Software delivery, operational performance, and user experience. The variety of metrics likely reflects the variety of contexts that platforms can assist, though is also evidence that metric systems are skewed to &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/blog/productivity-delusion&quot;&gt;the elusive &lt;em&gt;productivity&lt;/em&gt; problem&lt;/a&gt; rather than true developer experience and engagement.&lt;/p&gt;
&lt;h4 id=&quot;software-delivery-metrics&quot;&gt;Software delivery metrics&lt;/h4&gt;
&lt;p&gt;The software delivery metrics assess the speed, quality, and throughput of development teams using the platform. They often align with DORA measurements, highlighting how platforms are seen as a route to shipping software more often and at higher quality. The metrics encompass throughput (e.g., deployment frequency, build time, features delivered) and stability (e.g., change failure rate, build success rate).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deployment frequency&lt;/li&gt;
&lt;li&gt;Deployment times&lt;/li&gt;
&lt;li&gt;Change failure rate&lt;/li&gt;
&lt;li&gt;Recovery time&lt;/li&gt;
&lt;li&gt;Build success rate&lt;/li&gt;
&lt;li&gt;Build time&lt;/li&gt;
&lt;li&gt;Features delivered&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While valuable for understanding delivery performance, these metrics primarily reflect downstream outcomes rather than the platform’s direct contribution to developer productivity. They are most effective when measured before and after platform adoption to demonstrate improvement.&lt;/p&gt;
&lt;h4 id=&quot;-operational-performance-metrics&quot;&gt; Operational performance metrics&lt;/h4&gt;
&lt;p&gt;Metrics for operational performance track the cost, performance, and efficiency of applications that use the platform. They combine traditional infrastructure monitoring (e.g., reliability, error rates, system performance) with resource optimization (e.g., usage efficiency, cost management). Project count is a basic adoption indicator, but it lacks the context of the addressable market size.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reliability&lt;/li&gt;
&lt;li&gt;Error rates&lt;/li&gt;
&lt;li&gt;System performance&lt;/li&gt;
&lt;li&gt;Resource usage&lt;/li&gt;
&lt;li&gt;Infrastructure cost&lt;/li&gt;
&lt;li&gt;Project count&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These metrics are crucial for demonstrating that the platform is operationally sound and cost-effective, but they don’t necessarily indicate developer value or ease of use.&lt;/p&gt;
&lt;h4 id=&quot;user-experience-metrics&quot;&gt;User experience metrics&lt;/h4&gt;
&lt;p&gt;These metrics directly measure how developers and teams perceive and interact with the platform, treating internal developers as customers. They focus on satisfaction and onboarding journeys. &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/devops/metrics/platform-satisfaction/&quot;&gt;Net promoter score (NPS)&lt;/a&gt; offers benchmarkable sentiment data, while user satisfaction provides broader feedback. Onboarding time is critical as it represents the first impression and adoption barrier.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;User satisfaction&lt;/li&gt;
&lt;li&gt;Net promoter score (NPS)&lt;/li&gt;
&lt;li&gt;Onboarding time&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These metrics are vital for platforms run as products with optional adoption, indicating whether the platform is compelling enough for developers to choose and continue using voluntarily.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=7993429107160993162&quot; alt=&quot;Popular metrics include deployment frequency, reliability, build success rate, deployment times, and user satisfaction&quot;&gt;&lt;/p&gt;
&lt;p&gt;Most organizations prioritize technical and delivery metrics, with fewer focusing on user experience or business outcomes. This suggests a risk that platform teams are measuring what’s easy to collect rather than what truly demonstrates business value. The heavy emphasis on technical metrics indicates that many organizations still measure platforms like infrastructure rather than products serving internal customers.&lt;/p&gt;
&lt;h3 id=&quot;how-measurement-improves-platform-performance&quot;&gt;How measurement improves platform performance&lt;/h3&gt;
&lt;p&gt;For metrics to improve platform performance, you need to measure multiple dimensions, not just one. Internal developer platforms offer many benefits, so the measurement system should cover all platform goals.&lt;/p&gt;
&lt;p&gt;We found organizations that measure more dimensions were more likely to be successful. A single metric gives you a one-in-three chance of creating a successful platform, while 2 metrics make it 50/50. Organizations measuring 6 or more metrics were most likely to be successful.&lt;/p&gt;
&lt;p&gt;Platform sponsors may expect you to deliver technical reliability, boost developer productivity, offer a positive user experience, manage costs, encourage adoption, and align with business objectives. Relying on just a handful of metrics cannot adequately capture the interplay of all these dimensions.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=7232283119492441920&quot; alt=&quot;With a single metric, only a third of platforms achieve their goals, but platforms with 6 or more metrics have a 75% success rate&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;breaking-the-success-illusion&quot;&gt;Breaking the success illusion&lt;/h3&gt;
&lt;p&gt;The data shows a zero-metric high-success effect. This occurs when organizations that don’t collect any concrete measures of the Platform Engineering effort report high success rates. This phenomenon comes from two very different situations masquerading as the same outcome.&lt;/p&gt;
&lt;p&gt;There may be easy and obvious success criteria the platform can address, such as a critical and evident problem where success is undeniable without formal measurement. Where the effectiveness is apparent, formal measurements may be unnecessary. A more likely explanation is that there’s an illusion of success caused by a lack of measurement.&lt;/p&gt;
&lt;p&gt;Without concrete metrics, platform teams can focus on outputs (e.g., features built, no outages) rather than actual outcomes (e.g., increased developer productivity, achievement of business goals). Stakeholders may mistake activity for impact, especially if the team is busy and there are no apparent failures.&lt;/p&gt;
&lt;p&gt;This also helps explain the dramatic increase in success rates observed when moving from one metric to three or more. Teams relying on a single metric might choose one that doesn’t capture holistic success, leading to a false sense of achievement. However, when multiple dimensions are measured, maintaining illusions becomes difficult. For instance, you can’t claim unqualified success if deployment frequency is high but Net Promoter Score (NPS) is low.&lt;/p&gt;
&lt;p&gt;The data also suggests a dangerous middle ground where minimal measurement can create more problems than no measurement. It provides false confidence without the comprehensive feedback necessary for genuine improvement.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=18239380714050400548&quot; alt=&quot;When organizations don't measure their Platform Engineering initiative, they operate under the illusion of success&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;using-monk-metrics&quot;&gt;Using MONK metrics&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/devops/metrics/monk-metrics/&quot;&gt;MONK metrics&lt;/a&gt; offer a balanced approach to measuring Platform Engineering success, combining external validation and internal alignment. This framework is more adaptable than purely technical metrics, yet still provides a standardized basis for comparison and improvement.&lt;/p&gt;
&lt;p&gt;The MONK metrics are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Market share&lt;/li&gt;
&lt;li&gt;Onboarding times&lt;/li&gt;
&lt;li&gt;Net Promoter Score (NPS)&lt;/li&gt;
&lt;li&gt;Key customer metrics&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first three, market share, onboarding times, and NPS, form a benchmarkable trio. These metrics allow for comparison against industry standards and are broadly applicable to Platform Engineering initiatives, serving as a starting point to understand high performance in other organizations. For example, if your onboarding times are slower than those of your industry peers, you can investigate their methods and implement similar improvements.&lt;/p&gt;
&lt;p&gt;Including “key customer metrics” is crucial for preventing the measurement framework from losing touch with business realities. Organizations kick off Platform Engineering to solve specific organizational problems, but their success is measured using generic technical metrics that don’t reflect the original investment’s purpose. Instead, it’s essential to translate the motivations behind adopting Platform Engineering into the key customer metrics to track progress towards the platform’s objectives effectively.&lt;/p&gt;
&lt;p&gt;MONK metrics address the common issue of platform teams optimizing for metrics that appear favorable but don’t contribute to actual business value. For instance, if you introduce Platform Engineering to reduce time-to-market, measures of infrastructure uptime or build failures fail to track tangible improvements in delivery flow.&lt;/p&gt;
&lt;h3 id=&quot;lack-of-measurement-makes-your-platform-vulnerable&quot;&gt;Lack of measurement makes your platform vulnerable&lt;/h3&gt;
&lt;p&gt;Without measurement, platform teams end up in a vulnerable position. They can’t demonstrate their value when budget discussions come up, they can’t identify what’s working versus what needs improvement, and they can’t make compelling cases for continued investment or expansion.&lt;/p&gt;
&lt;p&gt;The absence of data also hinders course correction. Platform Engineering involves complex trade-offs between developer experience, operational efficiency, security, and cost. Without clear metrics, teams may prioritize visible or politically expedient solutions over those that deliver actual value.&lt;/p&gt;
&lt;p&gt;MONK metrics offer a practical solution. They are accessible, enabling organizations to begin measuring with minimal tooling or data infrastructure. You can gather basic market share data through surveys, track onboarding times simply, and get NPS using lightweight feedback tools.&lt;/p&gt;
&lt;p&gt;Their benchmarkable nature also helps address the common “what’s good enough?” dilemma. Instead of abstractly debating whether a two-day onboarding time is acceptable, teams can compare their performance to similar organizations.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/9441/how-organizations-measure-platform-engineering</guid>
<pubDate>Fri, 09 Jan 2026 07:40:46 +0000</pubDate>
</item>
<item>
<title>SHIPPED25: DORA... Beyond the metrics</title>
<link>https://coderlegion.com/8348/shipped25-dora-beyond-the-metrics</link>
<description>&lt;p&gt;Most software teams have heard of the &quot;DORA Metrics&quot; or the &quot;DORA 4 Keys&quot;, but there is so much more to the research. This session looks at those well-known metrics, but then takes you beyond them to some even more crucial insights into what great software delivery looks like.&lt;/p&gt;
&lt;p&gt;Nathen Harvey and Steve Fenton introduce some key concepts, then abandon all slides to get hands on with some tools and models you can use to go beyond throughput and stability and out into the world of capabilities and continuous improvement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key insights&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Throughput and stability aren't trade offs when you set teams up in the right way&lt;/li&gt;
&lt;li&gt;How time to restore has evolved into failed deployment recovery time and rework rate&lt;/li&gt;
&lt;li&gt;How to use the model to get better and getting better&lt;/li&gt;
&lt;li&gt;How to use the assessment tool with your team to decide where to focus&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>DevOps &amp; Cloud</category>
<guid isPermaLink="true">https://coderlegion.com/8348/shipped25-dora-beyond-the-metrics</guid>
<pubDate>Wed, 10 Dec 2025 10:18:24 +0000</pubDate>
</item>
<item>
<title>Common mistakes in DevOps metrics</title>
<link>https://coderlegion.com/7473/common-mistakes-in-devops-metrics</link>
<description>&lt;p&gt;Metrics are crucial to DevOps and Continuous Delivery as part of the process of continuous improvement. However, you must balance collecting and displaying data with being flooded with information. You need to decide what data to collect and what smaller set of data you pay attention to at any time.&lt;/p&gt;
&lt;p&gt;If your car had a dashboard that displayed every metric it collects through the engine management system, there'd be no space for a windscreen.&lt;/p&gt;
&lt;p&gt;Early cars only featured an &lt;em&gt;ammeter&lt;/em&gt; on their dashboard, which measured the electric current between the battery and voltage regulator. This was important as it told you the charging system was working. There was no speedometer. Cars could only achieve a top speed of 35 miles per hour, and the suspension discouraged traveling at this speed. It wasn't necessary to measure velocity.&lt;/p&gt;
&lt;p&gt;In a modern car, no dashboard space is given to an ammeter (though a battery light will illuminate if there's a problem). But, you will find a speedometer in almost every car. The current dashboard design reflects the development of cars and the broader system they operate in. Engines are more powerful, suspension systems are better, roads are generally smoother, and more cars are on the road. Attitudes towards safety have also changed.&lt;/p&gt;
&lt;p&gt;Similarly, the metrics you collect and show will change over time as you respond to differences in your team and organization.&lt;/p&gt;
&lt;p&gt;As you create and evolve your measurement system, there are some common mistakes you should avoid.&lt;/p&gt;
&lt;h3 id=&quot;ignoring-the-data&quot;&gt;Ignoring the data&lt;/h3&gt;
&lt;p&gt;The first problem with metrics is that you expend great effort collecting them, but they're not always used. This happens even in organizations that regularly review the numbers.&lt;/p&gt;
&lt;p&gt;Your data needs some process that generates insights. You can turn what you discover from the information into theories you use for experiments. The experiments should then provide new data to start the cycle again.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=4557386047333733768&quot; alt=&quot;The cycle of Data, Insight, Theory, Experiment&quot;&gt;&lt;/p&gt;
&lt;p&gt;The only good reason to collect DevOps metrics is to learn more about your work and find ways to improve it. If you collect data &lt;em&gt;just in case&lt;/em&gt;, the chances are it will be misused or not used at all.&lt;/p&gt;
&lt;h3 id=&quot;activity-bias&quot;&gt;Activity bias&lt;/h3&gt;
&lt;p&gt;There are 4 levels of measurement, with activity often being the earliest and easiest to collect. You can usually track activity in near real-time. The result of the activity is not typically available as an output or outcome-based metric until some later date.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Measurement level    &lt;/th&gt;&lt;th&gt;Software example  &lt;/th&gt;&lt;th&gt;Heating example&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Activity             &lt;/td&gt;&lt;td&gt;Lines of code     &lt;/td&gt;&lt;td&gt;Power consumption&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Outputs              &lt;/td&gt;&lt;td&gt;Features per week &lt;/td&gt;&lt;td&gt;Heating element temperature&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;System output        &lt;/td&gt;&lt;td&gt;Lead time         &lt;/td&gt;&lt;td&gt;Room temperature&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Outcomes             &lt;/td&gt;&lt;td&gt;User value        &lt;/td&gt;&lt;td&gt;People are comfortable&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Activity metrics are usually a built-in feature of your existing tools, so they're already available. The problem is not all activity represents progress. Some activities might even reduce output and result in worse outcomes.&lt;/p&gt;
&lt;p&gt;You can use activity metrics to predict future changes to outputs and outcomes. To do this, you must continually test the relationship between your activity metrics and your related output or outcome metrics.&lt;/p&gt;
&lt;p&gt;If you only measure activity, you get a lot of motion but no progress.&lt;/p&gt;
&lt;h3 id=&quot;tracking-too-much-at-once&quot;&gt;Tracking too much at once&lt;/h3&gt;
&lt;p&gt;The number of metrics you collect and display can increase, often rapidly. Before long, you've filled your dashboard with charts, and you don't know what's important and what isn't.&lt;/p&gt;
&lt;p&gt;You need to keep your tracked metrics lean, current, and relevant. When a chart is no longer helpful, you should remove it from your dashboard. You should also consider whether the metric still needs to be collected and retire it if you don't have a good reason to track it.&lt;/p&gt;
&lt;p&gt;If you already have a dashboard, open it, and for each chart ask, &quot;What would I do differently if this number went up or down?&quot;. Revisit this question frequently, deleting any chart where you don't have an answer.&lt;/p&gt;
&lt;p&gt;Your metric set should focus on key long-term output and outcome metrics, with dashboards showing short-term metrics across all categories in your current improvement efforts.&lt;/p&gt;
&lt;h3 id=&quot;jumping-into-tools&quot;&gt;Jumping into tools&lt;/h3&gt;
&lt;p&gt;Data visualization tools like Microsoft Power BI, Tableau, or Google Data Studio are among the most useful software products you'll have in your organization. Many business tools have a grid or text-based interface, but data tools come stacked with colorful animated charts.&lt;/p&gt;
&lt;p&gt;It's easy to be distracted by creating an engaging dashboard. If you don't begin with metric design, you end up with lots of pleasing dashboards that have no impact on your daily work. You need dashboards and charting tools to help you make sense of the information, but design the metrics first.&lt;/p&gt;
&lt;p&gt;It's better to start in low-fidelity to collect meaningful metrics. It's okay to start with a simple spreadsheet or even a whiteboard. After you work out which measurements are helpful to your team and organization, start automating the collection and creating slick displays.&lt;/p&gt;
&lt;p&gt;If you invest too much time creating a stunning dashboard, you'll find it harder to delete charts when they're no longer required.&lt;/p&gt;
&lt;h3 id=&quot;standardization&quot;&gt;Standardization&lt;/h3&gt;
&lt;p&gt;Some organizations try to replicate the success of a high-performing team by making other teams follow the same process. This is rarely successful, as each team works on different problems and has different skill levels. Just as the process and practices need to be context-specific, so do the metrics.&lt;/p&gt;
&lt;p&gt;You should address metrics as part of your continuous improvement activities. For a team with long lead times, you measure batch size, queue times, and the time work spends in each state. These metrics are unsuitable for a team whose primary problem is quality.&lt;/p&gt;
&lt;p&gt;This requires the data, insight, theory, experiment cycle where you look at the information you have about the problem you want to solve, form a theory about what might improve the issue, then run an experiment to test your idea.&lt;/p&gt;
&lt;p&gt;The metrics you collect also signal to the team what's important &lt;em&gt;at the current time&lt;/em&gt;. You often see improvements simply because your metrics communicate that you care about some aspect of software delivery.&lt;/p&gt;
&lt;h3 id=&quot;relying-on-eyeballs&quot;&gt;Relying on eyeballs&lt;/h3&gt;
&lt;p&gt;You should create a simple dashboard to display the metrics you're tracking for experiments. This should be displayed on an information radiator so everyone on the team can see the data.&lt;/p&gt;
&lt;p&gt;However, if you only react to data when someone looks at a dashboard, you'll crowd the dashboard with too much information and miss key events. Long-term metrics you keep to track progress over time will seem as important as the short-term metrics you use to improve your software delivery.&lt;/p&gt;
&lt;p&gt;The key to resolving the problem of retaining long-term metrics without cluttering your dashboard is to put in place a monitoring and alerting process for the data. Automated alerts should tell you if the metrics cross a threshold, and you could use anomaly detection to tell you if something interesting happened.&lt;/p&gt;
&lt;p&gt;With metrics tracked automatically, you can remove them from the dashboard to free up space.&lt;/p&gt;
&lt;h3 id=&quot;rewarding-performance&quot;&gt;Rewarding performance&lt;/h3&gt;
&lt;p&gt;If your team is working to increase their deployment rate, it can be tempting to incentivize them with a reward if they achieve daily deployments. This approach to motivation leads to poor outcomes. A team might let other critical work slip to achieve the goal - not to cheat the system but because you made daily deployments more important than anything else.&lt;/p&gt;
&lt;p&gt;In the landmark book &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.alfiekohn.org/punished-rewards/&quot;&gt;Punished By Rewards&lt;/a&gt;, Alfie Kohn explains that attempting to manage people with incentives leads to long-term harm for your organization. Hundreds of studies have found that people do worse work when offered rewards.&lt;/p&gt;
&lt;p&gt;Using metrics to create a competitive atmosphere, either for individual performance, comparison of different teams, or to gamify the workplace (where you introduce game elements as a form of &quot;fun&quot; competition), all lead to trouble.&lt;/p&gt;
&lt;p&gt;Competition conflicts with what you really need in your organization: collaboration. If you work on the assumption that people want to do good work, you'll find you don't need to use rewards or punishments to get them to improve their performance.&lt;/p&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;The 5 DORA metrics and the SPACE framework provide pre-built, balanced ways to measure software delivery performance. (There used to be 4 DORA metrics, but an additional &lt;em&gt;reliability&lt;/em&gt; metric was added.)&lt;/p&gt;
&lt;p&gt;A good set of metrics will mix leading indicators to predict performance with lagging indicators that check the accuracy of predictions. Measurements should span activity, output, system output, and outcome categories.&lt;/p&gt;
&lt;p&gt;We cover DevOps and Continuous Delivery metrics in detail in our &lt;a rel=&quot;nofollow&quot; href=&quot;https://i.octopus.com/whitepapers/measuring-continuous-delivery.pdf&quot;&gt;white paper on measuring Continuous Delivery&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Our &lt;a rel=&quot;nofollow&quot; href=&quot;/blog/octopus-release-2022-q3#devops-insights-better-visibility-and-actionable-dora-metrics-early-access-preview&quot;&gt;DevOps Insights in Octopus&lt;/a&gt; give you better visibility into your company's DevOps performance by surfacing insights based on 4 key DORA metrics. These metrics help you qualify the results of your DevOps performance, and gain insights into areas for improvement.&lt;/p&gt;
&lt;p&gt;Whatever you measure, you need to constantly refine your metrics to ensure they remain useful to your team and organization. Ideally, the metrics you collect are relevant to a specific experiment you're running to test a theory.&lt;/p&gt;
&lt;p&gt;If you use metrics well, you amplify performance and learning as you seek to become one of the elite performers in software delivery.&lt;/p&gt;
&lt;h3 id=&quot;further-reading&quot;&gt;Further reading&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.alfiekohn.org/punished-rewards/&quot;&gt;Punished By Rewards&lt;/a&gt; by Alfie Kohn (1993)&lt;/li&gt;
&lt;li&gt;We have a white paper on &lt;a rel=&quot;nofollow&quot; href=&quot;https://i.octopus.com/whitepapers/measuring-continuous-delivery.pdf&quot;&gt;Measuring Continuous Delivery&lt;/a&gt;, which describes different types of metrics and frameworks for measuring DevOps and Continuous Delivery&lt;/li&gt;
&lt;li&gt;You can learn more about DevOps and Continuous Delivery in our &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/devops/&quot;&gt;DevOps engineer's handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Learn about Octopus Deploy's &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/docs/insights&quot;&gt;DevOps Insights feature&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy deployments!&lt;/p&gt;
</description>
<category>CI/CD Pipelines</category>
<guid isPermaLink="true">https://coderlegion.com/7473/common-mistakes-in-devops-metrics</guid>
<pubDate>Tue, 18 Nov 2025 12:41:44 +0000</pubDate>
</item>
<item>
<title>Measuring Platform Engineering with MONK metrics</title>
<link>https://coderlegion.com/7043/measuring-platform-engineering-with-monk-metrics</link>
<description>&lt;p&gt;When you create an internal developer platform, treating the platform as a product is crucial. That means you need to measure progress with a product mindset, too. The MONK metrics help measure your progress and prove the value of &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/devops/platform-engineering/&quot;&gt;Platform Engineering&lt;/a&gt; to your organization.&lt;/p&gt;
&lt;h3 id=&quot;measure-platform-engineering-with-monk-metrics&quot;&gt;Measure Platform Engineering with MONK metrics&lt;/h3&gt;
&lt;p&gt;MONK metrics mix platform adoption and performance with metrics to show impact on the platform’s customers; the developers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Market share&lt;/li&gt;
&lt;li&gt;Onboarding time&lt;/li&gt;
&lt;li&gt;Net Promoter Score (NPS)&lt;/li&gt;
&lt;li&gt;Key customer metrics&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;market-share&quot;&gt;Market share&lt;/h3&gt;
&lt;p&gt;Your market share is the number of developers who use the platform rather than an alternative. You must run a regulated market, so you can’t force people to use your platform. Developers who opt not to use the platform must have the same responsibility to deliver security, reliability, and governance requirements.&lt;/p&gt;
&lt;p&gt;Developers should have the option not to use the internal developer platform. The platform team should respond competitively by improving the platform to gain market share. If developers move off the platform, find out why. Take a second look at your relationship with developers and explore why they didn’t flag an issue before moving away.&lt;/p&gt;
&lt;p&gt;To understand your market share, you should track the number of developers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In the organization&lt;/li&gt;
&lt;li&gt;The platform could help&lt;/li&gt;
&lt;li&gt;Using the platform&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=3811804941739647699&quot; alt=&quot;Sample market share chart showing developers, those who could use the platform, and those who do&quot;&gt;&lt;/p&gt;
&lt;p&gt;When you need to choose between possible features for the platform, it helps to consider the impact it will have on market share. What problems are causing pain for development teams that your platform could solve? Understanding the share, and the trend over time, can help your decision-making.&lt;/p&gt;
&lt;p&gt;When you need to choose between possible features for the platform, it helps to consider the impact it will have on market share. What problems are causing pain for development teams that your platform could solve? Understanding the share, and the trend over time, can help your decision-making.&lt;/p&gt;
&lt;p&gt;You can increase your market share by supporting more scenarios or convincing teams to move onto an existing ‘golden pathway’. Avoid adding workflows you can’t do well and focus on spreading the joy developers will experience by adopting one you can handle.&lt;/p&gt;
&lt;h3 id=&quot;onboarding-time&quot;&gt;Onboarding time&lt;/h3&gt;
&lt;p&gt;Your internal developer platform should shorten the time it takes to get a new developer’s first change into Production. New developers should find it easier to start as the platform simplifies workflows and removes the need to learn some underlying technologies.&lt;/p&gt;
&lt;p&gt;You should also track the onboarding experience for teams adopting the platform. Opting in should be easy, and the benefits should be quickly apparent. Developers don’t have weeks to invest in platform adoption, so you need to make the onboarding process swift and easy. Building case studies with teams using the platform will help convince others to consider it.&lt;/p&gt;
&lt;h3 id=&quot;net-promoter-score&quot;&gt;Net Promoter Score&lt;/h3&gt;
&lt;p&gt;Net Promoter Score (NPS) is a popular market research metric used by two-thirds of the Fortune 1000. Your organization may already collect this from end customers, but you must also collect the platform NPS from the developers. You only need to ask one question to collect NPS, collecting a score from 0 to 10 as the answer:&lt;/p&gt;
&lt;p&gt;How likely are you to recommend the internal developer platform to another developer?&lt;/p&gt;
&lt;p&gt;You can group responses based on the answer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0–6: Detractors&lt;/li&gt;
&lt;li&gt;7–8: Passives&lt;/li&gt;
&lt;li&gt;9–10: Promoters&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To calculate the score, take the percentage of promoters, and subtract the detractors.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Score &lt;/th&gt;&lt;th&gt;% of responses&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;0-6   &lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;7-8   &lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9-10  &lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;With the table above, you can ignore passives (35%) and calculate the NPS as promoters (45%) minus detractors (20%). So, a net promoter score of 25.&lt;/p&gt;
&lt;p&gt;Positive scores are good and negative scores need improvement. The software-as-a-service industry has an NPS in the range of 30 to 40, according to &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.getbeamer.com/blog/good-nps-for-saas&quot;&gt;Beamer&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; href=&quot;https://userpilot.com/blog/nps-saas-complete-guide/&quot;&gt;userpilot&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A downward trend in NPS can show the platform fails to address an essential developer pain. It may also suggest developers are considering a move away from the platform.&lt;/p&gt;
&lt;p&gt;When you collect NPS, you should ask further questions, not least why the user chose their score. This provides valuable product feedback. Don’t pester the same customer for feedback too often and limit how many survey questions you ask as you want to show you respect their time.&lt;/p&gt;
&lt;h3 id=&quot;key-customer-metrics&quot;&gt;Key customer metrics&lt;/h3&gt;
&lt;p&gt;Your customers, the developers, are also tracking their own success metrics. For example, they may use &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/devops/metrics/dora-metrics/&quot;&gt;DORA metrics&lt;/a&gt; or the &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/devops/metrics/space-framework/&quot;&gt;SPACE framework&lt;/a&gt;. When talking with your customers, ask what measurements they care about and find ways to track them.&lt;/p&gt;
&lt;p&gt;Many platforms are introduced to improve developer experience, reduce cognitive overload, and prevent burnout. Whatever motivated your organization to invest in a platform will be something to track over time.&lt;/p&gt;
&lt;p&gt;You can help developers achieve or exceed goals by adding needed features to the internal developer platform. If you do this, they’ll love the platform and encourage others to adopt it. The DevOps capability model can help find techniques or practices you can add to your golden pathways to improve software delivery and operational performance.&lt;/p&gt;
&lt;h3 id=&quot;summary&quot;&gt;Summary&lt;/h3&gt;
&lt;p&gt;Don’t only collect numbers. Regular conversations with developers are crucial whether they use the platform or not. Your customers (and potential customers) know their pain points and can help you find areas to help.&lt;/p&gt;
&lt;p&gt;Regular customer interaction shows you run a healthy Platform Engineering effort.&lt;/p&gt;
&lt;p&gt;MONK metrics help you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Define the product roadmap for your internal developer platform&lt;/li&gt;
&lt;li&gt;Start essential conversations with customers&lt;/li&gt;
&lt;li&gt;Show the platform’s value to the people who pay to build it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MONK metrics should be part of your product management strategy. You also must speak to developers to find out more and keep track of the problems they care about.&lt;/p&gt;
</description>
<category>Site Reliability Engineering</category>
<guid isPermaLink="true">https://coderlegion.com/7043/measuring-platform-engineering-with-monk-metrics</guid>
<pubDate>Wed, 05 Nov 2025 14:29:12 +0000</pubDate>
</item>
<item>
<title>Developer experience metrics</title>
<link>https://coderlegion.com/7015/developer-experience-metrics</link>
<description>&lt;p&gt;Developer experience (DevEx) is a key focus of &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/devops/platform-engineering/&quot;&gt;platform engineering&lt;/a&gt;. It's also a crucial success factor for any organization developing software.&lt;/p&gt;
&lt;p&gt;A recent paper by Abi Noda, Margaret-Anne Storey, Nicole Forsgren, and Michaela Freiler called &lt;a rel=&quot;nofollow&quot; href=&quot;https://dl.acm.org/doi/10.1145/3595878&quot;&gt;DevEx: What actually drives productivity&lt;/a&gt; provides a framework for measuring and improving DevEx.&lt;/p&gt;
&lt;h3 id=&quot;developer-experience&quot;&gt;Developer experience&lt;/h3&gt;
&lt;p&gt;Developers tend to be happier when they can be productive. When a developer experiences friction, it’s a sign that they can’t deliver as much value as they feel they could.&lt;/p&gt;
&lt;p&gt;The following can cause poor developer experience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Working on low-value tasks&lt;/li&gt;
&lt;li&gt;Interruptions&lt;/li&gt;
&lt;li&gt;Poor tools slowing them down&lt;/li&gt;
&lt;li&gt;Unrealistic deadlines&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It’s hard to calculate the volume of an irregular object. Archimedes discovered that submerging an object in water provides a simple way to find its volume. Similarly, improving how developers feel and think about their work and its value can increase productivity.&lt;/p&gt;
&lt;p&gt;Some benefits of improving developer experience are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Increased productivity&lt;/li&gt;
&lt;li&gt;Higher satisfaction&lt;/li&gt;
&lt;li&gt;More engagement&lt;/li&gt;
&lt;li&gt;Higher employee retention&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;core-dimensions&quot;&gt;Core dimensions&lt;/h3&gt;
&lt;p&gt;The 3 core dimensions categorize the friction developers experience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Feedback loops&lt;/li&gt;
&lt;li&gt;Cognitive load&lt;/li&gt;
&lt;li&gt;Flow state&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These dimensions are a valuable model for improvement.&lt;/p&gt;
&lt;h3 id=&quot;-feedback-loops&quot;&gt; Feedback loops&lt;/h3&gt;
&lt;p&gt;Software delivery involves many feedback loops:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build and test times&lt;/li&gt;
&lt;li&gt;Code review waits&lt;/li&gt;
&lt;li&gt;Manual testing&lt;/li&gt;
&lt;li&gt;Real user feedback&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each of these loops needs to be short to reduce friction. Ideally, all feedback loops should complete while the task is still active. If a task pauses during a feedback loop, it will interrupt the following work when it restarts, disrupting flow state and increasing cognitive load.&lt;/p&gt;
&lt;p&gt;Organizations are twice as likely to exceed performance goals with short lead times and frequent deployments. Work in smaller batches to get shorter feedback loops.&lt;/p&gt;
&lt;h3 id=&quot;cognitive-load&quot;&gt;Cognitive load&lt;/h3&gt;
&lt;p&gt;Writing and maintaining software involves a large amount of mental processing. This natural cognitive load for the task increases when developers have too many tools and technologies. The architecture of the software can also add to the burden.&lt;/p&gt;
&lt;p&gt;You can reduce cognitive load if you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reduce toolchain friction&lt;/li&gt;
&lt;li&gt;Keep documentation updated&lt;/li&gt;
&lt;li&gt;Improve the system’s architecture&lt;/li&gt;
&lt;li&gt;Remove delays in the process&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/devops/platform-engineering/&quot;&gt;Platform engineering&lt;/a&gt; is a is a strategy for reducing cognitive overload caused by tools and technologies.&lt;/p&gt;
&lt;h3 id=&quot;flow-state&quot;&gt;Flow state&lt;/h3&gt;
&lt;p&gt;You can probably remember when you last felt in the flow. You may have had a good chunk of uninterrupted time and could focus on the problem. The code seemed to write itself and you made great progress. You enjoyed the work.&lt;/p&gt;
&lt;p&gt;Psychologist Mihaly Csikszentmihalyi studied the concept. He described it as a fully immersed feeling of energized focus.&lt;/p&gt;
&lt;p&gt;Flow happens naturally when you have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Control over your work structure&lt;/li&gt;
&lt;li&gt;Clear goals&lt;/li&gt;
&lt;li&gt;Engaging work&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It’s not a case of making flow happen but preventing disruption from interruptions and delays.&lt;/p&gt;
&lt;p&gt;Studies show developers who enjoy their work perform better and produce higher-quality products.&lt;/p&gt;
&lt;p&gt;You can make flow more likely by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using asynchronous communication to avoid interruptions&lt;/li&gt;
&lt;li&gt;Clustering meetings to create large blocks of meeting-free time&lt;/li&gt;
&lt;li&gt;Avoiding unplanned work&lt;/li&gt;
&lt;li&gt;Batching questions&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;devex-metrics&quot;&gt;DevEx metrics&lt;/h3&gt;
&lt;p&gt;You can create DevEx metrics by measuring 3 core dimensions with 2 methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Perceptions&lt;/strong&gt; — Gathered through surveys.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Workflows&lt;/strong&gt; — Gathered from systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Many people question the value of perceptual measurements. They think they’re too subjective to be useful. However, as our &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/whitepapers/lv-measuring-continuous-delivery-and-devops&quot;&gt;white paper on metrics&lt;/a&gt; explains, they’re a vital reality check.&lt;/p&gt;
&lt;p&gt;The whole point of DevEx metrics is to uncover ways to increase the 3 core dimensions. They’re not a measure of developers but for the benefit of developers.&lt;/p&gt;
&lt;p&gt;The matrix below shows examples of the metrics you can collect. It’s intended to be a framework, so you can pick and change metrics as needed.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Dimension      &lt;/th&gt;&lt;th&gt;Perceptions &lt;/th&gt;&lt;th&gt;Workflows&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Feedback loops &lt;/td&gt;&lt;td&gt;How satisfied are you with (build times, test run speed, the time it takes to get a change live) &lt;/td&gt;&lt;td&gt;Build times, code review waits, deployment frequency, lead time for changes&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Cognitive load &lt;/td&gt;&lt;td&gt;How complex is (the codebase, debugging the system, understanding the documentation) &lt;/td&gt;&lt;td&gt;The number of manual stages in the deployment pipeline, lead time for technical questions&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Flow state     &lt;/td&gt;&lt;td&gt;Are you able to (focus on work, avoid interruptions, understand your tasks) &lt;/td&gt;&lt;td&gt;Meeting free blocks, incident frequency, number of unplanned tasks&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If you’re already collecting the &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/devops/metrics/dora-metrics/&quot;&gt;DORA metrics&lt;/a&gt;, they’re helpful here.&lt;/p&gt;
&lt;h3 id=&quot;devex-key-performance-indicators&quot;&gt;DevEx key performance indicators&lt;/h3&gt;
&lt;p&gt;You must pick key performance indicators (KPIs) to track success. You can base these on the metrics you selected as part of the dimension and method matrix.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Perceived ease of delivering software&lt;/li&gt;
&lt;li&gt;Perceived productivity&lt;/li&gt;
&lt;li&gt;Employee satisfaction&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The KPIs make sure you remember the purpose of measuring developer experience. They also help balance the trade-offs in the improvement process. You should measure the outcomes you want from your efforts.&lt;/p&gt;
&lt;h3 id=&quot;summary-1&quot;&gt;Summary&lt;/h3&gt;
&lt;p&gt;Developer productivity measurements are traditionally elusive. However, you can use perceptual and workflow measurements to track and improve feedback loops, cognitive load, and flow state.&lt;/p&gt;
&lt;p&gt;Using KPIs to improve these 3 dimensions will get you happier developers who help your organization achieve its goals.&lt;/p&gt;
</description>
<category>Proj Mgmt Tools</category>
<guid isPermaLink="true">https://coderlegion.com/7015/developer-experience-metrics</guid>
<pubDate>Mon, 03 Nov 2025 15:19:44 +0000</pubDate>
</item>
<item>
<title>Relax About Your DORA Metrics</title>
<link>https://coderlegion.com/5257/relax-about-your-dora-metrics</link>
<description>&lt;p&gt;Our jobs require a certain level of precision, so it’s natural that we’ll want to take an exact approach to our software delivery metrics. Some folks might even like a detailed standard to pin their measurement to so they can be sure it’s exactly right.&lt;/p&gt;
&lt;p&gt;Investing too much in precision is wasteful and takes time away from something far more important: doing something in response to the data.&lt;/p&gt;
&lt;h3 id=&quot;why-precision-doesn-t-matter&quot;&gt;Why Precision Doesn’t Matter&lt;/h3&gt;
&lt;p&gt;The DORA metrics are the most popular &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/devops/metrics/&quot;&gt;DevOps metrics&lt;/a&gt;. The precision needed for DORA metrics is low, and gets even lower the higher you perform. In general, you want to get a temperature check for the kind of performance you have. For the throughput metrics, the unit of measurement is more informative than the number.&lt;/p&gt;
&lt;p&gt;It’s more interesting whether you measure throughput in months, weeks, days or hours than it is to split the hairs to get the exact number. If you deploy once a month, your next milestone will be when you can deploy once a week. When your lead time for changes is a week, your next milestone is to make it a day.&lt;/p&gt;
&lt;p&gt;Whether you deploy once every 26 days or every 30 days, you’re effectively deploying monthly. This matters because the improvements you’ll make to shave a day or two off a monthly deployment aren’t the changes you need to get to weekly deployments.&lt;/p&gt;
&lt;h3 id=&quot;-what-about-marginal-gains&quot;&gt; What About Marginal Gains&lt;/h3&gt;
&lt;p&gt;The Pareto principle, or the 80/20 rule, states that you get roughly 80% of consequences from just 20% of causes. For your improvement efforts, doing relatively simple things like adding deployment and test automation will provide a significant boost. As you expand your adoption of practices, you’ll find it harder to get the same returns for a similar level of investment.&lt;/p&gt;
&lt;p&gt;The concept of marginal gains comes from elite sports. By making tiny improvements to technique and equipment, it’s possible to gain a cumulative effect that wins races. The British cycling team pursued this technique, and by looking for 1% gains in many areas, they achieved an incredible streak of wins in the Olympics and the Tour de France.&lt;/p&gt;
&lt;p&gt;Marginal gains may be helpful to you in a highly competitive situation, but while you’re deploying monthly, you’re not yet performing at a level where you need to look for marginal gains. Marginal gains answer the Pareto paradox, which only presents itself once you’ve done all the obvious things and must now consider the other 80% to get the next improvement.&lt;/p&gt;
&lt;p&gt;To refer back to the cycling example, if your bicycle is still made of heavy steel tubes, you are better off switching to a lighter material than trying to modify the aerodynamics. You should be working on the 20%, not looking for marginal gains among the often-ignored 80%.&lt;/p&gt;
&lt;p&gt;When you have on-demand deployments, a low change failure rate, and lead times and recovery times measured in hours or minutes, you can switch to marginal gains if software delivery is still the constraint in your organization.&lt;/p&gt;
&lt;p&gt;Unsurprisingly, if you can deliver to this level, the appetite for further improvements diminishes. Focus usually moves elsewhere, such as improving the hit rate for new features by connecting more closely to the software’s users.&lt;/p&gt;
&lt;h3 id=&quot;it-s-all-about-improvements&quot;&gt;It’s All About Improvements&lt;/h3&gt;
&lt;p&gt;The most common reason precise metrics are requested is that they’re about to be used in an unhealthy way. If you want to stack-rank teams based on software delivery performance, you’ll want to ensure the measurement is done the exact same way in every team. Without precision, the comparison may not be correct.&lt;/p&gt;
&lt;p&gt;The four key DORA metrics don’t serve this purpose. The goal of tracking software delivery performance is to improve it. The only valid comparison for improvement is to track the same team and application over time to see how it trends.&lt;/p&gt;
&lt;p&gt;When you collect the metrics for improvement, you only need to use them to inform your retrospectives or continuous improvement process. The unintentional side effect of our calendar system is that quarterly to monthly is a three times improvement. It requires an impactful change, and it’s easy to see the difference it makes. Similarly, monthly to weekly is 4x, weekly to daily is 5x, and then you deploy on demand, and it’s no longer the area to focus on.&lt;/p&gt;
&lt;p&gt;When you’ve reached high-performance levels, you must zoom back up to view the whole value stream to find where improvement efforts are best directed. Increasing your lead time for changes from 1 hour and 20 minutes to 1 hour and 10 minutes isn’t the best use of your time.&lt;/p&gt;
&lt;h3 id=&quot;how-to-define-your-metrics&quot;&gt;How To Define Your Metrics&lt;/h3&gt;
&lt;p&gt;To get started, you don’t need any formal metric solution to use DORA’s four keys. You can open the &lt;a rel=&quot;nofollow&quot; href=&quot;https://dora.dev/quickcheck/&quot;&gt;quick check&lt;/a&gt; and use the questions to start a conversation with your team. For something like deployment frequency, you probably know off the top of your head whether you deploy quarterly, monthly or weekly. Other metrics, like change failure rate, will need more discussion.&lt;/p&gt;
&lt;p&gt;You’ll discover many interesting details as your team develops its thoughts around defining the metrics and where to get the data with minimal fuss. Should the &lt;a rel=&quot;nofollow&quot; href=&quot;https://thenewstack.io/how-measurement-elevation-and-aggregation-change-behaviors/&quot;&gt;change failure be measured&lt;/a&gt; from when the fault is reported, when it was introduced or when it first affected a user? Is it possible to be sure of the exact date and time? Are pull requests included in the lead time for changes?&lt;/p&gt;
&lt;p&gt;While those of us in the community have strong opinions on these, nobody is closer to the work than your team. You understand how things work and are smart enough to collaborate on a lightweight definition that’s easy to obtain and good enough to inform your improvement process.&lt;/p&gt;
&lt;p&gt;If your team all agrees on the definition, it doesn’t matter what I say you should do. For example, I strongly believe pull requests and code reviews should be included in the lead time for changes because manual stages in your deployment pipeline are the most fruitful targets for improvement. If your team disagrees, that’s OK.&lt;/p&gt;
&lt;p&gt;Teams must be allowed to vary their measurement methods to decide what is useful for them and what they need for their improvement process. They might choose a wrong path, but a team applying continuous improvement will self-correct over time.&lt;/p&gt;
&lt;h3 id=&quot;beyond-software-delivery&quot;&gt;Beyond Software Delivery&lt;/h3&gt;
&lt;p&gt;Software delivery is part of a wider system. You are working on a code change because there is some value to be unlocked. It’s worth introducing measures that make the state of the end-to-end system visible so you can work out where to target your improvement efforts.&lt;/p&gt;
&lt;p&gt;Lead and cycle times can help you find the bottlenecks, and understanding the success of features can bring vital knowledge to your business so you &lt;a rel=&quot;nofollow&quot; href=&quot;https://thenewstack.io/speed-means-nothing-without-real-feedback/&quot;&gt;don’t waste time delivering software changes that aren’t useful to your users&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When you have great performance against the DORA metrics, spend your time looking for something new to measure instead of trying to achieve even higher performance for no meaningful gain.&lt;/p&gt;
</description>
<category>CI/CD Pipelines</category>
<guid isPermaLink="true">https://coderlegion.com/5257/relax-about-your-dora-metrics</guid>
<pubDate>Tue, 09 Sep 2025 13:04:02 +0000</pubDate>
</item>
<item>
<title>How Measurement Elevation and Aggregation Change Behaviors</title>
<link>https://coderlegion.com/3330/how-measurement-elevation-and-aggregation-change-behaviors</link>
<description>&lt;p&gt;&lt;strong&gt;The costs of measuring the wrong thing or the right things in the wrong way vastly outweigh the costs of collecting and processing the data.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In software delivery, conversations about metrics and measurement wax and wane as people discover useful techniques or get hurt by unintended consequences. Understanding how measurement elevation and aggregation levels change people’s behaviors and business outcomes will help you create a healthier metrics system that better informs your decisions.&lt;/p&gt;
&lt;h3 id=&quot;the-economics-of-measurement&quot;&gt;The Economics of Measurement&lt;/h3&gt;
&lt;p&gt;A measurement system is subject to economics. There is a cost of collecting data and a value in using it. The economics, particularly the cost, are commonly overlooked. The widespread nature of computer systems means many leaders believe the cost of collecting metrics is negligible, which causes them to misunderstand these trade-offs.&lt;/p&gt;
&lt;p&gt;For example, the cost of getting a time series of data onto a graph is very cheap, but the consequences of concentrating on this data can be surprisingly high. When you publish metrics, you signal that they are important. It’s natural for people to believe you want to see some form of improvement on those metrics, and they will make decisions based on this signal (whether or not that’s your intent).&lt;/p&gt;
&lt;p&gt;If you shift people’s attention to the wrong measurements, the cost to your business could be huge.&lt;/p&gt;
&lt;h3 id=&quot;the-trouble-with-measurement-elevation&quot;&gt;The Trouble with Measurement Elevation&lt;/h3&gt;
&lt;p&gt;One classic problem with metrics occurs when they are elevated inappropriately. Measurements useful to one team can cause problems when shared higher up the organization. Software delivery metrics can be a helpful way for teams to inform their continuous improvement (CI) activities. However, when the same metrics are elevated throughout the organization, they may cause undesirable effects on behavior, especially if they become key performance indicators (KPIs).&lt;/p&gt;
&lt;p&gt;Metrics are a way to make sense of abstract concepts. In business, they are used to connect actions across the organization back to the company strategy. Problems occur if you put more emphasis on the metrics themselves than the concept they represent or if they don’t appropriately represent the concept. When you fixate on metrics, you can force people to do clearly unwise things in their service.&lt;/p&gt;
&lt;p&gt;For example, I worked on a team that missed a crucial release date for a finance system. One of the lead developers stopped working on the project to write a training guide. This behavior damaged the team and organization, but the developer was given a goal to write five training guides and their annual review was coming up. If they had done the right thing and helped with the release, they would have missed their goal-related bonus.&lt;/p&gt;
&lt;p&gt;Was this the team member’s fault, or were they doing exactly what the system demanded?&lt;/p&gt;
&lt;p&gt;I recently collaborated with Google and DORA on an article about &lt;a rel=&quot;nofollow&quot; href=&quot;https://dora.dev/devops-capabilities/cultural/how-to-empower-software-delivery-teams/&quot;&gt;how business leaders can empower software delivery teams&lt;/a&gt; that discusses how to avoid the elevation problem.&lt;/p&gt;
&lt;h3 id=&quot;problems-with-measurement-aggregation&quot;&gt;Problems with Measurement Aggregation&lt;/h3&gt;
&lt;p&gt;Aggregation levels are another crucial factor to consider in designing measurement systems. Measurement aggregation refers to the data you can measure at different organizational layers. On a basic level, you could measure at any of these levels:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Individual&lt;/li&gt;
&lt;li&gt;Team&lt;/li&gt;
&lt;li&gt;Business unit&lt;/li&gt;
&lt;li&gt;Organization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’ve simplified the levels to make it easier to apply this concept across multiple organizations. You’ll need to determine how this concept fits your organization’s context and structure.&lt;/p&gt;
&lt;p&gt;Measurement aggregation could involve combining data or displaying multiple sets. For example, aggregating data at the business-unit level might mean calculating averages across all teams in the unit, or it might involve plotting each team as a separate line on a chart.&lt;/p&gt;
&lt;p&gt;Aggregation changes the economics because the effect on behavior will change based on which organizational level you apply the measurement. For example, measuring performance at the team level encourages team members to help each other succeed, whereas measuring this at an individual level will reduce attention on crucial tasks if they don’t directly impact individual performance. A rough sketch of this change is shown below, with the measurement’s value dramatically changing with each movement through the layers.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=3738773556679726925&quot; alt=&quot;Good and bad aggregations cause mountain peaks of success and valleys of dysfunction&quot;&gt;&lt;/p&gt;
&lt;p&gt;This chart is easiest to explain by starting at the team level. When you measure a team, you encourage the members to help each other improve their performance over time. Junior team members are coached by more experienced people, and the process adapts over time. Lots of great things happen as the team finds better ways of working. This metric has high value at the team level.&lt;/p&gt;
&lt;p&gt;But if you apply the same metric at the individual level, many of those beneficial behaviors stop. Time spent coaching other team members directly lowers an individual’s score. Time spent on automation and process improvement is more relevant to hitting your own numbers than increasing someone else’s.&lt;/p&gt;
&lt;p&gt;You can’t blame someone for doing things that result in achieving the numbers you decided to measure — even if those things may seem wrong. When you make a metric too important, it changes how people perceive their work in ways you might not predict.&lt;/p&gt;
&lt;p&gt;But what if you move up a level from the team to the business unit? You now have a problem with the measurement competing with contextual noise. One team may be working on a modern application with a loosely coupled architecture, another might be wrestling with heritage software that’s not factored well. One team’s struggles might be hidden by the another team’s improvements. The measurement’s value is reduced because the signal isn’t detectable.&lt;/p&gt;
&lt;p&gt;A common solution to this problem is to measure at the team level and elevate the metrics for comparison at the business-unit level. However, great care must be taken here to avoid causing unintended competition or creating teams nobody wants to work on.&lt;/p&gt;
&lt;p&gt;If you shift up to the organizational level, you once again obtain highly valuable information. This is the level where you are closest to measuring outcomes. Not only can these metrics help you tell whether you are profitable and hitting goals, but you can also assess whether improvements at the team level are translating into tangible results. (Although there is usually an unfortunate delay in confirming that leading indicators are converting into bankable results.)&lt;/p&gt;
&lt;h3 id=&quot;balancing-competition-and-collaboration&quot;&gt;Balancing Competition and Collaboration&lt;/h3&gt;
&lt;p&gt;The key to understanding the complete reversals at each level of aggregation is that they naturally tend toward either competition or collaboration. In knowledge work, collaboration is usually the best path to positive outcomes for the people, the organization and its customers.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=16670230853068937025&quot; alt=&quot;The peaks encourage collaboration while the troughs represent competition&quot;&gt;&lt;/p&gt;
&lt;p&gt;The team and organization levels are units of collaboration. Individuals and business units are often units of competition. There are healthy places for competition — usually between your organization and others offering a similar product or service. That’s why they’re called competitors.&lt;/p&gt;
&lt;p&gt;In business, collaboration gets you further than competition.&lt;/p&gt;
&lt;h3 id=&quot;healthy-measures-make-a-healthy-organization&quot;&gt;Healthy Measures Make a Healthy Organization&lt;/h3&gt;
&lt;p&gt;Understanding measurement economics, aggregation and elevation will help you design a system that encourages positive behaviors, those that leverage human ingenuity and collaboration to create value.&lt;/p&gt;
&lt;p&gt;For more insight on designing healthy measurement systems, consult my white paper &lt;a rel=&quot;nofollow&quot; href=&quot;https://octopus.com/whitepapers/measuring-continuous-delivery-and-devops&quot;&gt;Measuring Continuous Delivery and DevOps&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When it comes to the economics of measurement, the costs of measuring the wrong thing or the right things in the wrong way vastly outweigh the costs of collecting and processing the data.&lt;/p&gt;
</description>
<category>Proj Mgmt Tools</category>
<guid isPermaLink="true">https://coderlegion.com/3330/how-measurement-elevation-and-aggregation-change-behaviors</guid>
<pubDate>Thu, 12 Jun 2025 14:54:14 +0000</pubDate>
</item>
</channel>
</rss>