Quản lí dự án phần mềm là khó bởi vì yêu cầu và công nghệ bao giờ cũng thay đổi và phần lớn những người quản lí không được đào tạo chính thức nào về cách quản lí dự án phần mềm.

Những người quản lí có kinh nghiệm biết cách dành thời gian từ lúc bắt đầu dự án để gặp gỡ với khách hàng để hiểu nhu cầu của họ và mong đợi của họ. Một số khách hàng coi lịch biểu là quan trọng khi những khách hàng khác coi chất lượng là quan trọng hơn. Với việc biết yếu tố nào là quan trọng, họ có thể lập kế hoạch dự án tương ứng.

Người quản lí thiếu kinh nghiệm có xu hướng kết thúc việc lập kế hoạch nhanh chóng để cho họ có thể viết mã. Đó là lí do tại sao nhiều người trong số họ không thành công bởi vì họ không biết đích xác điều khách hàng muốn.

Người quản lí có kinh nghiệm biết cách cân bằng các yếu tố mấu chốt của dự án như các mục tiêu chức năng, ngân sách, lịch biểu và chất lượng. Bằng việc xem xét cẩn thận từng yếu tố với kế hoạch dự án; họ có thể thương lượng với khách hàng về những thay đổi trong lịch biểu, chi phí và tài nguyên. Thương lượng là một trong những kĩ năng quan trọng nhất của người quản lí dự  án nhưng hiếm khi được dạy trong trường. Người quản lí có kinh nghiệm biết cách làm việc với khách hàng và thương lượng về điều thực tế có thể đạt tới được. Họ bao giờ cũng lập kế hoạch, thương lượng, cân đối, hỏi và nghe bởi vì họ biết họ càng dành nhiều thời gian cho lập kế hoạch, họ càng mất ít thời gian phải giải quyết vấn đề về sau.

Người quản lí thiếu kinh nghiệm thích viết mã, nhưng không thích lập kế hoạch.

Người quản lí có kinh nghiệm bao giờ cũng phân rã công việc dự án thành những nhiệm vụ nhỏ hơn để cho họ có thể ước lượng được chính xác hơn. Họ kiểm các ước lượng của mình với thành viên tổ, hỏi ý kiến của họ, hợp nhất dữ liệu trước khi lập kế hoạch lịch biểu. Họ cũng dùng danh sách kiểm và trang tính lập kế hoạch cho những nhiệm vụ này, những điều bao quát tất cả các bước cần thiết.

Người quản lí thiếu kinh nghiệm không biết cách phân rã hay ước lượng, họ chỉ đoán hay tuân theo bất kì lịch biểu nào khách hàng đưa cho họ. Không có thời gian đúng và lịch biểu không hợp lí, họ không bao giờ hoàn thành dự án đúng hạn.

KHÔNG có dự án nào hoàn hảo. Gần như mọi dự án đều có vấn đề, trong kiểm điểm kĩ thuật hay kiểm thử; sẽ có lỗi hay các vấn đề khác phải được làm lại. Người quản lí có kinh nghiệm biết cách lập kế hoạch để làm lại bằng việc đặt ra một số thời gian phụ trong toàn thể kế hoạch dự án để cho tổ dự án sẽ có đủ thời gian sửa chữa vấn đề và không vội vàng vào các hoạt động khác.

Người quản lí thiếu kinh nghiệm không biết cách lập kế hoạch để làm lại, họ giả định mọi sự đều tốt cho tới khi cái gì đó xảy ra, họ hoảng hốt. Vì họ không biết cách kiểm soát vấn đề, vấn đề sẽ kiểm soát họ.

Người quản lí có kinh nghiệm hiểu tầm quan trọng của đào tạo. Họ xác định các thành viên tổ cần bao nhiêu thời gian để cải tiến kĩ năng của mình và chuẩn bị thời gian và ngân sách cho họ. Họ hiểu rằng tổ có kĩ năng cao là nhân tố then chốt cho thành công và sẵn lòng đầu tư cho người của họ.

