Menu
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Đang tải...

Bài 34 — Engineering Productivity — DORA metrics

Technical Leadership Bài 34/60

Mở đầu — vì sao bài này quan trọng

Hãy hình dung bạn vừa được đề bạt làm Tech Lead của một đội 8 kỹ sư. Trong buổi review quý, giám đốc kỹ thuật hỏi bạn một câu tưởng đơn giản: "Đội em làm việc có hiệu quả không? Dựa vào đâu em nói vậy?". Bạn ấp úng. Bạn cảm thấy đội đang chạy tốt — mọi người bận rộn, commit đầy màn hình, standup nào cũng có tiến độ. Nhưng "cảm thấy" không phải là dữ liệu. Và khi bạn không có dữ liệu, người ta sẽ dùng những thước đo tệ hại thay bạn: số dòng code, số giờ ngồi ở văn phòng, số ticket đóng được — những con số vừa dễ bịa vừa dễ hiểu sai.

Đây chính là lý do DORA metrics ra đời và trở thành ngôn ngữ chung của giới engineering leadership toàn cầu. DORA (DevOps Research and Assessment) là nhóm nghiên cứu do Google dẫn dắt, với hơn một thập kỷ khảo sát hàng chục nghìn kỹ sư trên toàn thế giới, được đúc kết trong cuốn Accelerate của Nicole Forsgren, Jez Humble và Gene Kim. Điều họ tìm ra rất mạnh mẽ: chỉ cần bốn chỉ số là đủ để phân biệt đội hiệu suất cao với đội hiệu suất thấp, và quan trọng hơn — những chỉ số này tương quan chặt với hiệu quả kinh doanh của cả công ty.

Là một người dẫn dắt kỹ thuật, bạn cần DORA metrics vì ba lý do. Thứ nhất, nó cho bạn một cách nói chuyện với sếp và với các bộ phận khác bằng thứ ngôn ngữ khách quan, không phải bằng cảm tính. Thứ hai, nó chỉ ra nút thắt cổ chai thật sự trong quy trình giao hàng của đội, thay vì để bạn tối ưu nhầm chỗ. Thứ ba — và đây là điều nhiều người bỏ quên — nó bảo vệ đội bạn khỏi những thước đo độc hại như "code churn" hay "commit count" mà quản lý cấp trên hay bị cám dỗ dùng đến. Bài này sẽ giúp bạn hiểu tường tận bốn chỉ số, cách đo, và quan trọng nhất là cách dùng đúng để không biến chúng thành công cụ giám sát.

Khái niệm cốt lõi

DORA metrics gồm bốn chỉ số, chia thành hai nhóm cân bằng nhau: hai chỉ số về tốc độ (throughput) và hai chỉ số về độ ổn định (stability). Sự cân bằng này rất có chủ đích — nó ngăn bạn đánh đổi chất lượng lấy tốc độ hoặc ngược lại.

1. Deployment Frequency — Tần suất triển khai

Đội bạn đưa code lên production bao lâu một lần? Đây là chỉ số về tốc độ. Nghe qua thì đơn giản, nhưng nó phản ánh cả một hệ thống bên dưới: nếu bạn deploy được nhiều lần mỗi ngày, nghĩa là quy trình CI/CD của bạn tự động, các thay đổi nhỏ và an toàn, và đội có sự tự tin để đưa hàng ra liên tục. Ngược lại, nếu mỗi tháng mới deploy một lần, thường là do mỗi lần deploy là một sự kiện lớn, rủi ro cao, cần cả đội thức đêm.

Theo phân loại của DORA, các mức tham chiếu là:

  • Elite: deploy theo yêu cầu, nhiều lần mỗi ngày.
  • High: từ một lần mỗi ngày đến một lần mỗi tuần.
  • Medium: từ một lần mỗi tuần đến một lần mỗi tháng.
  • Low: từ một lần mỗi tháng đến một lần mỗi vài tháng.

2. Lead Time for Changes — Thời gian đưa thay đổi ra production

Từ lúc một dòng code được commit cho đến khi nó chạy trên production, mất bao lâu? Đây là chỉ số về tốc độ phản hồi. Nó đo toàn bộ quãng đường: code review, chờ CI chạy, chờ QA, chờ lịch release. Một lead time dài thường không phải vì lập trình chậm, mà vì code bị "kẹt" ở các hàng đợi — chờ người review, chờ môi trường staging trống, chờ cuộc họp release approval.

Mức tham chiếu: Elite dưới một ngày, High từ một ngày đến một tuần, Medium từ một tuần đến một tháng, Low trên một tháng.

3. Change Failure Rate — Tỷ lệ thay đổi gây lỗi

Trong số các lần deploy lên production, bao nhiêu phần trăm gây ra sự cố cần xử lý gấp (rollback, hotfix, hoặc gây suy giảm dịch vụ)? Đây là chỉ số về độ ổn định. Nó trả lời câu hỏi: tốc độ của bạn có phải trả giá bằng chất lượng không?

