15 Jan, 2021
Quản lí dự án phần mềm
Chìa khoá cho thành công của bất kì dự án phần mềm nào là thiết lập các yêu cầu tốt. Từ những yêu cầu này, người quản lí dự án có thể đặt ra mục đích, chiều hướng, và trao đổi chúng với thành viên tổ. Điều quan trọng là cả người dùng và người phát triển đều hiểu rõ ràng các yêu cầu cũng như mong đợi. Tất nhiên, người quản lí dự án phải chắc chắn rằng các yêu cầu là đầy đủ, đúng đắn, chính xác, nhất quán, kiểm thử được và theo dõi dấu vết được.
Trong công việc phần mềm, lập kế hoạch dự án là rất quan trọng vì nó là cơ sở để quản lí dự án. Khả năng của người quản lí dự án kiểm soát và quản lí dự án phụ thuộc cao độ và sự chính xác của kế hoạch. Bản kế hoạch dự án tốt phải bao gồm ước lượng dự án, lịch biểu, tài nguyên, yêu cầu kĩ năng, công nghệ then chốt và quản lí rủi ro. Bản kế hoạch cũng phải bao gồm cách quản lí cấu hình, đảm bảo chất lượng được áp dụng và cách tiến độ được theo dõi. Lập kế hoạch dự án là kĩ năng yêu cầu nhiều kinh nghiệm. Bạn có thể học về lập kế hoạch dự án trong lớp hay đọc sách nhưng bạn sẽ cần thực hành nó trong nhiều năm trước khi bạn có thể phát triển kĩ năng để tạo ra bản kế hoạch chính xác. Trong lập kế hoạch, ước lượng dự án có lẽ là kĩ năng khó làm chủ nhất cho nên tôi gợi ý rằng bạn giữ dấu vết của mọi ước lượng bạn làm trong sổ tay, kiểm điểm lại khác biệt giữa điều bạn đã ước lượng và điều thực tế xảy ra và dùng chúng để cải tiến kĩ năng ước lượng của bạn.
Vì yêu cầu thay đổi thường xuyên, bạn cũng cần kiểm soát các thay đổi tương ứng theo qui trình kiểm soát thay đổi và gặp gỡ với người dùng để đặt ưu tiên cho những thay đổi này. Là người quản lí dự án, bạn nên lựa chọn vòng đời phát triển đưa ra tăng dần và “đông cứng yêu cầu” trước khi bắt đầu các pha thiết kế và thực hiện và trì hoãn thay đổi tương lai cho bản đưa ra tiếp. Bằng việc dựng tăng dần phần mềm, bạn có thể đưa ra sản phẩm dựa trên ưu tiên của người dùng và tránh phản ứng vào phút chót với thay đổi yêu cầu.
Dự án không có người quản lí có kĩ năng giống như giương buồm đi ra đại dương không có thuyền trưởng. Người quản lí dự án có kĩ năng biết cách kiểm soát dự án và phải có quyền quyết định đối với mọi tài nguyên được cần để thực hiện dự án. Người quản lí cũng cần biết cách làm việc với khách hàng để làm sáng tỏ yêu cầu và hiểu mong đợi của họ. Khách hàng khác nhau có các mong đợi khác nhau. Một số muốn chất lượng nhưng số khác có thể muốn nhiều chức năng hơn, một số sẽ chăm lo tới lịch biểu nhưng một số lại chỉ quan tâm tới chi phí. Làm sao ưu tiên hoá các mong đợi khác nhau và giữ cân bằng các quan điểm khác nhau là kĩ năng của người quản lí dự án. Đó là lí do tại sao bên cạnh kĩ năng kĩ thuật và quản lí, người quản lí giỏi cũng phải có kĩ năng thương lượng và trao đổi.
Người quản lí dự án giỏi biết cách đưa tổ vào hoạt động ra quyết định. Bằng việc để các thành viên tổ tham gia vào việc lập kế hoạch và theo dõi dự án, tổ sẽ cảm thấy rằng họ có cái gì đó để nói và ít nhất quyết định nào đó về dự án của họ và cam kết làm cho dự án thành công hơn. Một trong những yếu tố then chốt trong dự án phần mềm là kĩ năng của các thành viên tổ dự án. Người quản lí dự án giỏi bao giờ cũng biết cách thuê, đào tạo và phát triển các thành viên tổ giỏi nhất có thể được. Không may là ngày nay nhiều người quản lí dự án chỉ tập trung vào số người được cần chứ không phải là kĩ năng được cần. Đây là sai lầm lớn bởi vì KHÔNG phải tất cả những người phát triển đều như nhau. Nhiều người quản lí KHÔNG biết cách lựa chọn, phỏng vấn và đào tạo thành viên tổ mà lấy bất kì ai sẵn có. Người quản lí dự án giỏi cũng tương tự như “huấn luyện viên tổ thể thao”. Người đó lựa chọn thành viên cẩn thận, cung cấp đào tạo, phân công cho họ các vai trò, trách nhiệm và đánh giá hiệu năng công việc của họ, kể cả hành vi và công việc tổ của họ. Người quản lí giỏi cũng phát triển chương trình đào tạo dự án và bản kế hoạch con đường nghề nghiệp cho tổ bởi vì người đó biết nguyên tắc: “Chăm sóc cho người của bạn trước thì họ sẽ chăm sóc cho bạn.” Nhân tiện, nếu tổ thể thao bị thua, họ không sa thải cầu thủ mà sa thải huấn luyện viên. Cùng điều đó xảy ra trong phần mềm, nếu dự án thất bại, họ không sa thải người phát triển mà sa thải người quản lí dự án.
Quản lí dự án phần mềm cũng là nhận diện và quản lí rủi ro liên kết với dự án. Mọi dự án đều có rủi ro cho nên hoạt động nhận diện rủi ro và tác động của chúng sẽ dẫn tới việc lập kế hoạch dự án thấu đáo hơn. Nhận diện rõ ràng các yếu tố rủi ro, xác suất xuất hiện của chúng, tác động của chúng lên dự án, và có kế hoạch giảm nhẹ những rủi ro này là cực kì quan trọng cho thành công của dự án. Người quản lí dự án giỏi bao giờ cũng giám sát mọi hành động bên trong dự án. Bởi vì thông tin trạng thái là cốt yếu cho việc kiểm soát dự án và chung cuộc đảm bảo thành công dự án, việc thu thập thông tin trên cơ sở hàng ngày là rất quan trọng. Với những dự án nhỏ, người quản lí có thể kiểm điểm các hoạt động bằng nhiều phương pháp và công cụ nhưng dự án lớn có thể yêu cầu một số công cụ và cơ chế tự động hoá. Điều cũng quan trọng là cất giữ các thông tin này để dùng trong lập kế hoạch dự án và nỗ lực phát triển tương lai.
Phần lớn những người quản lí dự án thành công đều đã quản lí nhiều dự án trước khi họ trở nên thành công. Như tôi đã nhắc tới trước đây, việc quản lí dự án cần thời gian và bạn KHÔNG thể vội vàng về nó được. Về căn bản có lẽ phải mất năm tới bẩy năm và kinh nghiệm trong nhiều dự án để phát triển kĩ năng này. “Công thức bí mật” của tôi để là người quản lí dự án giỏi là học từ sai lầm quá khứ và quản lí dự án theo cách nhất quán. Thành công yêu cầu làm việc cần mẫn về các kĩ năng kĩ thuật, quản lí và “kĩ năng mềm” và phần lớn trong tất cả mọi việc là đối xử với thành viên tổ của bạn một cách kính trọng và trung thực. Phải chắc họ biết điều đang diễn ra, cách họ khớp vào, trao đổi với họ thường xuyên để khử bỏ mọi lẫn lộn, và đảm bảo tính lặp lại được. Người quản lí càng chia sẻ thông tin và trao đổi với các thành viên tổ tốt thì dự án càng có thể tốt hơn.
—-English version—-
Software Project Management
The key to the success of any software project is the establishment of good requirements. From these requirements, project manager can set goals, directions, and communicate them to team members. It is important that both users and developers clearly understand the requirements as well as the expectations. Of course, project manager must make sure that the requirements are complete, correct, precise, consistent, testable, and traceable.
In software work, project planning is very important as it is the basis for managing the project. The project manager’s ability to control and manage the project is highly dependent on the accuracy of the plan. A good project plan must include project estimates, schedules, resources, skill requirements, key technologies and risk management. The plan should also include how configuration management, quality assurance, are being applied and how progress are being tracked. Project planning is a skill that requires a lot of experiences. You may learn about project planning in class or reading books but you will need to practice it for many years before you can develop the skill to create an accurate plan. Among planning, project estimates is probably the most difficult skill to master so I suggest that you keep track of all your estimates in a notebook, review the differences between what you have estimated and what actually happened and use them to improve your estimation skills.
Because requirements often change, you also need to control the changes according to a defined change control process and meet with users to set priority for these changes. As project manager, you should select an incremental release development lifecycle and “freeze requirements” before starting design and implementation phases and postpone further changes to the next release. By incrementally build the software, you can release the product based on users’ priorities and avoid reacting to last minute requirements change.
A project without a skilled manager is like sailing across the ocean without a captain. The skilled project manager know how to control the project and must have decision power over all resources required to execute the project. The manager also know how to work with the customers to clarify requirements and understand their expectations. Different customers have different expectations. Some want quality but other may want more functionality, some would care about schedule but other only concern with costs. How to prioritize different expectations and balance different views is the skill of the project manager. That is why beside technical and management skills, a good manager should also have negotiation and communication skills.
A good project manager know how to involve the team in some decision-making activities. By having team members participate into planning and tracking the project, the team will feel that they have something to say and at least some decisions about their project and commit to make the project more successful. One of the key factors in software project is the skills of project team members. A good manager always know how to hire, train and develop the best team members possible. Unfortunately, today many project managers are only focusing on the number of people needed rather than the skills needed. This is a big mistake because NOT all developers are the same. Many manager do NOT know how to select, interview and train team members but take anyone who are available. A good project manager is similar to a “Coach in a sport team”. He selects members carefully, provides training, assigns them roles, responsibilities and evaluates their work performance, including their behavior and team works. A good manager also develops project training program and career path plan for the team because he knows the principle: “Take care of your people first then they will take care of you”. By the way, if a sport team lost, they do not fire the players but the coach. The same thing happens in software, if the project failed, they do not fire developers but the project manager.
Managing a software project is also about identifying and managing the risks associated with the project. Every project have risks so the activity of identify risks and their impact early will lead to more thorough project planning. Clear identification of risk elements, their probability of occurrence, their impact of on the project, and a plan for mitigate these risks are extremely important to the success of a project. A good project manager always monitors every activities within the project. Because status information is crucial to controlling a project and ultimately ensuring project success, gathering the information on a daily basis is very important. For small projects, manager can review activities with manual methods and tools but large projects may require some automated tools and mechanisms. It is also important to save these information for use in future project planning and development efforts.
Most successful project managers have managed several projects before they become successful. As I have mentioned previously, project management takes time and you can NOT hurry it. Basically it probably takes five to seven years and experiences in many projects to develop this skills. My “Secret formula” of being good project manager is to learn from past mistakes and manage project in a consistent way. Success requires diligently working on your technical, managerial and “Soft-skills” and most of all treat your team member with respect and fairness. Make sure they know what is going on, how they fit in, communicate with them often to eliminates any confusion, and ensures repeatability. The more manager shares information and communicates with team members the better the project can be.