Người quản lí thiếu kinh nghiệm không đánh giá được giá trị của đào tạo. Họ coi nó là “tốn kém” cho nên họ không gửi tổ của họ đi đào tạo bổ sung. Ngay cả người giỏi nhất cũng sẽ cần đào tạo và không có đào tạo, kĩ năng của họ có thể trở nên lạc hậu vì họ không theo kịp những thay đổi công nghệ. Không dự án nào có thể thành công với “người thiếu kĩ năng”.

Theo nghiên cứu mới nhất, chỉ 23% dự án phần mềm được hoàn thành đúng thời gian, theo ngân sách với mọi chức năng được yêu cầu. 77% dự án phần mềm bị chậm, vượt quá ngân sách với ít chức năng hơn và cần nhiều thời gian hơn, nhiều tiền hơn để sửa chữa vấn đề.

Trong 35 năm làm việc trong công nghiệp của mình, tôi chưa bao giờ thấy một dự án thất bại bởi vì tổ dự án không thể viết được mã mà tôi đã thấy bao nhiêu dự án thất bại vì người quản lí không có kĩ năng được cần tới để quản lí dự án.

Đây có phải là lúc dạy nhiều về quản lí dự án phần mềm cho sinh viên hơn là để họ dành cả ba năm học vào việc viết mã?

—-English version—-

Project Management

Managing software projects is difficult because requirements and technology always change and most managers do not receive any formal training on how to manage software project. Experienced managers know how to spend time at the beginning of the project to meet with customers to understand their needs and their expectations. Some customers consider schedule is important when others think quality is more important. By knowing which factor is important, they can plan the project accordingly.

Inexperienced managers like to finish planning quickly so they can code. That is why many of them do not succeed because they do not know exactly what customers want.

Experienced managers know how to balance project’s critical factors such as functionality, budget, schedule, and quality objectives. By carefully consider each factor with the project plan; they can negotiate with customers for changes in schedule, costs and resources. Negotiation is one of the most important skills of project manager but rarely taught in school. Experienced managers know how to work with customers and negotiate on what is realistically achievable. They always planning, negotiating, balancing, asking, and listening because they know the more time they spend in planning, the less time they have to solve problem later.

Inexperienced managers like to code, but do not like to plan.

Experienced managers always decompose project works into smaller tasks so they can estimate more accurately. They check their estimates with team members, asking their opinions, consolidate data before plan the schedule. They also use checklists and planning worksheets for these tasks that cover all the steps needed.

Inexperienced managers do not know how to decompose or estimate, they just guess or follow whatever schedule the customer give to them. Without proper time and unreasonable schedule, they never complete the project on time.

There is NO perfect project. Almost all projects will have problems, during technical reviews or test; there will be defects or other issues that have to be reworked. Experienced managers know how to plan for rework by set aside some extra time in the overall project plan so the project team will have enough time to fix problems and not hurry into other activities.

Inexperienced managers do not know how to plan for rework, they assume everything is fine until something happen, they get panic. Since they do not know how to control the problems, the problems will control them.

Experienced managers understand the important of training. They determine how much time team members need training to improve their skills and prepare time and budget for them. They understand that a highly skilled team is the key factor for success and willing to invest in their own people.

Inexperienced managers do not value training. They consider it as a “cost” so they do not send their team for additional training. Even the best people will need training and without it, their skills may become obsolete as they do not keep up with technology changes. No project can succeed with “unskilled people”.

According to latest study, only 23% of software project completed on time, on budget with all required functionalities. 77% of software project are late, over budget with fewer functionalities and need more time, more money to fix problems.

In my 35 years working in the industry, I never see a project failed because the project team can not code but I have seen so many projects failed because project managers do not have the skill required to manage project.

Is it about time to teach more software project management for our students rather than having them spend three years in coding?