Một người quản lý dự án đứng nhìn bức tường dán đầy giấy ghi chú các yêu cầu công việc

Scope creep tính ra tiền: một yêu cầu phát sinh ngốn bao nhiêu

Quy từng yêu cầu phát sinh ra giờ công và tiền là cách để biết scope creep ngốn bao nhiêu biên lợi nhuận và có căn cứ thu thêm từ khách.

Chiều thứ Sáu, khách nhắn cho trưởng dự án: “Em thêm giúp anh một màn hình báo cáo doanh thu theo khu vực nhé, chắc nhanh thôi.” Trưởng dự án hỏi lập trình viên, lập trình viên bảo khoảng hai ngày. Trưởng dự án trả lời khách: “Dạ được anh.” Không ai ghi lại, không ai báo giá, và hai tuần sau không ai nhớ việc đó đã tốn bao nhiêu.

Bài vì sao dự án phần mềm lãi trên báo giá nhưng lỗ khi bàn giao đã xếp scope creep là nguồn rò rỉ biên lợi nhuận lớn thứ hai trong sáu nguồn, và là nguồn duy nhất công ty có thể thu lại tiền. Bài này đi sâu vào đúng nguồn đó. Bài tính xem một yêu cầu “chắc nhanh thôi” thật ra tốn bao nhiêu, nhiều yêu cầu như vậy cộng lại làm dự án mất gì, ai gánh phần đó, và làm sao dùng dữ liệu giờ công để thu thêm mà không làm căng quan hệ.

Bài viết cho bên nhận việc, tức công ty phần mềm, công ty outsourcing và agency, dành cho người ký hợp đồng và người đứng giữa khách với đội kỹ thuật.

Scope creep là gì và khác yêu cầu thay đổi chỗ nào

Scope creep (phạm vi phình dần) là những việc nằm ngoài phạm vi hợp đồng mà đội vẫn làm, không qua một quyết định nào, và không thu thêm tiền. Tiếng Việt chưa có từ dịch thống nhất cho khái niệm này, nên phần lớn người trong nghề vẫn gọi thẳng là scope creep.

Cùng một việc ngoài phạm vi có thể đi theo con đường khác. Khi nó được ước tính giờ, có giá, có người duyệt ở cả hai phía, nó trở thành một yêu cầu thay đổi (change request, còn gọi là scope change). Màn hình báo cáo trong câu chuyện mở bài có thể là scope creep hoặc là yêu cầu thay đổi. Bản chất việc giống hệt nhau, chỗ khác nằm ở quy trình và ở việc công ty có được trả tiền hay không.

Hai khái niệm lân cận hay đi cùng. Scope gap (khoảng lệch phạm vi) là khi khách hiểu một đằng còn tài liệu ghi một nẻo, thường vì đặc tả mơ hồ hoặc trao đổi không kỹ. Scope creep hay bắt đầu từ đây, vì khi không ai chắc việc đó trong hay ngoài phạm vi thì đội thường chọn làm cho yên chuyện. Gold plating (đội tự làm thêm khi không ai yêu cầu) cũng tốn giờ công, nhưng không đòi khách trả được, nên phải chặn từ trong đội.

Trên mạng có vài tỷ lệ phần trăm về số dự án gặp scope creep. Bài này không dùng chúng vì chưa kiểm được nguồn gốc. Con số có ích cho bạn là số giờ ngoài phạm vi của chính các dự án công ty bạn, và phần sau sẽ chỉ cách đo.

Vì sao yêu cầu “chắc nhanh thôi” tốn gấp mấy lần

Quay lại màn hình báo cáo. Lập trình viên nói hai ngày, tức 16 giờ của một nhân sự cấp trung (middle). Người nhận lời nghĩ theo lương: middle lương 28 triệu một tháng, chia 176 giờ làm là khoảng 159.100 đồng một giờ, 16 giờ là khoảng 2,5 triệu. Một khoản nhỏ, đổi lấy thiện cảm của khách, nghe hợp lý (*).

Chi phí thật của việc đó là khoảng 15,4 triệu, gấp khoảng sáu lần. Khoảng chênh đến từ ba lớp, mỗi lớp đều quen thuộc nhưng hiếm khi được cộng lại (*).

Lớp thứ nhất: giờ bị quên

