Bỏ qua tới nội dung
Kiên

Xin chào, tôi là

Nguyễn Trung Kiên

Technical Lead · Software Engineer

Hà Nội, Việt Nam

Nguyễn Trung Kiên

Software engineer, hiện là Technical Lead — nặng về backend nhưng code cả stack. Mình làm cái lớp ở giữa: những service nhận một request rồi bắn song song sang vài chục API bên thứ ba, giữ cho kết quả vẫn đúng khi tải cao, và giấu toàn bộ mớ lộn xộn đó khỏi phía dưới. Hệ thống phân tán, tích hợp ở quy mô lớn, và bộ công cụ để cả nhóm còn debug được lúc ba giờ sáng.

  • 4.5

    năm làm backend, frontend & DevOps

  • 42

    lệnh runbook viết cho team

  • ~150

    tích hợp bên thứ ba đang chạy

  • 6

    kỹ sư trong nhóm mình dẫn dắt

Dẫn dắt nhóm kỹ sưLên kế hoạch sprint & estimateTuyển dụng, phỏng vấn & onboardingXây roadmap kỹ thuậtChủ release train đa repoXử lý sự cố productionTrao đổi kỹ thuật trực tiếp với đối tácChốt contract API giữa các teamRunbook AI cho teamReview code & mentorThiết kế contract APIMô hình hoá định danh & trạng tháiLên kế hoạch migration khi hệ đang chạyCô lập vùng lỗiRanh giới module & contract có công cụ épĐịnh danh composite thay cho sessionTypeScriptJavaScriptPythonGoSQLNestJSKoaExpressFastAPIAdapter supplier (Python / Go)Microservices & scale ngangGom nhiều nhà cung cấp về một chuẩnLuồng GDS / NDC cho vé máy bayAPI supplier SOAP / XMLWebhook & đối soát trạng tháiHotel / flight / tour / transfer / carMySQLPostgreSQLMongoDBSQL ServerRedisNeo4jElasticsearch

Giới thiệu

Mình là Kiên, software engineer ở Hà Nội, hiện dẫn dắt kỹ thuật một nhóm 6 người. Bốn năm vừa rồi mình gắn với đúng một bài toán, chỉ là nó thay áo liên tục: làm cho một đống hệ thống vốn không khớp nhau chạy như thể chỉ có một.

Nghe thì gọn, nhưng phần khó nằm ở xung quanh. Cùng một thứ ngoài đời lại mang mã khác nhau ở mỗi đối tác, nên ở đâu đó phải có một bảng định danh — của mình gần 1,9 triệu dòng — và một cách bắc cầu đủ căn cứ để nói "mã X ở chỗ này chính là mã Y ở chỗ kia". Cái request thật sự đi ra ngoài thì được lắp lúc chạy từ cache, config của từng tài khoản và credential của bên thứ ba; nên khi có sự cố mà trong tay chỉ có mỗi cái trace-id thì ngồi đoán không phải là một phương án — phải có công cụ dựng lại đúng request đã gửi. Và một thay đổi liên quan tới tiền có thể nằm rải trên mười một repo, sót một cái là mất tiền thật mà không văng lỗi ở đâu cả.

Thứ mình tự hào nhất thường không phải một tính năng. Là cái audit tìm ra trường hợp chưa ai test, cái tool biến một quy trình hai tiếng thành một câu lệnh, hay lần refactor để service thôi chết ở mốc 3GB. Mình có thói quen biến việc lặp đi lặp lại thành công cụ dùng chung, và ghi rõ chỗ nào mình chưa chắc.

Ngoài giờ thì nghe nhạc, đi loanh quanh và tập gym.

Dự án

Những hệ thống tôi đã xây và vận hành

Xem tất cả

05/2024 – nay · Người thiết kế contract cho module supplier và mô hình di trú, kiêm chủ release train của gateway khách sạn

Lớp gom nhiều wholesaler về một hợp đồng API duy nhất: mỗi supplier là một module, khác biệt giữa thương hiệu đẩy xuống dữ liệu, trạng thái giữa các bước nằm trong chính id.

  • 75

    mã supplier trên 31 module

  • 8

    service của gateway

  • 5

    dòng sản phẩm trên một hợp đồng

  • Node.js
  • Koa 2
  • Express 4
  • MySQL + Knex
  • Redis (ioredis)
  • AWS SQS
  • +5
Xem thử

02/2026 – nay · Tác giả và maintainer, làm một mình

