29 Apr, 2021
Lập kế hoạch dự án phần mềm
Một người phát triển phần mềm hỏi tôi: “Sao nhiều dự án phần mềm vẫn thất bại mặc dầu người quản lí dự án đã lập kế hoạch cho chúng cẩn thận rồi?”
Đáp: Có nhiều lí do làm cho dự án phần mềm thất bại và phần lớn phụ thuộc vào kĩ năng của người quản lí dự án. Trong các dự án phi phần mềm, người quản lí lập kế hoạch dự án nhưng trong phần mềm, lập kế hoạch là hoạt động tổ chứ không là hoạt động cá nhân. Đây là quan niệm sai phổ biến trong nhiều chương trình đào tạo nơi mọi người giả định rằng mọi dự án đều như nhau. Nếu bản thân người quản lí lập kế hoạch dự án phần mềm mà không có thành viên tổ nào cùng tham gia thì chỉ người đó mới biết cách công việc phải được thực hiện. Phần mềm là “công việc tri thức” chứ KHÔNG là “công việc vật lí” do đó nó phải được lập kế hoạch khác bởi vì các thành viên tổ không thể nào đoán được cái gì ở trong đầu của người quản lí khi người đó lập kế hoạch dự án.
Một số người tin rằng nếu họ viết mọi thứ vào kế hoạch dự án nó sẽ được thực hiện như cách nó được viết ra. Sự kiện là việc viết ra tốt đến đâu cũng chẳng thành vấn đề, từng thành viên tổ có thể hiểu nó khác đi; và thực hiện của họ có thể không phải là điều người quản lí dự án muốn. Thỉnh thoảng các thành viên tổ có thể bất đồng với bản kế hoạch và thay và đó họ thực hiện theo cách họ nghĩ nó đáng phải thực hiện.
Trong “công việc tri thức”, người quản lí dự án cần nói chuyện, trao đổi các ý tưởng, và thu được sự đồng thuận về mọi thứ với các thành viên tổ. Người quản lí không thể cho chỉ thị, đưa ra chỉ dẫn, và mong đợi người phát triển tuân theo mà không có câu hỏi và thực hiện như chúng được viết ra. Trong phần mềm, các thành viên tổ cần được tham gia vào lập kế hoạch cho các nhiệm vụ mà họ sẽ phải làm. Phần lớn những người phát triển đều là những người có giáo dục cao, họ được đào tạo để làm công việc cả họ và biết cách ra quyết định đúng về điều gì là tốt nhất cho dự án. Đó là lí do tại sao việc tham gia của tổ là quan trọng khi phải đi tới xác định cái gì và làm thế nào họ phải làm mọi thứ. Họ phải có khả năng lên tiếng về ý kiến của họ về mất bao lâu để hoàn thành các nhiệm vụ của họ thay vì được bảo về họ phải làm trong bao lâu.
Trong các dự án phi phần mềm khác, các kế hoạch dự án không thay đổi nhiều cho nên dễ dàng thực hiện tương ứng. Tuy nhiên, dự án phần mềm thường thay đổi và dù bạn lập kế hoạch tốt thế nào cũng không thành vấn đề, không ai có thể dự đoán được tương lai. Bản kế hoạch dự án sẽ không bao giờ phản ánh thực tại bởi vì mọi sự sẽ thay đổi do đó bản kế hoạch dự án phải thay đổi nữa. Nếu bạn bám lấy bản kế hoạch gốc, bạn sẽ thất bại. Đó là lí do tại sao mọi người cứ hỏi tại sao nhiều dự án phần mềm thất bại cho dù họ đã lập kế hoạch cho chúng một cách cẩn thận.
—English version—
Planning a software project
A software developer asked me: “Why so many software projects still failed although the project managers have planned them carefully?
Answer: There are reasons that cause software projects to fail and most are depending on the project managers’ skills. In non-software projects, the managers plan the projects but in software, planning is a team activity not individual. This is a common misconception in many training programs where people assume that all projects are the same. If the manager plans the software project himself without any team members participate then only he knows how the work must be done. Software is “Knowledge work” NOT “Physical work” therefore it must be planned differently because it is impossible for team members to guess what is on project manager’s head when he plans the project.
Some people believe that if they write everything on project plan than it will be implemented as the way it is written. The fact is no matter how good is the writing, each team members may understand it differently; and their implementation may not be what the project managers want. Sometime team members may disagree with the plan and implement the way they think it should be done instead.
In “Knowledge work”, the project manager needs to communicate, exchanges ideas, and obtains agreement on everything with team members. Managers cannot give direction, issue instructions, and expect developers to follow without questions and implement as they are written. In software, team members need to be involved in the planning of the tasks that they will have to do. Most developers are highly educated people, they are trained to do their works and know how to make the right decision on what is best for the project. That is why team’s participation is important when it comes to determine what and how they should do things. They should be able to voice their opinion on how long would it take to complete their tasks rather be told of how much time that they have.
In other non-software projects, the project plans do not change much so it is easy to implement accordingly. However, software projects often change and no matter how good you plan, no one can predict the future. The project plan will never reflect the reality because things will change therefore project plan must change too. If you stick with the original plan, you will fail. That is why people keep asking why so many software project failed even they have planned them carefully.