Hai ngày của lập trình viên là thời gian viết mã. Một yêu cầu, dù nhỏ, còn đi qua nhiều việc khác trước khi tới tay khách:

ViệcSenior (giờ)Middle (giờ)
Phân tích và chốt yêu cầu với khách3
Lập trình20
Rà mã2
Kiểm thử và kiểm thử hồi quy8
Sửa lỗi sau kiểm thử4
Triển khai và họp nghiệm thu3
Tổng832

Từ 16 giờ thành 40 giờ, gấp 2,5 lần. Chỉ riêng lớp này, vẫn tính theo lương chia giờ, con số 2,5 triệu đã thành khoảng 7,1 triệu. Phần lập trình tự nó cũng vượt, vì màn hình mới cần truy vấn dữ liệu theo khu vực mà cơ sở dữ liệu chưa có sẵn. Kiểm thử hồi quy (regression test, kiểm lại các chức năng cũ xem có bị ảnh hưởng không) là phần hay bị bỏ qua nhất, và cũng là phần không được bỏ nếu không muốn một lỗi mới xuất hiện ở màn hình khác. Đáng chú ý là có 8 giờ của nhân sự cấp cao (senior), dù việc được coi là “của middle”: ai đó phải hiểu khách muốn gì, ai đó phải rà mã, ai đó phải đứng ra nghiệm thu (*).

Lớp thứ hai: giá thật của một giờ công

Lương chia giờ làm chỉ là một phần chi phí công ty bỏ ra cho một giờ công. Bộ số trong bài dựng từ lương gross 45 triệu một tháng cho senior và 28 triệu cho middle. Chia thẳng cho giờ làm, senior khoảng 255.700 đồng một giờ, middle khoảng 159.100 đồng. Để so sánh, lương trung vị của lập trình viên back-end có 5 tới 8 năm kinh nghiệm là 39,9 triệu một tháng theo Báo cáo lương IT 2025-2026 của ITviec, nên mức 45 triệu của senior thuộc nửa trên của mặt bằng, chưa phải mức hiếm (*).

Cost rate (đơn giá chi phí của một giờ công) cộng thêm mọi khoản ngoài lương như phụ cấp, thưởng, thiết bị, đào tạo, rồi chia cho số giờ bán được, tức số giờ còn lại sau khi trừ phép, lễ, những ngày chờ dự án và giờ họp nội bộ. Với bộ mẫu, tổng chi phí một năm của senior là 622 triệu, của middle là 401 triệu, chia cho 1.389 giờ bán được, ra cost rate 447.727 đồng một giờ cho senior và 288.647 đồng cho middle, chưa gồm bảo hiểm bắt buộc (*).

Con số này rất dễ bị đọc nhầm thành lương theo giờ. Thật ra nó là số tiền mỗi giờ có khách trả tiền phải gánh để công ty không lỗ trên chính người đó. Cách dựng từng bước, và cách thay bằng lương của công ty bạn, nằm trong mẫu Excel tính cost rate theo giờ cho từng nhân sự.

Lớp thứ ba: chi phí gián tiếp đi kèm mọi giờ

Văn phòng, kế toán, bán hàng, ban giám đốc không khai giờ vào dự án nào, nhưng vẫn phải có người trả lương. Bộ mẫu phân bổ phần này về dự án theo tỷ lệ 20% trên chi phí nhân công. Giờ nào đội bỏ vào yêu cầu phát sinh thì giờ đó kéo theo phần gián tiếp của nó.

Cộng ba lớp, màn hình báo cáo có ba con số. Chi phí nhân công theo cost rate là 12,8 triệu. Cộng 20% gián tiếp thành chi phí đầy đủ 15,4 triệu, gấp khoảng sáu lần con số 2,5 triệu trong đầu người nhận lời. Và giá nên thu, tính theo giá sàn ở phần sau, là 20,5 triệu (*).

Biểu đồ bậc thang chi phí thật của một yêu cầu phát sinh: người nhận lời nghĩ 2,5 triệu, đủ 40 giờ tính theo lương là 7,1 triệu, tính theo cost rate là 12,8 triệu, cộng 20% gián tiếp thành 15,4 triệu, gấp khoảng 6 lần; giá nên thu 20,5 triệu

