Người phát triển phần mềm thường phàn nàn về người thiết kế: “Chúng tôi đã viết mã rồi thêm mã nữa nhưng bằng cách nào đó chẳng cái gì làm việc. Chung cuộc chúng tôi thấy rằng người thiết kế đã làm nó sai và phí thời gian của chúng tôi.” Người kiểm thử thường phàn nàn về người phát triển: “Chúng tôi đã kiểm thử và rồi nhiều kiểm thử nữa và tìm ra lỗi rồi lại nhiều lỗi hơn. Chung cuộc chúng tôi thấy là người phát triển thậm chí đã không kiểm thử mã riêng của họ mà để cho chúng tôi làm mọi kiểm thử cho họ.”

Một số người làm phần mềm không làm việc của họ mà đẩy nó sang pha tiếp để cho ai đó phải giải quyết nó. Mối quan hệ căng thẳng giữa người thiết kế và người phát triển và người kiểm thử là do việc phân tách bởi nhóm “chức năng” thay vì tổ chức dự án thành tổ “qui trình” với các vai trò và trách nhiệm được xác định.

Một số người quản lí dự án không biết cách xây dựng tổ hiệu quả. Họ dựa trên các chức năng tổ chức hiện có như nhóm phát triển, nhóm kiểm thử, nhóm thiết kế và tổ chức dự án của họ theo cùng cách. Trong trường hợp này, từng chức năng hoàn toàn bị tách rời. Người phát triển không tham gia vào công việc thiết kế hay nói chuyện với người thiết kế mà đợi cho tới khi thiết kế được làm xong và được trao cho họ để viết mã. Người kiểm thử không tham gia vào công việc phát triển hay nói chuyện với người phát triển mà đợi cho tới khi viết mã được làm xong và được trao cho họ kiểm thử. Việc đẩy công việc sang pha chức năng sau tạo ra sự không hài lòng và thất vọng trong dự án phần mềm.

Có những cách để giảm căng thẳng này bằng việc làm những thay đổi trong cách dự án được cấu trúc. Người quản lí dự án phải nhấn mạnh vào làm việc tổ và tạo điều kiện trao đổi trong các thành viên tổ. Người quản lí dự án phải xác định vai trò, trách nhiệm cho các thành viên tổ nơi công việc của họ được tích hợp. Chẳng hạn, người thiết kế chịu trách nhiệm về thiết kế phần mềm nhưng phải khuyến khích người phát triển cùng tham gia vào kiểm điểm thiết kế để hiểu cách thiết kế được cấu trúc. Bằng việc hiểu thiết kế rõ, người phát triển có thể viết mã của họ tốt hơn và nếu cần cung cấp phản hồi cho người thiết kế trong khi kiểm điểm thiết kế. Cùng điều này cũng có thể áp dụng được cho những người phát triển và người kiểm thử để tránh hiểu lầm và lẫn lộn. Toàn bộ tổ dự án phải làm việc cùng nhau hướng tới mục đích chung và mọi thành viên đều phải tuân theo qui trình được xác định. Chính việc của người quản lí dự án là tạo ra điều kiện làm việc thuận lợi cho tổ bằng việc loại bỏ các chướng ngại và xung đột trong các thành viên.

Nền tảng của tổ dự án là tin cậy. Mọi người phải cảm thấy thoải mái thảo luận về quan điểm của họ và nhận phản hồi. Dự án phải có họp tổ thường xuyên nơi các thành viên có thể chia sẻ ý kiến của họ và đề nghị sự hỗ trợ từ người khác. Người quản lí dự án phải chắc mọi người nhận ra những điểm mạnh và điểm yếu của họ. Dự án tốt được tạo nên từ những cá nhân có kĩ năng bổ sung cho nhau chứ không phải là các anh hùng cá nhân. Mọi thành viên tổ đều phải đặt tổ lên đầu. Người quản lí dự án phải chắc mọi thành viên hiểu cách đóng góp của họ là có giá trị nhưng thành công tổng thể bao giờ cũng là thành tựu của tổ.

Dự án phần mềm là công việc làm theo tổ. Không có lãnh đạo dự án mạnh, dự án sẽ không thành công. Tổ chức dự án tương ứng theo qui trình với các vai trò, trách nhiệm được xác định rõ và các kiểm điểm nơi toàn tổ có thể tham gia vào là cách tốt nhất để tránh “hồ nghi và  đấu tranh nội bộ”.

—-English version—-

Project teamwork

Software developers often complain about designers: “We have written code then more code but somehow nothing work. Finally we found that designers did it wrong and wasting our time.” Testers often complain about developers: “We have tested and more tests and found defects then more defects. Finally we found that developers did not even test their own code but let us do all the testing for them.”

Some software people do not do their jobs but push it to the next phase so someone has to deal with it. The strained relationship between designers and developers and developers and testers are due to the separation by “Functional” group instead of organizing project into “Process” team with defined roles and responsibilities.

Some project managers do not know how to build an effective team. They rely on existing organization functions such as development group, test group, design group and organize their project in the same way. In this case, each function is completely separated. Developers do not participate in design works or talk to designers but wait until the design is done and given to them to write code. Testers do not participate in development works or talk to developers but wait until coding is done and given to them to test. The pushing works into the next functional phase is creating discontent and frustration in software projects.

There are ways to reduce this tension by making changes in the way project is structured. Project manager must emphasize teamwork and facilitate communication among team members. The project manager must define roles, responsibilities for team members where their works are integrated. For example, designers are responsible for the software design but must encourage developers to participate in the design review to understand how the design is structured. By understand the design well, developers can write their code better and if needed provide feedbacks to designers during design reviews. The same can also be applied to developers and testers to avoid misunderstanding and confusion. The entire project team must work together toward a common goal and all members must follow a defined process. It is the job of the project manager to create favorable working conditions for the team by removes obstacles and conflicts among members.

The foundation of a project team is trust. People must feel comfortable to discuss their views and receive feedbacks. Project must have frequent team meetings where members can share their opinions and ask for supports from others. A good project manager must make sure everyone recognizes their own strengths and weaknesses. Great teams are made up of individuals with complementary skills not individual hero. Every team member must put the team first. Project managers must make sure every member understands how their contribution is valued but the overall success is always a team achievement.

Software project is teamwork. Without strong project leadership, the project will not be successful. By organize the project according to a process with clearly defined roles, responsibilities and reviews where the entire team can participate is the best way to avoid “mistrust and feudal infighting”.