<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Design on Home</title>
    <link>https://blog.rafaelfernandez.dev/tags/design/</link>
    <description>Recent content in Design on Home</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>© 2026 Rafael Fernandez</copyright>
    <lastBuildDate>Wed, 18 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.rafaelfernandez.dev/tags/design/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Making Invalid States Unrepresentable 3: Real bugs from representable nonsense</title>
      <link>https://blog.rafaelfernandez.dev/posts/making-invalid-states-unrepresentable-3-real-bugs/</link>
      <pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.rafaelfernandez.dev/posts/making-invalid-states-unrepresentable-3-real-bugs/</guid>
      <description>Null references, UI loading spinners that show errors and data simultaneously, payments that are captured and voided at the same time. These are not hypotheticals. They are the direct consequence of types that lie about the domain.</description>
      
    </item>
    
    <item>
      <title>Making Invalid States Unrepresentable 1: Why boolean flags are bugs in disguise</title>
      <link>https://blog.rafaelfernandez.dev/posts/making-invalid-states-unrepresentable-1-boolean-flags/</link>
      <pubDate>Sat, 14 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.rafaelfernandez.dev/posts/making-invalid-states-unrepresentable-1-boolean-flags/</guid>
      <description>A traffic light that is red and green at the same time. A user who is logged in and logged out simultaneously. Boolean flags make these absurd states perfectly representable, and that is the problem.</description>
      
    </item>
    
    <item>
      <title>Syntax and Semantics 1: Your code has a grammar problem</title>
      <link>https://blog.rafaelfernandez.dev/posts/syntax-and-semantics-1-your-code-has-a-grammar-problem/</link>
      <pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.rafaelfernandez.dev/posts/syntax-and-semantics-1-your-code-has-a-grammar-problem/</guid>
      <description>Every enum you write is a formal grammar. Every sealed trait is a set of production rules. You have been doing formal methods all along; you just did not know the name. We trace the connection from Chomsky&amp;rsquo;s hierarchy to your domain types in Rust and Scala.</description>
      
    </item>
    
    <item>
      <title>Traits are grammars too: a small design lesson that kept nagging at me</title>
      <link>https://blog.rafaelfernandez.dev/posts/traits-are-grammars-too-from-contract-design-to-formal-syntax/</link>
      <pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.rafaelfernandez.dev/posts/traits-are-grammars-too-from-contract-design-to-formal-syntax/</guid>
      <description>While revisiting the TaskRepository trait from the Todo CLI series, I realized I was doing more than drawing an architectural boundary. I was also defining what could be said across that boundary, which is much closer to grammar than I first admitted.</description>
      
    </item>
    
  </channel>
</rss>
