Câu chuyện cuối tuần

Hôm nay cuối tuần, Leader của nhóm, 1 người anh luôn quan tâm đến mọi người lại gửi câu chuyện cuối tuần. Thật thấm thía và cảm ơn anh luôn chia sẻ kiến thức, 1 điều mà không phải leader nào cũng làm thế.
Những bức ảnh vui về nghệ thuật quản lý

Tất cả chúng ta đều biết về nguyên lý vô cùng quan trọng trong kỹ thuật: modular design – nghĩa là tìm cách chia nhỏ hệ thống lớn ra thành nhiều phần nhỏ sao cho khi các thành phần nhỏ tương tác với nhau theo đúng như thiết kế, toàn bộ hệ thống sẽ cùng vận hành nhịp nhàng để giải quyết bài toán được đặt ra. Ngoài ra, các thành phần hoàn toàn có thể được thay thế dễ dàng.

Chẳng hạn, chiếc máy vi tính đã được tạo ra theo nguyên lý modular design. Máy vi tính gồm nhiều thành phần (component) độc lập (mainboard, dĩa cứng, CPU, màn hình, bộ nhớ), khi chúng ta lắp ráp các thành phần lại với nhau, toàn bộ hệ thống máy vi tính sẽ hoạt động nhịp nhàng. Cách thức giao tiếp giữa các thành phần đã được định nghĩa rõ ràng, cho nên dù ta có sử dụng mainboard của Asus hay của Gigabyte, hay mua các thanh RAM ở bất kỳ nơi đâu, miễn là các giao tiếp của chúng tương thích với nhau, ta sẽ có hệ thống hoàn chỉnh.


Photo Sharing and Video Hosting at Photobucket

Khi thiết kế phần mềm, chúng ta cũng vận dụng nguyên lý tương tự. Hình sau đây mô tả cách thiết kế một chương trình đơn giản có thể hỗ trợ xem nhiều loại văn bản khác nhau trên nhiều môi trường khác nhau.

Photo Sharing and Video Hosting at Photobucket

Một trong các bí quyết thành công trong kỹ thuật là phải vận dụng thật tốt modular design. Khi ta có một hệ thống dựa trên modular design, bài toán đưa ra sẽ luôn được giải quyết cho dù từng thành phần cụ thể có phải thay đổi (máy vi tính vẫn hoạt động tốt nếu ta thay cái màn hình hiện tại bằng một màn hình khác). Nói cách khác, bản thân từng thành phần là không quan trọng vì chúng có thể được thay thế dễ dàng, điều quan trọng là xây dựng được hệ thống và cách thức giao tiếp (còn gọi là quy chuẩn, quy định, tiêu chuẩn) giữa các thành phần với nhau.

Thử thách mới

Ở phần lớn những công ty, một nhân viên khi hoàn thành tốt nhiệm vụ chuyên môn trong một thời gian nhất định nào đó thì sẽ được đưa lên vị trí quản lý: có thể là quản lý dự án (project manager), hoặc là làm giám đốc chuyên môn, trưởng nhóm,… Nói chung, ai làm tốt chuyên môn thì cuối cùng sẽ được giao cho trách nhiệm quản lý những người khác. Dĩ nhiên là những người đó chưa hề có kinh nghiệm lẫn kiến thức gì về quản lý, nhất là quản lý con người. Nhưng điều đó không là vấn đề lớn đối với những người lãnh đạo cấp trên trong công ty, vì họ nghĩ nếu một nhân viên đã từng làm tốt công việc chuyên môn thì chắc chắn anh ta cũng sẽ biết cách lãnh đạo những người khác làm tốt công việc chuyên môn tương tự. Những nhân viên đó cũng nghĩ như vậy khi mới được giao nhiệm vụ mới.

Hệ quả là gì? Những nhà quản lý mới vào nghề đó sẽ có xu hướng suy nghĩ mọi vấn đề giống hệt cách họ đã từng làm chuyên môn. Giả sử cần xây dựng một đội ngũ (team) cho dự án mới, họ sẽ suy nghĩ team cũng như là “hệ thống”, và thành viên sẽ là “thành phần”. Họ sẽ quan tâm đến chức năng và yêu cầu của từng “thành phần” đó (có khả năng lập trình Java, biết Anh văn, sử dụng được Visual Studio,…), đồng thời cách mà các “thành phần” đó “giao tiếp” với nhau ra sao (sử dụng các hệ thống version control, xây dựng requirement management, change management, tổ chức code review,…).

