<?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 3: Tail Latency, Scaling Up vs. Out, and the Real Cost of Software</title>
      <dc:creator>Deepak Verma</dc:creator>
      <pubDate>Sun, 18 Oct 2026 06:51:23 +0000</pubDate>
      <link>https://dev.to/epicdeepak/reading-ddia-day-3-tail-latency-scaling-up-vs-out-and-the-real-cost-of-software-n5p</link>
      <guid>https://dev.to/epicdeepak/reading-ddia-day-3-tail-latency-scaling-up-vs-out-and-the-real-cost-of-software-n5p</guid>
      <description>&lt;p&gt;All articles in this series: &lt;a href="https://github.com/epicdeepak/designing-data-intensive-applications" rel="noopener noreferrer"&gt;github.com/epicdeepak/designing-data-intensive-applications&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why response times vary
&lt;/h2&gt;

&lt;p&gt;Even in a scenario where you'd think all requests should take the same time, you get variations. Some causes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Random additional latency introduced by a &lt;strong&gt;context switch&lt;/strong&gt; to a background process&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;loss of a network packet&lt;/strong&gt; and TCP retransmission&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;garbage collection pause&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;page fault&lt;/strong&gt; forcing a read from disk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mechanical vibrations&lt;/strong&gt; in the server rack&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;…and many more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the slowest requests matter
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon&lt;/strong&gt; describes response time requirements for internal services in terms of the &lt;strong&gt;99.9th percentile&lt;/strong&gt;, even though it only affects &lt;strong&gt;1 in 1,000 requests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why? The customers with the slowest requests are often the ones with &lt;strong&gt;the most data in their accounts&lt;/strong&gt;, because they've made many purchases. In other words, &lt;strong&gt;they're the most valuable customers&lt;/strong&gt;. It's important to keep them happy by making sure the website is fast for them.&lt;/p&gt;

&lt;p&gt;The numbers back this up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon observed that a &lt;strong&gt;100 ms increase&lt;/strong&gt; in response time &lt;strong&gt;reduces sales by 1%&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Others report that a &lt;strong&gt;1-second slowdown&lt;/strong&gt; reduces a customer satisfaction metric by &lt;strong&gt;16%&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Percentiles in SLOs and SLAs
&lt;/h2&gt;

&lt;p&gt;Percentiles are often used in &lt;strong&gt;Service Level Objectives (SLOs)&lt;/strong&gt; and &lt;strong&gt;Service Level Agreements (SLAs)&lt;/strong&gt;, contracts that define the expected performance and availability of a service.&lt;/p&gt;

&lt;p&gt;For example, an SLA may state that the service is considered up if it has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a &lt;strong&gt;median response time under 200 ms&lt;/strong&gt;, and&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;99th percentile under 1 s&lt;/strong&gt;,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and the service may be required to be up &lt;strong&gt;99.9% of the time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These metrics set expectations for clients of the service and let customers demand a refund if the SLA isn't met.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tail latency amplification
&lt;/h2&gt;

&lt;p&gt;High percentiles become especially important in &lt;strong&gt;backend services that are called multiple times&lt;/strong&gt; as part of serving a single end-user request.&lt;/p&gt;

&lt;p&gt;Even if those calls are made &lt;strong&gt;in parallel&lt;/strong&gt;, the end-user request still has to wait for &lt;strong&gt;the slowest&lt;/strong&gt; of them to complete.&lt;/p&gt;

