TL vai trò và trách nhiệm

Tl là gì

Có bao giờ bạn tự hỏi vị trí TL là vị trí gì? TL có vai trò và trách nhiệm gì trong dự án? Có bao giờ bạn băn khoăn về công việc mình cần phải làm khi được tuyển hay được promote lên vị trí TL? Nếu có thì hãy tiếp tục đọc bài này nhé.

Trước hết tôi xin được giới thiệu tôi cũng là một lập trình viên như các bạn. Vì rất đam mê lập trình nên tối tìm hiểu rất nhiều về code và những thứ xung quanh nó. Tôi cũng rất nhiệt tình chia sẻ với các anh em về những thứ tôi đam mê nên được quản lý rất yêu quý. Từ một lập trình viên Fresher tôi đã được nâng lên thành Senior. Mọi chuyện bắt đầu khi anh quản lý nói với tôi rằng bước kế tiếp của con đường sự nghiệp là tôi phải trở thành một TL. Anh giao cho tôi một nhóm các bạn fresher, junior, senior và team chúng tôi được tung vào một dự án. Như những chiến binh Nga được tung vào chiến trường U Cà, chúng tôi đã quậy dự án trở thành một bãi chiến trường hỗn độn đầy bug, tech debt… Anh quản lý đã đến nói với tôi rằng tôi làm senior dev rất tốt nhưng thiếu khả năng lãnh đạo và quản lý team. Bạn có thấy câu chuyện quen không?

Sau một thời gian trầy trật cuối cùng tôi cũng có một cái nhìn rõ hơn về vị trí này và hôm nay tôi sẽ chia sẻ với các bạn.

TL có thể là kết quả của việc viết tắt tên của một trong 2 vị trí sau :

  • Technical Leader
  • Team Leader

Và ở đây chúng ta phân rõ vai trò lead team với team leader cũng như vai trò lead tech với người tech leader. Thực tế trong môi trường IT outsourcing ở Việt Nam thì rất ít công ty phân tách rõ ràng ở 2 vai trò này khi tiến hành tuyển dụng vị trí TL. Khi tôi ứng tuyển vị trí TL của một công ty, tôi đã thử hỏi xem kỳ vọng của họ về vai trò vị trí này là gì cũng như một câu hỏi trực diện “Anh/chị cần người lead team hay lead tech?” thì khoảng 80% — 90% nói rằng họ cần một người đáp ứng cả 2 vai trò hoặc nhấn mạnh vào vai trò lead team.

Tiểu tiết mà nói nếu phân tách vai trò tương ứng với vị trí thì có sự khác nhau cơ bản giữa vị trí team leader và technical leader về trách nhiệm họ đảm nhận.

  • Team Leader: là người thiên về quản lý và dẫn dắt team. Một team leader sẽ tuyển chọn, định hướng, quản lý và dẫn dắt team đi đến thành công. Do có kỹ năng quản lý đội nhóm tốt nên họ sẽ trợ giúp hiệu quả cho PM trong công việc quản lý team, họ định nghĩa ra các luồng làm việc hiệu quả, gắn kết sức mạnh mọi người, điều tiết resource ..etc làm việc giống như lớp đệm giữa Project Manager và team từ đó giúp PM có thời gian mở rộng năng lực quản lý trên nhiều team. Họ với kỹ năng mềm tốt cũng hoạt động trong việc thực hiện mentoring các thành viên của team, giúp các thành viên trong team phát triển năng lực cá nhân, lắng nghe, làm bạn và giải quyết các vấn đề mâu thuẫn trong team. Thường chúng ta có một team lead trong một team.
  • Technical Leader : Khác với Team Leader, Technical Leader tập trung vào kỹ thuật. Technical Leader giống như một chuyên gia trong lĩnh vực kỹ thuật được sử dụng trong dự án. Họ chịu trách nhiệm quản lý các khía cạnh kỹ thuật của hoạt động phát triển phần mềm trong một ngữ cảnh cụ thể như giải pháp, kiến trúc, các tiêu chí chất lượng, troubleshoot các vấn đề…etc nhằm đảm bảo giải pháp kỹ thuật được triển khai thành công. Họ hoạt động như lớp đệm giữa team và technical architect / solution architect. Họ cũng thực hiện việc phỏng vấn năng lực các member, nắm các điểm mạnh/yếu của từng member và thực hiện đào tạo các member đạt các kỹ năng cần thiết cho công việc trong một ngữ cảnh dự án cụ thể. Chúng ta có thể có nhiều Technical Leader trong một team.

Một dự án chỉ có thể delivery thành công nếu như không gặp vấn đề kỹ thuật và con người. Chính vì lẽ đó trong khi team leader được sinh ra để quản lý con người và giải quyết vấn đề hợp tác trong team thì technical leader lại được sinh ra để giải quyết các vấn đề kỹ thuật và đảm bảo không có trở ngại nào trong việc triển khai giải pháp kỹ thuật. Thực tế như đã nói ở trên bàn về sự tách biết Tech Leader với Team Leader trong một công ty out sourcing là vô nghĩa cũng như bàn về sự tách biệt người quản lý và người lãnh đạo vì chúng ta có xu hướng cần cả 2 trong 1. Chính vì vậy tôi sẽ nói về công việc và trách nhiệm của vị trí TL với hàm nghĩa cả 2 vai trò trên trong 1 người.