Ví dụ ta thiết kế ra một “hệ thống” gồm các “thành phần”: designer, coder, và tester. Đối với hai thành phần đầu tiên, ta đã tìm ra được chị Chảnh và anh Hai Lúa để “lắp” vào hệ thống. Nhưng còn “thành phần” thứ ba thì chưa tìm ra được ai.

Photo Sharing and Video Hosting at Photobucket

Giả sử rằng ta đã xây dựng đầy đủ hết tất cả các quy trình (CMMi chẳng hạn), công cụ hỗ trợ (thuộc loại mạnh mẽ nhất), và đã có chị Chảnh và anh Hai Lúa đáp ứng đầy đủ các yêu cầu đặt ra, nếu bây giờ ta tìm được “thành phần” còn sót lại là tester, thì “hệ thống” có vận hành được không?

Thử thách lớn lao

Để trả lời câu hỏi đó. Chúng ta hãy thử hình dung ra một tình huống sau. Vào một ngày nào đó, phòng nhân sự báo cho bạn biết có một ứng viên đáp ứng đầy đủ các yêu cầu của “thành phần” tester: biết lập trình C++ cơ bản, hiểu biết về nghiệp vụ kinh doanh mà phần mềm bạn đang làm về, thành thạo các công cụ TestRunner, có thể giao tiếp tốt bằng tiếng Anh, kinh nghiệm làm tester trên 2 năm. Phòng nhân sự hỏi bạn xem có thể nhận ứng viên này vào làm hay không. Bạn không cần suy nghĩ và yêu cầu phòng nhân sự bố trí một buổi phỏng vấn ngay đối với ứng viên đó.

Ngay giây phút đầu tiên gặp mặt ứng viên đó, bạn hoàn toàn bị “choáng”. Ứng viên đó không phải là một anh hay chị nào đó, mà chính là một con gà mái. ImageVâng, đó là một con gà mái đang ngồi trước mặt bạn, nhưng gà mái này vẫn đáp ứng đầy đủ các yêu cầu đặt ra đối với “thành phần” tester. Chỉ có điều đó là một con gà mái. Bạn thử hình dung ra “hệ thống” sau đây:

Photo Sharing and Video Hosting at Photobucket

Bạn có nghĩ “hệ thống” trên sẽ vận hành được không? Đây là một câu hỏi nghiêm túc và một tình huống được giả dụ hoàn toàn nghiêm túc.

Í ẹ, ai lại đi làm việc với gà mái bao giờ?

Chắc chắn bạn, cô Chảnh, hay anh Hai Lúa sẽ suy nghĩ như vậy. Chẳng ai dám nghĩ đến chuyện làm việc chung với gà mái, chứ đừng nói đến khả năng hệ thống có vận hành được hay không!

Rất thường xuyên chúng ta gặp tình huống tương tự trong một nhóm làm việc. Bạn có đầy đủ những con người với phẩm chất phù hợp với chức năng công việc, có quy trình làm việc rõ ràng, có công cụ và phương tiện, nói chung là có tất cả. Nhưng chỉ có điều mọi người lại không thể làm việc chung với nhau. Anh A vốn không ưa người ở tỉnh X nên khi biết anh B cũng là người tỉnh X, anh A và anh B không hoà thuận với nhau được. Chị C thì lại không hài lòng về mức lương của mình so với xung quanh nên không làm việc tốt. Anh D thì lại không thể tập trung được nếu như xung quanh quá ồn ào. Vân vân và vân vân.

Nếu bạn miễn cưỡng “lắp” các “thành phần” lại với nhau, vẫn một mực tin rằng chỉ cần chúng “giao tiếp” với nhau đúng như tinh thần modular design là được, thì bạn nên sẵn sàng đón nhận điều này: “hệ thống” của bạn sẽ tan tành trong chốc lát, và trước đó có lẽ các “thành phần” cũng tự bỏ rời khỏi “hệ thống” đó rồi.

Điều gì sai ở đây?

