Bởi vì công nghệ thay đổi rất nhanh chóng, các nhà chuyên nghiệp phần mềm muốn thành công phải liên tục cải tiến kĩ năng của họ. Trong số họ, người quản lí dự án phần mềm cần đào tạo thích hợp hơn vì dự án phần mềm đang trở nên ngày càng lớn và phức tạp hơn. Mục đích của mọi dự án phần mềm là chuyển giao sản phẩm đúng thời gian, trong ngân sách, đáp ứng các chức năng được yêu cầu và chất lượng như được khách hàng xác định.

Người quản lí dự án phần mềm phải biết cách làm việc với khách hàng để hiểu nhu cầu doanh nghiệp của họ; họ phải có kĩ năng trong phát triển kế hoạch dự án và phân công gói công việc cho các thành viên tổ. Họ phải có kĩ năng trao đổi để thảo luận, giải thích và báo cáo trạng thái cho khách hàng, người quản lí. Họ phải biết cách quản lí các hoạt động hàng ngày, theo dõi tiến bộ, giám sát hiệu năng, và giải quyết với các rủi ro dự án. Có nhiều điều mà người quản lí dự án phần mềm phải học để đảm bảo rằng dự án sẽ thành công.

Điều thứ nhất người quản lí dự án phần mềm phải học là cách làm việc với khách hàng. Có nhiều kiểu khách hàng: Một số người dễ làm việc với khách hàng và một số thì không. Một số không biết cách giải thích rõ các yêu cầu và một số thậm chí còn không biết họ muốn gì. Không hiểu rõ ràng các yêu cầu, sẽ không thể nào bắt đầu được dự án. Đó là lí do tại sao người quản lí dự án phần mềm phải có kĩ năng trao đổi tốt như nghe tích cực và biết cách hỏi các câu hỏi để thu được yêu cầu. Có vài kĩ thuật để làm điều này như đề nghị khách hàng kể chuyện về cách họ muốn dùng hệ thống (như, chuyện người dùng, kịch bản người dùng v.v.). Kĩ thuật khác là xây dựng bản mẫu và để khách hàng dùng nó và đưa ra phản hồi để thu được yêu cầu đúng v.v.

Điều thứ hai người quản lí phần mềm phải học là giải quyết với thay đổi. Vì khách hàng thường yêu cầu thay đổi, người quản lí dự án phần mềm phải biết cách giải quyết nó một cách thích hợp. Người quản lí không có kinh nghiệm sẽ chấp nhận mọi thay đổi và chịu hậu quả về chi phí cao, trễ lịch và sản phẩm chất lượng kém.

Người quản lí dự án phần mềm có kinh nghiệm sẽ thương lượng thay đổi bằng việc cho khách hàng thông tin phụ về tác động của thay đổi và để cho họ quyết định. Tôi thường khuyên sinh viên đáp ứng: “Chúng tôi có thể làm thay đổi đó nhưng chúng tôi cần ông hoặc để trễ thay đổi tới lần đưa ra sau; hoặc cho chúng tôi nhiều thời gian hơn, nhiều tài nguyên hơn để thực hiện thay đổi. Ông có thể cần xoá bớt yêu cầu tương đương khác để chúng tôi có thể hội tụ vào thay đổi mới. Chúng tôi cần quyết định của ông sớm để cho chúng tôi có thể bắt đầu ngay. Ông có thể cho chúng tôi quyết định của ông vào ngày hôm sau được không?” Câu trả lời đơn giản đó sẽ buộc khách hàng phải nghĩ về tác động và việc bù trừ vì họ phải quyết định. Phần lớn các lần, họ bỏ các yêu cầu thay đổi vì họ không muốn ra quyết định khó khăn.

