12/08/2018, 13:08

[Estimation Part_1] Key factor for success Estimation in Software Development

Giới thiệu Trong bài viết này tôi muốn giới thiệu tới các bạn một số điểm cần chú ý khi thực hiện estimate một dự án phần mềm. Làm thế nào để có thể đưa ra một bản estimation chính xác nhất. Có một thực tế quan trọng nhưng ít người biết, đó là việc estimate chính xác, hợp lý là yếu tố quyết định ...

Giới thiệu

  • Trong bài viết này tôi muốn giới thiệu tới các bạn một số điểm cần chú ý khi thực hiện estimate một dự án phần mềm. Làm thế nào để có thể đưa ra một bản estimation chính xác nhất. Có một thực tế quan trọng nhưng ít người biết, đó là việc estimate chính xác, hợp lý là yếu tố quyết định xem công ty, team của bạn có nhận được project từ khách hàng hay không. Theo quan điểm cá nhân của tôi Estimation thành công là điều kiện tiền đề cho một Project thành công.
  • Lấy ví dụ như Framgia của chúng ta là một công ty outsource, được Khách hàng giao cho estimate một dự án mới. Vì chưa cùng làm việc qua một dự án nào nên căn cứ duy nhất để khách hàng tin tưởng giao project là dựa trên bản estimate mà chúng ta gửi họ. Qua bản estimation, khách hàng sẽ đánh giá khả năng, năng lực phát triển dự án của chúng ta. Một bản estimation tốt, chặt chẽ sẽ gây được thiện cảm và sự tin tưởng, ngược lại nếu quá sơ sài và vô lý thì coi như cơ hội của chúng ta sẽ qua đi, mãi mãi.

Liên quan đến chủ đề Estimation này tôi dự định sẽ chia thành 3 phần như sau:

  • Part_1: Key factor for success Estimation in Software Development (Giới thiệu các yếu tố cần thiết để có thể estimate chính xác)
  • Part_2: Estimation methodlodogies (Các phương pháp estimation)
  • Part_3: Template for Estimation (Template dùng cho estimation)

I. Estimation process

  • Nếu bạn là Developer hay Tester có thể bạn sẽ không biết hoặc không để ý tới quá trình này vì thông thường process này được tiến hành trước khi dự án bắt đầu và được thực hiện bởi đội ngũ Sale, Manager và Project Manager. Hoặc có thể bạn tham gia một phần trong đó nhưng cũng không nhận ra điều đó. Process tôi vẽ dưới đây chỉ là process tôi đúc rút ra trong quá trình làm việc và chỉ để tham khảo. Tùy công ty, tổ chức mà process và flow có thể sẽ khác nhau. Nhưng về cơ bản nó phản ánh khá đầy đủ các step mà estimation process nên có. Về chi tiết nội dung tài liệu estimation cần có những mục nào, cost, resource ra sao tôi sẽ giới thiệu tới các bạn trong Part_3 (Template for Estimation) ở một bài viết khác.

Estimation Process.png

  • Process trên thực chất chỉ cũng cấp cho các bạn cái nhìn overview của quá trình estimation. Khi thực hiện estimate Project Manager hoặc người làm estimate sẽ áp dụng một số phương pháp, kỹ thuật để có thể estimate được chính xác. Các phương pháp dùng trong estimate thì gồm có nhiều cách như bên dưới:

    1. Estimate theo Line of code
    2. Estimate theo Three point
    3. Estimate theo Function point
    4. Work Breakdown Structure (WBS)
    5. ...
  • Về chi tiết các phương pháp estimate tôi cũng xin phép trình bày trong Part_2 (Estimation methodlodogies). Ngoài việc áp dụng một hoặc một vài method nêu trên, muốn estimate chính xác thì nên tham khảo một số nguồn nữa như historical data của công ty, tham khảo từ các PM dự án tương tự hay từ các technical leader ... Như vậy bản estimation của bạn đưa ra sẽ chính xác nhất có thể.

