RSSAmplifier

Blog

Nadeesha Cabral

Recent content on Nadeesha Cabral

nadeeshacabral.comRSS feed ↗23 posts

Latest posts

You can just do things now - so why aren't you doing more things?

Heard the news? Coding isn’t a bottleneck anymore. Software engineers have the tools to be more productive than ever. And still, we don’t see value creation from volumes of code translating to actual economic output. Or, maybe you yourself can’t ship things that make a dent. What gives? 
 It’s always been hard for developers to relay “why they’re slow”…

Redshifting and Dark Matter in a Simulation

This is a companion piece explaining the worldbuilding behind “The Relentless Gardner” from A Consensus in Time . 
 Warning: Spoilers for A Consensus of Time 
 
 The Gardner, in his quest to run independent parallel experiments with civilizations, needs to contain them to their local area [1] and prevent cross-contamination. This is especially important given how abundant…

MCP is the New GraphQL

For the longest time, I’ve thought MCP is a weird protocol. 
 I understand the problem it’s trying to solve, but I also think it drags along a bunch of problems we didn’t need. The cost–benefit tradeoff here isn’t universally favourable, and in many cases it’s probably more detrimental than people realise. 
 At a high level, safely calling a set of pre-defined APIs is a solved…

Doing Hard Things In Hard Times

The book I unashamedly recommend to anyone in the “self-help” category is Atomic Habits [1]. I don’t think I learned anything from that book that I hadn’t learned elsewhere. But the fact that things are synthesised cohesively in a book, leads to some activation in the brain that drives the point home more strongly. 
 This is why I think consuming long-form self-help…

Vibe-Code What You Can Measure

Taleb once said that it’s easy to take the risks you can measure rather than measure the risks you can take. 
 Vibe-coding is fast becoming pejorative in industry circles. But that’s mostly because people take risks that they can’t measure with coding agents. 
 The level of risk you take with these tools is very context dependent. For example, you might use Claude Code…

Autonomy, Correctness and Complexity - Pick Two

I’m coming to the realisation that there’s a widely applicable heuristic to figure out who’s grifting over-promising in the race to build “AI-native” products. 
 It’s the people who sell a product promising autonomy (agentic behaviour), correctness of results in highly complex tasks. The current iteration of LLMs, at most, only allow two. Let’s test…

Getting LLMs to reason with Types

The reason why LLMs are programmatically useful is because they can produce structured outputs. They’ve become good over the years of producing these outputs accurately, but smaller (cheaper) models used mostly for data extraction still struggle when given complex object shapes. 
 Usually, to guide the LLMs to produce these outputs, developers prompt with a fully qualified JSON schema,…

Dev Tools Honeytrap

Dev Tools are the hardest business on earth. After building a few, I’m doing some soul searching on why we choose to build it, and why good developers often fail at it. 
 It’s said that movie people are really good at making movies about making movies. (Once upon a time in Hollywood, The Studio, The Offer). This is because they have the three things in common for a great idea to…

Single-threaded ownership

Most of the complex systems (humans, computers, pirate ships) that didn’t break apart, seems to have ascended a point where things got “bad before it got better”. And more often than not, they tend to be in areas where there’s “shared ownership” of a thing. 
 If you think about it, no one really has an incentive to spend their own money to improve a…

Cathedrals vs Bazaars

Cathedral and the Bazaar is something I use often to see which side of an argument I want to be on. 
 The central thesis is that Cathedrals evolve via a top-down design. An exclusive set of overseers who guard and direct the design of a thing from it’s conception. In software, you see this a lot - often bad, but sometimes good. Perhaps my go-to example here is golang - which is most…

ULIDs are awesome

Originally published at Inferable Blog 
 ULIDs are awesome. There I said it. It’s one of those things that you’ll look back on and wonder how you ever lived without it, once you start using it. 
 If you’re familiar with UUIDs, ULIDs are very similar. UUIDs have subtle differences between specs. The v4 spec that I’ve seen most people use is designed to be more random…

You Don't Need Tool Calling

Originally published at Inferable Blog 
 OpenAI, Anthropic, and others have built specialized APIs for tool calling. We’ve always thought that it’s a weird abstraction to be provided by the LLM provider, given that things become much easier if you can treat the LLM as a text-in text-out function. 
 It’s good that structured outputs are a thing, and function calling is…

Long Polling Over WebSockets

Originally published at Inferable Blog 
 Like many teams building real-time systems with Node.js and TypeScript, we’ve been exploring ways to handle real-time updates at scale. Our system handles hundreds of worker nodes constantly polling our PostgreSQL-backed control plane for new jobs (tool calls issued by agents), while agents themselves continuously pull for execution and chat state…

SKIP LOCKED in PostgreSQL

Originally published at Inferable Blog 
 When building distributed systems that need to process jobs or tasks concurrently, one of the most challenging problems is ensuring that work is distributed efficiently without duplication. PostgreSQL’s SELECT FOR UPDATE SKIP LOCKED feature provides an elegant and performant solution to this problem that almost feels too good to be true.…

LLM Temperature from First Principles

Originally published at Inferable Blog 
 Temperature is one of the most important settings when working with Large Language Models (LLMs). Let’s go through a simple experiment to probe the inner workings of a language model and understand how temperature affects LLM outputs. 
 For this experiment, we’ll be using the open-source llama3.2 3B model. If you want to follow along,…

About

I’m Nadeesha Cabral. I’ve worn many hats over the years, but perhaps the one of a Software Engineer, and lately - a person who enables other Software Engineers. I am interested in distributed systems, developer tools, applied AI, and how humans (and machines) build these systems in complex adaptive feedback loops. 
 In my spare time, I write speculative fiction , my thoughts , and…

AI Usage

I find LLMs extremely useful, and I use them extensively - but intentionally in maintaining this site. 
 Things I don’t use LLMs for 
 
 To Write : The posts you see in this blog are not written by an AI. 
 
 Things I use LLMs for 
 
 
 Researching blog posts : The references sections that you see in the posts below are almost always a result of the AI finding…

Blank

This page is intentionally left blank.

Book


 Things I’ve authored. I write by the pen name of Neil M. Carrow.

Links

Find me around the web. 
 
 GitHub - code and projects 
 LinkedIn - professional profile 
 RSS - subscribe to updates 
 Contact - get in touch 


Open Source


 Open source projects I’ve built and maintain.

Slashes

A list of my slashpages. 
 
 /about - who I am 
 /posts - essays and thoughts 
 /opensource - projects I’ve built 
 /books - things I’ve authored 
 /links - around the web 
 /slashes - this page 
 /blank - a page left intentionally blank 


Work

A list of my open source projects. 
 
 
 agentrpc - 124 stars
 A universal RPC layer for AI agents. Connect to any function, any language, any framework, in minutes. 
 
 
 differential - 107 stars
 Typescript-first background services platform with durable functions. 
 
 
 inferable - 435 stars
 Build reliable AI Workflows and Agents with humans in…