Màn hình máy tính hiển thị mã nguồn phần mềm

Vì sao dự án phần mềm lãi trên báo giá nhưng lỗ khi bàn giao

Bóc tách sáu nguồn rò rỉ biên lợi nhuận là cách để biết dự án phần mềm mất tiền ở đâu khi lãi trên báo giá thành lỗ lúc bàn giao.

Báo giá được duyệt với biên lợi nhuận 25%. Sáu tháng sau, bảng quyết toán dự án ghi lỗ. Cuộc họp kết thúc bằng câu quen thuộc: dự án khó hơn dự kiến. Ai cũng gật, rồi ai cũng về, và báo giá tiếp theo lại được duyệt với biên 25%.

Hai con số đó không mâu thuẫn nhau. Chúng đo hai thứ khác nhau. Biên trên báo giá là biên kỳ vọng, tính từ số giờ mà người lập báo giá tin rằng dự án sẽ tốn. Biên khi bàn giao tính từ số giờ dự án thật sự tốn, cộng những khoản mà báo giá chưa từng có dòng nào cho chúng. Khoảng cách giữa hai con số gồm sáu dòng chảy nhỏ, mỗi dòng có tên, có cách đo, và có mức độ khác nhau.

Bài này viết cho bên nhận việc, tức công ty phần mềm, công ty outsourcing và agency kỹ thuật, dành cho người muốn quy nguyên nhân ra tiền thay vì dừng ở chuyện kể. Nó đi qua sáu nguồn rò rỉ biên theo thứ tự số tiền, đặt chúng vào một bảng đối chiếu báo giá với quyết toán của một dự án mẫu, rồi chỉ cách đo từng nguồn bằng dữ liệu giờ công.

Biên trên báo giá được tính từ gì

Một báo giá có căn cứ đi từ giờ ước lượng cho từng hạng mục, nhân với cost rate (đơn giá chi phí của một giờ công) của cấp bậc sẽ làm hạng mục đó, cộng phần chi phí gián tiếp, rồi so với giá bán để ra biên. Cách dựng từng bước nằm ở bài cách tính giá dự án phần mềm, và cost rate lấy từ bảng tính cost rate theo giờ.

Dự án mẫu của bài đó sẽ được dùng lại ở đây. Ước lượng 10 man month theo quy ước 160 giờ, tức 1.600 giờ, gồm 640 giờ của nhân sự cấp cao (senior) và 960 giờ của nhân sự cấp trung (middle). Cost rate trên giờ bán được là 447.727 đồng cho senior và 288.647 đồng cho middle, chưa gồm bảo hiểm bắt buộc. Chi phí gián tiếp 20% trên nhân công. Chi phí kỳ vọng của dự án là 676,4 triệu. Giá bán 900 triệu, biên kỳ vọng 223,6 triệu, tương đương 24,8% (*).

Mọi con số trong báo giá đó là giả định về tương lai, từ số giờ, phạm vi, tới việc khách sẽ phản hồi đúng hạn. Dự án là quá trình từng giả định bị kiểm chứng, và phần lớn chúng bị kiểm chứng theo hướng tốn thêm.

Sáu nguồn rò rỉ biên, xếp theo mức độ

Sáu nguồn dưới đây xếp theo số tiền chúng lấy đi trong dự án mẫu. Thứ tự ở công ty bạn có thể khác, nhưng danh sách thì hiếm khi thiếu nguồn nào.

Biểu đồ thanh ngang sáu nguồn rò rỉ biên lợi nhuận của một dự án phần mềm, xếp từ lớn tới nhỏ: sai số ước lượng 71,6 triệu, scope creep 52,5 triệu, bảo hành 45 triệu, chi phí ẩn 44,9 triệu, gián tiếp gánh thêm 36 triệu, giờ làm lại 28,9 triệu; báo giá lãi 24,8% thành lỗ 6,1% khi bàn giao

