13 Jan, 2021
Lời khuyên khác cho người quản lí dự án phần mềm
Một người phát triển phần mềm hỏi tôi: “Mất bao lâu để là người quản lí dự án phần mềm? Tôi có cần theo khoá đào tạo là người quản lí dự án phần mềm không? Người không làm phần mềm có thể quản lí được dự án phần mềm không?”
Tôi đã viết nhiều bài báo về quản lí dự án phần mềm và tôi bao giờ cũng tin rằng chỉ người phát triển phần mềm mới có thể quản lí có hiệu quả dự án phần mềm. Không ai hiểu được tầm quan trọng của yêu cầu phần mềm, kiến trúc hệ thống, thiết kế và môi trường phát triển nhiều hơn người phát triển phần mềm cho nên người quản lí dự án phần mềm tốt hiển nhiên phải bắt đầu bằng kinh nghiệm trong phát triển phần mềm đầu tiên. Điều này KHÔNG định nói rằng người không làm phần mềm không thể quản lí được dự án phần mềm nhưng không có nền tảng tốt trong phần mềm, họ có thể KHÔNG HIỆU QUẢ. Trong nhiều năm, tôi đã biện minh quan điểm này với các giáo sư từ các trường quản trị kinh doanh và tôi không muốn có tranh luận khác. Lời khuyên của tôi không dựa trên bất kì nghiên cứu lí thuyết hay hàn lâm nào mà dựa trên 40 năm làm việc trong công nghiệp.
Người quản lí dự án phần mềm tốt phải biết cách ước lượng nỗ lực – mất bao lâu để hoàn thành dự án và bạn cần bao nhiêu người cho dự án. Bạn không thể đoán mò được mà phải chia dự án thành các nhiệm vụ nhỏ và ước lượng thời gian cần để hoàn thành các nhiệm vụ này. Điều này yêu cầu rằng bạn hiểu phần mềm để chia nó thành các nhiệm vụ rồi ước lượng nỗ lực cho từng nhiệm vụ. Bạn phải biết cách ước lượng giờ dành cho từng nhiệm vụ để cho bạn có thể đi tới thời gian tổng thể cần có cho dự án rồi dùng điều đó để kiểm điểm với quản lí cấp cao hay khách hàng. Bạn phải biết cách thương lượng về lịch biểu tương ứng. Nếu bạn cần năm tháng nhưng khách hàng tin rằng điều đó có thể được làm trong ba tháng thì bạn sẽ làm gì? Cái gì sẽ xảy ra nếu người quản lí cấp cao của bạn đồng ý với khách hàng rằng ba tháng là lịch biểu tốt? Bạn sẽ làm gì – đồng ý với lịch biểu mà không thể nào được thực hiện hay bác bỏ nó?
Có nhiều tài liệu mà người quản lí phần mềm phải làm. Bản kế hoạch dự án, lịch biểu, nhiều báo cáo tình trạng, nhiều thời gian biểu cho thành viên tổ, và tuỳ theo phương pháp luận nào đó, bạn có thể cần điền vào nhiều biểu mẫu và tài liệu. Những việc giấy tờ này sẽ chiếm hầu hết thời gian của bạn nhưng bạn chỉ có 10 giờ làm việc một ngày cho nên bạn sẽ làm gì? Tôi không biết một số người quản lí dự án có rất hạnh phúc để làm việc trên tài liệu không bởi vì họ không phải quản lí dự án nhưng việc của bạn là quản lí dự án hay để điền vào các công việc giấy tờ?
Người quản lí dự án làm gì cả ngày? Họ cũng phải thuê người, dựng tổ dự án, xác định vai trò, trách nhiệm, phân công việc cho thành viên tổ, dõi vết tiến bộ, báo cáo trạng thái cho người quản lí cấp cao và nhiều điều nữa? Tất nhiên, người quản lí dự án phải làm tất cả những điều đó và cũng phải giải quyết các vấn đề trong các thành viên tổ, tạo ra môi trường nơi mọi người sẽ được động viên và hạnh phúc. Tổ hạnh phúc là tổ có năng suất cho nên bên cạnh việc quản lí dự án, bạn cũng cần lập kế hoạch và tham gia vào các hoạt động xã hội để giữ động cơ của tổ như các sự kiện xây dựng tổ, thưởng cho thành công tổ, cám ơn tổ vì làm các việc tốt. Người quản lí dự án phần mềm bao giờ cũng trao đổi và giữ cho tổ được thông báo về tình trạng dự án. Họ không chỉ biết khía cạnh kĩ thuật mà họ cũng phải biết cách là người quản lí tốt nữa.
Người quản lí dự án phần mềm giỏi phải biết cách lập kế hoạch, quản lí, phối hợp, giám sát, quản trị và hỗ trợ. Họ phải biết cách lập kế hoạch chi tiết, dự kiến vấn đề và khử bỏ chúng trước khi chúng xuất hiện. Họ phải giám sát thường xuyên để cho họ biết ngay khi mọi sự đi sai. Khi vấn đề xuất hiện, họ phải biết cách giải quyết chúng ngay lập tức, họ phải đề cập tới các xung đột cá nhân, giải quyết các vấn đề kĩ thuật và giữ cho người quản lí cấp cao được thông tin về cách dự án đang tiến triển, cũng như giữ cho khách hàng thoả mãn. Họ ra quyết định, đạt tới nhất trí khi họ có thể, ra lệnh khi họ phải làm, và vẫn giữ cho dự án tiến triển tương ứng. Về căn bản họ phải làm nhiều điều và làm chúng cho tốt.
Vậy sau khi đọc những điều này, bạn còn vẫn muốn là người quản lí dự án không?
Bạn học là người quản lí dự án tốt thế nào? Tất nhiên, bạn cần theo khoá đào tạo về quản lí dự án phần mềm nhưng cẩn thận đấy, có nhiều môn “quản lí dự án” nhưng chúng không phải là môn “quản lí dự án phần mềm”. Có khác biệt giữa hai môn này. Ngay cả với môn “quản lí dự án phần mềm” một số người chỉ dạy bạn cách dùng công cụ lập kế hoạch như Microsoft Project. Một kĩ năng tốt nên học nhưng bạn chỉ biết cách dùng công cụ mà không biết các quản lí dự án phần mềm. Một số môn dạy khía cạnh quản trị của quản lí dự án như lập kế hoạch, báo cáo, và phương pháp làm ngân sách nhưng họ có thể không dạy bạn cách quản lí dự án phần mềm. Một số môn cũng có chất lượng, nhưng mục tiêu chính là để làm cho bạn qua được kì thi vào lúc cuối rồi cho bạn chứng chỉ nhưng họ có thể không dạy bạn cách quản lí dự án phần mềm. Và tất nhiên, có các môn học có dạy cho bạn cách quản lí dự án phần mềm. Đó là lí do tại sao bạn phải cẩn thận trong lựa chọn môn đúng và đào tạo đúng.
Sau khi hoàn thành mọi đào tạo, bạn sẽ làm gì? một số trong các bạn có thể nghĩ rằng quản lí các dự án nhỏ sẽ là bước tiếp. Ai sẽ cho bạn cơ hội đó? Có được chứng chỉ không phải là đảm bảo để được thăng chức lên thành người quản lí dự án. Tuy nhiên, giả sử rằng bạn có cơ hội để quản lí dự án nhỏ thì bạn có thể thấy ra rằng bạn không cần tất cả các điều quản lí dự án hình thức mà bạn đã học ở lớp. Phần lớn các dự án nhỏ không yêu cầu lập kế hoạch và kiểm soát hình thức như được dạy trong lớp, bạn làm tốt. Nhưng sau vài dự án nhỏ thành công bây giờ người quản lí cho bạn các dự án lớn hơn để quản lí. Đột nhiên điều bạn làm tốt trong dự án nhỏ có thể không làm việc tốt trong dự án lớn hơn rồi bạn có những vấn đề chính chờ đợi. Tăng tỉ lệ là khó nhất trong quản lí dự án phần mềm. Đây là lí do tại sao nhiều người quản lí dự án thành công với các dự án nhỏ lại thất bại trong dự án lớn.
Tôi tin chẳng cái gì tốt hơn kinh nghiệm về dự án phần mềm. Bạn sẽ thu được kinh nghiệm có giá trị hơn nhiều bằng việc đi từ người phát triển lên lãnh đạo tổ rồi tới lãnh đạo tổ trong dự án nhỏ tới dự án lớn hơn. Bạn học bằng việc thực hành từ lãnh đạo tổ 4 tới 6 người tới tổ 10 tới 20 người và cuối cùng tới dự án 50 tới 100 người. Bạn sẽ học đích xác cách nó làm việc mà không có trách nhiệm quản lí dự án. Cách tiếp cận “học qua hành” này là kinh nghiệm tuyệt vời cho người muốn trở thành người quản lí dự án. Sau khi thu được kinh nghiệm thì bạn chuyển từ người lãnh đạo tổ lên người quản lí dự án cho dự án nhỏ rồi cuối cùng tới dự án lớn hơn. Trong thời gian chuyển tiếp này, bạn có thể theo nhiều khoá đào tạo cần thiết nhưng bao giờ cũng nhớ trong đầu rằng bạn vẫn học và để thời gian làm việc cho bạn. Đừng vội, nếu cần 5 hay 8 năm thì để nó là vậy bởi vì bạn muốn là “người quản lí dự án phần mềm tốt nhất”.
Nhiều người phát triển bảo tôi: “Trong trường hợp đó, tôi dứt khoát không muốn là người quản lí dự án.” Đây là kiểu phản ứng từ sinh viên và người phát triển sau khi họ nói với tôi về thăng tiến nghề nghiệp nhưng câu hỏi của tôi là: “Trong trường hợp đó bạn sẽ làm gì? Bạn nghĩ bạn có thể cứ ở mãi là người phát triển phần mềm không? Nếu bạn không tiến bộ trong nghề nghiệp của mình thì bạn sẽ lo nghĩ nhiều về cuộc sống của bạn vì người mới tới và họ muốn lấy việc của bạn. Trong thế giới thay đổi nhanh chóng này, không tiến bộ nghĩa là vẫn còn ở sau và bị ở sau nghĩa là bạn có thể bị xoá bỏ. Thái độ đúng sẽ là “Đây là cơ hội lớn và với lời khuyên đúng, tôi nghĩ tôi có thể làm điều đó và đây là việc dành cho tôi.” Đây là những người sẽ làm mọi sự xảy ra, tạo ra khác biệt và quản lí dự án tốt hơn những người khác và phần thưởng của họ sẽ là vô tận.
Nhân tiện, người quản lí dự án phần mềm tốt có thể làm được lương giữa $ 150,000 tới $ 250,00 đô la một năm cộng với tiền thưởng như tuỳ chọn cổ phần.
—-English version—-
Another advice for Software Project Manager
A software developer asked me: “How long does it take to be a software project manager? Do I need to take a training course to be a software project manager? Could a non-software people manage software project?”
I have written many articles on software project management and I always believe that only software developer could manage software projects effectively. Nobody would understands the important of software requirements, system architect, design, and the development environment more than software developers so obviously good software project managers must start with experiences in software development first. This is NOT to say that non-software people can not manage software project but without good background in software, they may NOT be EFFECTIVE. For many years, I have argued this point with professors from business management school and I do not want to have another debate. My advice is not base on any theory or academic studies but on my 40 years of working in the industry
A good software project manager must know how to estimate efforts – how long does it take to complete the project and how many people do you need for the project. You can not guess but must breakdown project into small tasks and estimate the time it would need to complete these tasks. This require that you do understand software to break it down into tasks then estimate the effort for each task. You must know how to estimate the hours spent on each task so you can come up with the overall required time for the project then using that to review with senior manager or customer. You must know how to negotiate the schedule accordingly. If you need five months but customer believes that it can be done in three months then what would you do? What would happen if your senior manager agree with customers that three months is a good schedule? What would you do – agree with a schedule that can not be done or reject it?
There are many documents that software project manager must do. A project plan, a schedule, many status reports, many time sheets for team members, and depending on certain methodology, you may need to fill out many forms and documents. These bureaucracy would occupy most of your time but you only have 10 working hours a day so what would you do? I do know some project managers are very happy to work on documents because they do not have to manage the project but is it your job to manage the project or to fill out paper works?
What do software project managers do all day? Do they also have to hire people, build project team, define roles, responsibilities, assign works to team members, track progress, report status to senior manager and many more? Of course, project manager must do all of that and also solve problems among team members, create an environment where everybody would be motivated and happy. A happy team is a productive team so beside managing project, you also need to plan and participate in other social activities to keep the team motivate such as team building events, reward team success, thanks the team for doing good works. Good software project managers always communicate and keep the team informed about project status. They not only know technical aspect but they must also know how to be good people managers too.
Good software project managers must know how to plan, manage, co-ordinate, monitor, administer, and support. They must know how to plan in detail, foresee problems and eliminate them before they occur. They must monitor constantly so they know as soon as things are going wrong. When problems occur, they must know how to deal with them immediately, they must address personal conflicts, resolve technical issues and keep senior managers informed on how projects are progressing, as well as keep customers happy. They make decisions, get consensus when they can, dictate when they must, and still keep projects progress accordingly. Basically they have to do many things and do them well.
So after reading these, do you still want to be a project manager?
How do you learn to be a good software project manager? Of course, you do need to take software project management training but beware, there are many “project management” courses but they are not “software project management” courses. There are differences between the two. Even with “Software project management” courses but some only teach you how to use a planning tool like Microsoft Project. A good skill to learn but you only know how to use a tool but not how to manage software projects. Some courses teach the administrative aspect of project management such as planning, reporting, and budget method but they may not teach you how to manage software projects. Some courses offer a qualification, but the primary aim is to get you to pass an exam at the end then give you a certificate but they may not teach you how to manage software projects. And of course, there are courses which do teach you how to manage software projects. That is why you must be careful in selecting the right courses and the right trainings.
After complete all trainings, what would you do? some of you might think that managing small projects would be the next step. Who would give you that chance? Having a certificate is not a guarantee to get promoted to project manager. However, assume that you do have a chance to manage a small project then you may find out that you do not need all that formal project management things that you learned in class. Most small projects do not require the formal planning and control as taught in class then you are doing fine. But after few successful small projects now managers give you larger projects to manage. Suddenly what you do well in small project may not work well in larger project then you have major problems waiting. Scaling up is the most difficulty in software project management. This is why so many project managers who are successful with small projects failed in larger projects.
I believe nothing is better than software project experience. You will gain much more valuable experience by moving from developer to team leader then move from team leader in small project to larger project. You learned by practicing from leading 4 to 6 person team to 10 to 20 person team and eventually to 50 to 100 person project. You will learn exactly how it all works without having the responsibility of managing the project. This “learning by doing” approach is excellent experience for would-be project managers. After gaining experiences then you move from team leader to project manager of small project then eventually to larger project. During these transition time, you can take as many training courses as necessary but always keep in mind that you are still learning and let time works for you. Do not be hurry, if it take 5 or 8 years then let it be because you want to be the “best software project manager”.
Many developers told me: “In that case, I definitely don’t want to be a project manager” This is typical reaction from students and developers after they talked with me about career advancement but my question is: “In that case what would you do? Do you think you can stay forever as software developers? If you do not making progress in your career then you will be worry most of your life as new people would come in and they want your jobs. In this fast changing world, not making progress means stay behind and getting behind means you may be eliminated. The right attitude would be “This is a great opportunity and with good advices, I think I could do it and this is the job for me”. These are people who will make things happen, make a difference and manage projects better than other people and their reward would be endless.
By the way, a good software project manager could make between $ 150,000 to $ 250,00 dollars a year plus bonus such as stock options.