Điều thứ ba người quản lí phần mềm phải học là kĩ năng xây dựng tổ, bao gồm cách phát triển tổ có động cơ mà sẽ làm việc hợp tác với nhau. Có một tổ mạnh và có quyết tâm sẽ cho người quản lí dự án phần mềm tin tưởng bám theo kế hoạch khi kế hoạch là đúng, thay đổi kế hoạch khi nó sai; và được chuẩn bị để ra quyết định đúng khi cần. Điều đó yêu cầu khả năng lãnh đạo của người quản lí dự án phần mềm để hướng dẫn tổ hoàn thành mục đích dự án. Không có làm việc tổ và hợp tác bởi cả tổ hay từng thành viên trong tổ, dự án không thể thành công. Người quản lí dự án phần mềm thiếu kinh nghiệm thường bắt đầu dự án bằng cách tự mình làm việc trên bản kế hoạch rồi phân công nhiệm vụ cho các thành viên tổ và giám sát tiến bộ của tổ. Người quản lí dự án phần mềm có kinh nghiệm bao giờ cũng bắt đầu với việc xây dựng tổ bằng việc đem tổ tới cùng nhau thảo luận về mục tiêu của dự án. Khi mọi người trong tổ cảm thấy thoải mái với các mục tiêu thì người quản lí có thể thảo luận với tổ về cách tiếp cận tốt nhất cho dự án. Bằng việc để cho các thành viên tổ tham gia vào trong việc ra quyết định, tổ cảm thấy rằng họ được cam kết với dự án; họ cảm thấy rằng đây là dự án của họ, không phải là dự án của người quản lí. Bằng việc có thảo luận dự án sớm, người quản lí dự án phần mềm tìm vài giải pháp trước khi lựa chọn giải pháp tốt nhất. Thông tin được thảo luận cùng tổ bao giờ cũng dẫn tới quyết định tốt hơn và phân công tổ tốt hơn.

Bởi vì hoạt động lập kế hoạch dự án dựa trên quyết định tập thể, tổ cảm thấy rằng họ tham gia vào lập kế hoạch của dự án. Bằng việc cho phép các thành viên tổ nói lên ý kiến của họ, bằng việc để họ giúp phát triển bản kế hoạch, bằng việc để họ ước lượng công việc mà họ phải làm, dự án có công việc tổ được cam kết, điều đưa tổ vượt qua các khác biệt cá nhân và cố gắng vì thành công của dự án.

Vài năm trước, một sinh viên viết cho tôi: “Khi tôi học lớp quản lí dự án phần mềm của thầy, tôi tự hỏi mình: “Sao mình cần học môn này? Có lẽ mình chẳng bao giờ dùng nó vì mình chỉ muốn viết mã, không muốn quản lí dự án.” Say khi tốt nghiệp, tôi đã làm việc như người phát triển phần mềm trong ba năm rồi được đề bạt làm người quản lí dự án phần mềm. Vào lúc đó, thái độ của tôi thay đổi và tôi muốn chức vụ đó. Đột nhiên tôi nhận ra rằng tôi đã không biết cách quản lí dự án vì tôi đã không chú ý mấy trong lớp. May mắn là tôi vẫn còn tài liệu lớp của thầy, bộ slide bài giảng của thầy và phân công đọc thêm. Tôi để ra hai tuần ôn tập lại mọi thứ rồi áp dụng vào dự án. Bởi vì nó là dự án nhỏ, mặc dù tôi phạm phải vài sai lầm nhưng chúng không mấu chốt. Dự án hoàn thành thành công. Tôi trở lại và ôn lại tài liệu của thầy lần nữa và thấy rằng hầu hết các sai lầm tôi phạm phải đều đã được nhắc tới ở đó cho nên tôi học cách cải tiến kĩ năng của tôi. Bây giờ sau vài dự án thành công, tôi biết giáo dục đại có có giá trị làm sao đối với tôi. Tôi muốn nói với mọi sinh viên rằng không cái gì các bạn học là phí hoài cả; sớm hay muộn bạn sẽ cần nó. Học tập chăm chỉ và giữ tài liệu trường học của bạn vì bạn chưa bao giờ biết khi nào bạn sẽ cần chúng.”

Có kĩ năng để làm việc với khách hàng, giải quyết với các thay đổi và xây dựng tổ mạnh là các kĩ năng nền tảng mà mọi người quản lí dự án phần mềm phải có để quản lí thành công dự án phần mềm.

