Error Translation at Abstraction Boundaries (Go)

How do you translate system errors into context aware domain errors? What should the caller system receive when a file, the system is trying to read, is not available? How about a scenario when the OS denied access permissions to a resource? To explore this, I built a small Go app that reads a JSON file and parses it. That’s it. The goal was not parsing JSON. The goal was to understand how system level errors are translated into domain aware errors and more importantly, when that translation actually matters. ...

March 1, 2026 · Ajinkya D

How Go Scheduler Works

What makes goroutines fast? A quick peek into the GMP model inside the Go scheduler. Note: The diagrams shown here are conceptual abstractions. The actual Go scheduler is more dynamic: P-M bindings are not fixed, work stealing is decentralized, and execution involves additional runtime mechanisms such as the network poller and garbage collector. The goal here is clarity of the core GMP model, not a cycle accurate runtime trace. ...

February 22, 2026 · Ajinkya D

Bounded vs Unbounded Concurrency in Go

Go makes concurrency feel effortless. Add the go keyword, and you have parallel work happening. It feels powerful. It is powerful. But power without constraints is how systems collapse. The Naive Approach: Unbounded Concurrency While building a small CLI tool to verify large list of domains, my initial implementation spawned one goroutine per domain. Meaning the number of go routines scaled directly with the input size. This is a poor design. A large enough input size can cause the system to melt down and crash. ...

February 21, 2026 · Ajinkya D