{"id":5939,"date":"2026-10-18T18:20:00","date_gmt":"2026-10-18T18:20:00","guid":{"rendered":"https:\/\/www.cmsgalaxy.com\/blog\/?p=5939"},"modified":"2026-10-18T18:20:00","modified_gmt":"2026-10-18T18:20:00","slug":"devops-web-studio-story","status":"publish","type":"post","link":"https:\/\/www.cmsgalaxy.com\/blog\/devops-web-studio-story\/","title":{"rendered":"How a Three-Person Web Studio Stumbled Into DevOps"},"content":{"rendered":"<p>Nobody at Pixel and Plane had DevOps in their job title. There were three of us \u2014 Maya running clients, Arjun writing code, Tom drawing pixels \u2014 and for four years we shipped websites the way most small studios do: nervously, at night, all at once. This is the story of how we stumbled into a better way of working, mostly by admitting how much the old way cost us. If you build sites for a living, parts of it will feel uncomfortably familiar.<\/p>\n<h2>How DevOps Entered the Studio<\/h2>\n<p>The wake-up call was a bakery. A lovely client, a relaunch due Friday, and a theme update that quietly broke their checkout at 7pm. We restored a backup by midnight, but the damage was done \u2014 and the damage was not the bug. It was the two weeks of client trust we spent paying it back. That weekend Maya asked an uncomfortable question: why does every launch feel like an emergency? Arjun did some reading and came back with a phrase that stuck: value stream mapping. You trace one change \u2014 a menu update, a new product photo \u2014 from request to live page, and you write down every wait. Ours was mortifying. Client edits waited three days in email. Staging logins waited on whoever remembered the password. Nothing about the waits involved design or code; they were all queueing.<\/p>\n<h2>Month Two: Building the Studio&#8217;s DevOps Path<\/h2>\n<p>February was the plumbing month. Arjun set up a pipeline so that every change we pushed was built once, checked automatically, and published to staging without a human touching an FTP client. Feedback on a change landed in about ten minutes, which sounds like a small thing and absolutely is not \u2014 it meant Tom could see his layouts on a real URL while he still remembered what he was trying. We stopped keeping week-long branches. Everything merged into one trunk daily, small and often, because a pile of unmerged work was exactly what had made the bakery launch a gamble. Client approvals moved onto the staging link itself, so the queue we found in the map quietly disappeared. Maya stopped being a human router between inboxes, which she describes as the closest thing to a promotion she has had in years.<\/p>\n<h2>The DevOps Dip, and the Promise We Made<\/h2>\n<p>Then came March, and March was worse. Nobody warns you about this: as automation matures, it raises the bar for what counts as done. Our checks demanded more, our deploys expected cleaner work, and for a few weeks we shipped noticeably less while we paid that bill. The delivery literature calls it the J-curve \u2014 quick wins first, a dip while the discipline catches up, then a climb. What saved us was a promise made in February: we agreed, in advance, how long a dip we would tolerate, and told our clients a feature freeze was coming. Because the expectation was set, the dip read as a plan rather than a failure. Studios that skip that conversation usually abandon the whole effort in week five.<\/p>\n<h2>Learning to Roll Back Without Panic<\/h2>\n<p>April&#8217;s lesson was the drill. We had read a documented case where a misbehaving payment service kept a team down for a hundred and ninety minutes because nobody had ever practised the rollback \u2014 and the same manoeuvre, rehearsed, runs about twenty. So we ran one on a rainy Tuesday: Arjun pretended the afternoon&#8217;s release was broken, and we timed getting the bakery&#8217;s site back to the previous version. First attempt: forty minutes, mostly because nobody knew who was allowed to decide. Third attempt: under fifteen. We also wrote down the one situation where rolling back is forbidden \u2014 a database change already gone live \u2014 and the answer for it instead: migrations now widen a table first and clean up later, so nothing irreversible ever ships. When a real incident hit in May, the post-mortem took an hour on a Thursday, blamed no one, and produced two checklist lines. That habit \u2014 the blameless review inside five working days \u2014 did more for our Friday nights than any tool we adopted.<\/p>\n<h2>Five Things We&#8217;d Tell Our January Selves<\/h2>\n<ul>\n<li>Map before you automate. The whiteboard found money that the pipeline never would have.<\/li>\n<li>Ship small, and let the client watch. Trust compounds faster than features.<\/li>\n<li>Agree the dip in writing. It saved both the budget and the relationship in March.<\/li>\n<li>Practise the way back. The first drill is embarrassing; the first real incident without one is worse.<\/li>\n<li>Blame no one, out loud, as policy. Everything else on this list depends on it.<\/li>\n<\/ul>\n<h2>The Client&#8217;s Side of the Story<\/h2>\n<p>The bakery deserves a paragraph, because clients live through these changes too. At the start, their owner thought of websites the way people think of plumbing: invisible until it floods, and somebody else&#8217;s problem. By March she had a staging link she could actually comment on, which changed her behaviour \u2014 small requests replaced dramatic redesigns, because she could see each one land within days. When April&#8217;s drill meant she got a call saying &#8220;we practised breaking this, here is how we would fix it&#8221;, she later told Maya it was the most reassuring conversation she had ever had with a web company. Trust, it turns out, is also a delivery metric; it just never appears on the dashboard.<\/p>\n<h2>What DevOps Changed by June<\/h2>\n<p>By June the studio felt unremarkable, which turned out to be the goal. Sites shipped in small pieces, several times a week, during daylight. Risky work met one percent of visitors first, canary-style, before the rest. The five delivery numbers the research cares about \u2014 how quickly work moves, how often it ships, how soon service recovers, what fraction of changes fail and how much gets reworked \u2014 lived on a sticky note, and two of them had actually moved. The five human ones behind CALMS, culture, automation, lean, measurement and sharing, were harder to chart but easier to feel: the 2am messages stopped.<\/p>\n<p>If you run a small web operation, the honest version of this story is that none of it required heroics or an enterprise budget \u2014 just a map, one pipeline, a drill and a promise, applied stubbornly for six months while the muscle grew. <a href=\"https:\/\/www.cmsgalaxy.com\/blog\/building-a-practical-roadmap-for-devops-sre-and-platform-engineering\/\">A practical roadmap to DevOps, SRE and platform engineering<\/a> is a good next read, and pairs well with <a href=\"https:\/\/www.cmsgalaxy.com\/blog\/how-to-plan-a-business-website-before-development-starts-a-complete-step-by-step-guide\/\">a step-by-step guide to planning a business website before development starts<\/a> if you are building new rather than rescuing old. When sites go wrong for ordinary content reasons instead, <a href=\"https:\/\/www.cmsgalaxy.com\/blog\/common-cms-website-mistakes-and-how-to-avoid-them\/\">the common CMS mistakes worth avoiding<\/a> make a handy checklist. And when the team wanted the deeper research behind what we had stumbled into, we simply read <a href=\"https:\/\/www.xopsschool.com\/devops\/\">xOps School&#8217;s DevOps reference page<\/a> and worked through the practices one unglamorous month at a time.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pixel and Plane builds sites for local clients, and for years every launch meant a late night. This is the story of a tiny studio that made delivery boring \u2014 in the best way.<\/p>\n","protected":false},"author":14,"featured_media":5940,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1455],"tags":[],"class_list":["post-5939","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-development"],"_links":{"self":[{"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/posts\/5939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/comments?post=5939"}],"version-history":[{"count":1,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/posts\/5939\/revisions"}],"predecessor-version":[{"id":5959,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/posts\/5939\/revisions\/5959"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/media\/5940"}],"wp:attachment":[{"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/media?parent=5939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/categories?post=5939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/tags?post=5939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}