Cách tính chi phí và giá của một yêu cầu phát sinh

Phép tính có ba bước, và làm được trong mười phút nếu công ty đã có cost rate.

Bước một, ước lượng giờ theo cấp bậc cho đủ sáu việc ở bảng trên, không chỉ giờ lập trình. Người ước lượng nên là trưởng nhóm, vì người sẽ viết mã có xu hướng chỉ nhìn phần việc của mình.

Bước hai, nhân số giờ với cost rate của từng cấp bậc, cộng tỷ lệ gián tiếp, ra chi phí đầy đủ. Đây là con số dùng để biết yêu cầu đó ăn bao nhiêu vào biên nếu không thu tiền.

Bước ba, nhân số giờ với giá sàn theo cấp bậc, ra giá nên thu. Giá sàn là đơn giá thấp nhất cho một giờ bán ra, đã gồm cost rate, phần gián tiếp và biên lợi nhuận mục tiêu. Với bộ mẫu và biên mục tiêu 25%, giá sàn của senior là 716.363 đồng một giờ và của middle là 461.835 đồng. Màn hình báo cáo có giá 8 giờ nhân 716.363 cộng 32 giờ nhân 461.835, tổng 20,5 triệu. Cách tính giá sàn từ cost rate nằm ở bài cách tính giá dự án phần mềm (*).

Nếu yêu cầu làm dời mốc bàn giao, ghi luôn số ngày dời. Dự án kéo dài thì gánh thêm chi phí gián tiếp theo cơ chế đã phân tích ở bài về sáu nguồn rò rỉ, và khách cần biết điều đó trước khi quyết.

Một mẹo tiết kiệm thời gian là giữ một bảng giờ chuẩn cho những loại yêu cầu hay gặp: thêm một màn hình, thêm trường vào biểu mẫu, đổi luồng duyệt, thêm thông báo. Sau năm, sáu dự án, bảng đó cho bạn con số ban đầu trong vài phút, và trưởng dự án có thể trả lời khách ngay trong cuộc gọi rằng việc đó khoảng bao nhiêu giờ.

Năm yêu cầu nhỏ và khoảng cách giữa lỗ và lãi

Bài về sáu nguồn rò rỉ dùng một dự án mẫu 10 man month (mười tháng công của một người), giá bán 900 triệu, biên kỳ vọng 24,8%, kết thúc lỗ 55,3 triệu. Dòng scope creep trong bảng đối chiếu của dự án đó ghi 40 giờ senior và 120 giờ middle, tổng 52,5 triệu nhân công. Tách dòng đó ra, nó gồm năm yêu cầu mà mỗi yêu cầu, lúc được nhận lời, đều có vẻ nhỏ (*).

MãYêu cầuSenior (giờ)Middle (giờ)Chi phí đầy đủ (triệu đồng)Giá theo giá sàn (triệu đồng)
R1Màn hình báo cáo doanh thu theo khu vực83215,420,5
R2Thêm trường vào biểu mẫu và xuất Excel4167,710,3
R3Đổi luồng duyệt từ hai cấp thành ba cấp163621,128,1
R4Gửi email thông báo khi đơn đổi trạng thái82011,215,0
R5Đổi giao diện theo bộ nhận diện mới4167,710,3
Tổng4012063,184,1

Cột giá đã làm tròn tới 0,1 triệu nên cộng tay ra 84,2. Tổng 84,1 tính từ số chưa làm tròn. Chi phí đầy đủ 63,1 triệu gồm 52,5 triệu nhân công và 10,5 triệu gián tiếp đi kèm (*).

Nếu năm yêu cầu này được thu theo giá sàn, công ty có thêm 84,1 triệu doanh thu, trừ 63,1 triệu chi phí, còn 21,0 triệu lãi, đúng biên 25% như mọi giờ bán khác. Dự án mẫu khi đó có doanh thu 984,1 triệu trên chi phí quyết toán 955,3 triệu, tức lãi 28,8 triệu, biên 2,9%, thay vì lỗ 55,3 triệu. Năm lần “dạ được anh” là toàn bộ khoảng cách giữa một dự án lỗ và một dự án có lãi (*).

