<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>David Coimbra — Writing</title><description>What I learn in class, at work and by breaking things.</description><link>https://davidcoimbra.dev</link><language>en</language><atom:link href="https://davidcoimbra.dev/rss.xml" rel="self" type="application/rss+xml"/><lastBuildDate>Mon, 21 Sep 2026 00:00:00 GMT</lastBuildDate><item><title>Modularity in practice: naming the cohesion, then splitting two real systems</title><link>https://davidcoimbra.dev/blog/modularity-in-practice</link><guid isPermaLink="true">https://davidcoimbra.dev/blog/modularity-in-practice</guid><description>A cohesion quiz with real examples, then two decomposition exercises: a condominium payments workflow and a padel club booking system with an AI agent.</description><pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate><category>article</category><category>software-architecture</category><category>software-design</category><category>modularity</category><author>hi@davidcoimbra.dev (David Coimbra)</author></item><item><title>Arithmetic expressions: terms, derivations and a first interpreter</title><link>https://davidcoimbra.dev/blog/arithmetic-expressions</link><guid isPermaLink="true">https://davidcoimbra.dev/blog/arithmetic-expressions</guid><description>Exercises on the arithmetic expressions of TAPL chapter 3: building terms, proving what is and isn&apos;t a term, evaluation rules, and a Haskell interpreter.</description><pubDate>Tue, 15 Sep 2026 00:00:00 GMT</pubDate><category>article</category><category>programming-languages</category><category>types</category><category>semantics</category><category>haskell</category><author>hi@davidcoimbra.dev (David Coimbra)</author></item><item><title>Reading programming language papers: the notation, from sets to inference rules</title><link>https://davidcoimbra.dev/blog/pl-notation-primer</link><guid isPermaLink="true">https://davidcoimbra.dev/blog/pl-notation-primer</guid><description>A primer on the maths behind programming language theory: sets, grammars, metavariables, inductive definitions, inference rules, axioms, derivations and evaluation.</description><pubDate>Tue, 15 Sep 2026 00:00:00 GMT</pubDate><category>article</category><category>programming-languages</category><category>types</category><category>semantics</category><category>logic</category><author>hi@davidcoimbra.dev (David Coimbra)</author></item><item><title>From modules to agents: how architecture evolved, and how to measure modularity</title><link>https://davidcoimbra.dev/blog/modularity-and-cohesion</link><guid isPermaLink="true">https://davidcoimbra.dev/blog/modularity-and-cohesion</guid><description>A short history of software architecture, from Dijkstra&apos;s layers to cloud, containers and LLM agents, then modularity vs granularity, cohesion types and the LCOM metric.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><category>article</category><category>software-architecture</category><category>software-design</category><category>modularity</category><author>hi@davidcoimbra.dev (David Coimbra)</author></item><item><title>What a software architect does: architecture vs design, the three laws and eight expectations</title><link>https://davidcoimbra.dev/blog/software-architect-laws-and-expectations</link><guid isPermaLink="true">https://davidcoimbra.dev/blog/software-architect-laws-and-expectations</guid><description>Architecture vs design, the three laws of software architecture, architecture characteristics, recording decisions, and what is expected of an architect.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><category>article</category><category>software-architecture</category><category>software-design</category><category>career</category><author>hi@davidcoimbra.dev (David Coimbra)</author></item><item><title>One call instead of N: 90% fewer search requests</title><link>https://davidcoimbra.dev/blog/car-and-classic-filters</link><guid isPermaLink="true">https://davidcoimbra.dev/blog/car-and-classic-filters</guid><description>At Car &amp; Classic, the search filter modal fired one request per filter group. One call, and a front end rebuilt around it, cut the modal’s requests by about 90%.</description><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate><category>article</category><category>case-study</category><category>performance</category><category>architecture</category><category>backend</category><author>hi@davidcoimbra.dev (David Coimbra)</author></item><item><title>What the homepage renders first: 125 KB to 43 KB</title><link>https://davidcoimbra.dev/blog/homepage-payload</link><guid isPermaLink="true">https://davidcoimbra.dev/blog/homepage-payload</guid><description>A section-by-section audit of the Car &amp; Classic homepage decided what to server-render, what to load later and what to cap, cutting page data by two thirds.</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate><category>article</category><category>case-study</category><category>performance</category><category>frontend</category><category>seo</category><author>hi@davidcoimbra.dev (David Coimbra)</author></item><item><title>4,000 photos that load only when you want them: a virtual carousel in Vue</title><link>https://davidcoimbra.dev/blog/virtual-photo-carousel</link><guid isPermaLink="true">https://davidcoimbra.dev/blog/virtual-photo-carousel</guid><description>How Car &amp; Classic listing cards show 100+ photos each, Airbnb-style, without janking the homepage: intent-based loading, paged photos, a virtual track.</description><pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate><category>article</category><category>case-study</category><category>performance</category><category>frontend</category><category>vue</category><author>hi@davidcoimbra.dev (David Coimbra)</author></item><item><title>My first Inertia PR: making usePage() a singleton</title><link>https://davidcoimbra.dev/blog/inertia-usepage-singleton</link><guid isPermaLink="true">https://davidcoimbra.dev/blog/inertia-usepage-singleton</guid><description>usePage() in Inertia built a new reactive object with 13 computed properties on every call. Turning it into a lazily created singleton removed the waste, and it’s part of Inertia’s 3.x branch.</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><category>article</category><category>open-source</category><category>vue</category><category>inertia</category><category>performance</category><author>hi@davidcoimbra.dev (David Coimbra)</author></item><item><title>Form inputs for a whole company: one component per field, built on composables</title><link>https://davidcoimbra.dev/blog/form-inputs</link><guid isPermaLink="true">https://davidcoimbra.dev/blog/form-inputs</guid><description>Why I replaced a wrapper-based form pattern at Car &amp; Classic with self-contained inputs built on small composables, and how the select typing contract works.</description><pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate><category>article</category><category>case-study</category><category>frontend</category><category>vue</category><category>architecture</category><category>accessibility</category><author>hi@davidcoimbra.dev (David Coimbra)</author></item><item><title>11 seconds to 500 ms: making a healthcare platform faster by adding endpoints</title><link>https://davidcoimbra.dev/blog/healthcare-platform-endpoints</link><guid isPermaLink="true">https://davidcoimbra.dev/blog/healthcare-platform-endpoints</guid><description>WebMD Ignite case study: 30 overloaded endpoints became 46 focused ones, and screens, indexes and caching followed. Responses went from 3–11 s to 150–500 ms.</description><pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate><category>article</category><category>case-study</category><category>performance</category><category>architecture</category><category>backend</category><author>hi@davidcoimbra.dev (David Coimbra)</author></item></channel></rss>