<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>System-Design on Roman Empire</title>
    <link>https://romanempire.dev/tags/system-design/</link>
    <description>Recent content in System-Design on Roman Empire</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>contact@romanempire.dev (Roman)</managingEditor>
    <webMaster>contact@romanempire.dev (Roman)</webMaster>
    <copyright>🦆</copyright>
    <lastBuildDate>Fri, 15 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://romanempire.dev/tags/system-design/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>CAP</title>
      <link>https://romanempire.dev/posts/tech/system-design/cap/</link>
      <pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate>
      <author>contact@romanempire.dev (Roman)</author>
      <guid>https://romanempire.dev/posts/tech/system-design/cap/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  CAP Theorem A.K.A Brewer&amp;rsquo;s Theorem&#xA;is a principle in distributed systems that states that it is impossible for a distributed system to simultaneously provide all 3 guarantees&#xA;&lt;/div&gt;&#xA;&#xA;&lt;/lead&gt;&#xA;&#xA;&lt;div class=&#34;flex justify-center&#34;&gt;&#xA;  &lt;img src=&#34;img/cap-light.excalidraw.svg&#34; alt=&#34;&#34; width=&#34;500&#34; class=&#34;dark:hidden my-0 rounded-md&#34;&gt;&#xA;  &lt;img src=&#34;img/cap-dark.excalidraw.svg&#34; alt=&#34;&#34; width=&#34;500&#34; class=&#34;hidden dark:block my-0 rounded-md&#34;&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Consistency&#xA;    &lt;div id=&#34;consistency&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#consistency&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Ensures all nodes in the distributed system have the same data at the same time. Change in one node should also be reflected in all nodes.&lt;/p&gt;</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://romanempire.dev/posts/tech/system-design/cap/feature.png" />
    </item>
    
    <item>
      <title>ACID</title>
      <link>https://romanempire.dev/posts/tech/system-design/acid/</link>
      <pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate>
      <author>contact@romanempire.dev (Roman)</author>
      <guid>https://romanempire.dev/posts/tech/system-design/acid/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  ACID properties are the guarantees a database must provide for transactions to be reliable.&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Atomicity&#xA;    &lt;div id=&#34;atomicity&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#atomicity&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;All or nothing; if any step fails, the whole transaction rolls back.&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;flex justify-center&#34;&gt;&#xA;  &lt;img src=&#34;img/atomicity-nob.svg&#34; alt=&#34;Atomicity diagram&#34; class=&#34;dark:hidden my-0 rounded-md&#34;&gt;&#xA;  &lt;img src=&#34;img/atomicity-nob-dark.svg&#34; alt=&#34;Atomicity diagram&#34; class=&#34;hidden dark:block my-0 rounded-md&#34;&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;details&#xA;      class=&#34;admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm group&#34;&#xA;      data-type=&#34;example&#34;&#xA;      &gt;&#xA;      &lt;summary class=&#34;flex items-center gap-2 font-semibold text-inherit cursor-pointer&#34;&gt;&#xA;        &lt;div class=&#34;flex shrink-0 h-5 w-5 items-center justify-center text-lg&#34;&gt;&lt;span class=&#34;relative block icon&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 512 512&#34;&gt;&#xA;  &lt;path fill=&#34;currentColor&#34; d=&#34;M24 56c0-13.3 10.7-24 24-24H80c13.3 0 24 10.7 24 24V176h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H48c-13.3 0-24-10.7-24-24s10.7-24 24-24H64V80H48C34.7 80 24 69.3 24 56zM86.7 341.2c-6.5-7.4-18.3-6.9-24 1.2L51.5 357.9c-7.7 10.8-22.7 13.3-33.5 5.6s-13.3-22.7-5.6-33.5l11.1-15.6c23.7-33.2 72.3-35.6 99.2-4.9c21.3 24.4 20.8 60.9-1.1 84.7L86.8 432H120c13.3 0 24 10.7 24 24s-10.7 24-24 24H48c-9.5 0-18.2-5.6-22-14.4s-2.1-18.9 4.3-25.9l72-78c5.3-5.8 5.4-14.6 .3-20.5zM224 64H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32z&#34;/&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&lt;/div&gt;&#xA;        &lt;div class=&#34;grow&#34;&gt;&#xA;          Example&#xA;        &lt;/div&gt;&#xA;        &lt;div&#xA;          class=&#34;ms-auto flex h-5 w-5 items-center justify-center transition-transform ease-in-out -rotate-90 group-open:rotate-0 print:hidden&#34;&gt;&lt;span class=&#34;relative block icon&#34;&gt;&lt;svg&#xA;  xmlns=&#34;http://www.w3.org/2000/svg&#34;&#xA;  viewBox=&#34;0 0 20 20&#34;&#xA;  fill=&#34;currentColor&#34;&#xA;  aria-hidden=&#34;true&#34;&#xA;&gt;&#xA;  &lt;path&#xA;    fill-rule=&#34;evenodd&#34;&#xA;    d=&#34;M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z&#34;&#xA;    clip-rule=&#34;evenodd&#34;&#xA;  /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&lt;/div&gt;&#xA;      &lt;/summary&gt;&lt;div class=&#34;admonition-content mt-3 text-base leading-relaxed text-inherit&#34;&gt;&lt;p&gt;Transferring £100 from A to B requires two steps: debit A, credit B. If the credit fails, the debit is rolled back. Money never vanishes in transit.&lt;/p&gt;</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://romanempire.dev/posts/tech/system-design/acid/feature.svg" />
    </item>
    
    <item>
      <title>CQRS and Event Sourcing</title>
      <link>https://romanempire.dev/posts/tech/system-design/cqrs/</link>
      <pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate>
      <author>contact@romanempire.dev (Roman)</author>
      <guid>https://romanempire.dev/posts/tech/system-design/cqrs/</guid>
      <description>&lt;p&gt;In most systems, reads and writes don&amp;rsquo;t scale the same way, and they rarely need the same data shape. As domains grow more complex, forcing a single model to handle both creates bloated entities and scaling bottlenecks. This article covers two patterns that address this directly: &lt;strong&gt;CQRS&lt;/strong&gt;, which separates the write and read paths, and &lt;strong&gt;Event Sourcing&lt;/strong&gt;, which replaces mutable state with an append-only log of what happened.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;CQRS&#xA;    &lt;div id=&#34;cqrs&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#cqrs&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Command Query Responsibility Segregation&lt;/p&gt;</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://romanempire.dev/posts/tech/system-design/cqrs/feature.png" />
    </item>
    
    <item>
      <title>API</title>
      <link>https://romanempire.dev/posts/tech/system-design/api/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <author>contact@romanempire.dev (Roman)</author>
      <guid>https://romanempire.dev/posts/tech/system-design/api/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;API Paradigms&#xA;    &lt;div id=&#34;api-paradigms&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#api-paradigms&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;details&#xA;      class=&#34;admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm group&#34;&#xA;      data-type=&#34;info&#34;&#xA;      &gt;&#xA;      &lt;summary class=&#34;flex items-center gap-2 font-semibold text-inherit cursor-pointer&#34;&gt;&#xA;        &lt;div class=&#34;flex shrink-0 h-5 w-5 items-center justify-center text-lg&#34;&gt;&lt;span class=&#34;relative block icon&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 512 512&#34;&gt;&lt;path fill=&#34;currentColor&#34; d=&#34;M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z&#34;/&gt;&lt;/svg&gt;&#xA;&lt;/span&gt;&lt;/div&gt;&#xA;        &lt;div class=&#34;grow&#34;&gt;&#xA;          &lt;strong&gt;REST&lt;/strong&gt; (Representational State Transfer)&#xA;        &lt;/div&gt;&#xA;        &lt;div&#xA;          class=&#34;ms-auto flex h-5 w-5 items-center justify-center transition-transform ease-in-out -rotate-90 group-open:rotate-0 print:hidden&#34;&gt;&lt;span class=&#34;relative block icon&#34;&gt;&lt;svg&#xA;  xmlns=&#34;http://www.w3.org/2000/svg&#34;&#xA;  viewBox=&#34;0 0 20 20&#34;&#xA;  fill=&#34;currentColor&#34;&#xA;  aria-hidden=&#34;true&#34;&#xA;&gt;&#xA;  &lt;path&#xA;    fill-rule=&#34;evenodd&#34;&#xA;    d=&#34;M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z&#34;&#xA;    clip-rule=&#34;evenodd&#34;&#xA;  /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&lt;/div&gt;&#xA;      &lt;/summary&gt;&lt;div class=&#34;admonition-content mt-3 text-base leading-relaxed text-inherit&#34;&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Characteristics:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Stateless&lt;/code&gt; architecture&lt;/li&gt;&#xA;&lt;li&gt;Uses &lt;code&gt;standard HTTP methods&lt;/code&gt; (GET, POST, PUT, DELETE)&lt;/li&gt;&#xA;&lt;li&gt;Typically uses &lt;code&gt;JSON&lt;/code&gt; for data exchange&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Resource-oriented&lt;/code&gt; design&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Simple and widely adopted&lt;/li&gt;&#xA;&lt;li&gt;Scalable and cacheable&lt;/li&gt;&#xA;&lt;li&gt;Separation of client and server&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Potential for &lt;code&gt;over-fetching&lt;/code&gt; or &lt;code&gt;under-fetching&lt;/code&gt; data&lt;/li&gt;&#xA;&lt;li&gt;Multiple round trips for complex data requirements&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/div&gt;&lt;/details&gt;&lt;details&#xA;      class=&#34;admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm group&#34;&#xA;      data-type=&#34;info&#34;&#xA;      &gt;&#xA;      &lt;summary class=&#34;flex items-center gap-2 font-semibold text-inherit cursor-pointer&#34;&gt;&#xA;        &lt;div class=&#34;flex shrink-0 h-5 w-5 items-center justify-center text-lg&#34;&gt;&lt;span class=&#34;relative block icon&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 512 512&#34;&gt;&lt;path fill=&#34;currentColor&#34; d=&#34;M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z&#34;/&gt;&lt;/svg&gt;&#xA;&lt;/span&gt;&lt;/div&gt;&#xA;        &lt;div class=&#34;grow&#34;&gt;&#xA;          &lt;strong&gt;GraphQL&lt;/strong&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div&#xA;          class=&#34;ms-auto flex h-5 w-5 items-center justify-center transition-transform ease-in-out -rotate-90 group-open:rotate-0 print:hidden&#34;&gt;&lt;span class=&#34;relative block icon&#34;&gt;&lt;svg&#xA;  xmlns=&#34;http://www.w3.org/2000/svg&#34;&#xA;  viewBox=&#34;0 0 20 20&#34;&#xA;  fill=&#34;currentColor&#34;&#xA;  aria-hidden=&#34;true&#34;&#xA;&gt;&#xA;  &lt;path&#xA;    fill-rule=&#34;evenodd&#34;&#xA;    d=&#34;M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z&#34;&#xA;    clip-rule=&#34;evenodd&#34;&#xA;  /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&lt;/div&gt;&#xA;      &lt;/summary&gt;&lt;div class=&#34;admonition-content mt-3 text-base leading-relaxed text-inherit&#34;&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Characteristics:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Single endpoint&lt;/code&gt; for all operations&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Strongly typed schema&lt;/code&gt;-based queries&lt;/li&gt;&#xA;&lt;li&gt;Allows clients to request &lt;code&gt;specific data&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Avoids over-fetching and under-fetching&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Flexible&lt;/code&gt; data retrieval&lt;/li&gt;&#xA;&lt;li&gt;Strong typing and introspection&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Complex queries can impact &lt;code&gt;server performance&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Always responds with &lt;code&gt;HTTP 200&lt;/code&gt; (error handling complexity)&lt;/li&gt;&#xA;&lt;li&gt;Steeper learning curve&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/div&gt;&lt;/details&gt;&lt;details&#xA;      class=&#34;admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm group&#34;&#xA;      data-type=&#34;info&#34;&#xA;      &gt;&#xA;      &lt;summary class=&#34;flex items-center gap-2 font-semibold text-inherit cursor-pointer&#34;&gt;&#xA;        &lt;div class=&#34;flex shrink-0 h-5 w-5 items-center justify-center text-lg&#34;&gt;&lt;span class=&#34;relative block icon&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 512 512&#34;&gt;&lt;path fill=&#34;currentColor&#34; d=&#34;M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z&#34;/&gt;&lt;/svg&gt;&#xA;&lt;/span&gt;&lt;/div&gt;&#xA;        &lt;div class=&#34;grow&#34;&gt;&#xA;          &lt;strong&gt;gRPC&lt;/strong&gt; (Google Remote Procedure Call)&#xA;        &lt;/div&gt;&#xA;        &lt;div&#xA;          class=&#34;ms-auto flex h-5 w-5 items-center justify-center transition-transform ease-in-out -rotate-90 group-open:rotate-0 print:hidden&#34;&gt;&lt;span class=&#34;relative block icon&#34;&gt;&lt;svg&#xA;  xmlns=&#34;http://www.w3.org/2000/svg&#34;&#xA;  viewBox=&#34;0 0 20 20&#34;&#xA;  fill=&#34;currentColor&#34;&#xA;  aria-hidden=&#34;true&#34;&#xA;&gt;&#xA;  &lt;path&#xA;    fill-rule=&#34;evenodd&#34;&#xA;    d=&#34;M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z&#34;&#xA;    clip-rule=&#34;evenodd&#34;&#xA;  /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&lt;/div&gt;&#xA;      &lt;/summary&gt;&lt;div class=&#34;admonition-content mt-3 text-base leading-relaxed text-inherit&#34;&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Characteristics:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Built on &lt;code&gt;HTTP/2&lt;/code&gt; protocol&lt;/li&gt;&#xA;&lt;li&gt;Uses &lt;code&gt;Protocol Buffers&lt;/code&gt; for serialization&lt;/li&gt;&#xA;&lt;li&gt;Supports &lt;code&gt;streaming&lt;/code&gt; (unary, server, client, bidirectional)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;High performance&lt;/code&gt; and low latency&lt;/li&gt;&#xA;&lt;li&gt;Efficient &lt;code&gt;binary serialization&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Strong typing with protocol buffers&lt;/li&gt;&#xA;&lt;li&gt;Supports &lt;code&gt;multiplexing&lt;/code&gt; and server push&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Less &lt;code&gt;human-readable&lt;/code&gt; (binary format)&lt;/li&gt;&#xA;&lt;li&gt;Requires HTTP/2 support&lt;/li&gt;&#xA;&lt;li&gt;Limited &lt;code&gt;browser support&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Steeper learning curve compared to REST&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/div&gt;&lt;/details&gt;&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://romanempire.dev/posts/tech/system-design/api/feature.png" />
    </item>
    
    <item>
      <title>S.O.L.I.D. Principles</title>
      <link>https://romanempire.dev/posts/tech/system-design/solid/</link>
      <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate>
      <author>contact@romanempire.dev (Roman)</author>
      <guid>https://romanempire.dev/posts/tech/system-design/solid/</guid>
      <description>&lt;p&gt;SOLID is a set of five object-oriented design principles, that guide writing maintainable, scalable, and testable code. Each letter stands for a principle that, when followed together, reduces tight coupling and makes systems easier to extend without breaking existing behavior.&lt;/p&gt;&#xA;&lt;blockquote&gt;&lt;p&gt;Core Principles&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;S&lt;/code&gt; - Single-responsibility Principle&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;O&lt;/code&gt; - Open-closed Principle&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;L&lt;/code&gt; - Liskov Substitution Principle&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;I&lt;/code&gt; - Interface Segregation Principle&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;D&lt;/code&gt; - Dependency Inversion Principle&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Single-Responsibility Principle&#xA;    &lt;div id=&#34;single-responsibility-principle&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#single-responsibility-principle&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&lt;p&gt;A class should have one and only one reason to change, meaning that a class should have only one job.&lt;/p&gt;</description>
      <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://romanempire.dev/posts/tech/system-design/solid/feature.png" />
    </item>
    
  </channel>
</rss>
