08/07/2013 – Blogs of Prof. John Vu, Carnegie Mellon University
– This article is translated into Vietnamese by Ngo Trung Viet with the English
originals followed.
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.
______________________________________
Giáo sư John Vu, một người Mỹ gốc Việt, là một nhà khoa học nổi
tiếng nước Mỹ thuộc trong Top 10 những người sáng tạo nhất thế giới. Ông từng
là Phó Chủ tịch của Boeing. Sau khi rời Boeing, GS John Vu hiện là viện trưởng
Viện Công Nghệ Sinh Học ÐH Carnegie Mellon. Ông là dịch giả/tác giả bộ sách
Hành Trình về Phương Ðông, Ðường Mây Qua Xứ Tuyết, Ngọc Sáng Hoa Sen, Trên Ðỉnh
Tuyết Sơn,… và cuốn mới nhất 2016 là Khởi Hà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.
________________________________________
ĐỌC THÊM
Giới thiệu
Vietnam Carenet TẠI ĐÂY
Tủ Sách
Vietnam Carenet TẠI ĐÂY
Các bài
viết về Khởi Nghiệp TẠI ĐÂY
Các bài
viết về Lập Kế Hoạch TẠI ĐÂY
Các bài
viết về Lập Dự Án TẠI ĐÂY
Các bài
viết về Quản lý Dự Án TẠI ĐÂY
Các bài
viết về Kỷ Nguyên 4.0 TẠI ĐÂY
Các bài
viết về Agile & Scrum TẠI ĐÂY