In 2023, I spent 3 days debugging a bug — it turned out to be context.Background() instead of passing the context from upstream. At that time, I thought to myself: “Why hasn’t anyone written an article about these easy-to-make but hard-to-debug patterns?”
This blog was born from that moment.
Who am I?
Dương Nguyễn Hoàng Luân — born in 1998, Hóc Môn, Sài Gòn. Friends call me Luân, and I’m luandnh online.
I started coding in my second year at FPT University. After graduating from MSE, I joined a startup, then an enterprise, and now I’m working at GSM as a backend developer for the XanhNgon team — a food ordering platform of XanhSM.
My main stack is Go (Gin, gRPC, microservices). I also use Python when I need to script quickly or process data. I write APIs, design systems, and optimize performance — all the “tricky” things that the business throws in and engineers have to solve.
What am I doing?
Currently, my area at XanhNgon revolves around:
- Merchant systems — managing restaurants, menus, revenue
- Revenue reports — aggregation, real-time dashboard
- Fraud detection pipeline — Kafka, event-driven, async flows
- AI coding workflow — setting up Claude Code, Codex, OpenCode for the team
Outside of work, I’m exploring AI coding tools: Claude Code, Codex, OpenCode, OpenClaw, 9Router… These tools help write code faster, with fewer bugs, and at a lower cost of $200/month.
What am I good at?
What I actually do on a daily basis:
- Go & Backend: Gin, gRPC, REST APIs, worker pools, message queues (RabbitMQ, Kafka)
- Data: PostgreSQL, Redis, Elasticsearch — schema design, query tuning, caching strategy
- Infra: Docker, Linux, CI/CD (GitHub Actions), basic Kubernetes
- Observability: EFK stack, metrics (Prometheus/Grafana), distributed tracing
- System Design: event-driven architecture, microservices decomposition, graceful degradation
- AI coding: setting up agent workflow, writing skills/plugins for Claude Code & Codex, optimizing token usage
What I used to do and still remember:
- Pitel Callcenter (CCP) — virtual call center system
- Pitel Autocall — auto dialer campaign
- Pitel VMD — voice mail detection
- FinS Collection — debt collection system
What is this blog about?
There are no “hello world” tutorials. There are no translations from dev.to.
Everything on this blog comes from production bugs, real incidents, or patterns I wish someone had taught me from the start:
- Golang patterns: context, goroutine, graceful shutdown, caching strategy
- AI coding deep dives: Claude Code, Codex, OpenCode, agent memory, router optimization
- System design: event-driven, microservices, real trade-offs
- Postmortem: times when the system went down and lessons learned
I try to write each post as if I’m explaining to a colleague over coffee: straightforward, concise, with runnable code, and always including a section on “what I used to do wrong.”
If you finish reading a post and think “oh, I can apply this right away” — I’ve done my job.
Philosophy of Work
I don’t believe in absolute “best practices”. Everything has a context. Redis isn’t always the right choice. Microservices don’t solve every problem. AI coding agents can’t replace code reviews.
A few principles I keep:
- Understand “why” before coding — read requirements twice, code once
- Write code for the person maintaining it 6 months later (usually myself)
- Production bugs > theoretical knowledge — lessons from incidents are remembered longer than any conference talk
- Ship small, ship frequently — PRs with 200 lines are easier to review than PRs with 2000 lines
- Keep the stack simple — add a new service only when truly necessary
Contact
I’m always open to discussing Go, systems, or AI coding tools. Don’t hesitate to reach out if you’re struggling with a weird bug or want to discuss architecture.
- Email: [email protected]
- GitHub: github.com/luandnh
- LinkedIn: linkedin.com/in/luandnh
- Blog: blog.luandnh.com
P.S. If you’ve read this far and found the blog useful, please give me a ⭐ on one of my GitHub repos. I appreciate it sincerely.