<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://samchawla.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://samchawla.github.io/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-07-08T12:29:10+05:30</updated><id>https://samchawla.github.io/feed.xml</id><title type="html">Sumit S Chawla</title><subtitle>Technical Lead specializing in Python, FastAPI, and scalable backend systems. A decade of building fast, reliable, cloud-native services and leading teams that ship with confidence.</subtitle><author><name>Sumit S Chawla</name><email>sam.chawla26@gmail.com</email></author><entry><title type="html">Building Backends That Stay Calm at Scale</title><link href="https://samchawla.github.io/blog/2026/07/07/building-backends-that-stay-calm-at-scale/" rel="alternate" type="text/html" title="Building Backends That Stay Calm at Scale" /><published>2026-07-07T00:00:00+05:30</published><updated>2026-07-07T00:00:00+05:30</updated><id>https://samchawla.github.io/blog/2026/07/07/building-backends-that-stay-calm-at-scale</id><content type="html" xml:base="https://samchawla.github.io/blog/2026/07/07/building-backends-that-stay-calm-at-scale/"><![CDATA[<p>Most backend pain doesn’t come from a single bad decision — it comes from
complexity that grows faster than the team’s ability to reason about it. Here
are the principles I keep returning to when building Python services meant to
last.</p>

<h2 id="design-service-boundaries-before-code">Design service boundaries before code</h2>

<p>Clear boundaries make everything downstream easier: testing, deployment,
ownership, and change. Before writing an endpoint, I want to know what the
service owns, what it depends on, and what its contract with the outside world
is. A well-drawn boundary is worth more than any clever implementation behind
it.</p>

<h2 id="make-reliability-observable">Make reliability observable</h2>

<p>You can’t improve what you can’t see. Structured logging, request tracing, and
a few meaningful metrics (latency percentiles, error rates, saturation) turn
“the API feels slow” into “p95 on this route regressed after the last deploy.”
That shift — from anecdote to signal — is where reliability actually starts.</p>

<h2 id="keep-the-happy-path-fast-and-the-failure-path-boring">Keep the happy path fast, and the failure path boring</h2>

<p>Fast responses come from disciplined data access, sensible caching, and async
where it earns its keep. But the real mark of a mature service is how it fails:
predictable timeouts, clean retries, graceful degradation, and rollbacks that
take one click instead of one incident bridge.</p>

<h2 id="ship-with-guardrails-not-heroics">Ship with guardrails, not heroics</h2>

<p>CI that runs the tests, containers that build the same everywhere, and release
gates that catch the obvious mistakes — these let a team move quickly <em>because</em>
they remove the fear of moving quickly.</p>

<hr />

<p><em>This is a starter post — replace it with your own writing. Add new posts as
Markdown files in <code class="language-plaintext highlighter-rouge">_posts/</code> named <code class="language-plaintext highlighter-rouge">YYYY-MM-DD-title.md</code>.</em></p>]]></content><author><name>Sumit S Chawla</name><email>sam.chawla26@gmail.com</email></author><category term="FastAPI" /><category term="Reliability" /><summary type="html"><![CDATA[A short note on the principles I keep returning to when designing Python services that stay fast and predictable under real load.]]></summary></entry></feed>