Một người phát triển phần mềm viết cho tôi: “Tôi đã làm việc trên vài dự án; chúng tất cả đều thất bại và lỡ lịch biểu. Khách hàng rất bực mình và người chủ công ti doạ đuổi mọi người phát triển. Tôi không biết tại sao chúng thất bại hay phải làm gì nhưng việc làm của tôi không còn được an ninh. Tôi hiện thời đang coi sóc một việc khác. Xin thầy lời khuyên.”

Đáp: Dự án thường thất bại bởi nhiều nguyên nhân, phần lớn do “lỗi con người” chứ không “lỗi kĩ thuật”. Dự án là hoạt động tổ, được quản lí bởi người quản lí dự án, để đạt tới tập các mục đích và mục tiêu, bên trong một thời kì thời gian. Người quản lí dự án phân công vai trò và trách nhiệm cho từng thành viên tổ cũng như tập các nhiệm vụ cần được hoàn thành tương ứng theo lịch biểu.

Tuy nhiên, dự án phần mềm thường thất bại khi tập các nhiệm vụ này thay đổi nhưng thời gian không được cho. Chẳng hạn, người phát triển được phân công 10 nhiệm vụ phải được hoàn thành trong 10 ngày. Sau ba ngày, anh ta nhận được thêm 4 nhiệm vụ nữa nhưng anh ta vẫn phải hoàn thành tất cả các nhiệm vụ của mình trong bẩy ngày còn lại. Đến ngày thứ năm, anh ta được bảo rằng ba nhiệm vụ mà anh ta đã hoàn thành cần thay đổi cho nên anh ta phải làm lại từ đầu ba nhiệm vụ nữa trong năm ngày còn lại. Tất nhiên, anh ta không thể hoàn thành được mọi nhiệm vụ này trong thời gian ngắn và dự án không thể được hoàn thành đúng thời gian.

Vì các thành viên khác của tổ cần nhiệm vụ của anh ta được hoàn thành để bắt đầu công việc của họ, nếu anh ta không thể đưa cho họ nhiệm vụ đã hoàn thành của mình, họ không thể bắt đầu nhiệm vụ của họ được. Bởi vì sự liên thuộc trong các nhiệm vụ dự án, thành viên tổ chậm nhất có thể làm chậm lại toàn bộ tổ dự án. Người quản lí dự án phải giám sát mọi hoạt động và báo cáo tiến bộ cho người quản lí cấp cao cũng như chia sẻ thông tin với các thành viên tổ. Nó giúp cho các thành viên tổ được thông tin về hoạt động của nhau cũng như hiệu năng của họ có thể nằm ở đâu dưới dạng điều được mong đợi từ họ. Nó cung cấp cơ hội cho kiểm điểm và nếu cần, phân công lại công việc và ưu tiên để làm cho dự án chạy hiệu quả hơn. Dự án phải không trở thành không thể quản lí được. Người quản lí dự án giỏi có thể định nghĩa lại mục đích của nó là cái gì đó hiện thực đạt tới được trong những ràng buộc của vấn đề thời gian thực. Người quản lí dự án kém không biết phải làm gì cho nên dễ dàng đổ trách nhiệm cho người phát triển.

Câu hỏi của tôi là, nếu đội bóng thua trận đấu, bạn nghĩ người chủ đuổi huấn luyện viên hay toàn đội bóng? Cùng câu hỏi đó nên được hỏi cho dự án phần mềm. Nếu người chủ thông minh, ông ấy sẽ đuổi người quản lí dự án, không đuổi người phát triển. Mặc dầu dự án là công việc tổ nhưng trách nhiệm phải thuộc vào người quản lí, không vào người phát triển. Là người phát triển, bạn nên tiếp tục cải tiến kĩ năng của bạn, học nhiều nhất có thể được. Với thiếu hụt công nhân có kĩ năng hiện thời, bạn không nên lo lắng quá nhiều.

—-English version—-

Project failure

A software developer wrote to me: “I have worked on several projects; they all failed and missed the schedule. Customers were angry and the company owner has threatened to fire all developers. I did not know why they failed or what to do but my job is no longer secured. I am currently looking for another job. Please advice.”

Answer: A project usually fails by many reasons, mostly on “human errors” not “technical errors”. A project is a teamwork activity, managed by a project manager, to achieve a set of goal and objectives, within a period of time. The project manager assigns roles and responsibilities to each team members as well as a set of tasks to be completed according to a schedule.

However, software projects often failed when these set of tasks change but the time given is not. For example, a developer is assigned 10 tasks to be completed in 10 days. After three days, he receives additional 4 more tasks but he still has to complete all of his tasks in the remaining seven days. On the fifth day, he is told that three of the tasks that he already completed need to change so he must redo three more tasks in the next five days. Of course, he could not complete all these tasks within the short time given and the project cannot be completed on time.

Since other team members need some of his completed tasks to start their work, if he cannot give them his completed task, they cannot start theirs. Because of the interdependencies among project tasks, the slowest team member could slow down the entire project team. A project manager must monitor all activities and reports the progress to senior managers as well as sharing information with team members. It helps keeping team members inform about each other’s activities as well as where their performance may be in terms of what was expected of them. It provides an opportunity for review and if needed, reassigns works and priorities to get the project running more efficiently. A Project does not have to become unmanageable. A good project manager can redefine its objective to something more realistically attainable given the constraints of real time issues. A bad project manager does not know what to do so it is easy to blame developers.

My question is, if a soccer team loses a match, do you think the owner fire the coach or the whole team? The same question should be asked for software project. If the owner is smart, he would fire the project manager, not developers. Although project is teamwork but the responsibility should be on the manager, not the developers. As developer, you should continue to improve your skills, learn as much as possible. With the current shortage of skilled workers, you should not worry too much.