Captive dependency — Scoped service bị nhốt trong Singleton
Singleton giữ một service Scoped: DbContext sống chung cả app, dữ liệu cũ, race condition. Cách nhận ra và ba cách sửa.

THE ENGINEERING JOURNAL
Những điều mình xây, những vấn đề mình gặp, và những gì mình học được. Về phần mềm, từ bên trong.
Singleton giữ một service Scoped: DbContext sống chung cả app, dữ liệu cũ, race condition. Cách nhận ra và ba cách sửa.

Một con trỏ nil nhét vô interface không còn là nil. Coi cơ chế hai word, mấy chỗ dễ dính và cách chặn trong review.

AsyncLocalStorage trong Node.js: mang traceId, tenant, user theo cả chuỗi async mà không phải thêm tham số vào từng hàm.

Sự cố thật: p99 nhảy từ 45ms lên 2,1 giây vì một hàm blocking nằm trong async task. Cách tìm ra và sửa bằng spawn_blocking của Tokio.

Span<T> và Memory<T> trong .NET giúp cắt chuỗi, parse dữ liệu trên đường nóng mà không cấp phát thêm bộ nhớ — kèm cái bẫy khi gặp async.

Vì sao biến nhỏ trong Go vẫn bị đẩy lên heap? Cách đọc output -gcflags=-m, mấy kiểu code hay gây cấp phát, và đo lại bằng benchmark.

Type chỉ là lời hứa lúc compile. Parse dữ liệu ở biên — env, request, API bên thứ ba — bằng Zod để lỗi nổ ngay chỗ gây ra nó.

React Compiler 1.0 đã stable trong Next.js 16: cách bật, khi nào nên bật từng phần, và vì sao vài thư viện vẫn phải 'use no memo'.

API Node.js phình RAM dù traffic không đổi? Cách chụp 3 heap snapshot, so sánh delta và lần theo Retainers để tìm đúng chỗ rò rỉ.

Timeout đặt riêng ở mỗi service không chặn được chuỗi request chậm. Cách truyền deadline một lần bằng AbortSignal trong TypeScript.
