Writing
Articles on distributed systems, Go, payment infrastructure, and backend engineering.
How to build rate limiters that protect authorization infrastructure without rejecting legitimate traffic. Token bucket math, sliding window trade-offs, and the distributed coordination problem.
How payment networks encode field presence using primary and secondary bitmaps in binary messages.
Wrap errors with what you were trying to do, not what went wrong. The original error already answers the latter.
How TeamPCP compromised Trivy, backdoored LiteLLM's PyPI packages, and harvested credentials using .pth files and fork bombs.
Why naive modular hashing breaks when nodes join or leave, and how consistent hashing fixes it.
slog is stdlib, zerolog is faster but the gap has closed. For new projects, slog wins on API clarity and zero dependencies.
Using UUID v7 as idempotency keys in payment authorization to prevent duplicate processing.
Go maps have no iteration order guarantee. Output that looks sorted is bucket layout coincidence, not language behavior.
When and why to use epsilon in floating-point comparisons, with practical Go examples and a reusable helper.
len() counts bytes, []rune counts code points, neither matches what users see. Grapheme clusters are the unit humans actually read.
The common criticisms of Go were always overstated. Generics arrived, error handling is fine, and simplicity was always the point.
Goroutine stacks start at 2KB, double on overflow, and shrink during GC. The mechanics of Go's contiguous stack model.
When to use for{} vs goroutines, how the GMP scheduler cooperatively preempts, and why async preemption exists.
Self-reviewing your pull request before requesting review saves time, builds trust, and catches the mistakes you already know about.
Why comparable exists, when to use it over any, and the compile-time guarantees it provides for maps and equality checks.
Package initialization order, init() functions, dependency ordering, and what the runtime does before your code runs.
Stack vs heap, pass-by-value semantics, escape analysis, garbage collection, and data race prevention with mutexes.
Atomic commits, conventional commit format, branch naming conventions, and rebasing strategies for teams shipping to production.
Untyped constants, compile-time evaluation, big number precision, iota patterns, and the limitations that catch experienced developers.
Chinese characters work in Go identifiers but Tamil combining marks don't. A look at Unicode categories and the Go spec's design choice.