Sai số ước lượng: hạng mục có trong phạm vi nhưng tốn hơn giờ đã báo

Đây là nguồn lớn nhất và cũng là nguồn ít bị đổ lỗi nhất, vì nó không có thủ phạm. Hạng mục tích hợp với hệ thống của khách được ước lượng 320 giờ senior, thực tế tốn 480 giờ, vì tài liệu API của bên kia sai ba chỗ và môi trường thử nghiệm của họ chỉ mở vào giờ hành chính. Không ai làm sai, việc chỉ khó hơn người ước lượng nghĩ.

Trong dự án mẫu, 160 giờ senior vượt trên hạng mục tích hợp là 71,6 triệu. Báo giá không có dòng cho khoản này, vì nếu người lập báo giá biết trước hạng mục sẽ tốn 480 giờ thì họ đã báo 480 giờ (*).

Dấu hiệu nhận ra: một hạng mục vượt giờ trong khi phạm vi của nó không đổi. Cách đo là giờ thực trừ giờ đã báo, tính theo từng hạng mục, và quan trọng hơn là ghi lại hệ số lệch theo loại việc để lần sau ước lượng bằng dữ liệu thay vì bằng cảm giác. Vòng đối chiếu đó sẽ có bài riêng.

Scope creep: việc ngoài phạm vi được làm mà không thu thêm

Scope creep (phạm vi phình dần) là những yêu cầu không có trong hợp đồng nhưng đội vẫn làm. Khách hỏi thêm một màn hình báo cáo “chắc nhanh thôi”. Trưởng nhóm đồng ý vì đang muốn giữ quan hệ. Việc đó tốn ba ngày, không ai ghi lại, không ai thu thêm, và ba tháng sau không ai nhớ.

Dự án mẫu có 40 giờ senior và 120 giờ middle rơi vào các yêu cầu ngoài phạm vi, tổng 52,5 triệu. Đây là nguồn duy nhất trong sáu nguồn mà công ty có thể thu lại tiền, với điều kiện có dữ liệu giờ để đưa lên bàn đàm phán (*).

Có những tỷ lệ phần trăm về scope creep đang lan truyền trên mạng, kiểu “phần lớn dự án gặp scope creep”. Bài này không dùng chúng vì không tìm được nguồn gốc. Con số duy nhất đáng tin là con số của chính công ty bạn, đo bằng giờ gắn nhãn “ngoài phạm vi” trong bảng chấm công, đối chiếu với nhật ký yêu cầu thay đổi. Cách tính chi phí một yêu cầu phát sinh và cách dùng nó để thương lượng sẽ có bài riêng.

Bảo hành: giờ công sau bàn giao không có doanh thu đối ứng

Dự án bàn giao xong vẫn chưa hết tốn. Trong thời gian bảo hành, mỗi lỗi khách báo là giờ công thật của đội, và không có hóa đơn nào đi kèm. Khoản này bị bỏ quên vì lúc lập báo giá nó chưa xảy ra, còn lúc nó xảy ra thì dự án đã đóng sổ và giờ sửa lỗi bị ghi vào dự án mới hoặc vào chi phí chung.

Dự án mẫu trích trước 5% giá bán cho bảo hành, tức 45 triệu. Tỷ lệ này là tỷ lệ của bộ mẫu. Ở công ty bạn, nó phải lấy từ lịch sử lỗi của chính các dự án đã qua, theo loại dự án, vì dự án dùng công nghệ lạ tốn bảo hành hơn dự án quen việc (*).

Cách đo: giờ chấm sau ngày bàn giao mà vẫn gắn mã dự án cũ. Cách xử lý trong báo cáo, trích trước hay ghi thực tế, nằm ở bài báo cáo lãi lỗ từng dự án.

Chi phí ẩn: giờ họp, giờ chờ khách và mua ngoài nhỏ lẻ