II. Các yếu tố để có một bản Estimation tốt

1. Xác định scope

Như các bạn đã biết một hệ thống thông tin bao gồm các yếu tố chính như phần cứng, phần mềm, middleware, con người ... Trong đó một hệ thống lớn, phức tạp sẽ có rất nhiều vendor khác nhau. Công ty bạn được khách hàng yêu cầu estimate cho phần công việc nào thì hãy estimate chính xác cho phần đó để tránh việc chồng lấn hoặc thiếu sót có thể xảy ra. Thậm chí trong một project với nhiều công đoạn, khách hành chỉ yêu cầu estimate riêng cho phần design, riêng cho codding hay test thì bạn cũng phải hết sức chú ý. Khi nhận estimate hãy confirm lại với đội Sale hay Manager của bạn nếu có điểm chưa rõ ràng về Scope. Và hãy chắc chắn scope estimate được ghi lại đầy đủ trong tài liệu estimation.

2. Xác định các nội dung ngoài scope

Các bạn có thể thấy hơi lạ hoặc không cần thiết nhưng những chi tiết, chức năng ngoài scope phát triển cũng nên được mô tả rõ trong tài liệu. Ý tưởng của khách hàng thường khá chung chung, hình dung ban đầu của bạn cũng có thể mơ hồ nên những phần còn chưa rõ ràng hãy cho vào assumption và nhờ khách hàng xác nhận lại. Nếu tự hiểu ngầm theo ý của bạn mà không confirm sớm thì rất có thể sẽ phát sinh nhiều vấn đề ảnh hưởng đến bản estimation của bạn. Nếu hệ thống phức tạp và trình bày câu chữ có thể mất thời gian và khó hiểu hãy trình bày bằng diagram hay bảng biểu nào đó để hình dễ dàng hơn.

3. Công nghệ và kỹ thuật

Hệ thống bạn estimate sẽ phát triển bằng ngôn ngữ nào, Ruby hay PHP. Nếu là PHP thì sẽ sử dụng Framework nào?. Nếu như sử dụng cloud thì dùng AWS hay Azure. Rồi nếu dùng AWS thì sẽ dùng services nào? Hãy mô tả cụ thể các công nghệ, ngôn ngữ và Framework sẽ sử dụng trong dự án. Điều này sẽ giúp bạn tiếp cận dễ hơn với hệ thống và estimate cũng chính xác hơn. Thực tế khi estimate những thông tin này có thể chưa được quyết định ngay, cũng có thể thay đổi trong quá trình phát triển. Nhưng trong khả năng hãy list ra nhiều nhất có thể.

4. Development process

Những Software development process hiện tại cũng khá nhiều và đa dạng, từ Waterfall, Iterative tới Agile/Scrum. Việc áp dụng mô hình nào trong quản trị dự án cũng có thể quyết định sớm từ khi bắt đầu estimate.

5. Project duration

Khi đưa ra yêu cầu estimate thông thường khách hàng cũng sẽ cho biết thời gian mong muốn nhận được sản phẩm. Tùy vào mục đích kinh doạnh của khách hàng mà duration của dự án có thể dài, ngắn khác nhau. Dựa vào thông tin đó bạn có thể estimate thời gian bắt đầu, thời gian kết thúc, phân bổ hợp lý và có plan để sắp xếp resource. Ngoài ra một số mốc thời gian như deliver sản phẩm cho khách hàng nếu được thì cũng có thể mô tả trong tài liệu estimation.

6. Requirement & Constraint