“Vậy TL thực ra là cần làm gì trong dự án?” là câu hỏi chung của những người đột nhiên một ngày được lên leader vẫn hỏi.

Theo quan điểm của tôi trước tiên TL sẽ đóng vai mấy vai quản lý/lãnh đạo :

  • Người quản lý và giám sát (Supervisor) : Chịu trách nhiệm giám sát toàn bộ các hoạt động trong team của mình
  • Nhà chiến lược (Strategist): Chịu trách nhiệm tổ chức phối hợp hoạt động trong team như kế hoạch phân chia công việc, luồng làm việc với ticket ( ticket workflow)..etc
  • Người liên lạc ( Communicator) : chịu trách nhiệm lên kế hoạch liên lạc (communication plan) như các kế hoạch họp, phân tích nhu cầu thông tin của từng người và điều phối thông tin một cách hiệu quả.
  • Nhà tổ chức (Organizer): Theo dõi trạng thái các tác vụ, đánh giá rủi ro, điều hành tổ chức con người và các nguồn lực khác phục vụ cho việc hoàn thành dự án
  • Người điều phối (Facilitator) : Chịu trách nhiệm quyết định các mục tiêu cho toàn team và điều hành team thực hiện để đạt mục tiêu.

Như vậy có thể thấy một số công việc cụ thể của team leader như :

  • Xây dựng team (Team up) : thực hiện tìm kiếm, phỏng vấn, xây dựng đội hình phù hợp nhất với nhu cầu công việc trong giới hạn resource cho phép.
  • Huấn luyện ( coaching ) : member để họ có được các kỹ năng làm việc hiệu quả cao. TL sẽ quan sát từng người, nắm điểm mạnh, điểm yếu của từng người để đưa ra những kế hoạch đào tạo cần thiết. TL có thể thực hiện trực tiếp việc coaching hoặc tổ chức mời đào tạo từ bên ngoài.
  • Định nghĩa mục tiêu (Identify Goal) một cách rõ ràng chung cho team và từng thành viên cũng như timeline để hoàn thành mục tiêu đó. TL cũng cùng team thống nhất cách thức đo lường tiến độ hoàn thành mục tiêu một cách rõ ràng. Trả lời các câu hỏi như mục tiêu cần đạt là gì? Chúng ta đo lường tiến độ nó như thế nào? Định nghĩa thế nào là sẵn sàng (Definition of Ready ), định nghĩa thế nào là xong (Definition of Done ) …
  • Đưa ra cách tiếp cận, phối hợp hoạt động (Team Work) của các thành viên một cách hiệu quả. Với một nguồn resource giới hạn, người TL hiểu được thế mạnh và điểm yếu của toàn team và từ đó đưa ra được một chiến lược để tối ưu hoá sức mạnh của team: thiết lập team rules, cách thức chia task, quy trình quản lý task, …
  • Trực tiếp theo dõi, điều chỉnh (Monitoring & Controlling) kịp thời hoạt động hàng ngày của team. Hàng ngày TL sẽ cần theo dõi trạng thái/tiến độ của các member, đưa ra những quyết định về phân phối lượng công việc phù hợp để vừa bám sát mục tiêu vừa đạt được sự cân bằng : Ai đang chậm deadline, ai đang rảnh rỗi, bố trí lại công việc thế nào để hoạt động dev và test không chờ đợi nhau …
  • Giải quyết mâu thuẫn ( conflicts ), loại trừ các trở ngại ( road blocker ) ngăn cản team vận hành. Trong quá trình hoạt động sẽ phát sinh nhiều mẫu thuẫn trong công việc hay những yếu tố bên ngoài tác động ngăn cản team thực hiện theo kế hoạch đề ra. TL sẽ phải là người chủ động tìm cách xử lý các vấn đề trở ngại đó.
  • Điều phối (Facilitator) thông tin thông qua các phương tiện như email, họp, chat để các thành viên đều được cung cấp đầy đủ thông tin trong công việc. Cung cấp các phản hồi thường xuyên và liên tục (CFR — Conversation Feedback Recognition) đến các thành viên
  • Xây dựng team (Team building) tạo ra một môi trường làm việc thoải mái, cũng cấp động lực tốt cho member. Động viên tinh thần các thành viên, tăng cường gắn kết.