Điều thú vị mà nghiên cứu DORA phát hiện: các đội Elite vừa deploy nhanh hơn vừa có change failure rate thấp hơn. Tốc độ và ổn định không phải là đánh đổi — chúng đi cùng nhau khi quy trình đủ tốt. Mức Elite thường dưới 15%.

4. Mean Time to Restore (MTTR) — Thời gian phục hồi trung bình

Khi có sự cố trên production, đội mất bao lâu để khôi phục dịch vụ về bình thường? Đây là chỉ số ổn định thứ hai, và nó phản ánh một tư duy quan trọng: sự cố là điều không thể tránh khỏi, nên điều đáng đo không chỉ là "bao lâu mới có lỗi" mà còn là "phục hồi nhanh đến đâu". Đội Elite thường phục hồi trong dưới một giờ; đội Low có thể mất hàng tuần.

Điều then chốt: DORA đo hệ thống, không đo cá nhân

Đây là hiểu lầm chết người nhất và tôi muốn nhấn mạnh ngay từ đầu. Cả bốn chỉ số đều đo lường năng lực của cả quy trình giao hàng, không phải năng suất của từng lập trình viên. Bạn không bao giờ được dùng DORA để so sánh kỹ sư A với kỹ sư B, hay để xếp hạng nhân viên. Ngay khi bạn làm vậy, mọi người sẽ tối ưu cho con số thay vì cho kết quả — deploy vụn vặt để tăng tần suất, chia commit giả để làm đẹp lead time. DORA là tấm gương soi quy trình, để bạn cải thiện quy trình.

Tình huống thực tế

Ví dụ 1: Startup fintech Sài Gòn — deploy mỗi hai tuần và cái giá của nó

Một startup fintech ở TP.HCM (gọi là "PayNhanh") có đội 12 kỹ sư, làm ví điện tử. Khi tôi trao đổi với Tech Lead của họ, họ tự hào rằng "quy trình rất kỷ luật": mỗi hai tuần release một lần vào tối thứ Sáu, có checklist đầy đủ, cả đội trực đến khuya. Nghe rất chuyên nghiệp. Nhưng khi đo DORA, bức tranh lộ ra:

  • Deployment Frequency: 1 lần / 2 tuần (mức Low).
  • Lead Time: trung bình 11 ngày — code viết xong thứ Ba tuần này phải chờ đến release cuối tuần sau.
  • Change Failure Rate: 40% — cứ 5 lần release thì 2 lần phải hotfix trong đêm.
  • MTTR: trung bình 6 giờ vì mỗi release gộp quá nhiều thay đổi, khi lỗi xảy ra rất khó biết cái nào gây ra.
Điểm mấu chốt: change failure rate cao chính vì deploy hiếm. Mỗi release gộp hai tuần công việc của 12 người thành một "quả bom" khổng lồ, rủi ro cực lớn. Đội đã hiểu ngược nhân quả — họ nghĩ "phải cẩn thận nên release hiếm", trong khi thực tế "release hiếm nên buộc phải cẩn thận mà vẫn hay hỏng".

Bài học: Sau sáu tháng đầu tư vào automated testing và feature flags để tách việc deploy code khỏi việc bật tính năng, PayNhanh chuyển sang deploy hàng ngày. Change failure rate giảm xuống 12%, và điều bất ngờ là các buổi thức khuya cuối tuần biến mất. Deploy nhỏ, thường xuyên thì ít rủi ro hơn deploy to, hiếm hoi.

Ví dụ 2: Đội thương mại điện tử đo nhầm và tự bắn vào chân

Một công ty e-commerce khu vực Đông Nam Á đưa DORA vào dashboard và gắn KPI cho từng team: "phải đạt deployment frequency ít nhất 3 lần/ngày". Nghe có vẻ đúng tinh thần Elite. Nhưng vài tuần sau, một Tech Lead phát hiện các đội bắt đầu chia nhỏ một tính năng thành 5-6 pull request rời rạc, deploy từng mảnh chỉ để "đủ số", dù mỗi mảnh chẳng có giá trị độc lập. Có team còn tạo deploy trống (chỉ đổi comment) để đẩy con số lên.

Kết quả: deployment frequency đẹp lung linh trên dashboard, nhưng lead time thực tế lại tăng vì phải review nhiều PR vụn vặt, và developer thì bực bội vì phải làm việc vô nghĩa.

Bài học: DORA là chỉ báo sức khỏe để đội tự soi mình, không phải mục tiêu để áp từ trên xuống. Khoảnh khắc bạn biến một chỉ số thành KPI cá nhân hay KPI cứng của team, nó ngừng đo cái nó vốn đo — đây chính là định luật Goodhart: "Khi một thước đo trở thành mục tiêu, nó thôi là thước đo tốt". Cách dùng đúng là để đội nhìn xu hướng của mình theo thời gian và tự hỏi "chỗ nào đang tắc?".

Ví dụ 3: Ngân hàng số phát hiện nút thắt nhờ Lead Time

Một ngân hàng số ở Việt Nam có lead time trung bình 9 ngày và không hiểu tại sao, vì lập trình viên rõ ràng làm rất nhanh. Tech Lead quyết định "mổ xẻ" lead time thành từng chặng:

  • Từ commit đến khi PR được mở: 0,5 ngày.
  • Từ mở PR đến khi có người review lần đầu: 4 ngày (!).
  • Từ review đến khi merge: 1 ngày.
  • Từ merge đến khi deploy production: 3,5 ngày (chờ lịch release hàng tuần và phê duyệt của một quản lý duy nhất).
Hóa ra vấn đề chẳng nằm ở khâu lập trình chút nào. Hai nút thắt lớn nhất là: (1) PR nằm chờ review quá lâu vì không có quy ước "review trong vòng 24h", và (2) quy trình phê duyệt release tập trung vào một người hay đi công tác.

Bài học: Giá trị lớn nhất của lead time không phải con số tổng, mà là việc tách nó ra thành các chặng để tìm hàng đợi tắc nghẽn. Sau khi đặt quy ước review-trong-24h và phân quyền phê duyệt release cho nhiều người, lead time của ngân hàng này giảm từ 9 ngày xuống còn 2,5 ngày mà không ai phải code nhanh hơn một giây nào.

Hướng dẫn từng bước

Đây là lộ trình thực tế để triển khai DORA metrics cho đội của bạn.

Bước 1 — Định nghĩa rõ "deploy" và "sự cố" trước khi đo bất cứ thứ gì. Với đội của bạn, deploy nghĩa là gì — đẩy lên production, hay lên staging cũng tính? Sự cố (incident) là gì — chỉ khi dịch vụ sập, hay cả khi một tính năng bị lỗi? Nếu không thống nhất định nghĩa, mọi con số sau này sẽ vô nghĩa. Viết định nghĩa ra và cho cả đội đồng thuận.

Bước 2 — Bắt đầu đo thủ công, đừng chờ công cụ hoàn hảo. Bạn không cần Datadog hay công cụ đắt tiền để bắt đầu. Một bảng tính Google Sheet ghi lại: mỗi lần deploy (ngày giờ), commit sớm nhất trong lần deploy đó (để tính lead time), mỗi lần có sự cố (thời điểm bắt đầu và thời điểm phục hồi). Chỉ cần hai tuần dữ liệu thủ công, bạn đã có cái nhìn đầu tiên.

Bước 3 — Lấy dữ liệu từ nguồn có sẵn. Deployment frequency và lead time thường trích được từ Git và CI/CD (GitHub Actions, GitLab CI, Jenkins). Change failure rate và MTTR trích từ hệ thống quản lý sự cố (PagerDuty, Opsgenie, hoặc kênh incident trên Slack/Telegram). Nhiều đội dùng công cụ như Four Keys (mã nguồn mở của Google), LinearB, hay Sleuth để tự động hóa.

Bước 4 — Nhìn xu hướng, không nhìn con số tuyệt đối. Đừng ám ảnh chuyện đội bạn có đạt "Elite" hay không. Điều quan trọng là: tháng này so với tháng trước, chỉ số đang tốt lên hay xấu đi? DORA là công cụ để thấy hướng đi, không phải để chấm điểm.

Bước 5 — Đưa cả bốn chỉ số vào một cuộc trò chuyện, luôn xét theo cặp. Mỗi tháng, dành 30 phút trong retro để cả đội cùng nhìn dashboard. Luôn xét tốc độ đi kèm ổn định: nếu deployment frequency tăng nhưng change failure rate cũng tăng vọt, đó là dấu hiệu bạn đang hy sinh chất lượng. Sự cân bằng bốn chỉ số mới là bức tranh thật.

Bước 6 — Biến insight thành một hành động cụ thể mỗi kỳ. Đừng chỉ nhìn số rồi thôi. Mỗi tháng, chọn một nút thắt lớn nhất và một hành động cải thiện. Ví dụ: "lead time bị kẹt ở khâu review → tháng này thử quy ước review trong 24h". Đo lại tháng sau xem có tác dụng không.

Lỗi thường gặp & mẹo

Lỗi 1 — Dùng DORA để đánh giá cá nhân. Đã nói ở trên nhưng phải nhắc lại vì đây là sai lầm phá hủy niềm tin nhanh nhất. Ngay khi đội ngờ rằng con số này ảnh hưởng đến lương thưởng hay đánh giá của họ, họ sẽ chơi trò với con số. DORA là gương soi quy trình, chấm hết.