Chi phí ẩn là những khoản có thật, tốn thật, nhưng không có tên trong báo giá vì chúng không phải “làm phần mềm”: họp với khách mỗi tuần hai tiếng trong sáu tháng, chờ khách duyệt thiết kế mười ngày trong khi đội đã được bố trí, demo cho ban giám đốc của khách ba lần, rồi license công cụ kiểm thử, máy chủ môi trường thử nghiệm, tiền đi lại gặp khách ở tỉnh.

Dự án mẫu có 60 giờ senior cho họp và chờ khách, tương đương 26,9 triệu, cộng 18 triệu mua ngoài không có trong báo giá, tổng 44,9 triệu. Phần giờ thường do trưởng dự án gánh, và trưởng dự án là người có cost rate cao nhất đội (*).

Cách đo: giờ gắn nhãn họp và chờ trong bảng chấm công, và hóa đơn gắn mã dự án mà không khớp với dòng nào trong báo giá. Danh sách đầy đủ các khoản ẩn của dự án phần mềm sẽ có bài riêng.

Chi phí gián tiếp gánh thêm: dự án kéo dài thì gánh thêm phần công ty

Nguồn này ít người nhìn thấy vì nó không phải một khoản chi mới. Chi phí gián tiếp của công ty, gồm văn phòng, quản lý, kế toán, được phân bổ về dự án theo giờ công. Khi dự án tốn thêm giờ, nó tự động gánh thêm phần chi phí chung, dù công ty không chi thêm đồng nào cho văn phòng. Dự án kéo dài từ sáu tháng thành tám tháng thì gánh thêm hai tháng chi phí chung theo đúng cơ chế đó.

Trong dự án mẫu, phần nhân công vượt của bốn nguồn có giờ (sai số ước lượng, scope creep, chi phí ẩn phần giờ, và giờ làm lại) cộng lại là 179,9 triệu. Với tỷ lệ gián tiếp 20%, dự án gánh thêm 36,0 triệu. Bảng này áp gián tiếp lên phần nhân công vượt, không áp lên mua ngoài và bảo hành, để dễ kiểm (*).

Cách đo: tỷ lệ gián tiếp nhân với phần nhân công vượt. Đây cũng là lý do dự phòng trong báo giá phải là dòng riêng, tách khỏi biên. Khi giờ vượt có đệm, phần gián tiếp gánh thêm cũng có đệm. Ba tiêu chí phân bổ và hệ quả của từng cách chọn nằm ở bài báo cáo lãi lỗ, và sẽ có bài riêng đi sâu hơn.

Giờ làm lại: sửa lỗi và làm lại trước khi bàn giao

Nguồn cuối là giờ sửa lỗi kiểm thử phát hiện, giờ làm lại vì hiểu sai yêu cầu, giờ đập đi xây lại một phần vì thiết kế ban đầu không chịu tải. Khác với bảo hành, những giờ này xảy ra trước bàn giao và thường bị trộn vào giờ phát triển, nên không ai thấy chúng là một khoản riêng.

Dự án mẫu có 100 giờ middle làm lại, tương đương 28,9 triệu. Đây là nguồn nhỏ nhất trong sáu nguồn của dự án này, nhưng nó là nguồn phản ánh chất lượng quy trình rõ nhất, vì cùng một đội thì tỷ lệ giờ làm lại lặp lại khá ổn định qua các dự án (*).

Cách đo: giờ gắn nhãn sửa lỗi hoặc làm lại, chia cho tổng giờ dự án. Có tỷ lệ này của ba dự án là có ngưỡng nội bộ để đưa vào dự phòng của báo giá sau.

Bảng đối chiếu báo giá và quyết toán của một dự án

Đặt sáu nguồn cạnh nhau trên cùng dự án mẫu, bảng dưới đây là thứ CEO nên yêu cầu ở mỗi buổi đóng dự án. Cột cuối là cột quan trọng nhất, vì nó cho biết muốn có con số thì phải ghi dữ liệu gì (*).

