<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Deepak Verma</title>
    <description>The latest articles on DEV Community by Deepak Verma (@epicdeepak).</description>
    <link>https://dev.to/epicdeepak</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1399960%2F8c8d2515-2ed6-4c42-b109-7cfd1350ee8f.jpeg</url>
      <title>DEV Community: Deepak Verma</title>
      <link>https://dev.to/epicdeepak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/epicdeepak"/>
    <language>en</language>
    <item>
      <title>Reading DDIA, Day 1: Data Systems, Reliability, and Why a Fault Isn't a Failure</title>
      <dc:creator>Deepak Verma</dc:creator>
      <pubDate>Wed, 14 Oct 2026 02:48:40 +0000</pubDate>
      <link>https://dev.to/epicdeepak/reading-ddia-day-1-data-systems-reliability-and-why-a-fault-isnt-a-failure-35ed</link>
      <guid>https://dev.to/epicdeepak/reading-ddia-day-1-data-systems-reliability-and-why-a-fault-isnt-a-failure-35ed</guid>
      <description>&lt;p&gt;I've started reading &lt;strong&gt;Designing Data-Intensive Applications&lt;/strong&gt; (DDIA), and I'm going to write up what I learn each day as I go. My original handwritten notes go on GitHub, and this is the cleaned-up version.&lt;/p&gt;

&lt;p&gt;Day 1 covers the building blocks of data systems, the questions to ask when you design one, and the first big topic: &lt;strong&gt;reliability&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The building blocks
&lt;/h2&gt;

&lt;p&gt;Most data-intensive applications are built from a few standard pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Databases&lt;/strong&gt;: store data so that they, or another application, can find it again later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caches&lt;/strong&gt;: remember the result of an expensive operation, to speed up reads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search indexes&lt;/strong&gt;: let users search data by keyword or filter it in various ways.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stream processing&lt;/strong&gt;: send a message to another process, to be handled asynchronously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch processing&lt;/strong&gt;: periodically crunch a large amount of accumulated data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lines between these categories are blurry:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some datastores are also used as &lt;strong&gt;message queues&lt;/strong&gt;. Example: &lt;strong&gt;Redis&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Some message queues come with &lt;strong&gt;database-like durability guarantees&lt;/strong&gt;. Example: &lt;strong&gt;Apache Kafka&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few more tools that show up again and again:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Memcached&lt;/strong&gt;: an application-managed caching layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elasticsearch / Solr&lt;/strong&gt;: full-text search servers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Questions to ask when designing a data system or service
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;How do you make sure data stays &lt;strong&gt;correct and complete&lt;/strong&gt;, even when things go wrong internally?&lt;/li&gt;
&lt;li&gt;How do you keep performance &lt;strong&gt;consistently good&lt;/strong&gt; for clients, even when parts of your system are degraded?&lt;/li&gt;
&lt;li&gt;How do you &lt;strong&gt;scale&lt;/strong&gt; to handle an increase in load?&lt;/li&gt;
&lt;li&gt;What does a &lt;strong&gt;good API&lt;/strong&gt; for the service look like?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The three concerns that matter most
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reliability&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintainability&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Today was all about the first one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reliability
&lt;/h2&gt;

&lt;p&gt;For software, reliability means:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The application &lt;strong&gt;performs the function&lt;/strong&gt; the user expected.&lt;/li&gt;
&lt;li&gt;It can &lt;strong&gt;tolerate the user making mistakes&lt;/strong&gt; or using the software in unexpected ways.&lt;/li&gt;
&lt;li&gt;Its &lt;strong&gt;performance is good enough&lt;/strong&gt; for the required use case, under the expected load and data volume.&lt;/li&gt;
&lt;li&gt;The system &lt;strong&gt;prevents unauthorised access and abuse&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;In one line: it should work correctly, even when things go wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Faults vs. failures (remember this one)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The things that can go wrong are called &lt;strong&gt;faults&lt;/strong&gt;. Systems that anticipate faults and can cope with them are called &lt;strong&gt;fault-tolerant&lt;/strong&gt; or &lt;strong&gt;resilient&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A fault is not the same as a failure.&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;fault&lt;/strong&gt; is one component of the system deviating from its spec.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;failure&lt;/strong&gt; is when the system &lt;em&gt;as a whole&lt;/em&gt; stops providing the required service to the user.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;📌 On my reading list: &lt;strong&gt;Netflix's Chaos Monkey&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Types of faults
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Hardware faults
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A hard disk crashes&lt;/li&gt;
&lt;li&gt;RAM becomes faulty&lt;/li&gt;
&lt;li&gt;The power grid has a blackout&lt;/li&gt;
&lt;li&gt;Someone unplugs the wrong network cable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Related term: &lt;strong&gt;MTTF (Mean Time To Failure)&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Software errors
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A software bug that causes &lt;strong&gt;every instance&lt;/strong&gt; of an application server to crash when given a particular bad input.

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Example:&lt;/em&gt; the &lt;strong&gt;leap second on June 30, 2012&lt;/strong&gt; made many applications hang at the same time, because of a bug in the Linux kernel.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;runaway process&lt;/strong&gt; that uses up a shared resource: CPU time, memory, disk space, or network bandwidth.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;service the system depends on&lt;/strong&gt; slows down, becomes unresponsive, or starts returning corrupted responses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cascading failures&lt;/strong&gt;, where a small fault in one component triggers a fault in another component, which then triggers more faults.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Day 1 takeaway
&lt;/h2&gt;

&lt;p&gt;A reliable system isn't one where nothing goes wrong. It's one where faults happen and the &lt;strong&gt;system as a whole keeps working anyway&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;📓 Original handwritten notes: &lt;a href="https://github.com/epicdeepak/designing-data-intensive-applications/blob/main/day-01/day-01-notes.pdf" rel="noopener noreferrer"&gt;Github link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See you tomorrow for Day 2. 👋&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>database</category>
      <category>distributedsystems</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
