RSSAmplifier

Blog

import chaos

The edge cases of software engineering.

gaborkoos.comRSS feed ↗89 posts

Latest posts

Your Modules Are Lying to You

ESM and CommonJS expose values through different contracts. Learn how bindings, object references, evaluation order, caching, cycles, and interop shape module behavior in Node.js.

What Does a Text Watermark Actually Prove?

A reliable text-watermark detector can find an engineered statistical signal, but that result alone cannot reconstruct authorship, intent, or policy compliance.

Text Watermarking for Non-Academics

How statistical text watermarks encode machine-readable signals in ordinary prose, how detectors recover them, and how copying, editing, and rewriting affect the result.

Beyond Happy Path Engineering: Storage

Object storage is separate from application state: how partial uploads, stale URLs, key collisions, CDN caches, and deletion create inconsistencies, and how to design for cleanup and recovery.

Your JSON Is Lying to You

JSON looks like a faithful representation of JavaScript data, but JSON.stringify and JSON.parse can silently alter or discard information at system boundaries.

Beyond Happy Path Engineering: Databases

Databases are where correctness becomes shared state: how invariants break under concurrency, when transactions help and when they don't, why reads go stale, and how to design for retries, migrations, and recovery.

A Year of Building

How a layoff and a security clearance wait turned into a year of open source projects, technical writing, and discovering what happens when work and side projects align.

Golang Maps: How Swiss Tables Replaced the Old Bucket Design

Go 1.24 replaces the old bucket-and-overflow map internals with a Swiss Table-inspired design to improve cache locality, lookup speed, and memory efficiency.

Your JS Date Is Lying to You

The built-in Date API is full of traps: unreliable parsing, mutation, timezone confusion, and broken arithmetic. Here's what it's actually doing, and how Temporal finally fixes it.

chaos-proxy 3.4.0 and chaos-proxy-go 0.6.0, plus CI upgrades across fetch-kit

Both chaos proxies gain structured --verbose observability, and every fetch-kit repo moves its release automation to a GitHub App with fixed Discord announcements.

Beyond Happy Path Engineering: Time

Time is where application code meets uncertainty: clock skew, wall-clock corrections, ambiguous ordering, late schedulers, and business-calendar boundaries.

Beyond Happy Path Engineering: the Network

The network is where application code meets uncertainty: latency, retries, timeouts, duplicate side effects, degraded states, and ambiguous outcomes.

Your console.log Is Lying to You

console.log() feels like a direct window into your program's state. It isn't. Here are the ways the console misleads you, and why each one exists.

The import chaos newsletter is live

I launched a newsletter for import chaos with new posts, practical engineering notes, and occasional release updates.

fetch-kit now has a home: fetchkit.org

The fetch-kit ecosystem finally has a dedicated website at fetchkit.org, with overviews of all tools, examples, and the chaos arena.

Your Package Manager Is Lying to You

npm, Yarn, pnpm, Bun, and Deno are not interchangeable install tools. They encode different assumptions about dependency layout, compatibility, reproducibility, and developer speed.

How to Evaluate an npm Package - 2026 Edition

Stars and downloads tell you about popularity, not safety. Here's a practical checklist for evaluating an npm package's security, reliability, and long-term maintenance in 2026.

How I Built a Confluence Crawler

Building a Go-based CLI tool to export Confluence spaces to local Markdown files for RAG pipelines, offline docs, and Git-based knowledge management.

Your Recursion Is Lying to You

Tail-recursive code in JavaScript still risks stack overflow in real-world runtimes. Learn when recursion is safe and when to switch to iterative patterns.

The Go Compiler: A Deep Dive Into How Your Code Becomes a Binary

A deep dive into the Go compiler pipeline: from lexing and parsing to SSA, optimization passes, and code generation.

Your HTTP Client Is Lying to You

You tightened your client with retries and resilience knobs. Sometimes that helps. Sometimes it quietly makes latency and reliability worse.

Ffetch v5.1.0 Is Out!

A production-ready TypeScript-first drop-in replacement for native fetch. V5.1.0 is out.

Decorating Promises Without Breaking Them

How to add convenience methods to a native Promise object without subclassing, wrapping, or changing what await returns.

Introducing ffetch-demo: The Fetch Client Chaos Arena

ffetch-demo is a live browser arena for benchmarking JavaScript HTTP clients under controlled network chaos.

Your Throttling Is Lying to You

Throttling reduces noisy UI events, but naive implementations can drop the final state. Learn how trailing throttle guarantees correctness for resize, scroll, and high-frequency interactions.