Thứ tựNguồn rò rỉGiờ hoặc khoảnTiền (triệu đồng)Cách đo
1Sai số ước lượng160 giờ senior vượt trên hạng mục tích hợp71,6Giờ thực trừ giờ báo, theo hạng mục
2Scope creep không thu thêm40 giờ senior và 120 giờ middle cho yêu cầu ngoài phạm vi52,5Giờ gắn nhãn ngoài phạm vi, đối chiếu nhật ký yêu cầu thay đổi
3Bảo hành sau bàn giaoTrích trước 5% giá bán45,0Giờ sau ngày bàn giao còn gắn mã dự án
4Chi phí ẩn60 giờ senior họp và chờ khách, 18 triệu mua ngoài44,9Giờ gắn nhãn họp, chờ; hóa đơn gắn dự án không khớp báo giá
5Chi phí gián tiếp gánh thêm20% trên 179,9 triệu nhân công vượt36,0Tỷ lệ gián tiếp nhân phần nhân công vượt
6Giờ làm lại100 giờ middle sửa lỗi và làm lại28,9Giờ gắn nhãn sửa lỗi, làm lại
Tổng rò rỉ278,9

Tổng giờ thực của dự án là 2.080, vượt 480 giờ so với 1.600 giờ đã báo, tức 30%. Chi phí quyết toán là 676,4 cộng 278,9, bằng 955,3 triệu. Bán 900 triệu, dự án lỗ 55,3 triệu, biên âm 6,1%. Từ lãi 24,8% trên báo giá xuống lỗ 6,1% khi bàn giao, và không con số nào trong bảng là bất thường với một dự án phần mềm tầm trung (*).

Điểm đáng chú ý là hai nguồn đầu chiếm 124,1 triệu trên 278,9, tức gần một nửa. Nếu chỉ sửa được hai thứ, sửa ước lượng và sửa cách xử lý yêu cầu phát sinh (*).

Sáu nguồn rơi vào ba tầng biên khác nhau

Bài báo cáo lãi lỗ từng dự án dựng báo cáo theo ba tầng biên: biên gộp, biên sau phân bổ chi phí gián tiếp, biên sau bảo hành. Sáu nguồn ở đây không ăn vào cùng một tầng. Sai số ước lượng, scope creep, chi phí ẩn và giờ làm lại ăn vào tầng một, vì chúng là nhân công trực tiếp và mua ngoài. Chi phí gián tiếp gánh thêm ăn vào tầng hai. Bảo hành ăn vào tầng ba.

Dự án DA01 trong bộ mẫu của bài đó có biên gộp dương 11,4% nhưng âm 68 triệu ở tầng ba. Bảng ba tầng cho biết kết quả, còn bảng sáu nguồn cho biết nguyên nhân, và đọc hai bảng cùng nhau thì khoanh được chỗ sửa. Một dự án âm ở tầng một thường có vấn đề ở ước lượng hoặc phạm vi; âm từ tầng hai trở đi thường có vấn đề ở giá bán không đủ gánh phần công ty, hoặc dự án kéo dài quá lâu (*).

Đo từng nguồn bằng dữ liệu nào

Cả sáu nguồn có chung một điều kiện: bảng chấm công phải gắn dự án, gắn hạng mục và gắn nhãn loại giờ. Không có nhãn, sáu nguồn trộn thành một con số “vượt giờ”, và con số đó không sửa được gì vì không biết sửa ở đâu.

Bộ nhãn tối thiểu gồm sáu loại: trong phạm vi, ngoài phạm vi, sửa lỗi hoặc làm lại, họp với khách, chờ khách, bảo hành. Người chấm chọn một nhãn mỗi khi ghi giờ, mất thêm hai giây. Đổi lại, cuối dự án bảng đối chiếu tự có số.