Sai lầm lớn nhất ở đây là những người mà bạn đang quản lý không phải là những thành phần có thể “tháo lắp” được dễ dàng như trong một cỗ máy. Họ là con người, không phải là cỗ máy, cũng không phải là component, interface, class, module, subsystem,… Bạn có thể dùng modular design để định nghĩa cách thức các thành phần trong hệ thống giao tiếp với nhau: truyền nhận dữ liệu ra sao; kích hoạt hay chờ đợi nhau thế nào; kích cỡ, vật liệu tiêu chuẩn là gì;…

Nhưng con người giao tiếp với nhau theo cách phức tạp hơn nhiều. Cái mà modular design không thể giúp bạn định nghĩa được, đó chính là phần gì đó thuộc về tâm lý, cảm xúc, cái gì đó rất con người, rất nhân bản. Và con người không thể cùng làm việc với nhau hiệu quả được nếu thiếu những điều đó, dù bạn có cố gắng ép chúng vào những “giao thức” mà bạn đã đặt ra.

Tôi cam đoan với bạn rằng cho dù gà mái có thể thực hiện đầy đủ các yêu cầu: biết cách phát hiện lỗi của phần mềm, dùng Excel để báo cáo lỗi, biết viết các script để kiểm tra phần mềm một cách tự động, thậm chí biết giao tiếp bằng tiếng Anh (không kể tiếng Việt), gà mái vẫn không thể ngay lập tức làm việc được với những người khác sau khi bạn “lắp” nó vào trong hệ thống của bạn. Đơn giản là bởi vì chị Chảnh và anh Hai Lúa không hề suy nghĩ về người đồng nghiệp làm “tester” giống như cái mainboard “suy nghĩ” về cái CPU gắn lên nó. Mainboard chỉ cần biết cái CPU có socket, có bus tương thích với mình là được, nó không cần quan tâm cụ thể cái CPU ra sao nữa. Nhưng con người thì hoàn toàn khác, trong đó câu chuyện về gà mái là một ví dụ điển hình.

Chuyện đơn giản thế này thì ai lại chẳng hiểu, nhưng…

Nhưng thực tế thì phần lớn chúng ta, những người làm kỹ thuật, thì lại không hiểu! Khi dự án bị trục trặc, hoặc là khi đội ngũ làm việc không tốt, chúng ta sẽ cố gắng đi tìm nguyên nhân đâu đó liên quan đến vấn đề kỹ thuật, hoặc thậm chí chúng ta sẽ đi tìm ngay một biện pháp kỹ thuật nào đó để khác phục vấn đề.

· Có thể là do chúng ta vận dụng quy trình CMMi chưa chính xác nên giao tiếp giữa các thành viên chưa hiệu quả. Vâng, bạn có thể lục tung tất cả các tài liệu về CMM, CMMi, hay XP, RUP, hay gì gì đi nữa, nhưng chắc chắn không có chỗ nào nói rằng quy trình này là “chống chỉ định” đối với gà mái, và cũng không có chỗ nào chỉ bạn cách giải quyết vấn đề khi làm việc với gà mái.

· Có thể công cụ lập trình chúng ta dùng chưa tốt nên hiệu suất làm việc của mọi người chưa cao. Ồ, nếu bạn có thể yêu cầu các chuyên gia xem họ có thể phát triển một phiên bản đặc biệt cho bạn, ví dụ như Super Eclipse for Chickens, hoặc là Visual Power Studio Chickens Edition, biết đâu vấn đề của bạn sẽ được giải quyết.

· Có thể nếu chúng ta định nghĩa lại các “giao thức”, vấn đề sẽ được giải quyết. Bạn có thể thêm vào điều kiện ràng buộc “thành phần” tester không được là gà mái, nhưng nếu tester là người Hồi giáo, là cụ già U90, là tình địch cũ của một thành viên trong nhóm, là vịt, chuột, chim, cú, quạ, mèo,…. thì sao?

Rõ ràng con người không thể là những “thành phần” có thể tháo lắp được. Nhưng thực tế thì sao? Những người trong ngành IT có hiểu điều này không? Và họ đang làm gì? Tôi thử nêu nhận xét của riêng mình ở đây.