Hai kết quả của cùng một dự án phần mềm: không thu năm yêu cầu phát sinh thì lỗ 55,3 triệu, thu theo giá sàn thêm 84,1 triệu thì lãi 28,8 triệu

Đặt theo một cách khác: mỗi yêu cầu trong bảng tốn trung bình 12,6 triệu chi phí đầy đủ. Khoảng 18 yêu cầu cỡ này, không thu tiền, là đủ xóa sạch 223,6 triệu biên kỳ vọng của dự án, ngay cả khi mọi thứ khác đúng như báo giá. Với một dự án sáu tháng, 18 yêu cầu nghĩa là mỗi tuần chưa tới một yêu cầu (*).

Trong cấu trúc ba tầng biên của bài báo cáo lãi lỗ từng dự án, giờ ngoài phạm vi ăn vào tầng một vì là nhân công trực tiếp, còn phần gián tiếp đi kèm ăn vào tầng hai.

Ai gánh chi phí phát sinh, tùy mô hình hợp đồng

Câu hỏi “ai trả tiền cho việc ngoài phạm vi” có câu trả lời khác nhau tùy hợp đồng. Trên giấy, nhiều mô hình đẩy phần đó về phía khách. Trên thực tế, bên gánh thường là bên không giữ được bằng chứng giờ công.

Mô hình hợp đồngAi gánh giờ ngoài phạm viĐiều kiện để công ty không phải gánh
Fixed price (giá trọn gói)Công ty nhận việc, nếu không có yêu cầu thay đổi được duyệtHợp đồng có điều khoản thay đổi phạm vi và đơn giá áp dụng cho phần phát sinh
Time and material (tính theo giờ thực tế)Khách, trên giấyGiờ được ghi đúng việc và khách duyệt; không có nhật ký thì khách có thể từ chối phần giờ đó khi đối chiếu hóa đơn
Dedicated team (thuê đội riêng)Khách trả tiền đội, nhưng việc phát sinh đẩy lùi các việc đã hứaThống nhất thứ tự ưu tiên mỗi khi thêm việc, để trễ hạn không bị tính là lỗi của đội
Retainer (phí cố định theo tháng)Công ty, khi giờ vượt mức cam kếtTheo dõi giờ thực và đơn giá thực nhận mỗi tháng

Với fixed price, scope creep đi thẳng vào biên của công ty. Với time and material, rủi ro nằm ở khâu đối chiếu: giờ đã làm nhưng không có dấu vết cho thấy khách đã yêu cầu thì rất khó đưa vào hóa đơn. Với retainer của agency, scope creep diễn ra theo tháng, và bài quản lý chi phí dự án cho agency có ví dụ một retainer 20 giờ cam kết bị kéo lên 45 giờ, làm đơn giá thực nhận rơi xuống dưới giá sàn (*). So sánh đầy đủ các mô hình hợp đồng sẽ có bài riêng.

Quy trình yêu cầu thay đổi đủ gọn để đội chịu làm

Quy trình nặng quá thì đội sẽ bỏ qua, và scope creep quay lại qua đúng khe đó. Ba thứ dưới đây là mức tối thiểu, đủ để có số liệu mà không làm chậm dự án.

Nhật ký yêu cầu thay đổi. Một bảng, mỗi yêu cầu một dòng, với các cột:

CộtGhi gì
Mã và ngàyR1, ngày khách yêu cầu
Người yêu cầuTên và vai trò phía khách
Mô tảMột hai câu, đủ để người khác hiểu
Trong hay ngoài phạm viKèm căn cứ: mục nào trong hợp đồng hoặc tài liệu đặc tả
Giờ ước tínhTheo cấp bậc, đủ sáu việc
Giá và ảnh hưởng tiến độTheo giá sàn; số ngày dời mốc nếu có
Người duyệtMột người phía công ty, một người phía khách
Quyết địnhThu thêm, đổi phạm vi, dời giai đoạn sau, hoặc miễn phí
Giờ thựcĐiền khi xong, để so với giờ ước tính

Người quyết định rõ ràng. Lập trình viên và trưởng nhóm không tự nhận việc ngoài phạm vi, kể cả việc nhỏ. Một cách chia hay dùng là: việc dưới nửa ngày thì trưởng dự án tự quyết nhưng vẫn ghi nhật ký, việc lớn hơn thì cần người phụ trách khách hàng hoặc giám đốc duyệt. Ngưỡng nửa ngày chỉ là gợi ý, mỗi công ty tự đặt theo cỡ dự án của mình.