TL tiếp theo sẽ đóng vai quan hệ trực tiếp với developers

  • Senior Developer : rõ ràng có một thực tại đó là technical leader vẫn cần phải tham gia code như một bạn senior developer. Tuy nhiên khác với developer vốn chỉ cần quan tâm đến task mình được giao với một tầm nhìn hạn hẹp trong phạm vi công việc mình được giao thì TL thường đảm nhận những công việc có sức ảnh hưởng rộng hơn đến hoạt động của team như : dựng base project cho team, CI/CD, quyết định source code management strategy, phát triển các module dùng chung quan trọng, review code và phân loại các vấn đề chung để đề ra các best practice etc.. Có thể thấy ở đây TL vẫn code nhưng ở một level cao hơn.
  • Solution Architect: hơi quá một chút nếu yêu cầu TL phải đảm nhận vai trò của một kiến trúc sư phần mềm tuy nhiên với các công ty IT outsourcing thì vị trí Software Architect tương đối không phổ biến nên các quyết định về định hướng kiến trúc phần mềm và thiết kế thường do TL kiêm nghiệm đảm nhận. Họ xem xét toàn bộ các khía cạnh dự án từ phương diện kiến trúc phần mềm, đặt ra các câu hỏi để đảm bảo rằng giải pháp kiến trúc đáp ứng không chỉ các yêu cầu chức năng mà cả các yêu cầu phi chức năng (Quality Attributes) . Trong một lĩnh vực hẹp nơi mà TL có nhiều kinh nghiệm thực chiến thì thực tế cho thấy họ hoàn toàn có thể đưa ra những quyết định về kiến trúc một cách chuẩn xác.
  • Mentor/Interviewer : khác với team leader thực hiện việc mentor/coach toàn bộ team về phối hợp hoạt động, technical leader thực hiện việc huấn luyện developer team để lấp đầy các điểm yếu về kỹ thuật cần thiết trong bối cảnh dự án cụ thể. Họ cũng thực hiện theo dõi, review performance và đưa ra các phản hồi với từng developer giúp đánh giá và phát triển năng lực của từng cá nhân. Ở phạm vi team họ thực hiện huấn luyện các developers về cách thức hợp tác trong hoạt động kỹ thuật và xử lý các vấn đề kỹ thuật ( như luồng phối hợp trên git, cách quản lý môi trường, …) . Họ cũng tham gia phỏng vấn và verify năng lực các thành viên đội kỹ thuật để lên kế hoạch training cụ thể cho từng người.
  • Strategist : TL ở vai trò này cần lên kế hoạch đo lường, kiểm soát và có các hành động kịp thời để đảm bảo chất lượng của sản phẩm ( source code) như đề ra các tiêu chuẩn chất lượng ( coding convention), kế hoạch thực hiện unit test, các chiến lược review source code ( code review check list, review workflow, dynamic review ) và kiểm soát nợ kỹ thuật (Technical debt ), kế hoạch delivery sản phẩm (Ship Good Quality Code Fast)

Như vậy có thể tổng kết trách nhiệm của TL trên bình diện kỹ thuật như sau

  • Thảo luận và đưa ra các giải pháp kiến trúc kỹ thuật thích hợp : sử dụng architecture styles nào ( n-tiers hay SOA hay microservice … ) và tại sao.
  • Thảo luận và đưa ra các hướng dẫn thiết kế ( design direction )
  • Đưa ra các lựa chọn phù hợp về technical stacks (Framework, DBs, Platform …)
  • Setup môi trường phát triển ban đầu ( dựng base project .. )
  • Định nghĩa, lên kế hoạch theo dõi kiểm soát, đảm bảo các tiêu chí chất lượng code:

– Định nghĩa mục tiêu chất lượng : số lượng code smells, số lượng tech debt, số lượng test failed

– Định nghĩa tiêu chí đo lường : coding conventions

– Lên Kế hoạch và thực hiện kiểm soát chất lượng code thông qua hoạt động review, unit test

– Liên tục thống kê, đo lường sức khoẻ của dự án theo tiêu chí đã định nghĩa

  • Định hình quy trình làm việc trong team developers
  • Kiểm soát sự hợp tác : kế hoạch quản lý source code ( merge code workflow, PR templates, số lượng người tham gia pull request, số lượng comment trên PR, số lượng approve và decline ) , tài liệu hoá và chia sẻ tài liệu …
  • Lên chiến lược delivery như sử dụng CI/CD, môi trường và quản lý môi trường
  • Tham vấn để giao task đúng người đúng năng lực
  • Tổ chức phỏng vấn, đánh giá năng lực thành viên mới
  • Đào tạo và tổ chức đào tạo nâng cao năng lực của thành viên trong team nhằm đáp ứng nhu cầu của dự án
  • Đánh giá performance của thành viên trong team, ghi nhận sự tiến bộ và liên tục đưa ra những phản hồi thẳng thắn và trực tiếp để member nhận ra mục tiêu và hướng tới mục tiêu.
  • Fireman : Tổ chức hướng dẫn và trực tiếp xử lý issue

Tôi hi vọng là với bài viết dài này đã cung cấp cho các bạn rõ hơn về vai trò và trách nhiệm của một TL trong dự án. Các công việc nêu trên là các công việc cơ bản chứ không phải toàn bộ các công việc mà một TLs có thể làm. Để trở thành TLs sẽ cần rất nhiều tố chất và có nhiều tố chất sẽ cần được mài dũa trong chính quá trình công việc.

Nếu bạn lựa chọn con đường này, chúc bạn thành công.