Thực sự đối với những dự án bị thất bại (trễ tiến độ, hủy bỏ giữa chừng, các thành viên giải tán, quá nhiều lỗi), nhất là các dự án gia công phần mềm, chúng ta rất ít khi nghe nói đến những nguyên nhân đại loại như:

· Công nghệ khó và phức tạp quá nên không làm chủ được.

· Yêu cầu kỹ thuật quá cao nên không biết cách giải quyết.

Thật ra những vấn đề kỹ thuật rất đơn giản và chúng ta luôn có thể giải quyết được (thậm chí đến mức nhàm chán), nhưng đâu đó vẫn có những nguyên nhân khiến dự án thất bại: những điều thuộc về quan hệ giữa người với người, giữa các thành viên với các thành viên, giữa nhân viên với sếp… Những vấn đề này luôn tồn tại ở bất kỳ nơi đâu, nhưng tôi có cảm tưởng mọi người trong ngành IT chưa quan tâm nhiều đến chúng.

Tôi đã phỏng vấn rất nhiều bạn sinh viên đi xin việc, đa số các bạn đều có nguyện vọng sau này được đảm nhận vai trò lãnh đạo hay quản lý, vì vậy các bạn muốn trước mắt sẽ đi du học để có thể tích lũy đủ kiến thức cho các vai trò đó. Nhưng khi tôi hỏi kỹ thì thấy rằng các bạn đều muốn học về hệ thống thông tin, trí tuệ nhân tạo, cơ sở dữ liệu, siêu tính toán, hoặc là học về quy trình phần mềm,… Tôi hơi thất vọng vì chưa bao giờ được biết đến bạn sinh viên nào muốn học về cách để giúp người và gà mái có thể làm việc tốt với nhau, vì tôi nghĩ đây mới là điều thiết yếu nhất trong quản lý, là điều mà ở Việt Nam chúng ta đang cần nhất.

Hoặc tôi cũng biết đến một số bạn bè, sau khi đi làm một thời gian thì cảm thấy hơi “đuối” nên muốn học tiếp lên cao, hy vọng khi quay lại làm việc sẽ tốt hơn, sẽ có nhiều cơ hội hơn. Nhưng tôi cũng chưa từng nghe ai nói rằng sẽ đi học để biết cách giúp gà mái và người làm việc hiệu quả. Ngược lại, có cảm tưởng như mọi người đang cố gắng đi học để biết thêm những lý thuyết còn mạnh hơn modular design, những phương pháp luận cao hơn, những quy trình phần mềm tiên tiến, để hy vọng có thể “lắp đặt” người và gà mái vào làm việc dễ dàng.

Tôi có một giấc mơ

Đêm qua tôi có một giấc mơ. Tôi mơ thấy một ngày nào đó chúng ta sẽ hiểu rằng tất cả những kiến thức và kinh nghiệm về kỹ thuật mà chúng ta có được, chúng ta đã biết cách vận dụng thật tốt vào trong công việc. Tôi mơ thấy một lúc nào đó chúng ta sẽ hiểu rằng điều chúng ta thực sự thiếu thốn vào lúc này, đó là khả năng quản lý con người, không phải bằng kiến thức kỹ thuật, mà bằng kiến thức và kinh nghiệm về quản lý. Chúng ta sẽ thấy và đối xử con người như là con người, chứ không xem con người là part, component, module, interface, subsystem, package,… Chúng ta sẽ hiểu rằng mỗi một con người là một thực thể duy nhất, có nét độc đáo riêng, không ai có thể thay thể hoàn toàn được ai; và không bao giờ có cách thức nào để định nghĩa một giao diện (interface) chung cho con người.

Tôi mơ thấy một ngày nào đó, ở Việt Nam, siêu nhân có thể làm việc với Nobita; gà mái, lừa, vịt, gấu, nhà sư,… có thể làm việc được với nhau. Ai đã từng tham gia vào một nhóm với đủ “thành phần” như vậy, với những nét riêng của từng thành viên, với một mục tiêu chung, với sự tin tưởng vào nhau, đều hiểu rõ làm việc trong đó vui và hiệu quả như thế nào. Vì vậy, chúng ta cần những nhà quản lý giỏi để điều đó có thể xảy ra.

Photo Sharing and Video Hosting at Photobucket

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: