Nền tảng Cơ bản 8 phút đọc

Scope và đánh đổi: iron triangle, MoSCoW, cắt scope

Cách bảo vệ scope khi stakeholder đòi nhiều hơn: iron triangle, ưu tiên MoSCoW, và cuộc trò chuyện cắt scope ship đúng hạn không nói dối về cái có trong đó.

Mục lục
  1. Khi nào scope cần được bảo vệ một cách rõ ràng?
  2. Cái giá khi coi scope là cố định là gì?
  3. Iron triangle trong thực tế là gì?
  4. Chạy cuộc trò chuyện MoSCoW như thế nào?
  5. Template MoSCoW cụ thể là gì?
  6. Scale lên đa team ra sao?
  7. Khung này có thể tạo ra những lỗi nào?
  8. Khi nào kỷ luật scope là quá liều?
  9. Đi tiếp từ đây như thế nào?

Cuộc trò chuyện mà tech lead né lâu nhất chính là cuộc trò chuyện về scope. Team đã căng cứng, stakeholder lại đòi thêm một tính năng nữa, và việc nói "không" nghe có vẻ chính trị. Chương này giới thiệu hai khung làm việc - iron triangle và MoSCoW - giúp biến cuộc trò chuyện ấy trở về kỹ thuật chứ không phải cảm xúc, kèm theo template để giữ thoả thuận lâu bền.

Khi nào scope cần được bảo vệ một cách rõ ràng?

Có ba thời điểm hay gặp.

Yêu cầu mới xuất hiện ở giữa dự án. Câu nói "có thể tiện thể thêm..." - chín trên mười lần là khoảnh khắc dự án bắt đầu trượt nếu không ai gọi tên đánh đổi.

Có deadline cố định và đến từ bên ngoài. Một chiến dịch marketing, một ngày quy định, hay một cam kết với khách hàng. Khi đó scope phải linh hoạt vì thời gian thì không.

Chất lượng đang bào mòn trong im lặng. Test coverage giảm dần, nợ kỹ thuật tăng lên, on-call bị page nhiều hơn - đây thực ra là những lần cắt scope mà bạn quên gọi tên.

Nếu dự án có thể linh hoạt mọi mặt, kỷ luật về scope sẽ ít quan trọng hơn. Nhưng phần lớn dự án thì không như vậy.

Cái giá khi coi scope là cố định là gì?

Có ba kiểu lỗi thường gặp.

Hoàn thành kiểu hành quân tử thần. Team làm cuối tuần để giữ nguyên scope ban đầu vào ngày ban đầu. Chất lượng đi xuống một cách vô hình, và tỉ lệ nghỉ việc bám theo sau.

Cắt chất lượng trong im lặng. Bỏ test, nén code review, hoãn handover sang ops. Lúc launch trông như thành công, đến postmortem 6 tháng sau mới lộ ra.

Mất niềm tin với stakeholder. Câu nói "chúng tôi kịp ngày" được phát ra trong khi cả team biết một nửa scope ban đầu đã ship mà không có tài liệu. Sớm muộn stakeholder cũng phát hiện. Niềm tin sẽ tốn nhiều năm để xây lại.

Iron triangle trong thực tế là gì?

flowchart TB
    Time[Thời gian<br/>deadline cố định] -.đánh đổi.- Scope[Scope<br/>tính năng có]
    Scope -.đánh đổi.- Quality[Chất lượng<br/>test, doc, polish]
    Quality -.đánh đổi.- Time
    Note[Cố hai -<br/>cái thứ ba trôi]
    style Note fill:#fffbe6,stroke:#d97706

Có ba góc, hãy chọn cố hai trong số đó. Điểm cốt yếu không phải là bạn có thể ship được mọi thứ chỉ bằng cách hy sinh góc còn lại - mà là mọi quyết định trong dự án đều ngầm là một đánh đổi giữa ba góc này. Iron triangle giúp biến cái ngầm đó thành rõ ràng.

Trong thực tế, các dự án phần mềm thường cố thời gian và scope, và đòn bẩy thật sự co giãn lại là chất lượng. Khi bạn nghe câu "chúng ta phải đẩy lên", thực chất nghĩa là chất lượng đang bị cắt. Hãy biến nó thành một lựa chọn có ý thức, chứ đừng để nó là mặc định ngầm.

Chạy cuộc trò chuyện MoSCoW như thế nào?

Có ba bước, mất khoảng 60 phút cho một dự án có 30-50 item ứng cử viên.

Bước 1: liệt kê tất cả. Mọi tính năng được yêu cầu, mọi item được đề xuất, không lọc gì. PM gõ lại trong khi team brainstorm.

Bước 2: từng stakeholder bỏ phiếu M/S/C/W. Bỏ phiếu riêng tư trước, sau đó công khai cùng lúc. Những chỗ xung đột làm lộ ra nơi các stakeholder không đồng thuận về ưu tiên - đây là dữ liệu quý giá nhất trong phòng họp.

Bước 3: ép theo budget. Các item Must phải vừa với timeline. Nếu Must thổi bay deadline, đây chính là lúc cần đàm phán - chứ không phải chờ đến ba tuần trước launch. Hãy chuyển item xuống bậc (M→S, S→C, C→W) cho đến khi phép toán ăn khớp.

Cột Won't là cột mạnh nhất. Stakeholder luôn muốn giữ mọi thứ trong scope; danh sách Won't tài liệu hoá lại những gì họ đã đồng ý hoãn. Khi họ đòi sau này, bạn có biên bản trong tay.

Template MoSCoW cụ thể là gì?

Một bảng markdown cho mỗi dự án, được cập nhật vào mỗi kickoff và mỗi lần ưu tiên lại:

# MoSCoW — {{ Tên dự án }} — Cập nhật 2026-06-05

## Must (không có thì không ship được)

| ID | Tính năng | Owner | Ước lượng | Note |
|----|-----------|-------|-----------|------|
| M1 | User đăng ký bằng email + password | TL | 1 tuần | Auth provider tích hợp |
| M2 | User mua sản phẩm một lần | TL | 2 tuần | Stripe; idempotent |
| M3 | Admin refund trong 30 ngày | TL | 1 tuần | Tái dùng Stripe refund API |
| M4 | Email xác nhận đơn | EM | 0.5 tuần | Mailgun |
| M5 | Xoá data tuân thủ GDPR | TL | 1 tuần | Yêu cầu pháp lý |

Tổng Must: 5.5 tuần. Available: 6 tuần. Đệm: 0.5 tuần.

## Should (giá trị cao, đau khi bỏ)

| ID | Tính năng | Ước lượng | Chi phí khi hoãn |
|----|-----------|-----------|------------------|
| S1 | Lưu phương thức thanh toán | 2 tuần | Khách phải nhập lại thẻ mỗi lần |
| S2 | Receipt đa ngôn ngữ | 1 tuần | Chỉ tiếng Anh lúc launch |

## Could (có thì hay)

| ID | Tính năng | Ước lượng |
|----|-----------|-----------|
| C1 | Dark mode cho admin | 0.5 tuần |
| C2 | Tool refund hàng loạt | 1 tuần |

## Won't (rõ ràng hoãn vòng này)

| ID | Tính năng | Hoãn đến | Lý do |
|----|-----------|----------|-------|
| W1 | Subscription billing | Q4 2026 | Domain model khác |
| W2 | Đa tiền tệ | 2027 | Cần tích hợp FX provider |
| W3 | Template email tuỳ chỉnh | TBD | Marketing chưa yêu cầu |

Tổng hàng Must xấp xỉ với thời gian sẵn có chính là kết quả của cuộc đàm phán. Sponsor sẽ thích một dự án giao đủ mọi Must đúng hạn ngay cả khi Should và Could chỉ ship được một phần. Ngược lại, họ ghét dự án ship được mọi thứ nhưng cái nào cũng dở dang.

Scale lên đa team ra sao?

Có ba thay đổi:

flowchart TB
    Roadmap[Roadmap quý<br/>theme M/S/C/W] --> ProjA[Scope dự án A<br/>MoSCoW riêng]
    Roadmap --> ProjB[Scope dự án B<br/>MoSCoW riêng]
    Roadmap --> ProjC[Scope dự án C<br/>MoSCoW riêng]
    ProjA --> SprintA[Backlog sprint]
    ProjB --> SprintB[Backlog sprint]
    ProjC --> SprintC[Backlog sprint]

