<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>F. Latini - IT Engineer</title><link>https://latini.dev/</link><description>Recent content on F. Latini - IT Engineer</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 03 Sep 2026 08:00:00 +0000</lastBuildDate><atom:link href="https://latini.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>The Platform Team's Second Year</title><link>https://latini.dev/posts/the-platform-teams-second-year/</link><pubDate>Thu, 03 Sep 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/the-platform-teams-second-year/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - Year one of a platform team is a construction project and everybody plans it as one. Year two is a running service and almost nobody re-plans for it, so the team keeps writing year-one quarters into a calendar that no longer has room for them. The denominator changed: maintenance, support and migrations now take somewhere between a third and two thirds of the team&amp;rsquo;s capacity, and because nobody wrote that down, every quarter ends late and the org&amp;rsquo;s honest read is that the platform team slowed down. There are two failure modes and they are opposites. One is drowning in a run cost you never budgeted. The other is refusing to admit the build phase is over and inventing a project to justify the headcount. The cure for both is the same: put the run cost in the plan as a number, defend it in public, measure support-per-user rather than support-total, and be willing to say out loud what a smaller version of your team would look like.&lt;/p&gt;</description></item><item><title>How to Retire a Golden Path</title><link>https://latini.dev/posts/how-to-retire-a-golden-path/</link><pubDate>Thu, 27 Aug 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/how-to-retire-a-golden-path/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - Platform teams write down how to build a paved road and never write down how to close one, so closing one is improvised, and it stalls. The failure mode is specific and almost universal: you announce the deprecation, sixty percent of the estate moves in the first two months, the tail does not move at all, and you now operate two roads forever. That is strictly worse than never having announced, because you pay double maintenance and your successor road stops being the obvious default. A retirement is a product launch in reverse and needs the same apparatus: a destination that already works for the workload class you are evicting, a migration you wrote and tested yourself, an inventory of who is actually on the old road, a named person funded to move the last twenty percent, an escalating date with a brownout before it, and an ending you delete rather than archive. Design path one so it can be closed, and most of this gets much cheaper.&lt;/p&gt;</description></item><item><title>Platform Adoption Without a Mandate</title><link>https://latini.dev/posts/platform-adoption-without-a-mandate/</link><pubDate>Thu, 20 Aug 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/platform-adoption-without-a-mandate/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - The paved road works, one team loves it, and three other teams built their own thing anyway. The reflex at that point is to ask leadership to make the road mandatory, and it is the single most expensive mistake available to a platform team, because a mandate does not produce adoption. It produces compliance, which looks identical on a dashboard and is worth almost nothing, and it destroys the only honest signal you had about whether your platform is any good. Every team that routes around you is doing it for one of four reasons - they never knew, it does not fit, switching costs more than it saves, or they tried it once and got burned - and each reason has a completely different cure. None of the cures is a policy. Win the moment of creation, pay the switching cost yourself, treat breakage as your bug rather than their problem, and measure repeat use rather than teams onboarded. Then, if you still need a mandate, use it only where a road already exists and a date is genuinely non-negotiable.&lt;/p&gt;</description></item><item><title>The Platform Team's First 90 Days</title><link>https://latini.dev/posts/the-platform-teams-first-90-days/</link><pubDate>Thu, 13 Aug 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/the-platform-teams-first-90-days/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - A new platform team&amp;rsquo;s first ninety days almost never fail on technology. They fail because the team, feeling illegitimate, reaches for the fastest available cure and builds something. Ninety days later there is infrastructure, a demo, a roadmap, and no customer, no evidence, and no answer to the only question that will be asked in month nine: what did we get for this? The first quarter has four deliverables and none of them is a platform. A mandate in writing, including what you will refuse. The baseline numbers you can only measure before you have touched anything. The inherited ticket queue read as a requirements document rather than a burden. And one small, painful, unglamorous thing fixed by week six, to buy the credibility that funds the rest. Build path one in the second ninety days, on evidence, with a named partner.&lt;/p&gt;</description></item><item><title>Your Cloud Bill Is Not a Finance Problem</title><link>https://latini.dev/posts/your-cloud-bill-is-not-a-finance-problem/</link><pubDate>Thu, 06 Aug 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/your-cloud-bill-is-not-a-finance-problem/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - Your cloud bill is not a finance problem. It is a feedback problem, and finance cannot repair a feedback loop they are not standing in. The invoice arrives monthly, aggregated, six weeks after the decision that caused it, addressed to somebody who cannot change a single line of it. The people who &lt;em&gt;can&lt;/em&gt; change it - the ones who picked the instance size, the log retention, the always-on staging environment, the chatty cross-zone call between two services - never see a number at all. So the organisation does the only thing left available to it: an annual panic sprint that rightsizes everything, claws back twenty percent, and gives it all back within two quarters, because nothing structural changed. The alternative is to treat cost the way you treat every other platform capability. Attribution as a default of the paved road, not a tagging campaign. Unit cost, not total spend. The number shown where the work happens. Defaults that are cheap by construction. Showback before chargeback. Cost is a property the platform ships, not a spreadsheet somebody emails around in Q4.&lt;/p&gt;</description></item><item><title>Your Security Policy Needs a Paved Road</title><link>https://latini.dev/posts/your-security-policy-needs-a-paved-road/</link><pubDate>Thu, 30 Jul 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/your-security-policy-needs-a-paved-road/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - Almost every security control I meet in the wild was shipped as a rule and never as a road. The policy exists, the scanner runs, the build fails, and there is still a long-lived API key in a &lt;code&gt;.env&lt;/code&gt; file, because nobody ever built the thing a developer is supposed to do &lt;em&gt;instead&lt;/em&gt;. A rule without a road is a tax you levy on developers, and taxes get evaded, creatively and quietly. Treat secrets and policy the way you&amp;rsquo;d treat any other platform capability: distribute identity instead of secret values so the credential is short-lived and nobody handles it; ship every new control with a default that already satisfies it, an error message that names the fix, and a migration for what already exists; roll it out observe, then warn, then enforce; and make exceptions a first-class artefact that expires. The security team writes the rule. The platform team owes the road. Ship them in the same change or don&amp;rsquo;t ship the rule.&lt;/p&gt;</description></item><item><title>Build vs Buy Is the Wrong Question</title><link>https://latini.dev/posts/build-vs-buy-is-the-wrong-question/</link><pubDate>Fri, 24 Jul 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/build-vs-buy-is-the-wrong-question/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - &amp;ldquo;Should we build our own platform or buy one?&amp;rdquo; is the wrong question, and the spreadsheet that answers it is lying to you. It lies by comparing the annual license of the thing you&amp;rsquo;d buy against a one-time construction estimate for the thing you&amp;rsquo;d build - as if software you build is a purchase rather than a perpetual staffing commitment. Every platform is already part-built and part-bought; the only decision that matters is &lt;em&gt;where you draw the line&lt;/em&gt;. Draw it in one place: buy the undifferentiated substrate, because it is a commodity someone else operates better than you, and build only the thin layer of opinion that is actually yours - the paved roads, the defaults, the glue that encodes how your teams ship. Then fund the built part like a product, forever, not like a project you finish. The teams that get this wrong build the commodity and buy the differentiation, which is exactly backwards.&lt;/p&gt;</description></item><item><title>The Error Budget Nobody Spends</title><link>https://latini.dev/posts/the-error-budget-nobody-spends/</link><pubDate>Thu, 23 Jul 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/the-error-budget-nobody-spends/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - An SLO without an error budget you actually spend is a number on a wiki, not a reliability practice. The error budget is the whole point: it is a pre-agreed trade between reliability and velocity, decided while everyone is calm, so that when the budget runs out the answer - stop shipping features, fix reliability - is already made. Almost nobody spends it. Teams set a target from ambition instead of user need (often a heroic 100%), measure the wrong thing (host uptime, not the user&amp;rsquo;s journey), page themselves at 3am on the raw threshold, and then blow through the budget without changing a single plan. This is the four moves that turn an SLO from decoration back into a decision, and the honest cases where you don&amp;rsquo;t need one at all.&lt;/p&gt;</description></item><item><title>The Real Project Was Never the App</title><link>https://latini.dev/posts/the-real-project-was-never-the-app/</link><pubDate>Thu, 16 Jul 2026 09:00:00 +0000</pubDate><guid>https://latini.dev/posts/the-real-project-was-never-the-app/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - &lt;a href="https://nutrifinder.it/"&gt;NutriFinder&lt;/a&gt; is the friendly face, but the real project sits one layer down: OSDb, the Open Supplements Database - an open, structured, trustworthy reference for sports-nutrition and supplement data. IMDb for movies, &lt;a href="https://world.openfoodfacts.org/"&gt;Open Food Facts&lt;/a&gt; for groceries, OSDb for the stuff in your race vest. It already powers every comparison on NutriFinder; what&amp;rsquo;s next is a public API, wider coverage, and more apps on the same data layer. This is the story of why it exists and where it&amp;rsquo;s going.&lt;/p&gt;</description></item><item><title>Golden Paths, Part 2: The Second and Third Path</title><link>https://latini.dev/posts/golden-paths-part-2/</link><pubDate>Thu, 16 Jul 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/golden-paths-part-2/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - The first golden path is an adoption project; the second and third are a portfolio problem, and the dangers invert. You stop worrying that nobody will come and start drowning because everyone did. The rules that got the first road shipped will sink the second: saying yes to every request produces paved-road sprawl, forking the template per team produces ten half-roads instead of three excellent ones, and every path you ship is a product you maintain forever. The second path should reuse most of the first one&amp;rsquo;s guts, the long tail of requests gets the escape hatch rather than a road, and you keep a boring list of what exists. Success at path one buys you demand. What you do with that demand decides whether you end up with a platform or a junkyard of templates.&lt;/p&gt;</description></item><item><title>The Product I Wish Existed When I Started Racing</title><link>https://latini.dev/posts/the-product-i-wish-existed/</link><pubDate>Wed, 15 Jul 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/the-product-i-wish-existed/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - I built &lt;a href="https://nutrifinder.it/"&gt;NutriFinder&lt;/a&gt;, a neutral place to browse and compare endurance-sports nutrition - gels, drinks, electrolytes, bars, chews - on the numbers that actually matter when you&amp;rsquo;re moving fast: carbs per serving, sodium, caffeine, price per portion. Not on brand marketing. It has a race-day fuelling planner, a brand-facing portal, and an LLM-powered Playwright pipeline that refreshes the data weekly. It&amp;rsquo;s early, indie, and live. This is the story of what it is, why it exists, and where it&amp;rsquo;s going - including the bigger idea underneath: an open data layer for sports nutrition, Open Food Facts for the stuff you put in your race vest.&lt;/p&gt;</description></item><item><title>Team Topologies in Practice</title><link>https://latini.dev/posts/team-topologies-in-practice/</link><pubDate>Fri, 10 Jul 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/team-topologies-in-practice/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - &lt;a href="https://teamtopologies.com/"&gt;Team Topologies&lt;/a&gt; gives you four team types and three interaction modes. Almost everyone adopts the four boxes - rename the ops team &amp;ldquo;platform team&amp;rdquo;, call the senior engineers an &amp;ldquo;enabling team&amp;rdquo; - and quietly ignores the three interaction modes, which is where the entire value lives. The book&amp;rsquo;s real payload is a single idea: organise teams to minimise cognitive load, and make the way teams interact both explicit and temporary by design. Here is how that plays out for a real platform group, and the failure modes I see most.&lt;/p&gt;</description></item><item><title>The Comparison That Refuses to Compare</title><link>https://latini.dev/posts/the-comparison-that-refuses-to-compare/</link><pubDate>Thu, 02 Jul 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/the-comparison-that-refuses-to-compare/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - I added a &amp;ldquo;compare two athletes&amp;rdquo; feature to a side project. The chart was an afternoon. The honesty took the rest of the week. A rank only means something relative to who else was in the field - 1st out of 8 is not 1st out of 30 - so a naive overlay of two athletes&amp;rsquo; placings is a confident lie. The feature I shipped refuses to declare a winner unless the two actually competed in the same event &lt;em&gt;and&lt;/em&gt; the same category, and when they never met it says so, in a box, on purpose. This is the same discipline I keep writing about for platforms: a number out of context is &lt;a href="https://latini.dev/posts/dora-metrics-without-the-dashboard-theatre/"&gt;dashboard theatre&lt;/a&gt;, and the honest move is to surface your own uncertainty instead of hiding it behind a clean line.&lt;/p&gt;</description></item><item><title>DORA Metrics Without the Dashboard Theatre</title><link>https://latini.dev/posts/dora-metrics-without-the-dashboard-theatre/</link><pubDate>Fri, 26 Jun 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/dora-metrics-without-the-dashboard-theatre/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - The four &lt;a href="https://dora.dev/"&gt;DORA metrics&lt;/a&gt; are good. What most teams do with them is theatre: a dashboard that trends up and to the right while nothing about how software actually ships changes. The metrics are a thermometer, not a treatment. Measuring deployment frequency doesn&amp;rsquo;t make you deploy more often any more than weighing yourself makes you thinner. This post is the four metrics read honestly, the four ways teams quietly game them, and the single question that separates a real DORA practice from a screenshot in the quarterly review: &lt;em&gt;what did this number cause us to change?&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Your Developer Portal Is a Trap (Until It Isn't)</title><link>https://latini.dev/posts/your-developer-portal-is-a-trap/</link><pubDate>Mon, 22 Jun 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/your-developer-portal-is-a-trap/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - A developer portal is the index of your paved roads, and almost nobody should build the index before they have the book. Standing up &lt;a href="https://backstage.io/"&gt;Backstage&lt;/a&gt; as your &lt;em&gt;first&lt;/em&gt; platform move gives you an empty catalogue, a maintenance burden, and a demo that impresses leadership while helping zero developers. You earn a portal once discovery is a real problem - roughly the &lt;a href="https://latini.dev/posts/platform-engineering-guide/"&gt;~30-services&lt;/a&gt; mark the pillar names, several paved roads worth cataloguing, and ownership data someone actually maintains. Before that, a boring markdown catalogue does the same job for a thousandth of the cost. This is the post-script to &lt;a href="https://latini.dev/posts/building-your-first-golden-path/"&gt;building your first golden path&lt;/a&gt;: what comes after the road, and why it isn&amp;rsquo;t the portal.&lt;/p&gt;</description></item><item><title>Learn Terraform Fluently</title><link>https://latini.dev/posts/learn-terraform-fluently/</link><pubDate>Wed, 10 Jun 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/learn-terraform-fluently/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - Most people who &amp;ldquo;know Terraform&amp;rdquo; have memorised &lt;code&gt;plan&lt;/code&gt; and &lt;code&gt;apply&lt;/code&gt; and treat the rest as weather. Fluency is a mental model, not a command list. Internalise five things - state as the source of truth, the plan as a diff you actually read, modules as functions, drift as a signal, and code organised by blast radius - and Terraform stops being a slot machine you pull and start being a tool you steer. This is the post I wish someone had handed me before my first &lt;code&gt;terraform destroy&lt;/code&gt; on the wrong workspace.&lt;/p&gt;</description></item><item><title>Building Your First Golden Path</title><link>https://latini.dev/posts/building-your-first-golden-path/</link><pubDate>Wed, 03 Jun 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/building-your-first-golden-path/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - A platform stays a slide deck until the first golden path ships. Don&amp;rsquo;t start with a developer portal, a service mesh, or a roadmap. Start with the single most-repeated request your developers make, turn it into a paved road that takes them from nothing to production in a day, and get one team to actually use it. The technology is the easy part. Adoption is the whole job.&lt;/p&gt;</description></item><item><title>Your LLM Platform Is Repeating Your ML Platform's Mistakes</title><link>https://latini.dev/posts/your-llm-platform-is-repeating-your-ml-platforms-mistakes/</link><pubDate>Mon, 25 May 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/your-llm-platform-is-repeating-your-ml-platforms-mistakes/</guid><description>&lt;p&gt;Every team I talk to is building an LLM platform right now. Some call it that. Some call it &amp;ldquo;the AI gateway&amp;rdquo;, &amp;ldquo;the prompt service&amp;rdquo;, &amp;ldquo;the agent stack&amp;rdquo;. The shape is the same: a layer between application teams and a handful of model providers, plus retrieval, plus evals, plus a slowly growing pile of glue.&lt;/p&gt;
&lt;p&gt;I have seen this movie. We made it five years ago and called it the ML platform. Most of the mistakes that made those platforms painful between 2018 and 2022 are quietly being reintroduced now, with bigger bills, more vendors, and less institutional memory.&lt;/p&gt;</description></item><item><title>The Postmortem That Changed Nothing</title><link>https://latini.dev/posts/the-postmortem-that-changed-nothing/</link><pubDate>Thu, 21 May 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/the-postmortem-that-changed-nothing/</guid><description>&lt;p&gt;Every team I work with does postmortems. Most of them are written, filed, linked in a Confluence index, and never opened again. Then, eighteen months later, the same incident happens. Different on-call engineer, same root cause, same surprised faces in the retro.&lt;/p&gt;
&lt;p&gt;We did not fail to write the document. We failed to change the system. That gap is the most expensive habit in incident response, and almost nobody talks about it honestly.&lt;/p&gt;</description></item><item><title>Your Staging Environment Is Lying To You</title><link>https://latini.dev/posts/your-staging-environment-is-lying/</link><pubDate>Mon, 18 May 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/your-staging-environment-is-lying/</guid><description>&lt;p&gt;Every team I have ever worked with has a staging environment. Every team I have ever worked with also has a story about the thing that worked in staging and broke in production. Usually told in the postmortem. Usually with a slide titled &amp;ldquo;How did we miss this?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;We didn&amp;rsquo;t miss it. Staging missed it. That is the job staging cannot do, and pretending otherwise is the most expensive habit in modern infrastructure.&lt;/p&gt;</description></item><item><title>The Boring Stack Manifesto</title><link>https://latini.dev/posts/the-boring-stack-manifesto/</link><pubDate>Fri, 15 May 2026 08:00:00 +0000</pubDate><guid>https://latini.dev/posts/the-boring-stack-manifesto/</guid><description>&lt;p&gt;I run Kubernetes for a living. The websites I actually ship for myself run on Flask, SQLite, and HTMX.&lt;/p&gt;
&lt;p&gt;That isn&amp;rsquo;t a betrayal of the day job. It&amp;rsquo;s the most consistent thing about it. The reason I&amp;rsquo;m useful to companies running serious infrastructure is that I have a clear sense of what complexity costs - and I refuse to pay it when nothing requires me to.&lt;/p&gt;
&lt;p&gt;This is the manifesto for the boring stack: when it wins, why it wins, and the case where you should put it down and pick up something heavier.&lt;/p&gt;</description></item><item><title>Are You Really Monitoring Your Infrastructure?</title><link>https://latini.dev/posts/are-you-really-monitoring-your-infrastructure/</link><pubDate>Mon, 11 May 2026 11:00:00 +0000</pubDate><guid>https://latini.dev/posts/are-you-really-monitoring-your-infrastructure/</guid><description>&lt;p&gt;Every engineering team I work with answers &amp;ldquo;yes, we have monitoring&amp;rdquo; before I&amp;rsquo;ve finished asking the question. Then I ask the follow-up: &lt;em&gt;the last time a customer hit a bug before you did, why?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If you can&amp;rsquo;t answer that quickly, you don&amp;rsquo;t have monitoring. You have dashboards.&lt;/p&gt;
&lt;p&gt;This is the distinction worth getting right, because it determines whether you find out about problems on Tuesday afternoon or from a customer email at 2 a.m. on Saturday.&lt;/p&gt;</description></item><item><title>Is Kubernetes the Right Tool for You?</title><link>https://latini.dev/posts/is-kubernetes-the-right-tool-for-you/</link><pubDate>Mon, 11 May 2026 10:00:00 +0000</pubDate><guid>https://latini.dev/posts/is-kubernetes-the-right-tool-for-you/</guid><description>&lt;p&gt;I run Kubernetes for a living. I think you should probably &lt;em&gt;not&lt;/em&gt; use it.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s not a contradiction. Kubernetes is the right answer for a specific class of problem - multi-tenant, polyglot, heterogeneous workloads at meaningful scale. For most teams I meet, it&amp;rsquo;s a tax: a complex distributed system bolted onto a stack that didn&amp;rsquo;t need one, paid for in hiring, security, and &amp;ldquo;why is my Pod CrashLoopBackOff&amp;rdquo; Slack threads at 11 p.m.&lt;/p&gt;</description></item><item><title>DDDD - Domain Driven Design for Dummies</title><link>https://latini.dev/posts/dddd-domain-driven-design-for-dummies/</link><pubDate>Mon, 11 May 2026 09:00:00 +0000</pubDate><guid>https://latini.dev/posts/dddd-domain-driven-design-for-dummies/</guid><description>&lt;p&gt;&lt;strong&gt;DDDD&lt;/strong&gt; - Domain Driven Design for Dummies. One extra D, because by the time you finish Eric Evans&amp;rsquo; &lt;a href="https://dddcommunity.org/book/evans_2003/"&gt;original 560-page book&lt;/a&gt;, you&amp;rsquo;ll feel like a dummy regardless. This is the shorter version, the one I wish I&amp;rsquo;d read before trying to apply DDD on a real project for the first time.&lt;/p&gt;
&lt;h2 id="what-ddd-actually-is"&gt;
 What DDD actually is
 &lt;a class="heading-link" href="#what-ddd-actually-is"&gt;
 &lt;i class="fa fa-link" aria-hidden="true"&gt;&lt;/i&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Strip away the jargon and DDD is about one stubborn idea: &lt;strong&gt;the structure of your code should reflect the structure of the business it serves.&lt;/strong&gt; Not the database. Not the framework&amp;rsquo;s defaults. The business.&lt;/p&gt;</description></item><item><title>What Is Platform Engineering? A Beginner's Guide</title><link>https://latini.dev/posts/platform-engineering-guide/</link><pubDate>Thu, 16 Jan 2025 21:06:34 +0000</pubDate><guid>https://latini.dev/posts/platform-engineering-guide/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - Platform Engineering is about building an &lt;em&gt;internal product&lt;/em&gt; for your developers: paved roads, golden paths, and self-service workflows that reduce the cognitive load of getting code into production. It&amp;rsquo;s not DevOps with a new logo. It&amp;rsquo;s not SRE with extra steps. It&amp;rsquo;s a specific discipline with its own measurable goals.&lt;/p&gt;