Nhãn giờ ngoài phạm vi. Trong bảng chấm công, giờ bỏ vào yêu cầu phát sinh được gắn nhãn “ngoài phạm vi” kèm mã yêu cầu. Không có nhãn, giờ đó trộn vào giờ phát triển và biến mất khỏi mọi báo cáo. Mẫu chấm công theo dự án của CostDesk đã có sẵn cột loại giờ cho việc này.

Thương lượng thu thêm bằng dữ liệu giờ

Có nhật ký và có giờ, bạn có bốn lựa chọn với mỗi yêu cầu, thay vì chỉ có hai lựa chọn là làm miễn phí hoặc từ chối.

  1. Thu thêm theo giá đã tính. Gửi khách một trang gồm mô tả, số giờ theo cấp bậc, giá và ảnh hưởng tiến độ. Khách quyết trước khi đội bắt tay làm.
  2. Đổi phạm vi. Làm việc mới, bỏ một hạng mục chưa làm có số giờ tương đương. Lựa chọn này hợp với khách không có thêm ngân sách nhưng thật sự cần việc mới hơn việc cũ.
  3. Dời sang giai đoạn sau. Ghi yêu cầu thành hạng mục của hợp đồng tiếp theo, kèm số giờ đã ước tính. Dự án hiện tại giữ đúng mốc, và giai đoạn hai có sẵn một danh sách việc có giá.
  4. Làm miễn phí nhưng ghi thành khoản giảm giá có số. Trên biên bản gửi khách ghi rõ: yêu cầu R2, 20 giờ, trị giá 10,3 triệu, công ty hỗ trợ không tính phí. Khách thấy giá trị đã nhận, còn công ty thấy khoản đã cho đi trong báo cáo lãi lỗ thay vì để nó chìm vào giờ phát triển (*).

Cách nói với khách quan trọng không kém con số. Câu “đội làm nhiều việc ngoài hợp đồng quá” luôn dẫn tới câu hỏi “nhiều là bao nhiêu”, và không có dữ liệu thì cuộc nói chuyện dừng ở đó. Một bảng năm dòng với giờ và giá của từng yêu cầu thì khó cãi hơn nhiều.

Thời điểm cũng quan trọng. Nói về giá khi yêu cầu vừa đến là chuyện bình thường, khách chuyên nghiệp đã quen với yêu cầu thay đổi có giá. Đưa ra năm yêu cầu cùng lúc khi quyết toán mới là thứ làm căng quan hệ, vì với khách đó là một hóa đơn bất ngờ cho những việc họ tưởng đã xong.

Thấy scope creep khi nó đang xảy ra

Nhật ký và nhãn giờ chỉ có ích khi ai đó xem tổng giờ ngoài phạm vi mỗi tuần. Nếu tuần thứ tám của dự án đã có 60 giờ ngoài phạm vi chưa được duyệt, đó là lúc gọi cho khách, khi họ còn chọn được làm tiếp hay dừng (*).

Excel làm được việc này khi công ty có ít dự án và có một người chịu trách nhiệm ghép nhật ký với bảng chấm công mỗi tuần. Bài quản lý chi phí dự án bằng Excel nói rõ giới hạn của cách đó, và mẫu Excel tính lãi lỗ từng dự án cho phép tách phần giờ ngoài phạm vi ra khỏi phần trong phạm vi. Khi giờ gắn nhãn, cost rate và giá sàn nằm ở cùng một chỗ, như cách CostDesk được dựng, mỗi yêu cầu có ngay chi phí và giá lúc giờ đầu tiên được ghi, và trưởng dự án không phải tự tính lại mỗi lần khách hỏi thêm.

Các mảnh ghép liên quan

Bài này đào sâu một trong sáu nguồn ở bài vì sao dự án phần mềm lãi trên báo giá nhưng lỗ khi bàn giao. Khung tổng thể từ giờ công tới lãi lỗ nằm ở bài quản lý chi phí dự án cho công ty phần mềm. Giá sàn dùng để định giá yêu cầu phát sinh được dựng ở bài cách tính giá dự án phần mềm, và ba tầng biên ở bài báo cáo lãi lỗ từng dự án. Agency có retainer thì đọc thêm bài quản lý chi phí dự án cho agency. File để bắt đầu ngay là bảng chấm công, bảng cost rate và bảng lãi lỗ.

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

