fishmemory
Guide reviews: 2026-09-23 – 2026-11-06

Anti-amnesia for software engineers

You knew this.
Let's bring it back.

A symptom-first field guide for engineers whose instincts got a little rusty while AI wrote the happy path. No shame. No 40-hour course. Just the mental models you need when production gets weird.

LEARNING TRACKS

THE FIELD GUIDE

What are you trying to remember?

115 of 115 guides

Mobile 8 min

A long list loads and scrolls slowly

“Normal accounts feel fine. Power users with years of history report blank frames and lag.”

Separate server latency, payload cost, JavaScript work, rendering, and memory before reaching for a new list library.

System design 10 min

WebSockets disconnect, duplicate, or lose events

“The live UI looks correct most of the time, but reconnects produce gaps, duplicates, stale balances, or event storms.”

A socket provides freshness, not durable truth. Design reconnect, replay, ordering, idempotency, and snapshot recovery explicitly.

  • ECONNRESETNode.js system errors
  • 1006WebSocket close codes · RFC 6455
Backend 7 min

A retry creates two payments

“The client timed out, retried the request, and both attempts reached the payment provider.”

Treat retries as normal and bind all repetitions of one user intention to one durable payment attempt.

  • 23505PostgreSQL SQLSTATE
  • ECONNRESETNode.js system errors
Frontend 9 min

Optimistic UI lies about money

“A transaction appears successful, disappears, or makes funds spendable before authoritative state catches up.”

Keep intent, execution, and authoritative reads distinct. Optimism may bridge latency but cannot invent financial facts.

Architecture 7 min

The team wants microservices too early

“A young product has unclear boundaries but is accumulating queues, network calls, deployments, and distributed transactions.”

Start with strong module boundaries inside one deployable system, then extract only where operational evidence justifies it.

Web3 9 min

A Web3 payment feels like developer tooling

“Users must understand networks, gas, token allowances, hashes, and finality before making an ordinary payment.”

Use the chain as a settlement rail and translate its mechanics into familiar payment concepts without hiding risk or uncertainty.

  • CALL_EXCEPTIONethers v6
Foundations 5 min

Code after a loop runs before the async work finishes

“The job logs "done" and the response is sent, but records are still being written afterwards. Sometimes the totals are zero, errors appear after success, or switching to Promise.all overwhelms the downstream API.”

Array.prototype.forEach ignores the promises its callback returns, and map just returns an array of them. Pick the execution model on purpose: sequential with for...of, concurrent with Promise.all or allSettled, or concurrent with a limit.

Security 7 min

Changing an ID in the URL shows another user's data

“Editing /invoices/1042 to /invoices/1043, or swapping an ID in a JSON body, returns or modifies a record that belongs to another user or tenant. The user is authenticated; nothing checks ownership.”

Authentication says who the caller is; authorization must decide, per object, whether they may touch it. Scope every query by the authenticated principal or tenant and deny by default, so a missing check fails closed.

Operations 8 min

On-call ignores pages because most alerts are noise

“The pager fires every night for high CPU, a single failed health check, or a disk at 70%. People ack without looking, and the real incident was reported by a customer.”

Alerts on causes and thresholds fire for things users never notice, so people learn to ignore the pager. Page on user-facing symptoms measured against an SLO, alert on how fast the error budget is burning, and send everything else to tickets or dashboards.

Mobile 6 min

A broken mobile release is already in production

“A severe bug shipped, but App Store and Play Store review may delay a replacement binary.”

Mitigate remotely first, then use a compatible over-the-air update when the defect is in JavaScript or assets.

System design 9 min

A brief blip turns into a long outage

“A dependency hiccups for seconds, but traffic to it multiplies, error rates stay high after the root cause is gone, and it only recovers when load is shed manually.”

Retries at every layer multiply load exactly when the system has the least capacity. Retry in one place, within a budget and a deadline, and let overloaded services reject work cheaply.

  • 503HTTP status codes · RFC 9110
  • DEADLINE_EXCEEDEDgRPC status codes
Backend 6 min

An endpoint gets slower as results grow

“The endpoint performs acceptably for ten records but collapses for hundreds, while database query count rises with result count.”

Recognize N+1 access: one query loads the collection and another query runs for every item.

  • 57014PostgreSQL SQLSTATE

HOW IT WORKS

Rebuild the mechanism, not just the fix.

53 of 53 explainers

System design 12 min

WebSockets, from Upgrade to close frame

What actually happens when a browser opens a WebSocket, and what keeps it alive?

A WebSocket is one HTTP request that asks to stop being HTTP. After a 101 (or an HTTP/2 extended CONNECT), both sides exchange small framed messages over the same connection until one sends a close frame or the network quietly drops it.

  • JavaScript
  • TypeScript
  • Go
  • Python
  • Rust
  • Elixir
  • Swift
Backend 11 min

The life of an HTTPS request

What actually happens between calling fetch() and getting a response?

Before your request leaves the machine, the client resolves a name, opens a transport, negotiates TLS and an HTTP version, and only then sends bytes, usually to a CDN edge rather than your origin. A warm, reused connection skips all of that, which is why connection reuse and timeouts matter more than most code-level tuning.

  • JavaScript
  • TypeScript
  • Go
  • Python
  • Rust
  • Java
  • Shell
Web3 14 min

An Ethereum transaction from signing to finality

What actually happens between clicking Send in a wallet and an Ethereum transaction becoming final?

A transaction is a signed, typed message keyed by (sender, nonce). It waits in mempools until a block builder includes it, then gains confidence in stages: included, safe, and finalized about two epochs later.

  • TypeScript
  • TypeScript (React)
  • Shell
  • Python
  • Rust
Foundations 11 min

The JavaScript event loop: tasks, microtasks and rendering

Why does a promise callback run before setTimeout(fn, 0), and why does one slow handler freeze the whole page?

One thread runs one task to completion, then drains every queued microtask, then the browser may render a frame. Promises and await continuations are microtasks, timers and events are tasks, so microtasks always cut the line and nothing at all happens while your code is on the stack.

  • JavaScript
Frontend 12 min

Workers everywhere: which "worker" do you mean?

Web Worker, Service Worker, worker_threads, job worker, Cloudflare Worker: what does each one actually run, and when do I need which?

"Worker" names at least eight different things that share one idea: run code somewhere other than the thread or process handling the user's request. They differ in where they run, how long they live, what they can touch, and how you talk to them.

  • JavaScript
  • TypeScript
Architecture 15 min

Micro-frontends: integration styles, costs and when not to

How do independently deployed frontends get stitched into one product, and what does that cost?

Micro-frontends split one user-facing product into parts that separate teams build and deploy on their own, then compose them at build time, on the server or edge, or in the browser at runtime. They solve an organizational bottleneck and charge you for it in payload, version skew and operational complexity.

  • TypeScript
  • HTML + JavaScript
  • TypeScript (TSX)
  • JavaScript

INTERVIEW PRACTICE

Answer first. Then check.

All 202 questions

NOT ANOTHER DOCS SITE

Designed to rebuild judgment,
not collect bookmarks.

Symptom first

Find the guide using the half-remembered production problem—not the term you forgot.

Then and now

Reconnect older experience with the tools and practices teams use today.

Explain it back

Each guide ends with a recall prompt. If you cannot explain it, you do not own it yet.

“Vibe coding made us faster.
Fish Memory keeps us dangerous.”

Built for experienced engineers who use AI every day—and still want their instincts available when the model is wrong.

fishmemory

Open field notes for fallible humans.

Guide reviews: 2026-09-23 – 2026-11-06. Error codes dated separately.