NguồnDữ liệu cầnAi ghi
Sai số ước lượngGiờ báo theo hạng mục, giờ thực theo hạng mụcNgười lập báo giá, đội phát triển
Scope creepGiờ nhãn ngoài phạm vi, nhật ký yêu cầu thay đổiĐội phát triển, trưởng dự án
Bảo hànhGiờ sau bàn giao gắn mã dự án cũĐội hỗ trợ
Chi phí ẩnGiờ nhãn họp và chờ, hóa đơn gắn mã dự ánTrưởng dự án, kế toán
Chi phí gián tiếpTỷ lệ gián tiếp của kỳ, tổng nhân công vượtCFO
Giờ làm lạiGiờ nhãn sửa lỗi, làm lạiĐội phát triển, kiểm thử

Mẫu chấm công theo dự án của CostDesk có sẵn cột dự án và cột loại giờ, đủ để bắt đầu. Phần quy giờ ra tiền và ghép vào ba tầng biên nằm trong mẫu Excel tính lãi lỗ từng dự án. Riêng phần đối chiếu man month đã báo với giờ thực theo hạng mục, để rút hệ số ước lượng cho lần sau, sẽ có bài riêng.

Sửa nguồn nào trước

Nguyên tắc là sửa theo số tiền. Công ty hay bắt đầu từ giờ làm lại vì nó có vẻ là lỗi kỹ thuật dễ chỉ ra, trong khi trong dự án mẫu nó là nguồn nhỏ nhất, còn hai nguồn đầu chiếm gần một nửa (*).

  • Sai số ước lượng. Sau mỗi dự án, ghi hệ số lệch theo loại việc: tích hợp vượt bao nhiêu, giao diện vượt bao nhiêu. Ba dự án là đủ để có định mức riêng thay cho hệ số chung.
  • Scope creep. Mọi yêu cầu ngoài phạm vi phải có giờ ước tính và có người quyết định trước khi đội làm. Giờ đã ghi là căn cứ để thu thêm, hoặc ít nhất để khách biết họ đang nhận thêm.
  • Bảo hành. Trích trước theo lịch sử lỗi của chính công ty. Khi giờ bảo hành thực vượt khoản trích, ghi phần vượt vào dự án cũ để không làm méo dự án mới.
  • Chi phí ẩn. Đưa họp và chờ khách vào báo giá như một hạng mục có giờ. Mọi khoản mua ngoài phải có mã dự án trước khi kế toán thanh toán.
  • Chi phí gián tiếp. Tách dự phòng khỏi biên trong báo giá, để giờ vượt có đệm và phần gián tiếp gánh thêm cũng có đệm.
  • Giờ làm lại. Đo tỷ lệ giờ sửa lỗi trên tổng giờ, đặt ngưỡng nội bộ, và đưa ngưỡng đó vào dự phòng của báo giá.

Thấy lúc bàn giao thì đã muộn

Bảng đối chiếu ở trên chỉ có ích nếu nó được dựng khi dự án đang chạy và cập nhật mỗi tuần. Dựng sau khi đóng dự án thì chỉ còn để rút kinh nghiệm. Dựng từ tháng thứ hai thì còn kịp sửa: thấy giờ ngoài phạm vi đã lên 40 giờ là lúc nói chuyện với khách, thấy hạng mục tích hợp đã tốn 300 giờ trên 320 giờ báo mà mới xong nửa là lúc điều chỉnh kế hoạch.

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 số 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 đó. Khi giờ gắn nhãn, cost rate và hóa đơn mua ngoài nằm ở cùng một chỗ, bảng sáu nguồn tự cập nhật khi có giờ mới, và CostDesk được dựng để làm đúng việc đó, để câu hỏi “dự án này còn lãi không” có câu trả lời khi dự án còn đang chạy.

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

Bài này là một mảnh của cụm lợi nhuận dự án. 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. Biên kỳ vọng được dựng thế nào, và vì sao dự phòng phải tách khỏi biên, nằm ở bài cách tính giá dự án phần mềm. Biên thực tế được trình bày theo ba tầng ở bài báo cáo lãi lỗ từng dự án. Nếu từng dự án đều lãi mà công ty vẫn không lãi, nguyên nhân thường ở ghế trống giữa các dự án, và utilization rate đo chuyện đó. File để dựng ngay là bảng chấm công, bảng cost ratebảng lãi lỗ.

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