Lỗi 2 — Chỉ đo tốc độ, bỏ quên ổn định. Nhiều đội hào hứng khoe deployment frequency mà lờ đi change failure rate. Điều này nguy hiểm vì bạn có thể đang deploy nhanh vào... một cái hố. Luôn xét bốn chỉ số như một bộ.

Lỗi 3 — Coi "Elite" là đích đến bắt buộc. Một đội làm hệ thống nội bộ ít người dùng không nhất thiết phải deploy nhiều lần mỗi ngày. Bối cảnh khác nhau thì mục tiêu khác nhau. Đừng ép đội mình chạy theo con số của Google hay Netflix một cách máy móc.

Lỗi 4 — Đo quá nhiều chỉ số ngay từ đầu. Có Tech Lead vừa nghe DORA đã muốn ghép thêm 15 metric khác vào dashboard. Kết quả là không ai nhìn cả. Sức mạnh của DORA nằm ở chỗ nó chỉ có bốn. Hãy làm chủ bốn chỉ số này trước.

Mẹo 1 — Mổ xẻ lead time thành các chặng như ví dụ 3. Con số tổng ít giá trị; việc chia nhỏ mới lộ ra nút thắt.

Mẹo 2 — Với đội Việt Nam làm việc theo giờ hành chính, hãy loại giờ ngoài giờ khi tính MTTR và lead time nếu đội không trực 24/7, để con số phản ánh đúng thực tế vận hành thay vì bị méo bởi những đêm cuối tuần.

Mẹo 3 — Đầu tư vào feature flags là cách nhanh nhất để vừa tăng deployment frequency vừa giảm change failure rate: bạn tách việc deploy code khỏi việc bật tính năng, deploy được an toàn và thường xuyên.

Bài tập thực hành

  • Đo cơ sở (baseline). Với đội bạn (hoặc dự án bạn đang tham gia), lập một Google Sheet và ghi lại thủ công trong 2 tuần: mỗi lần deploy production, thời điểm commit sớm nhất của lần deploy đó, và mỗi sự cố cùng thời gian phục hồi. Cuối 2 tuần, tính cả bốn chỉ số DORA. Đội bạn đang ở mức nào theo bảng phân loại?
  • Tìm nút thắt lead time. Chọn 5 pull request gần nhất đã lên production. Với mỗi PR, ghi lại thời gian ở từng chặng: commit → mở PR → review đầu tiên → merge → deploy. Chặng nào chiếm nhiều thời gian nhất? Đó chính là nơi cần cải thiện.
  • Thiết kế một thử nghiệm. Dựa trên nút thắt tìm được ở bài 2, đề xuất một thay đổi quy trình cụ thể (ví dụ: quy ước review 24h, tự động hóa một bước test, phân quyền phê duyệt). Viết ra giả thuyết: "Nếu làm X, chỉ số Y sẽ cải thiện vì Z". Đây là tư duy dùng DORA đúng cách.
  • Phản biện. Viết một đoạn ngắn giải thích cho một quản lý cấp trên đang muốn dùng deployment frequency làm KPI cá nhân của từng kỹ sư: tại sao đó là ý tưởng tồi và bạn đề xuất dùng DORA thế nào thay thế?

Tóm tắt

DORA metrics là bốn chỉ số cô đọng, được đúc kết từ hơn một thập kỷ nghiên cứu, giúp bạn đo lường sức khỏe quy trình giao hàng phần mềm của cả đội. Hai chỉ số tốc độ — Deployment Frequency và Lead Time for Changes — cho biết đội đưa giá trị ra thị trường nhanh đến đâu. Hai chỉ số ổn định — Change Failure Rate và Mean Time to Restore — cho biết tốc độ đó có bền vững không. Sự cân bằng giữa hai nhóm là điều làm nên giá trị của bộ chỉ số này.

Ba điều cần khắc cốt ghi tâm khi bạn dẫn dắt kỹ thuật. Thứ nhất, DORA đo hệ thống và quy trình, tuyệt đối không đo cá nhân — biến nó thành KPI cá nhân là cách nhanh nhất phá hủy giá trị của nó. Thứ hai, hãy nhìn xu hướng theo thời gian thay vì ám ảnh với nhãn "Elite"; bối cảnh của đội bạn quyết định mục tiêu hợp lý. Thứ ba, giá trị thật của DORA không nằm ở việc biết con số, mà ở việc dùng con số để tìm nút thắt và thử nghiệm cải thiện quy trình mỗi kỳ. Bắt đầu đơn giản, đo thủ công, và để dữ liệu dẫn dắt những cuộc trò chuyện đúng đắn — đó là cách một Tech Lead trưởng thành biến "cảm thấy đội đang ổn" thành "biết đội đang ở đâu và cần làm gì tiếp theo".