Trong giai đoạn estimate thì yêu cầu thường chưa rõ ràng do đó cần liệt kê chi tiết các chức năng tới mức có thể để làm tiền đề cho việc estimate. Ngoài ra, trường hợp có nhiều bên cùng tham gia phát triển một dự án là việc khá phổ biến. Nếu phần việc của công ty bạn bị phụ thuộc bởi công ty khác như về thiết bị, features, API, tài liệu thiết kế .. thì cũng hãy define rõ ràng những constraint về mặt thời gian với các bên liên quan (nên đưa vào phần Assumption trong tài liệu estimation). Bạn cũng lên có plan để đối ứng cho các constraint này trong trường hợp rủi ro có thể xảy ra.

7. Project management

Liên quan đến việc quản lý tiến độ và vận hành dự án cũng cần được mô tả và thống nhất trong tài liệu estimation. Bên nào sẽ quản lý tiến độ? Việc chia sẻ thông tin, cung cấp tài liệu như thế nào? Quy trình ra quyết định liên quan đến dự án như thế nào? .. Những câu hỏi này bạn hãy làm mịn hơn trong Project Plan, nhưng trong bản estimation cũng hãy mô tả khái quát để làm reference cho các công đoạn sau.

8. Infrastructure/Environment

Một số dự án đặc thù sử dụng môi trường phát triển đặc thù cần define rõ để đưa ra thống nhất chung về hạ tầng mạng, môi trường, device .. Nếu không được mô tả trước sẽ rất khó khăn và mất thời gian cho bạn khi cần đến. Ví dụ như việc build Server như thế nào? Môi trường cho develop, môi trường cho test .. Bên nào sẽ phụ trách? Tất cả đều cần phải define và thống nhất.

9. Scope test

Scope test cũng là một yếu tố ảnh hưởng rất lớn đến bản estimation. Việc tiến hành test sẽ như thế nào? Loại test nào? Patterm test ra sao cũng phải được mô tả chi tiết vì công việc này cũng tốn rất nhiều effort. Đối với hệ thống Web hay Mobile sẽ phát sinh rất nhiều patterm test, như phiên bản hệ điều hành, Browser, device ... Nếu tổ hợp lại thì công sức dành cho nó cũng rất lớn nên hãy cân nhắc cẩn thận khi trao đổi với khách hàng của bạn.

Ví dụ về mô tả scope test như bên dưới

- Giả định scope test bao gồm như bên dưới
 1. Unit test
 2. Integration test
 3. System test
 4. Load test
- Unit test thì dùng XUnit, độ coverage là 100%
- Unit không bao gồm evidence
- Môi trường test
 1. OS: Window7, Ubuntu, Mac OS
 2. Browser: IE8 ~, Chrome 41.~

10. Deliverables

Một điều tối quan trọng khác là bạn phải clear các sản phẩm deliver cho Khách hàng. Sản phẩm phần mềm không đơn giản chỉ là source code còn rất nhiều tài liệu khác như design, database design, kết quả test, manual ... Đừng để đến khi kết thúc dự án khi khách hàng đòi tài liệu này, package kia bạn mới ngã ngửa ra là mình không biết rằng phải deliver sản phẩm đó. Lúc bắt đầu càng chắc chắn và chi tiết bao nhiêu các bạn sẽ không phải sầu não vì những tình huống dở khóc dở cười bấy nhiêu. Việc chuẩn bị tốt sẽ giúp việc quản trị dự án của bạn trở nên dễ chịu hơn.

III. Kết luận

Ngoài các điểm chú ý tôi đã liệt kê ở trên thực tế còn rất nhiều điểm cần lưu ý khi thực hiện estimate. Cũng có thể một số mục ở trên bạn thấy chưa cần thiết khi làm estimate. Bạn có thể tùy nghi thay đổi thêm bớt cho phù hợp với thực tế của công ty bạn. Estimate luôn là một công việc khó khăn và đôi khi cần một chút may mắn. Ngay bản thân từ “estimate” cũng đã thể hiện điều đó. Nhưng với những điều kiện tiền đề để thực hiện estimate trong bài viết này, tôi hi vọng sẽ có ích gì đó cho công việc của bạn.

0