Biên trên báo giá và biên khi bàn giao khác nhau chỗ nào?
Biên trên báo giá tính từ giờ ước lượng và chỉ gồm các khoản người lập báo giá nhìn thấy trước. Biên khi bàn giao tính từ giờ thực và gồm cả các khoản báo giá không có dòng nào, như giờ ngoài phạm vi, giờ họp, bảo hành và phần gián tiếp gánh thêm.

Dự án vượt bao nhiêu phần trăm giờ là bình thường?
Không có con số chung đáng tin. Con số duy nhất có ích là hệ số lệch của chính công ty theo loại việc, rút từ ít nhất ba dự án đã đóng. Dự án mẫu trong bài vượt 30%, và mức đó đủ để biến lãi 24,8% thành lỗ (*).

Scope creep có phải nguyên nhân lớn nhất không?
Trong dự án mẫu, nó đứng thứ hai sau sai số ước lượng. Thứ tự ở công ty bạn chỉ biết được khi có giờ gắn nhãn. Điểm khác của scope creep so với năm nguồn còn lại là nó có thể thu lại tiền nếu có dữ liệu.

Giờ họp với khách có tính vào chi phí dự án không?
Có. Đó là giờ công thật, công ty đã trả lương, và nó phục vụ dự án đó. Bỏ nó ra là để chi phí biến mất khỏi mọi báo cáo. Cách xử lý đúng là đưa họp vào báo giá như một hạng mục có giờ.

Bảo hành nên trích trước bao nhiêu?
Lấy từ lịch sử lỗi của chính công ty theo loại dự án. Bộ mẫu dùng 5% để minh họa, con số này không phải chuẩn chung (*).

Vì sao dự án kéo dài thì chi phí gián tiếp tăng?
Vì chi phí gián tiếp được phân bổ về dự án theo giờ công. Dự án tốn thêm giờ thì gánh thêm phần chi phí chung, dù công ty không chi thêm gì cho văn phòng. Đây là chi phí cơ hội: giờ đó lẽ ra gánh phần chung cho một dự án khác có doanh thu.

Không chấm công theo hạng mục thì có bóc tách được không?
Bóc được phần thô: tổng giờ vượt và giờ sau bàn giao. Bốn nguồn còn lại sẽ trộn vào nhau. Nên thêm cột hạng mục và cột loại giờ vào bảng chấm công từ dự án tiếp theo.

Dự án time and material có bị sáu nguồn này không?
Có, nhưng nhẹ hơn ở hai nguồn đầu, vì giờ vượt trong ngân sách thỏa thuận có doanh thu đối ứng. Bốn nguồn còn lại, gồm giờ không tính phí, bảo hành, gián tiếp và làm lại, vẫn ăn vào biên như thường.

Bảng đối chiếu nên làm lúc nào?
Làm từ tuần đầu và cập nhật mỗi tuần. Làm sau khi đóng dự án chỉ cho bài học, làm khi dự án đang chạy mới cho cơ hội sửa.

Nên dựng bằng Excel hay phần mềm?
Excel khi ít dự án và có một người ghép số mỗi tuần. Phần mềm khi giờ gắn nhãn, cost rate và hóa đơn nằm ở ba nơi và số dự án đủ nhiều để không ai ghép kịp.


Để tự kiểm tra, hãy lấy dự án vừa đóng gần nhất và thử tách phần giờ vượt thành sáu dòng như bảng trên. Nếu bạn chỉ có một con số tổng, chỗ hổng nằm ở bảng chấm công, và dự án tiếp theo sẽ lặp lại đúng khoảng cách giữa hai con số biên.

(*) 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ý