<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Faiz Halde</title><link>https://fhalde.github.io/</link><description>Recent content on Faiz Halde</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 23 Jun 2026 10:40:42 +0200</lastBuildDate><atom:link href="https://fhalde.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Breadcrumbs: Distributed System</title><link>https://fhalde.github.io/posts/distsys/</link><pubDate>Tue, 23 Jun 2026 10:40:42 +0200</pubDate><guid>https://fhalde.github.io/posts/distsys/</guid><description>&lt;h4 id="what">&lt;em>What&amp;rsquo;s the difference between Fault tolerance, Replication, Consistency &amp;amp; Consensus?&lt;/em>&lt;/h4>
&lt;blockquote>
&lt;p>These four concepts are tightly coupled and form a causal chain.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Fault tolerance&lt;/strong> is the goal: keep serving correctly even when machines crash or the network breaks.&lt;/li>
&lt;li>&lt;strong>Replication&lt;/strong> is the mechanism: to not lose data when one machine dies, keep copies on several machines.&lt;/li>
&lt;li>&lt;strong>Consistency&lt;/strong> is the problem replication creates: once you have copies, they can disagree. What is a client allowed to observe? (Always the latest write? Maybe a stale read? Never a &amp;ldquo;torn&amp;rdquo; state?)&lt;/li>
&lt;li>&lt;strong>Consensus&lt;/strong> is the algorithm that solves it: getting N machines to agree on one value / one ordering of operations, despite some of them failing or messages being lost.&lt;/li>
&lt;/ol>&lt;/blockquote></description></item><item><title>How Feldera handles moving windows</title><link>https://fhalde.github.io/posts/feldera/</link><pubDate>Tue, 16 Jun 2026 07:21:25 +0200</pubDate><guid>https://fhalde.github.io/posts/feldera/</guid><description>&lt;p>Feldera is an incremental SQL engine. You give it a query, and instead of running it over and over, it efficiently keeps the result continuously up to date as the underlying data changes.&lt;/p>
&lt;p>As I keep coming across more of SQL, I realized the language is very expressive. That&amp;rsquo;s great for an analyst, and for a traditional batch engine it&amp;rsquo;s just another query to execute, but anyone around the incremental view maintenance space would wonder &amp;ldquo;hey, how does this work?&amp;rdquo;.&lt;/p></description></item><item><title>Sizing Your LLM Inference Cluster</title><link>https://fhalde.github.io/posts/sizing/</link><pubDate>Wed, 27 May 2026 11:26:15 +0200</pubDate><guid>https://fhalde.github.io/posts/sizing/</guid><description>&lt;p>GPU capacity planning boils down to two questions: what&amp;rsquo;s the theoretical minimum GPU count for my workload, and how much extra capacity is needed once queueing and workload variability are accounted for?&lt;/p>
&lt;p>In this post, I&amp;rsquo;d like to give an overview of this methodology. Here&amp;rsquo;s a toolkit that automates most of it: &lt;a href="https://huggingface.co/spaces/faizhalde/howmanygpus" target="_blank" >howmanygpus&lt;/a>
&lt;/p>
&lt;h2 id="start-with-model-facts">Start with model facts&lt;/h2>
&lt;p>The following references were used to derive the formulas in the toolkit:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://horace.io/brrr_intro.html" target="_blank" >Brrr: Fast LLM inference with high throughput and memory efficiency&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://www.tensoreconomics.com/p/llm-inference-economics-from-first" target="_blank" >Tensoreconomics: LLM inference economics from first principles&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://modal.com/gpu-glossary/" target="_blank" >Modal: GPU glossary&lt;/a>
&lt;/li>
&lt;/ul>
&lt;p>For a model, the first useful quantities are the weight footprint and KV-cache cost per token.&lt;/p></description></item><item><title>Foo ≠ Hostname</title><link>https://fhalde.github.io/posts/hostname/</link><pubDate>Tue, 17 Mar 2026 14:59:34 +0100</pubDate><guid>https://fhalde.github.io/posts/hostname/</guid><description>&lt;p>A common recurring pattern I&amp;rsquo;ve observed is generating ingress hostnames from app names:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#7ee787">app&lt;/span>:&lt;span style="color:#6e7681"> &lt;/span>&lt;span style="color:#a5d6ff">foo&lt;/span>&lt;span style="color:#6e7681">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6e7681">&lt;/span>&lt;span style="color:#7ee787">hostname&lt;/span>:&lt;span style="color:#6e7681"> &lt;/span>&lt;span style="color:#a5d6ff">${app}.&amp;lt;cluster-domain&amp;gt;&lt;/span>&lt;span style="color:#6e7681">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It guarantees uniqueness and simplifies setup. For internal services or
ephemeral environments, this is often perfectly fine.&lt;/p>
&lt;p>But when this pattern becomes the &lt;em>default&lt;/em> for externally visible
endpoints, it starts to break down &amp;mdash; because it fundamentally
misunderstands what a hostname represents in that context.&lt;/p>
&lt;p>A hostname is not just a unique identifier. It&amp;rsquo;s a contract &amp;mdash; with
browsers, with TLS, with DNS, and with your users. By reducing it to a
derived label, you lose control over things that matter in production.&lt;/p></description></item><item><title>Making JSON Awaitable</title><link>https://fhalde.github.io/posts/jsontap/</link><pubDate>Sun, 01 Mar 2026 22:05:50 +0100</pubDate><guid>https://fhalde.github.io/posts/jsontap/</guid><description>&lt;p>When working with LLMs for building Agentic Apps, one thing quickly becomes obvious:&lt;/p>
&lt;ul>
&lt;li>You want structured outputs.&lt;/li>
&lt;li>The model streams tokens.&lt;/li>
&lt;li>Your code waits for a finished JSON blob.&lt;/li>
&lt;/ul>
&lt;p>That mismatch accumulates latency. &lt;a href="https://github.com/fhalde/jsontap" target="_blank" >jsontap&lt;/a>
 closes that gap.&lt;/p>