~70 runbook kỹ thuật được đóng gói thành lệnh chạy được, cài qua 3 repo dùng chung cho hai team — kèm guardrail cơ khí hoá cho mọi thao tác chạm vào production.

  • ~70

    runbook chạy được

  • 3

    repo cài được

  • 9

    MCP server nối ở mức từng tool

  • 6

    subagent role

  • Claude Code skills & plugins
  • MCP (9 server)
  • Bash
  • Python 3
  • Node.js
  • macOS launchd
  • +2
Xem thử

2026 · Chủ các chiến dịch mapping — thiết kế, chạy, verify, rollback

Định danh cùng một toà khách sạn giữa các nhà cung cấp trên bảng gần 1,9 triệu dòng — bằng kỹ thuật bắc cầu qua nhà cung cấp thứ ba, có xác minh tên và toạ độ trước khi ghi.

  • 1.9M

    dòng trong bảng định danh

  • +109.786

    dòng ghi trong campaign lớn nhất

  • 94,9%

    độ giống tên trung bình

  • 11.953

    dòng chủ động rollback

  • Node.js
  • MySQL + Knex
  • Redis
  • Neo4j + Cypher
  • Python (TF-IDF, Siamese)
  • fuzzball
  • +1
Xem thử

08/2026 · Tác giả duy nhất, rollout cho 4 service còn lại

Hai quyết định thiết kế — snapshot request ngay dòng đầu tiên của handler, trước khi bất kỳ dòng code nào kịp sửa nó, và suy bảng field từ chính schema validate của mỗi endpoint — khiến công cụ đủ "xách đi được" để ship cho cả năm sản phẩm trong một ngày.

  • 5

    sản phẩm, ship trong cùng một ngày

  • 44–75%

    payload nhẹ hơn so với lưu JSON

  • ~626K

    dòng log search trên production

  • Node.js
  • Koa
  • Express
  • MySQL + Knex
  • Redis
  • Joi
  • +2
Xem thử

Dạo này

Những việc đang nằm trên bàn quý này

  • Dẫn team 6 kỹ sư qua các đợt release nhiều repo — có đợt go-live trải trên 11 repository.
  • Viết adapter tích hợp supplier bằng Python (FastAPI) và Go, song song với stack Node.js/TypeScript hằng ngày.
  • Giữ ~90 tích hợp supplier (~150 mã supplier) chạy ổn trên 5 dòng sản phẩm — khách sạn, vé máy bay, tour, xe đưa đón, thuê xe.
  • Tiếp tục hoàn thiện hai bộ AI runbook cho team — 42 slash command, 5 job chạy nền theo lịch.

09/2026

Open source

Thứ bạn có thể tự npm-install để kiểm chứng

@kien2k1/multi-channel-alert

Một lời gọi, bắn cảnh báo ra Telegram và các kênh khác bạn nối vào. Tách ra từ đoạn code cảnh báo tôi cứ phải viết đi viết lại ở chỗ làm — publish lên npm để khỏi viết lại lần nữa.

Cách tôi làm việc

Những nguyên tắc rút ra từ các bài học

Đếm được mới nói

Con số nào không đếm lại được thì không đưa lên site này, cũng không đưa vào slide. "~90 tích hợp" chịu được kiểm chứng; "quy mô khủng" thì không.

Dán nhãn mức ảnh hưởng

Lệnh nào trong bộ runbook của team cũng gắn nhãn 🟢🟠🔴 ngay ở mục lục, trước khi ai đó chạy. Biết trước lệnh có thể phá gì luôn rẻ hơn để nó phá rồi mới biết.

Release cả đoàn tàu, không phải từng toa

Khi một đợt go-live trải trên 11 repository, đơn vị release là cả cụm chứ không phải từng repo. Thứ tự merge cũng là một phần của thiết kế.

Log cũng là sản phẩm

Với ~150 mã supplier ở thượng nguồn, booking nào không truy vết được thì không bảo vệ được. Lệnh dựng lại request từ một trace-id tồn tại được là nhờ log đã được thiết kế cho việc đó.

Bài học

Một vấn đề có thật, cái giá phải trả, và thứ mình đã đổi

Xem tất cả

· 4 phút đọc

Hai bộ điều phối cùng quản một workload mà chẳng bên nào biết bên kia tồn tại. Cái mức concurrency không ai chọn, cái memory limit thuộc về cgroup chứ không thuộc về worker, và một vòng crash loop nấp trong một pod vẫn báo là khoẻ — và vì sao cách chữa là chọn đúng một tầng cho nó nhân lên.

  • Kubernetes
  • Node.js
  • PM2
  • vận hành

· 4 phút đọc

