<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Severin Bucher | Blog</title><link>https://severinbucher.com/posts/</link><description>Recent content in Posts on Severin Bucher | Blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 11 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://severinbucher.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Upgrading a Legacy Monorepo to React 18: What Nobody Warns You About</title><link>https://severinbucher.com/posts/upgrading-a-legacy-monorepo-to-react-18/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://severinbucher.com/posts/upgrading-a-legacy-monorepo-to-react-18/</guid><description>&lt;p>React 18 shipped in March 2022. We merged our upgrade in April 2026. If you do that math, yes, we were four years behind. This is a post about what that upgrade actually looked like across a large, multi-generational codebase, and the specific issues that ate most of the time.&lt;/p>
&lt;p>Spoiler: the &amp;ldquo;breaking changes&amp;rdquo; in the official React 18 migration guide are the easy part.&lt;/p>
&lt;h2 id="the-starting-point">The Starting Point&lt;/h2>
&lt;p>Our frontend isn&amp;rsquo;t one app. It&amp;rsquo;s four generations of React code living in the same monorepo, piled up over years of product growth:&lt;/p></description></item><item><title>Teaching Your AI to Use Your Component Library</title><link>https://severinbucher.com/posts/teaching-your-ai-to-use-your-component-library/</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><guid>https://severinbucher.com/posts/teaching-your-ai-to-use-your-component-library/</guid><description>&lt;p>AI coding assistants keep hallucinating EUI props. You paste in documentation, it gets ignored thirty messages later. You end up debugging code where half the props don&amp;rsquo;t exist.&lt;/p>
&lt;p>The fix is an MCP server, about 200 lines of TypeScript that gives any MCP-compatible AI direct access to the EUI source.&lt;/p>
&lt;h2 id="what-eui-is">What EUI is&lt;/h2>
&lt;p>EUI (Elastic UI) is Elastic&amp;rsquo;s open-source React component library. It powers Kibana and the rest of the Elastic product suite. The library is large, over 100 components spanning basic buttons and forms, complex data grids, drag-and-drop interfaces, and charting primitives. Each component ships with TypeScript types, MDX documentation, and Storybook stories.&lt;/p></description></item><item><title>Stop Submitting Giant PRs Nobody Wants to Review</title><link>https://severinbucher.com/posts/stop-submitting-giant-prs-nobody-wants-to-review/</link><pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate><guid>https://severinbucher.com/posts/stop-submitting-giant-prs-nobody-wants-to-review/</guid><description>&lt;p>You know that feeling when you open a PR and it&amp;rsquo;s 47 files changed, 3,000 lines? The reviewer sighs, skims it, leaves a comment like &amp;ldquo;looks good,&amp;rdquo; and merges it. No real feedback, nothing caught. That isn&amp;rsquo;t code review, it&amp;rsquo;s rubber-stamping.&lt;/p>
&lt;p>Stacked PRs are a way out of that trap.&lt;/p>
&lt;h2 id="the-basic-idea">The Basic Idea&lt;/h2>
&lt;p>Instead of one massive PR, you break the work into a chain. Each branch builds on the previous one, and each PR targets its parent branch rather than master directly.&lt;/p></description></item><item><title>The Broken Job Search: Why Applying to Big Tech is a Trap</title><link>https://severinbucher.com/posts/the-broken-job-search/</link><pubDate>Sun, 30 Nov 2025 00:00:00 +0000</pubDate><guid>https://severinbucher.com/posts/the-broken-job-search/</guid><description>&lt;p>If you&amp;rsquo;re applying to hundreds of jobs and hearing nothing back, it probably isn&amp;rsquo;t you. The way the funnel is set up works against you.&lt;/p>
&lt;p>Big companies dominate job boards like LinkedIn partly because they pay for placement. A single listing at a well-known corporation can pull over a thousand applications, and a lot of them get auto-filtered before a person ever looks. Even a strong resume struggles to surface in that volume, especially for roles that often get filled internally or through referrals before the public pile is touched.&lt;/p></description></item><item><title>A Practical Terminal-Based Development Environment</title><link>https://severinbucher.com/posts/a-practical-terminal-based-development-environment/</link><pubDate>Sun, 19 Oct 2025 00:00:00 +0000</pubDate><guid>https://severinbucher.com/posts/a-practical-terminal-based-development-environment/</guid><description>&lt;p>Most development sessions start with the same chore: bring up the backend, start the frontend build, open the database, get version control where you can see it. Before any actual work happens, a few minutes go to setting up the workspace.&lt;/p>
&lt;p>My setup gets rid of that. It runs almost entirely in the terminal, using tmuxp to build the session and a handful of tools for editing, file management, and version control. Once it&amp;rsquo;s configured, starting work is one command.&lt;/p></description></item><item><title>My 4-Step Study Plan for Passing the AWS Solutions Architect – Associate</title><link>https://severinbucher.com/posts/my-4-step-study-plan-for-passing-the-aws-solutions-architect-associate/</link><pubDate>Mon, 29 Sep 2025 00:00:00 +0000</pubDate><guid>https://severinbucher.com/posts/my-4-step-study-plan-for-passing-the-aws-solutions-architect-associate/</guid><description>&lt;p>As a web engineer doing full-stack work, I&amp;rsquo;ve spent years inside the AWS ecosystem. EC2, DynamoDB, Redis, Lambda, API Gateway, and S3 are part of my daily toolkit. I was comfortable building and deploying on them, but I also knew there was a lot of AWS I&amp;rsquo;d never touched and a lot of architectural reasoning I&amp;rsquo;d never had to do explicitly.&lt;/p>
&lt;p>So this year I set myself a goal at work: pass the AWS Certified Solutions Architect – Associate exam. I wanted to go deeper on the services I only knew at the surface and get better at designing whole systems rather than wiring up the parts I already knew. I passed the SAA-C03 on my first attempt with a score of 903/1000, and this is the plan that got me there over about nine months.&lt;/p></description></item><item><title>The Diminishing Quality of Content</title><link>https://severinbucher.com/posts/the-diminishing-quality-of-content/</link><pubDate>Mon, 04 Aug 2025 00:00:00 +0000</pubDate><guid>https://severinbucher.com/posts/the-diminishing-quality-of-content/</guid><description>&lt;p>I keep noticing that most of what I read online is worse than it used to be. There&amp;rsquo;s more of everything than ever, but it&amp;rsquo;s thinner: more articles that say nothing, more confident voices with no expertise behind them, more pages that exist to rank rather than to be read. I wanted to work out why, because I don&amp;rsquo;t think it comes down to one thing.&lt;/p>
&lt;h2 id="anyone-can-publish-now-and-that-changed-the-filters">Anyone can publish now, and that changed the filters&lt;/h2>
&lt;p>For most of the last century, getting something published was expensive and slow. A publisher, an editor, a fact-checker, and a typesetter all stood between a writer and an audience. Those people were a bottleneck, and they were also a filter. Plenty of good work never made it through, but most of what did had been checked by someone whose job was to check it.&lt;/p></description></item><item><title>Introducing a Baby Chaos Monkey for Our Microservices</title><link>https://severinbucher.com/posts/introducing-a-baby-chaos-monkey-for-our-microservices/</link><pubDate>Fri, 30 May 2025 00:00:00 +0000</pubDate><guid>https://severinbucher.com/posts/introducing-a-baby-chaos-monkey-for-our-microservices/</guid><description>&lt;p>In a microservice system, the only real way to know how resilient you are is to break things on purpose and watch what happens. That&amp;rsquo;s the idea behind chaos engineering. Netflix&amp;rsquo;s Chaos Monkey is the famous example: it randomly kills services in production so the team finds out early whether the system can take it.&lt;/p>
&lt;p>Killing live services is overkill for most teams, especially outside production, but the underlying idea is worth borrowing. So we added a small piece of middleware to one of our services: a manually triggered, route-level failure tool that acts like a baby Chaos Monkey.&lt;/p></description></item><item><title>Modern API Development with TypeSpec and OpenAPI</title><link>https://severinbucher.com/posts/modern-api-development-with-typespec-and-openapi/</link><pubDate>Thu, 24 Apr 2025 00:00:00 +0000</pubDate><guid>https://severinbucher.com/posts/modern-api-development-with-typespec-and-openapi/</guid><description>&lt;p>Designing clear, well-documented web APIs is a big part of building software. The most widely adopted standard for describing RESTful APIs is OpenAPI, a machine-readable format (usually JSON or YAML) that defines an API&amp;rsquo;s structure, endpoints, and request and response shapes. That schema becomes the single source of truth behind your interactive docs, client libraries, and server stubs.&lt;/p>
&lt;p>However, writing and maintaining OpenAPI specifications by hand can quickly become a chore. The syntax is verbose, and small mistakes in the structure can lead to frustrating bugs or inconsistencies across different parts of the system.&lt;/p></description></item><item><title>Enabling TypeScript Strict Mode in a Legacy React Project: A Gradual Approach</title><link>https://severinbucher.com/posts/enabling-typescript-strict-mode-in-a-legacy-react-project/</link><pubDate>Wed, 26 Mar 2025 00:00:00 +0000</pubDate><guid>https://severinbucher.com/posts/enabling-typescript-strict-mode-in-a-legacy-react-project/</guid><description>&lt;p>Our App was created in 2017. It is a React application written in TypeScript. At the time, TypeScript was gaining popularity, but strict type safety wasn&amp;rsquo;t a major concern for most teams. Our knowledge of TypeScript was limited, and the primary goal was to use it for basic type annotations rather than enforcing a fully type-safe codebase.&lt;/p>
&lt;p>As a result, strict mode was never turned on. The codebase ran without the safeguards strict mode brings: strict null checks, no implicit &lt;code>any&lt;/code>, and tighter type inference. As the project grew, that gap started to cost us. Subtle bugs slipped through, and refactoring carried more risk than it should have.&lt;/p></description></item></channel></rss>