<?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>Wed, 15 Apr 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>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>
