Welcome to the blog. I am Gabriel, a software engineer focused on distributed systems, infrastructure, and the craft of building software that lasts.
What this blog is for
I write when I have something concrete to say. Expect posts on:
- Systems design trade-offs I have encountered in production
- Developer tooling that has changed how I work
- Deep dives into technology I find interesting (currently: Rust, Kubernetes internals, eBPF)
- The occasional note on the engineering process itself
No filler content. No SEO padding. If a post exists, it is because I had something to say.
A small code example
Here is a simple TypeScript function that fetches data with automatic retry logic. A good pattern to have in your toolkit.
async function fetchWithRetry<T>(
url: string,
retries = 3,
backoff = 300
): Promise<T> {
for (let attempt = 0; attempt < retries; attempt++) {
try {
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json() as Promise<T>;
} catch (err) {
if (attempt === retries - 1) throw err;
await new Promise((r) => setTimeout(r, backoff * 2 ** attempt));
}
}
throw new Error("unreachable");
}Exponential backoff with 2 ** attempt means the delays go 300ms, 600ms, 1200ms. Simple and effective for most external API calls.
What is next
The next post will cover how I structure Next.js projects for long-term maintainability. In the meantime, take a look at the projects section to see what I have been building.
Thanks for reading.