&lt;p&gt;So even if only a small percentage of backend calls are slow, the chance of hitting a slow call goes up when one end-user request needs several backend calls. As a result, &lt;strong&gt;a larger share of end-user requests end up being slow&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Approaches for coping with load
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vertical scaling&lt;/strong&gt; (scaling up): moving to a more powerful machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Horizontal scaling&lt;/strong&gt; (scaling out): distributing the load across multiple smaller machines.&lt;/li&gt;
&lt;li&gt;Distributing load across multiple machines is also known as a &lt;strong&gt;shared-nothing architecture&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Maintainability
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Most of the cost of software is not in its initial development, but in its ongoing maintenance:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fixing bugs&lt;/li&gt;
&lt;li&gt;Keeping its systems operational&lt;/li&gt;
&lt;li&gt;Investigating failures&lt;/li&gt;
&lt;li&gt;Adapting it to new platforms&lt;/li&gt;
&lt;li&gt;Modifying it for new use cases&lt;/li&gt;
&lt;li&gt;Repaying technical debt&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;…and so on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Three design principles for software systems
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Operability&lt;/strong&gt;: make it easy for the operations team to keep the software running.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity&lt;/strong&gt;: make it easy for new engineers to understand the system, by removing as much complexity as possible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evolvability&lt;/strong&gt;: make it easy for engineers to change the system in the future, adapting it for unanticipated use cases as requirements change. Also known as &lt;strong&gt;extensibility&lt;/strong&gt;, &lt;strong&gt;modifiability&lt;/strong&gt;, or &lt;strong&gt;plasticity&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Symptoms of complexity
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Explosion of the state space&lt;/li&gt;
&lt;li&gt;Tight coupling of modules&lt;/li&gt;
&lt;li&gt;Tangled dependencies&lt;/li&gt;
&lt;li&gt;Inconsistent naming and terminology&lt;/li&gt;
&lt;li&gt;Hacks aimed at solving performance problems&lt;/li&gt;
&lt;li&gt;Special-casing to work around issues elsewhere&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why complexity is dangerous
&lt;/h3&gt;

&lt;p&gt;In complex software, there's also a greater risk of introducing bugs when making a change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The system is harder for developers to understand and reason about&lt;/li&gt;
&lt;li&gt;Hidden assumptions&lt;/li&gt;
&lt;li&gt;Unintended consequences&lt;/li&gt;
&lt;li&gt;Unexpected interactions are easily overlooked&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Accidental complexity
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Moseley and Marks&lt;/strong&gt; define complexity as &lt;strong&gt;accidental&lt;/strong&gt; if it is not inherent in the problem the software solves, but arises only from the implementation.&lt;/p&gt;

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

&lt;p&gt;Your slowest requests often belong to your most valuable users, and when one request fans out to many backend calls, slowness multiplies. On the maintainability side, most of what software costs comes after launch. Complexity that comes only from how you built it, not from the problem itself, is the kind worth removing.&lt;/p&gt;

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

</description>
      <category>architecture</category>
      <category>performance</category>
      <category>scalability</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Reading DDIA, Day 2: Human Errors, Scalability, and Why Latency Response Time</title>
      <dc:creator>Deepak Verma</dc:creator>
      <pubDate>Thu, 15 Oct 2026 18:21:53 +0000</pubDate>
      <link>https://dev.to/epicdeepak/reading-ddia-day-2-human-errors-scalability-and-why-latency-response-time-h57</link>
      <guid>https://dev.to/epicdeepak/reading-ddia-day-2-human-errors-scalability-and-why-latency-response-time-h57</guid>
      <description>&lt;p&gt;Day 2 of reading &lt;strong&gt;Designing Data-Intensive Applications&lt;/strong&gt; (DDIA). Yesterday covered hardware faults and software errors. Today finishes reliability with the third kind of fault, &lt;strong&gt;human errors&lt;/strong&gt;, and then starts on &lt;strong&gt;scalability&lt;/strong&gt;: how to describe load, how to describe performance, and the difference between latency and response time.&lt;/p&gt;

&lt;p&gt;📓 My original handwritten notes: &lt;a href="https://github.com/epicdeepak/designing-data-intensive-applications/blob/main/day-02/day-02-notes.pdf" rel="noopener noreferrer"&gt;Day 2 notes on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Human errors
&lt;/h2&gt;

&lt;p&gt;Humans are known to be unreliable. So the question is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do we make our systems reliable, in spite of unreliable humans?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;a) &lt;strong&gt;Design systems in a way that minimises opportunities for errors.&lt;/strong&gt;&lt;br&gt;
For example, well-designed abstractions, APIs, and admin interfaces make it easy to do "the right thing" and discourage "the wrong thing".&lt;/p&gt;