Ở mức tổ chức, MoSCoW gắn với theme chứ không phải tính năng. "Việc về hiệu năng" là một theme Must; các dự án bên dưới sẽ chạy MoSCoW riêng trong phần budget được giao của mình. Chương planning sẽ nói về hình dạng của roadmap. Còn backlog sprint (sprint execution) thì quá chi tiết để áp MoSCoW; chỗ đó dùng story point.

Khung này có thể tạo ra những lỗi nào?

Khi nào kỷ luật scope là quá liều?

Có hai trường hợp.

Việc thật sự mang tính khám phá. Một spike kéo dài 2 tuần để học xem một ý tưởng có khả thi không thì không có scope nào để bảo vệ. Kết quả của spike chính là deliverable; MoSCoW không áp dụng được.

Team chạy continuous-flow. Loại team luôn làm việc quan trọng nhất tiếp theo (kiểu Kanban, không có sprint). Họ ưu tiên theo từng item qua chương Kanban; MoSCoW chỉ xuất hiện ở mức roadmap hàng quý.

Dưới mức dự án, kỷ luật về scope ít quan trọng hơn so với việc ship nhanh. Kỷ luật chỉ thật sự đáng cân nhắc khi có một ngày bắt buộc phải kịp.

Đi tiếp từ đây như thế nào?

Bạn đã có đủ nền tảng: vai trò, ước lượng, rủi ro, comms, và scope. Chương tiếp theo: Scrum cơ bản cho engineer - phương pháp đầu tiên biến những nền tảng đó thành một nhịp tuần mà team có thể chạy được.

Câu hỏi thường gặp

Vì sao là iron triangle ba góc, mà không phải bốn góc kèm chi phí?
Vì trong dự án phần mềm, chi phí gần như đã cố định - headcount của team là cái sẵn có, bạn không thể tuyển thêm ai chỉ để giúp hai tuần cho một sprint. Ba đòn bẩy thực sự còn linh hoạt là thời gian, scope và chất lượng. Thêm chi phí làm góc thứ tư nghe có vẻ chỉn chu nhưng hiếm khi khớp với những gì bạn thật sự đánh đổi được. Cứ giữ ba góc.
MoSCoW là gì và khác thứ tự ưu tiên thông thường ra sao?
MoSCoW chia việc thành bốn nhóm: Must (không có thì không ship được), Should (giá trị cao, bỏ thì đau), Could (có thì hay), Won't (rõ ràng nằm ngoài scope vòng này). Thứ tự ưu tiên xếp 1-N ép bạn vào độ chính xác giả tạo; còn MoSCoW cho phép bạn nói '5 cái này đều là Must' mà không cần bịa ra tie-breaker. Nhóm 'Won't' là nhóm mạnh nhất - nó tài liệu hoá lại những gì stakeholder đã đồng ý hoãn.
Khi nào iron triangle trở nên không trung thực?
Khi chất lượng bị bào mòn một cách vô hình. Team 'bảo vệ scope' bằng cách bỏ test - chất lượng đang đi xuống nhưng không ai gọi tên. Sáu tháng sau, tỉ lệ bug bùng nổ. Phiên bản trung thực phải là: 'chúng ta đang cắt độ phủ test để kịp ngày - đây là chi phí biết trước sẽ phải trả về sau'. Nói rõ như vậy để retrospective còn có cơ hội phục hồi lại chi phí đó.
Đẩy lùi scope creep mà không nghe có vẻ tiêu cực - làm sao?
Hãy đóng khung mỗi yêu cầu mới như một đánh đổi: 'Thêm tính năng X sẽ tốn 2 tuần. Vậy bạn muốn hoãn Must nào để có chỗ?' Nếu họ không chọn được, câu trả lời là không - và chính họ là người đưa ra quyết định đó, không phải bạn. Chương stakeholder sẽ chỉ cách đóng khung. Luôn trình bày chi phí bằng đơn vị mà họ hiểu (ngày công, đô la, chứ không phải story point).