One Cache to Rule Them All: Handling Responses and In-Flight Requests with Durable Objects

Unify response caching and in-flight request deduplication with Cloudflare Durable Objects to eliminate duplicate work during cache misses in distributed systems.

Your Debounce Is Lying to You

Debounce smooths UI events but does not fix request lifecycle bugs. Learn how to prevent stale responses using AbortController, retries, and resilient fetch patterns.

Developing and Benchmarking the Same Feature in Node and Go

Compare the performance of chaos-proxy in Node.js vs Go for HTTP chaos testing. See benchmarks, results, and practical advice for choosing the right proxy for resilient full stack app testing.

Ffetch v5.0.0 Is Out!

A production-ready TypeScript-first drop-in replacement for native fetch. V5.0.0 is out.

How to Find the Top-K Items: Heap and Streaming Approaches in Go

How to find the top-K items in Go using heap and streaming approaches.

From the Database Zoo to the Database Safari

Exploring the growing ecosystem of modern databases and the journey from the Database Zoo series to the upcoming book, The Database Safari.

Using Pagination to Improve GraphQL Performance

Exploring how pagination strategies can impact GraphQL performance in Node.js applications.

Lessons Learned from Running a Privacy-First Disposable Email Service: Insights from nullmail.cc

Running a privacy-first disposable email service: Lessons from handling domain abuse flags, ServerHold suspension, and registry issues with nullmail.cc.

Advanced Asynchronous Patterns in JavaScript

Advanced async in JavaScript: cancellation, timeouts, bounded concurrency, AbortSignal, and error handling for resilient Node.js and browser apps.

New InfoQ Article: One Cache to Rule Them All: Handling Responses and In-Flight Requests with Durable Objects

Learn how to eliminate redundant cache computations in distributed systems using Cloudflare Durable Objects.

New FCC Article: Unit Testing in Go

Unit Testing in Go tutorial, published on freeCodeCamp.

The Go Build System: Optimised for Humans and Machines

Go's build system optimized for humans and machines: faster reproducible builds, smart caching, seamless CI/CD, and practical guidance to streamline modern developer workflows.

Backpressure in JavaScript: The Hidden Force Behind Streams, Fetch, and Async Code

Master backpressure in JavaScript: how streams, fetch, and async code control data flow. Prevent memory spikes, latency collapse, and crashes in Node.js and the browser.

Cancellation In JavaScript: Why It's Harder Than It Looks

Explore why true cancellation is challenging in JavaScript. Learn the differences between cancellation, timeouts, and failures, and understand the limitations of Promises, async/await, and AbortController in handling async operations.

The Database Zoo: Vector Databases and High-Dimensional Search

An in-depth look at Vector Databases, their architecture, use cases, and how they differ from traditional databases.

New FCC Article: How to Use Closures in Go

Go closures tutorial, published on freeCodeCamp.

Modern JavaScript Concurrency

Explore the concurrency model of modern JavaScript, including the event loop, async/await, and more.

Ffetch v4.1.0 Is Out!

A production-ready TypeScript-first drop-in replacement for native fetch. V4.1.0 is out.

Node.js vs Go in Practice: Performance Comparison of chaos-proxy and chaos-proxy-go

Compare the performance of chaos-proxy in Node.js vs Go for HTTP chaos testing. See benchmarks, results, and practical advice for choosing the right proxy for resilient full stack app testing.

Chaos-Driven Testing for Full Stack Apps: Integration Tests That Break (and Heal)

Learn how to use chaos-driven testing in full stack apps with integration tests that simulate network failures and latency. Discover practical techniques with chaos-fetch to build more resilient JavaScript and TypeScript applications.

New FCC Article: Learn How to Use Pointers in Go

Go pointers tutorial, published on freeCodeCamp.

The Database Zoo: Probabilistic / Approximate Databases

An in-depth look at Probabilistic / Approximate Databases, their architecture, use cases, and how they differ from traditional databases.

Small-Scale Chaos Testing: The Missing Step Before Production

Using chaos-fetch and chaos-proxy for lightweight chaos testing in dev/staging to improve app resilience and UX.

Introducing chaos-fetch: Network Chaos Injection for Fetch Requests

chaos-fetch is a TypeScript library for injecting network chaos - latency, failures, drops - into fetch requests. Easily simulate adverse network conditions in client-side code for robust testing and resilience. Now available as @fetchkit/chaos-fetch on npm.

ffetch Migrates to @fetchkit/ffetch & fetch-kit/ffetch

FFetch is now @fetchkit/ffetch on npm, with improved support in the FetchKit ecosystem.