&lt;h2 id="why-this-term-exists"&gt;
 Why this term exists
 &lt;a class="heading-link" href="#why-this-term-exists"&gt;
 &lt;i class="fa fa-link" aria-hidden="true"&gt;&lt;/i&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;A decade of &amp;ldquo;DevOps&amp;rdquo; produced two outcomes. In the best companies, it built a real culture of shared ownership between development and operations. In most companies, it produced a small team of overworked specialists called &amp;ldquo;DevOps engineers&amp;rdquo; who became a human bottleneck - ticket queues, YAML on demand, &amp;ldquo;can you give me access to&amp;hellip;&amp;rdquo; Slack messages at all hours.&lt;/p&gt;</description></item><item><title>gnome-control-center keeps crashing on Fedora 35</title><link>https://latini.dev/posts/gnome-control-center-crashing/</link><pubDate>Tue, 08 Feb 2022 19:11:46 +0000</pubDate><guid>https://latini.dev/posts/gnome-control-center-crashing/</guid><description>&lt;p&gt;This morning &lt;code&gt;gnome-control-center&lt;/code&gt; refused to open. Clicking the icon did nothing - no error, no window, just silence. Here&amp;rsquo;s the trail of breadcrumbs that led to the fix, in case someone else hits the same thing.&lt;/p&gt;