Một ticket support: tìm khách sạn ở một điểm đến thì không ra gì, các vùng xung quanh vẫn bình thường. Không có gì sập cả — điểm đến đó tồn tại hai lần trong dữ liệu mapping, và khách sạn treo ở row còn lại. Cách chữa sau đó thành một lệnh runbook, bắt buộc phải đếm được kết quả rồi mới được nói "xong".

  • chất lượng dữ liệu
  • debugging
  • observability
  • runbook

· 5 phút đọc

Hai team, hai công ty, khoảng 40 slash command cho AI. Thứ thay đổi không phải là chuyện tự động hoá — mà là runbook và cái tool chạy nó cuối cùng đã thành cùng một file, và mọi lệnh nguy hiểm đều phải tự khai báo.

  • AI tooling
  • Claude Code
  • developer experience
  • tài liệu

Kỹ năng

Dẫn dắt kỹ thuật

  • Dẫn dắt nhóm kỹ sư
  • Lên kế hoạch sprint & estimate
  • Tuyển dụng, phỏng vấn & onboarding
  • Xây roadmap kỹ thuật
  • Chủ release train đa repo
  • Xử lý sự cố production
  • Trao đổi kỹ thuật trực tiếp với đối tác
  • Chốt contract API giữa các team
  • Runbook AI cho team
  • Review code & mentor

Kiến trúc & thiết kế

  • Thiết kế contract API
  • Mô hình hoá định danh & trạng thái
  • Lên kế hoạch migration khi hệ đang chạy
  • Cô lập vùng lỗi
  • Ranh giới module & contract có công cụ ép
  • Định danh composite thay cho session

Ngôn ngữ

  • TypeScript
  • JavaScript
  • Python
  • Go
  • SQL

Framework backend

  • NestJS
  • Koa
  • Express
  • FastAPI
  • Adapter supplier (Python / Go)
  • Microservices & scale ngang

Tích hợp

  • Gom nhiều nhà cung cấp về một chuẩn
  • Luồng GDS / NDC cho vé máy bay
  • API supplier SOAP / XML
  • Webhook & đối soát trạng thái
  • Hotel / flight / tour / transfer / car

Cơ sở dữ liệu

  • MySQL
  • PostgreSQL
  • MongoDB
  • SQL Server
  • Redis
  • Neo4j
  • Elasticsearch

Message queue

  • AWS SQS
  • Apache Kafka
  • RabbitMQ
  • BullMQ

UI & frontend

  • React 19
  • Next.js
  • Redux
  • Ant Design
  • MaterialUI
  • Tailwind CSS
  • Recharts
  • SCSS
  • Figma

Hạ tầng & giám sát

  • Docker
  • Kubernetes
  • Linux
  • GitLab CI
  • DataDog
  • Sentry
  • Grafana + Loki
  • Kibana
  • CloudWatch
  • New Relic

Có làm qua

  • Spring Boot
  • Laravel
  • Flask
  • Apache Spark
  • Hadoop
  • Scala
  • AWS Athena

Viết lách

Ghi chép kỹ thuật và chuyện nghề

Xem tất cả

· 4 phút đọc

Ở phần lớn hệ thống, kết cục đắt nhất của một bài test là màu đỏ. Ở hệ thống booking thì là màu xanh — test pass nghĩa là vừa đặt một thứ có thật. Cách để vẫn test được trọn luồng: một luật chọn offer kiêm luôn cơ chế an toàn, và một gói bằng chứng — chứ không phải dấu tích xanh — làm thứ đối tác thật sự ngồi review.

  • testing
  • tích hợp
  • QA
  • bằng chứng

· 4 phút đọc

Tám gateway service, một nhánh tích hợp chung, và một cú đẩy lên production luôn là hành động có chủ đích, gom theo đợt, với một con người đứng ở nút bấm. "Đơn vị release là cả cụm, không phải từng repo" trông như thế nào khi nó phải chạy hàng tuần, thay vì nằm yên trong danh sách nguyên tắc.

  • release engineering
  • multi-repo
  • quy trình
  • CI/CD

· 8 phút đọc

Không phải chuyện "AI viết code hộ". Phần có ích là biến khoảng 70 quy trình vốn chỉ nằm trong đầu một người thành những lệnh ai cũng chạy được, với cái nguy hiểm thì dán nhãn và có cổng chặn. Đây là hình dạng của nó, bằng những con số mình đếm được thật.

  • AI tooling
  • Claude Code
  • developer experience
  • tự động hoá

Ảnh

Đi, làm, và những khoảnh khắc ở giữa

Xem tất cả

Liên hệ

Cần trao đổi gì cứ nhắn, tôi trả lời sớm nhất có thể.