—-English version—-

Software project management skills

Because technology changes very quickly, software professionals who want to be successful must continually improve their skills. Among them, software project managers need more appropriate trainings because software projects are becoming larger and more complex. The goals of every software project are to deliver the product on time, within budget, meet required functionalities and quality as defined by the customers.

Software project managers must know how to work with customers to understand their business needs; they must have skills in develop project plan and assigns works packages to team members. They must have communication skills to discuss, explain, and reports status to customers, managers. They must know how to manage daily activities, track progress, monitor performance, and dealing with project risks. There are many things that a software project manager must learn to ensure that the project will be successful.

The first thing a software project manager must learn is how to deal with customers. There are many types of customers: Some are easy to work with and some are not. Some do not know how to explain requirements well and some who do not even know what they want. Without clearly understand the requirements, it would be impossible to start the project. That is why software project manager must have good communication skills such as active listening and know how to ask questions to get the requirements. There are several techniques to do this such as asking customers to tell a story on how they want to use the system (e.g., User stories, User scenarios etc.). Another technique is to build a prototype and have customers review it and provide feedback to get correct requirements etc.

The second thing a software manager must learn is to deal with changes. Since customers often request changes, software project manager must know how to handle it appropriately. Inexperienced manager would accept all changes and suffers the consequence of higher cost, delay schedule and poor quality product.

Experienced software project manager will negotiate the change by give customers additional information on impacts of the change and let them make decision. I often advise students to response: “We could do that change but we need you to either delay the change until next release; or give us more time, more resources to implement the change. You may need to delete another equivalent requirement so we can focus on the new change. We need your decision soon so we can start right away. Can you give us your decision by the next day?” That simple answer will force customers to think about the impacts and the trade-off since they have to make decision. Most of the time, they abandon the request for change since they do not want to made difficult decision.

The third thing a software manager must learn is team-building skills, including how to develop a motivated team that will work co-operatively. Having a strong and committed team will give the software project manager the confidence to stick with the plan when the plan is right, change the plan when it is wrong; and be prepared to make correct decisions when necessary. It requires the leadership of the software project manager to guide a team to accomplish the project goals. Without teamwork and cooperation by the team or an individual on the team, a project may not succeed. Inexperienced software project manager often starts the project by working on the plan by himself then assign tasks to team members and monitor the progress of the team. Experienced software project manager always begins with team building by bring the team together to discuss the objectives of the project. When everybody on the team feel comfortable with the objectives then manager can discuss with the team about the best approach for the project. By having team members participate in decision making, the team feels that they are committed to the project; they feel that this is their project, not just the manager’s project. By having the early project discussion, software project manager are looking for several solutions before select the best one. The information being discussed with the team always leads to better decisions and better team assignments.

Because project planning activities are based on a collective decision, the team feels that they participate in the planning of the project. By allowing team members to voice their opinions, by having them help develop the plan, by having them estimate the works that they must do, the project have a committed teamwork which leads the team in overcoming individual differences and strives for project success.

Few years ago, a student wrote to me: “When I took your software project management class, I asked myself: “Why do I need to learn this? I probably never use it since I only want to write code, not manage project.” After graduated, I worked as a software developer for three years then got promoted to software project manager. At that time, my attitude changed and I wanted that position. Suddenly I realized that I did not know how to manage project because I did not pay much attention in class. Fortunately, I still have your class materials, all your lecture slides and reading assignments. I spent two weeks reviewed everything then applied to the project. Because it was a small project, even I made some mistakes but they were not critical. The project completed successful. I went back and reviewed your materials again and found that most mistakes that I made were mentioned there so I learned to improve my skills. Now after several successful projects, I know how valuable a college education means to me. I want to say to all students that nothing that you learn is wasteful; sooner or later you will need it. Study hard and keep all your school materials because you never know when you are going to need them.”

Having the skills to work with customers, dealing with changes and build a strong team are the fundamental skills that every software project manager must have to successfully manage software projects.