07 Jan, 2021
Người quản lý dự án
Hàng nghìn năm trước đây, triết gia Hi Lạp Socrates đã dạy học trò của mình “Tự biết mình”. Ngày nay, tôi muốn dùng cùng cách tiếp cận đó trong kĩ nghệ phần mềm bằng việc gợi ý rằng người quản lí dự án phần mềm.
1) Biết mục đích dự án của mình.
Với mọi dự án phần mềm, bạn phải đặt ưu tiên bởi vì bạn không thể hoàn tất mọi thứ ngay một lúc. Không có ưu tiên bạn sẽ không có khả năng hội tụ và đạt tới cái gì. Bạn nên có khả năng phát biểu mục đích dự án trong một câu kiểu như “Lịch biểu là ưu tiên số một” hay “Chức năng là quan trọng nhất”. Nếu bạn không thể nêu được điều đó, cơ hội đạt tới thành công của bạn sẽ không lớn.
2) Biết thành viên tổ của mình
Thành viên tổ của bạn là điều quan trọng nhất mà bạn có và hiệu năng của họ sẽ làm cho dự án của bạn thành công hay thất bại. Bạn phải chăm nom tới họ và đảm bảo tổ hoạt động như một đơn vị thống nhất chứ không phải như tập hợp các cá nhân. Việc trao đổi tổ là then chốt nên bạn phải đầu tư thời gian vào việc thúc đẩy tin cậy và đảm bảo rằng mọi người đều biết điều họ phải làm để đạt tới mục đích.
3) Biết khách hàng của mình
Bạn phải trao đổi với khách hàng trên cơ sở đều đặn (hàng ngày, hàng tuần). Họ sẽ cho bạn biết cái gì là quan trọng với họ và mặc dầu họ sẽ đổi ý thường xuyên nhưng bạn phải xây dựng mối quan hệ tốt với họ bởi vì sự thoả mãn của họ sẽ là bản chất cho thành công của bạn.
4) Biết qui trình của mình
Nhiều người thích viết mã trước rồi hỏi câu hỏi sau. Đó là lí do tại sao họ cần huấn luyện kĩ nghệ phần mềm bởi vì nếu bạn viết mã mà không hiểu rõ yêu cầu thì sẽ rất khó thay đổi một khi việc đã bắt đầu. Cho nên điều quan trọng là quyết định chính xác cách bạn sẽ định làm bằng việc lập kế hoạch mọi thứ tương ứng với qui trình và hiểu rằng người kĩ sư phần mềm giỏi bao giờ cũng tuân theo qui trình để làm việc hiệu quả. Bằng việc tuân theo qui trình bạn sẽ:
- Xây dựng niềm tin vào bản thân mình rằng bạn đang tuân theo bản lộ trình có kỉ luật.
- Có kế hoạch dự phòng trong sự cố điều gì đó đi sai
- Phát sinh bầu không khí có kỉ luật trong môi trường làm việc.
5) Biết nhiệm vụ của mình.
Ngày nay phần lớn các yêu cầu phần mềm đều phức tạp nên người quản lí dự án phải phân rã chúng thành các nhiệm vụ nhỏ hơn để tổ thực hiện chúng tương ứng. Việc phân rã và tổ chức các nhiệm vụ này là điều kiến trúc phần mềm là gì. Các thành viên tổ phải chú ý tới cách từng nhiệm vụ khớp với sản phẩm toàn thể. Thiếu cách tiếp cận hệ thống này bạn đi tới hàng trăm mảnh khác nhau mà không thể tích hợp lại được.
6) Biết thay đổi của mình
Chúng ta sống trong thế giới đang thay đổi. Khi dự án tiến triển mọi thứ chung cuộc sẽ thay đổi. Khách hàng sẽ đi tới những ý tưởng mới hay tổ của bạn có thể lâm vào những vấn đề nào đó trong thực hiện. Thay đổi phải được kiểm soát nếu bạn muốn thành công. Bạn cần xây dựng kế hoạch linh hoạt hấp thu được các thay đổi khi chúng tới nhưng bạn phải không chịu nhún với bất kì sức ép nào. Nếu bạn quá linh hoạt dự án của bạn sẽ ở ngoài kiểm soát như ngựa không có người cưỡi, nhưng nếu bạn quá cứng nhắc dự án của bạn sẽ vỡ như thuỷ tinh lúc thay đổi xảy ra. Bạn phải ước tính mọi thay đổi để nhận diện các tác động và xác định ưu tiên, thay đổi nào phải được thực hiện trước và thay đổi nào có thể chờ đợi và thảo luận kế hoạch của bạn với khách hàng.
7) Biết kiểm thử của mình
Đừng trông đợi mọi sự làm việc hoàn hảo nên bạn phải kiểm thử mọi thứ sớm nhất có thể được. Mọi người đều phạm sai lầm cho nên kiểm thử là cách tốt nhất để tìm ra và khử bỏ lỗi. Ngay khi bạn nhận được yêu cầu, chuẩn bị trường hợp kiểm thử bằng việc tự hỏi mình “Mình kiểm thử cái này thế nào đây?” Nếu bạn không thể đi tới trường hợp kiểm thử thì hoặc là bạn không hiểu yêu cầu hoặc là yêu cầu không được khách hàng xác định rõ. Trong trường hợp đó, hãy hỏi khách hàng họ thích kiểm thử nó như thế nào?
8) Biết giới hạn của mình
Thành công là việc chuyển giao sản phẩm đã hoàn thành cho khách hàng, họ được thoả mãn với kết quả. Để làm điều đó bạn phải linh hoạt. Đừng bị khoá chặt vào trong lịch biểu cứng nhắc mà thương lượng với khách hàng về khuôn khổ thời gian khả thi. Đừng bị mù quáng bởi phương pháp hay công cụ bởi vì chúng được thiết kế ra để hỗ trợ cho bạn chứ không giải quyết vấn đề của bạn. Bạn phải dùng tất cả các công cụ và người có sẵn cho bạn nhưng chú ý tới điều khách hàng muốn và điều chỉnh ưu tiên của bạn cùng kế hoạch của bạn cho phù hợp với hoàn cảnh.
—-English version—-
Project Manager
Thousand years ago, the Greek philosopher Socrates taught his students “Know yourself”. Today, I like to use the same approach in software engineering by suggest that software project manager:
1) Know your project goal.
For every software project, you must set priority because you can not complete everything at once. Without priority you will not be able to focus and achieve anything. You should be able to state the goal of your project in a single sentence such as “Schedule is priority number one” or “Functionality is the most important”. If you can’t, your chance of achieving success is not good.
2) Know your team members
Your team members are the most important thing that you have and their performance will make your project success or failure. You must take care of them and make sure the team operates as a unified unit and not as a collection of individuals. Team communications are essential so you must invest time in promoting trust and ensuring that everyone knows what they have to do to achieve the goal.
3) Know your customers
You must communicate with your customers on a periodic basis (Daily, weekly). They will let you know which is important to them and although they will change their minds often but you must build good relationship with them because their satisfaction will be essential to your success.
4) Know your process
Many people like to code first then ask question later. That is why they need software engineering training because if you code without clearly understand the requirements then it will be very difficult to change once it gets started. So it is important to deciding exactly how you’re going to do by planning everything according to a process and understand that a good software engineer always follow the process to work efficiently. By following the process you will:
- Build confidence in yourself that you are following a disciplined road map.
- Have a contingency plan in the event that something goes wrong
- Generate a disciplined atmosphere in the work environment.
5) Know your tasks.
Today most software requirements are complex so project manager must decompose them into smaller tasks for the team to implement them accordingly. The decomposition and organize these tasks is what software architecture is about. Team members must pay close attention to how each task fits the overall product. Without this systematic approach you end up with a hundred different pieces that can not be integrated.
6) Know your changes
We live in a changing world. As the project progresses things will eventually changes. Customers will come up with new ideas or your team may run into some issues during implementation. Changes must be controlled if you want to succeed. You need to build a flexible plan that absorbs changes as they come but you must not yield to any pressure. If you are too flexible your project will be out of control like a horse without a rider but if you are too rigid your project will break like glass every time change happens. You must evaluate all changes to identify impacts and determine priority, which change must be implemented first and which one can wait and discuss your plan with the customer.
7) Know your test
Do not expect things work perfectly so you must test everything as early as possible. Everybody makes mistakes so testing is the best way to find and eliminate errors. As soon as you get the requirements, prepare a test cases by asking yourself “How do I test this?” If you can not come up with a test case then either you do not understand the requirements or the requirements are not well defined by the customer. In that case, ask the customer how do they like to test it?
8) Know your limits
Success is the delivery of the finished product to a customer who is satisfied with the result. To do that you must be flexible. Don’t get locked into a rigid schedule but negotiate with the customer for a feasible time frame. Don’t get blinded by a method or tool because they are designed to support you but not solve your problems. You must use all the tools and people available to you but pay attention to what customer wants and adjust your priority and your plan to suit the conditions.