&lt;p&gt;b) &lt;strong&gt;Decouple the places where people make the most mistakes from the places where they can cause failures.&lt;/strong&gt;&lt;br&gt;
In particular, provide fully featured &lt;strong&gt;non-production sandbox environments&lt;/strong&gt; where people can explore and experiment safely, using real data, without affecting real users.&lt;/p&gt;

&lt;p&gt;c) &lt;strong&gt;Test thoroughly at all levels&lt;/strong&gt;, from unit tests to whole-system integration tests and manual tests.&lt;/p&gt;

&lt;p&gt;d) &lt;strong&gt;Allow quick and easy recovery from human errors&lt;/strong&gt;, to minimise the impact in case of failures.&lt;br&gt;
For example: make it fast to roll back configuration changes, roll out new code gradually, and provide tools to recompute data.&lt;/p&gt;

&lt;p&gt;e) &lt;strong&gt;Set up detailed and clear monitoring&lt;/strong&gt;, such as performance metrics and error rates. In other engineering disciplines this is called &lt;strong&gt;telemetry&lt;/strong&gt;.&lt;br&gt;
Monitoring can show us early warning signals and let us check whether any assumptions or constraints are being violated. When a problem occurs, metrics can be invaluable in diagnosing the issue.&lt;/p&gt;

&lt;p&gt;f) &lt;strong&gt;Implement good management practices and training.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Scalability
&lt;/h2&gt;

&lt;p&gt;Scalability is the term we use to describe &lt;strong&gt;a system's ability to cope with increased load&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But it is &lt;strong&gt;not a one-dimensional label&lt;/strong&gt; you can attach to a system. It is meaningless to say "X is scalable" or "Y doesn't scale".&lt;/p&gt;

&lt;p&gt;Discussing scalability means asking questions like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If the system grows in a particular way, what are our options for coping with the growth?"&lt;br&gt;
"How can we add computing resources to handle the additional load?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Describing load
&lt;/h2&gt;

&lt;p&gt;Load can be described with a few numbers called &lt;strong&gt;load parameters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The best choice of parameters depends on the architecture of your system. It might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Requests per second&lt;/strong&gt; to a web server&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;ratio of reads to writes&lt;/strong&gt; in a database&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;number of simultaneously active users&lt;/strong&gt; in a chat room&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;hit rate&lt;/strong&gt; on a cache&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…and so on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Describing performance
&lt;/h2&gt;

&lt;p&gt;You can look at it in two ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When you &lt;strong&gt;increase the load and keep system resources unchanged&lt;/strong&gt; (CPU, memory, network bandwidth, etc.), how is the performance of your system affected?&lt;/li&gt;
&lt;li&gt;When you &lt;strong&gt;increase a load parameter&lt;/strong&gt;, how much do you need to &lt;strong&gt;increase the resources&lt;/strong&gt; to keep performance unchanged?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Both questions need performance numbers, so we need a way to describe the performance of a system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In a &lt;strong&gt;batch processing system&lt;/strong&gt; such as Hadoop, we usually care about &lt;strong&gt;throughput&lt;/strong&gt;: the number of records we can process per second, or the total time it takes to run a job on a dataset of a certain size.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;online systems&lt;/strong&gt;, &lt;strong&gt;service response time&lt;/strong&gt; is critical: the time between a client sending a request and receiving a response.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Latency vs. response time
&lt;/h2&gt;

&lt;p&gt;These two are often used synonymously, but &lt;strong&gt;they are not the same&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Response time&lt;/strong&gt; is what the client sees. Besides the actual time to process the request, it includes &lt;strong&gt;network delays&lt;/strong&gt; and &lt;strong&gt;queueing delays&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt; is the duration that a request is &lt;strong&gt;waiting to be handled&lt;/strong&gt;, during which it is &lt;em&gt;latent&lt;/em&gt;, awaiting service.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;You can't call a system "scalable" in general. Scalability only makes sense in terms of &lt;strong&gt;a specific load parameter&lt;/strong&gt;, and you can only judge it by &lt;strong&gt;measuring performance&lt;/strong&gt; as that load grows.&lt;/p&gt;

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

</description>
      <category>systemdesign</category>
      <category>database</category>
      <category>distributedsystems</category>
      <category>learning</category>
    </item>
    <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>