&lt;p>This post explains the design behind jsontap.&lt;/p>
&lt;h2 id="json-is-a-tree">JSON is a tree&lt;/h2>
&lt;p>JSON is not just a string. It is a hierarchical structure.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;user&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#a5d6ff">&amp;#34;Alice&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;scores&amp;#34;&lt;/span>: [&lt;span style="color:#a5d6ff">10&lt;/span>, &lt;span style="color:#a5d6ff">20&lt;/span>, &lt;span style="color:#a5d6ff">30&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;friends&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#a5d6ff">&amp;#34;Bob&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#7ee787">&amp;#34;email&amp;#34;&lt;/span>: &lt;span style="color:#a5d6ff">&amp;#34;bob@example.com&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>As a tree:&lt;/p></description></item><item><title>META</title><link>https://fhalde.github.io/posts/metadata/</link><pubDate>Fri, 18 Aug 2023 16:23:02 +0200</pubDate><guid>https://fhalde.github.io/posts/metadata/</guid><description>&lt;p>Hi, I&amp;rsquo;m &lt;strong>Faiz Halde&lt;/strong> — a software engineer for almost a decade. That&amp;rsquo;s right, saying &amp;ldquo;10+ years&amp;rdquo; doesn&amp;rsquo;t pack the same punch, folks.&lt;/p>
&lt;p>I currently work at &lt;strong>Aleph Alpha&lt;/strong>, building AI applications. Previously, I&amp;rsquo;ve worked at Nubank, PayPal, and Helpshift.&lt;/p>
&lt;p>My main interests are Distributed Systems, Databases, System Performance and Big Data.&lt;/p>
&lt;p>I enjoy working across languages, especially Clojure, Python, Scala &amp;amp; Go.&lt;/p></description></item></channel></rss>