Ba nhân tố mấu chốt quan trọng có thể xác định sự thành công của dự án phần mềm: Con người, Qui trình và Công cụ.

Dự án phần mềm cần các qui trình để hoàn thành công việc phát triển và cần công cụ để hỗ trợ cho những qui trình này nhưng chính con người thực hiện công việc bằng cách tuân theo các qui trình này và dùng các công cụ này. Do đó, con người chịu trách nhiệm cho thành công hay thất bại của dự án.

Là người quản lí dự án, bạn phải luôn lưu tâm tới nhân tố con người. Phần lớn các vấn đề trong dự án phần mềm là vấn đề con người chứ không phải là vấn đề kĩ thuật. Trong 40 năm quản lí dự án phần mềm của mình, tôi chưa bao giờ thấy dự án thất bại bởi vì các kĩ sư không thể lập trình hay thiết kế, họ tất cả đều được huấn luyện làm điều đó, nhưng bị thất bại bởi vì ước lượng sai, thay đổi trong yêu cầu, hay không có lịch biểu được lập tốt.

Tôi tin vai trò của người quản lí dự án KHÔNG phải là làm cho mọi người làm việc mà TẠO KHẢ NĂNG cho mọi người làm việc. Người quản lí tốt sẽ thuê người đúng; làm cho họ thoả mãn nên họ không muốn ra đi, và hỗ trợ họ trong việc tạo ra môi trường làm việc ưa thích để cho họ có thể làm hết sức mình. Khi một nhóm người chia sẻ cùng một mục đích và hình thành nên tổ có động cơ cao, toàn thể môi trường làm việc sẽ thay đổi. Trong một tổ, tương tác là mọi điều và đó là lí do tại sao mọi người thích làm việc với nhau, hỗ trợ nhau, và gắn mọi nỗ lực vào công việc để vượt qua chướng ngại.

Hành vi của một người được xác định bởi niềm tin và giá trị. Niềm tin được hình thành từ kinh nghiệm có trước và thông tin nhận được. Giá trị là điều từng cá nhân coi là quan trọng. Niềm tin được tổ hợp với các giá trị dẫn lái hành động của từng cá nhân. Chẳng hạn, người kĩ sư có thể không thích kiểm điểm mã chương trình bởi vì người đó có thể bị đánh giá xấu trong con mắt bạn bè vì việc kiểm điểm có thể làm lộ ra nhiều lỗi của anh ta. Có lẽ vài năm trước, anh ta có thể đã có kinh nghiệm xấu trong kiểm điểm mã.

Để ảnh hưởng tới hành vi của một cá nhân, người quản lí tốt phải hiểu các giá trị và niềm tin gây ra hành vi của người ta và rồi nếu cần, giúp đỡ sửa chữa lại các niềm tin dựa trên thông tin sai. Người quản lí tốt phải giúp cho mọi người hiểu  các ưu tiên bằng việc thiết lập mục đích dự án và trao đổi chúng một cách rõ ràng cho tổ dự án.

Theo kinh nghiệm của tôi, các mục đích đơn giản và được viết rõ ra có nhiều khả năng thu được thành tựu. Người quản lí phải để cho tổ dự án biết điều mình muốn từ họ, cách mình đo nó, và vào lúc nào. Điều quan trọng là các mục đích là đạt được, điều đó có nghĩa là chúng ở trong phạm vi kiểm soát của tổ, bằng không họ coi các mục đích là không thể được và chẳng làm gì về nó cả. Phải có một cách thức khách quan để kiểm chứng việc đạt được mục đích. Bằng không tổ sẽ không có cách nào biết được nó thực tế đã đạt tới chúng hay chưa.

Tôi đã thấy nhiều người phạm phải sai lầm bằng việc đặt mục đích được phát biểu trong thời tương lai và để cho mọi người nghĩ họ đang suy nghĩ ước muốn. Chẳng hạn, với mục đích “tôi sẽ làm việc nhiều hơn,” tôi có thể coi mục đích này được đạt tới cho dù không tiến hành hành động nào, bởi vì tôi có thể ngồi trong ghế tự bảo mình rằng “tôi sẽ làm việc nhiều hơn.” Lưu ý rằng bởi vì thời tương lai, phát biểu này là đúng bởi vì nó không xảy ra hôm nay.