&lt;h2 id="step-0---the-oldest-trick-in-the-book"&gt;
 Step 0 - the oldest trick in the book
 &lt;a class="heading-link" href="#step-0---the-oldest-trick-in-the-book"&gt;
 &lt;i class="fa fa-link" aria-hidden="true"&gt;&lt;/i&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I tried the oldest debugging method on the planet first: the &lt;strong&gt;reboot&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="../../images/it_department.jpeg" alt="Have you tried turning it off and on again?" title="Have you tried turning it off and on again?"&gt;&lt;/p&gt;</description></item><item><title>The new website is alive</title><link>https://latini.dev/posts/new-website-alive/</link><pubDate>Fri, 07 Jan 2022 13:40:09 +0000</pubDate><guid>https://latini.dev/posts/new-website-alive/</guid><description>&lt;p&gt;At last, the site is live. This is the home for my work as a freelance Platform Engineer - and an excuse to start writing more in public.&lt;/p&gt;
&lt;p&gt;The setup is deliberately boring: a &lt;a href="https://gohugo.io"&gt;Hugo&lt;/a&gt; static site deployed to a &lt;a href="https://m.do.co/c/af7c91c73234"&gt;DigitalOcean&lt;/a&gt; droplet in Germany, fronted by Nginx. Nothing fancy, nothing to maintain, fast to load.&lt;/p&gt;
&lt;p&gt;Why start writing? Two reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;I want to get better at it.&lt;/strong&gt; Technical writing is a skill, and like every skill it improves with reps. My own site is the lowest-stakes place to practise - I&amp;rsquo;d rather make mistakes here than in a client deliverable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;To build the habit.&lt;/strong&gt; A blog with no posts is just a domain. Forcing myself to publish, even short pieces, is the only way to find out what I actually have to say.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Future posts will focus on what I work on day-to-day: platform engineering, site reliability, Kubernetes, Terraform, and the bits of cloud infrastructure that are easy to get wrong and hard to fix. There will probably also be the occasional debugging war story, because those are fun to write.&lt;/p&gt;</description></item><item><title>About</title><link>https://latini.dev/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://latini.dev/about/</guid><description>&lt;p&gt;I started out as a PHP developer, switched to sysadmin work out of a *nix passion, and have spent the last 14 years in DevOps, SRE and platform engineering - for startups and large companies alike. Today I build the cloud infrastructure and developer platform behind AxonIQ&amp;rsquo;s distributed, event-driven products: multi-cloud on GCP and AWS, everything as code in Terraform. I help engineering teams ship faster and sleep better.&lt;/p&gt;</description></item><item><title>Services</title><link>https://latini.dev/services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://latini.dev/services/</guid><description>&lt;p&gt;I help engineering teams ship faster and sleep better. Most of my work falls into four buckets. If you&amp;rsquo;re not sure which one fits, &lt;a href="https://latini.dev/work-with-me/"&gt;get in touch&lt;/a&gt; - half my engagements start as a 30-minute conversation about what&amp;rsquo;s actually broken.&lt;/p&gt;
&lt;h2 id="1-production-readiness-for-distributed-systems"&gt;
 1. Production readiness for distributed systems
 &lt;a class="heading-link" href="#1-production-readiness-for-distributed-systems"&gt;
 &lt;i class="fa fa-link" aria-hidden="true"&gt;&lt;/i&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;You have a service heading to production - or already there - and someone has to answer hard questions: &lt;em&gt;what&amp;rsquo;s the error budget? what wakes someone up at 3 a.m.? what happens if a region fails?&lt;/em&gt; I help you answer them before a customer does.&lt;/p&gt;</description></item><item><title>Work With Me</title><link>https://latini.dev/work-with-me/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://latini.dev/work-with-me/</guid><description>&lt;p&gt;Looking for a Platform / SRE consultant who&amp;rsquo;ll tell you the truth about your infrastructure? Let&amp;rsquo;s talk.&lt;/p&gt;
&lt;h2 id="how-engagements-typically-work"&gt;
 How engagements typically work
 &lt;a class="heading-link" href="#how-engagements-typically-work"&gt;
 &lt;i class="fa fa-link" aria-hidden="true"&gt;&lt;/i&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="1-a-30-minute-call-free"&gt;
 1. A 30-minute call (free)
 &lt;a class="heading-link" href="#1-a-30-minute-call-free"&gt;
 &lt;i class="fa fa-link" aria-hidden="true"&gt;&lt;/i&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Tell me what&amp;rsquo;s hurting. I&amp;rsquo;ll ask a lot of questions and probably challenge a few assumptions. By the end you&amp;rsquo;ll know whether I can help, and if not, who probably can. No pitch deck. No &amp;ldquo;discovery phase&amp;rdquo; billed at consultant rates.&lt;/p&gt;</description></item></channel></rss>