Scope creep và yêu cầu thay đổi khác nhau chỗ nào?
Cùng là việc ngoài phạm vi. Yêu cầu thay đổi có ước tính giờ, có giá và có người duyệt ở cả hai phía. Scope creep là khi việc đó được làm mà không qua bước nào trong số đó, và thường không thu được tiền.

Gold plating có tính là scope creep không?
Gold plating là đội tự làm thêm khi khách không yêu cầu, nên nó cũng làm phạm vi phình ra, nhưng không đòi khách trả được. Cách chặn là rà phạm vi ngay trong đội, trước khi việc được làm.

Tính giá một yêu cầu phát sinh thế nào cho nhanh?
Ước lượng giờ theo cấp bậc cho đủ các việc từ phân tích tới nghiệm thu, rồi nhân với giá sàn của từng cấp bậc. Nếu chưa có giá sàn, tính cost rate trên giờ bán được trước, rồi chia cho một trừ biên mục tiêu sau khi cộng gián tiếp.

Yêu cầu nhỏ vài giờ có nên tính tiền không?
Không nhất thiết phải thu, nhưng nên ghi nhật ký. Nhiều yêu cầu vài giờ cộng lại thành vài chục giờ, và khi đã có nhật ký thì bạn có thể gom chúng lại để nói chuyện một lần.

Dự án time and material có bị scope creep không?
Có, ở khâu đối chiếu. Giờ đã làm mà không có bằng chứng khách yêu cầu thì khách có thể từ chối khi duyệt hóa đơn. Nhật ký yêu cầu thay đổi là bằng chứng đó.

Làm sao biết một việc nằm trong hay ngoài phạm vi?
Đối chiếu với hợp đồng và tài liệu đặc tả. Nếu tài liệu không đủ rõ để trả lời, đó là scope gap, và nên chốt với khách bằng văn bản trước khi làm, thay vì làm rồi mới tranh luận.

Khách không đồng ý trả thêm thì làm sao?
Còn ba lựa chọn: đổi phạm vi bằng cách bỏ một hạng mục tương đương, dời yêu cầu sang giai đoạn sau, hoặc làm miễn phí nhưng ghi rõ trị giá trên biên bản. Lựa chọn nào cũng tốt hơn làm miễn phí mà không ai biết.

Nên thương lượng lúc nào?
Khi yêu cầu vừa đến. Lúc đó khách còn chọn được làm hay không làm. Đưa ra lúc quyết toán thì khách chỉ còn chọn trả hay không trả, và cuộc nói chuyện khó hơn nhiều.

Cần ghi những gì để có bằng chứng giờ công?
Nhật ký yêu cầu thay đổi, và trong bảng chấm công, nhãn “ngoài phạm vi” kèm mã yêu cầu cho từng dòng giờ. Hai thứ này ghép lại cho biết mỗi yêu cầu tốn bao nhiêu giờ, của ai, vào ngày nào.

Retainer của agency có scope creep không?
Có, và nó diễn ra theo tháng. Giờ thực vượt giờ cam kết mà phí không đổi thì đơn giá thực nhận giảm. Khi đơn giá đó xuống dưới giá sàn vài tháng liền, cần đàm phán lại phí hoặc siết lại phạm vi, với dữ liệu giờ làm căn cứ.


Để tự kiểm tra, hãy lấy dự án đang chạy của bạn và liệt kê các yêu cầu ngoài phạm vi từ đầu dự án tới nay. Bạn kể được bao nhiêu yêu cầu, và với mỗi yêu cầu, bạn có biết nó đã tốn bao nhiêu giờ không? Nếu câu trả lời là “chắc vài cái, không rõ bao nhiêu giờ”, thì con số trong dòng scope creep của dự án đó vẫn đang tăng mà không ai nhìn thấy.

(*) Tình huống giả định để minh họa

CostDesk Newsletters Đăng ký nhận bản tin miễn phí hàng tuần từ CostDesk
[email protected] Đăng ký