Tuy nhiên, nếu mục đích là “Do yêu cầu của khách hàng và vấn đề nghiệp vụ, mọi người phải làm việc 10 giờ một ngày, ba lần một tuần cho tới khi dự án được thực hiện xong ” thế thì mọi người không thể bỏ qua nó được và cố gắng làm cho nó đúng. Mục đích cũng cần có ngày tháng để có hiệu lực.

Ví dụ:

  • Giảm lỗi chương trình 20% trước 1/07/ 2008.
  • Tăng việc lập kế hoạch chính xác thêm 10% khi so với dữ liệu năm ngoái vào tháng 7/2007.
  • Tăng năng suất lập trình (số dòng mã lệnh trên 40 giờ) lên 10% mỗi năm từ bây giờ trở đi.

Hãy chắc chắn giữ cân bằng giữa con người, qui trình và công cụ. Nếu bạn không thể giúp được cho mọi người làm việc như một tổ và làm hết sức họ thì bạn sẽ không thành công và dự án của bạn sẽ thất bại.

—-English version—-

Success of Software Projects

There are three important key factors that can determine the successful of software project: People, Process, and Tools.

Software project needs processes to accomplish development works and tools to support these processes but it is people that do the work by following these processes and using these tools. Therefore, people are responsible for the success or failure of the project.

As project manager, you must keep the people factor in mind. Most problems in software project are people issues not technical. In my 40 years of managing software projects, I never see a project failed because engineers can not program or design, they are all trained to do that, but failed because wrong estimates, changes in requirements, or not well planned schedule.

I believe the project manager’s role is NOT to make people work but to MAKE IT POSSIBLE for people to work. A good manager will hire the right people; make them happy so they don’t want to leave, and supporting them by creating a favorable work environment so they can do their best. When a group of people share the same goal and form a highly motivated team, the entire work environment will change. In a team, interactions are everything and that is why people like to work together, support one another, and put all efforts into works to overcome obstacles.

A person’s behavior is determined by beliefs and values. Beliefs are formed from previous experiences and information received. Values are what an individual considers important. Beliefs combined with values drive the actions of each individual. For example, an engineer may not like code review because he believes that he may look bad in front of his friends because review may identify more of his defects.  Probably few years ago, he may have bad experience during a code review.

To influence the behavior of an individual, a good manager must understand the values and beliefs that are causing the behavior of a person then if needed; help correct any beliefs that are based upon false information. A good manager must help people understand priorities by setting up project goals and communicate them clearly to the project team.

From my own experiences, goals that are simple and well written are more likely to get achieved. Manager must let project team know what do he wants from them, how does he measure it, and by what time. It is important that goals are achievable, that mean they are within the control of the team, otherwise they think the goals are impossible and not doing anything about it.  There must be an objective way to verify the achievement of the goals. Otherwise the team would have no way to tell that it had actually reached them or not.

I have seen people making mistake by setting goals that are stated in the future tense and let people think they are wishful thinking. For example, with the goal “I will work more,” I can consider the goal reached even if no action is taken, because I can sit in my chair and tell myself that “I will work more.” Notice that because of the future tense, the statement is true because it doe not have to happen today.

However, if the goal is “Due to customer ‘s requirements and critical business issue, People must work 10 hours per day, three times a week until the project is done” then people can not ignore it and tries to make it true. Goals also need to have a date in order to be effective.

Examples:

  • Reduce code defects 20% by July 1, 2008.
  • Improve planning 10% more accurate as compared with last year data in July 2007.
  • Increase productivity for coding (lines of code per 40 hours) by 10% each year from now on.

Be sure to keep a balanced on people, process, and tools. If you can not help people to work as a team and do their best then you will not succeed and your project will fail.