{"id":878,"date":"2026-10-27T03:40:00","date_gmt":"2026-10-27T03:40:00","guid":{"rendered":"https:\/\/planespart.com\/blog\/?p=878"},"modified":"2026-10-27T03:40:00","modified_gmt":"2026-10-27T03:40:00","slug":"planespart-gitlabops-hangar-year","status":"publish","type":"post","link":"https:\/\/planespart.com\/blog\/planespart-gitlabops-hangar-year\/","title":{"rendered":"A Year of GitLabOps on the Hangar Floor"},"content":{"rendered":"<p>The first time I watched a parts catalog go out through a pipeline instead of a USB stick, the release engineer apologised for the wait. It took eleven minutes, most of it queued behind somebody else&#8217;s build. Twelve months later the same catalog ships in under four, nobody apologises, and the two-person software team that serves this business spends its Fridays on inventory rather than firefighting. Nobody reorganised the company to make it happen; they simply stopped accepting folklore as an explanation. That year, looked at closely, is a fair portrait of where GitLabOps \u2014 the Ops Atlas&#8217;s practical shorthand for running software delivery on GitLab \u2014 stands for small aviation businesses right now.<\/p>\n<h2>What Changed in the GitLabOps Year<\/h2>\n<p>Three shifts stand out when the months are stacked side by side. The platform itself kept a brisk cadence; the current line sits at 19.x, and disciplined operators plan an upgrade roughly every month or two rather than once a geological era. Expectations moved too: boards that once accepted &#8220;the deploy failed, we are looking into it&#8221; now expect an answer with a number attached. And the tooling story consolidated around one architectural idea \u2014 the agent for Kubernetes as the sanctioned bridge between pipelines and clusters \u2014 which quietly retired a decade of improvised kubeconfig files sitting in variables fields. None of it arrived through a keynote; it arrived in release notes, and teams that read them noticed first.<\/p>\n<h2>A Parts Desk Meets Its Runner Fleet<\/h2>\n<p>Our distributor&#8217;s story begins, as most do, with a queue. Builds idled twenty minutes at a stretch while a single overworked machine churned through everything: website deploys, pricing imports, the scanning jobs that check dependencies for known vulnerabilities. The instinct was to buy a bigger server. The fix, it turned out, was not more iron; it was zoning. The team wrote down which work involved code from outside the company, gave that work dedicated ephemeral machines that die after one assignment, and tagged the rest by capability. Within a fortnight the queue cleared without a single new server. Freed from competition, the scanning jobs \u2014 which nobody had trusted enough to schedule often \u2014 began running on every merge request instead of once a month, and the monthly vulnerability spreadsheet quietly retired itself.<\/p>\n<h2>GitLabOps Decisions Score Better on Paper First<\/h2>\n<p>The most instructive afternoon of the year was a scoring exercise. Faced with rising compute costs, the team listed every fleet option and graded each against its real requirements: burst capacity, isolation, maintenance burden, price per successful pipeline. The Docker Autoscaler arrangement led at 3.85. Then, in drafting the requirements, somebody asked whether the private-network linkage those builders depended on was actually needed any longer \u2014 the vendor integrations had long since moved behind public APIs. With that requirement withdrawn, hosted runners rescored at 4.30 and the decision flipped. Nothing about the infrastructure changed that afternoon; the requirements did. That is the quiet lesson of the Atlas&#8217;s worked example: a fleet choice is only as good as the honesty of the list it is scored against.<\/p>\n<h2>GitLabOps Maturity, Climbed One Rung at a Time<\/h2>\n<p>Nobody in this story announced a transformation programme. What actually happened fits the five-level ladder the Atlas draws, which climbs from improvisation to evidence:<\/p>\n<ol>\n<li>Ad-hoc \u2014 pipelines exist, standards do not, and heroics carry every release.<\/li>\n<li>Repeatable \u2014 the same jobs run everywhere, but each project keeps private habits.<\/li>\n<li>Defined \u2014 shared components are pinned, workflow rules are written, duplicates are gone.<\/li>\n<li>Managed \u2014 two numbers on a whiteboard, queue time and review turnaround, checked quarterly.<\/li>\n<li>Optimising \u2014 fleet, capacity and cost decisions trace back to measurements.<\/li>\n<\/ol>\n<p>For most of the year the team sat on rung two: pipelines everywhere, standards nowhere. Pinning the shared components and writing one workflow rule that finally killed duplicate builds moved them to a defensible three. The quarterly review \u2014 queue time and review turnaround against targets of two and fifteen minutes \u2014 is rung four in practice. Rung five remains aspirational, and the team says so out loud, which is itself a mark of maturity.<\/p>\n<h2>When a Small Team Should Not Invest<\/h2>\n<p>An honest year-in-review includes the counter-case. The Atlas&#8217;s adoption guidance is blunt, and worth taping to a monitor. Heavier investment earns its keep under three conditions: <\/p>\n<ul>\n<li>the platform serves several teams with competing needs;<\/li>\n<li>the installation is self-managed and somebody must own its upkeep;<\/li>\n<li>continuous integration has grown into a material cost line worth optimising.<\/li>\n<\/ul>\n<p>Outside those conditions, a single small team on GitLab.com should keep the whole thing light \u2014 one tidy pipeline, honest tags, no platform bureaucracy. Our distributor crossed the &#8220;several products, one part-time team&#8221; threshold around March, which is precisely when the zoning and scoring exercises began paying for themselves.<\/p>\n<h2>Keeping the Hangar Honest Next Year<\/h2>\n<p>The habits that made the difference were humble: a checklist reviewed before each quarter, the way an owner works through a <a href=\"https:\/\/planespart.com\/blog\/fuel-system-parts-checklist-for-aircraft-owners\/\">fuel-system checklist<\/a> before a cross-country; an upgrades calendar treated as an inspection, never deferred twice; and a refusal to make platform decisions without a scored list beside them. Readers weighing the infrastructure side of the same equation will find useful ground in this guide to <a href=\"https:\/\/planespart.com\/blog\/mastering-scalable-cloud-infrastructure-through-comprehensive-xops-strategies\/\">scalable cloud infrastructure<\/a>, and anyone mapping the skills such a team needs next should like this piece on <a href=\"https:\/\/planespart.com\/blog\/level-up-your-engineering-career-with-devopsschool\/\">growing an engineering career<\/a>. For the reference standard behind most of the practices above \u2014 hosting thresholds, the upgrade stops, the worked fleet scoring \u2014 the <a href=\"https:\/\/www.xopsschool.com\/gitlabops\/\">Atlas&#8217;s GitLabOps entry<\/a> remains the single page worth bookmarking. The catalog ships faster now, the audit trail reads like a logbook instead of a mystery, and the two-person team takes its Fridays back. The real product, though, is the calm.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Twelve months at a parts distributor show how small aviation software teams now run GitLab: scored fleet choices, a maturity climb, and calmer Fridays.<\/p>\n","protected":false},"author":6,"featured_media":879,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[597],"tags":[],"class_list":["post-878","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aviation"],"_links":{"self":[{"href":"https:\/\/planespart.com\/blog\/wp-json\/wp\/v2\/posts\/878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/planespart.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/planespart.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/planespart.com\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/planespart.com\/blog\/wp-json\/wp\/v2\/comments?post=878"}],"version-history":[{"count":1,"href":"https:\/\/planespart.com\/blog\/wp-json\/wp\/v2\/posts\/878\/revisions"}],"predecessor-version":[{"id":883,"href":"https:\/\/planespart.com\/blog\/wp-json\/wp\/v2\/posts\/878\/revisions\/883"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/planespart.com\/blog\/wp-json\/wp\/v2\/media\/879"}],"wp:attachment":[{"href":"https:\/\/planespart.com\/blog\/wp-json\/wp\/v2\/media?parent=878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/planespart.com\/blog\/wp-json\/wp\/v2\/categories?post=878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/planespart.com\/blog\/wp-json\/wp\/v2\/tags?post=878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}