2020.04.28
Pair Programming và Mob Programming (Part 3)
Chủ đề: Pair và Mob Programing từ xa
Lời mở đầu
Xin chào các bạn, ở 2 bài viết trước, mình đã giúp các bạn phần nào hiểu rõ về 2 phương pháp lập trình đang được rất nhiều nhóm và công ty áp dụng, đó là Pair và Mob programming. Các bạn đã thử áp dụng nó vào trong công việc chưa? Trải nghiệm của các bạn như thế nào? Hãy chia sẻ điều đó với mình nhé.
Các bạn có thể đọc lại bài viết về Pair programming và Mob programming Part 1 & Part 2
Ở bài viết này, mình sẽ chia sẻ với các bạn một hình thức tiếp cận mới của 2 phương pháp trên, cũng là Pairing và Mobbing, cũng cùng một thời gian, một nhiệm vụ, cũng cùng trên một thiết bị nhưng khác nhau về không gian, chúng ta gọi đó là pair và mob programming từ xa.
Tại sao nên áp dụng Pair programming và Mob programming ?
Do chịu sự ảnh hưởng trực tiếp từ đại dịch Corona, cả team mình phải Work From Home (WFH) hơn 1 tuần. Điều này đã phát sinh rất nhiều vấn đề đối với team mình, một trong các vấn đề đó là mình không thể pair hoặc mob với các thành viên khác được.
Chúng ta hãy nhớ lại những kiến thức ở 2 bài viết trước, điều kiện để có thể vận hành pairing (mobbing) là: Cùng một thời gian, cùng một không gian trên cùng một thiết bị. Nhưng do cả team WFH nên không thể đảm bảo được cả 3 yếu tố. Như vậy, về cơ bản, team mình đã không đủ điều kiện để thực hiện pairing (mobbing).
Chúng ta cần tìm giải pháp để giải quyết vấn đề này.
Hướng giải quyết
Nhân gian thường nói: “Trong cái khó ló cái khôn”, trong điều kiện khó khăn về teamwork. Team mình đã suy nghĩ rất nhiều cách để có thể pairing (mobbing) với nhau.
Ý tưởng ban đầu chính là đảm bảo được điều kiện tiên quyết: Cùng một thời gian.
Team mình đã ứng dụng nhiều công nghệ để thực hiện ý tưởng đó. Bằng cách áp dụng chức năng share màn hình đang hiện có trên các công cụ call trực tiếp như: Skype và Zoom. Chỉ cần một bên share màn hình, thì gần như tất cả mọi thao tác trên máy của đồng nghiệp đã được truyền tải đến mọi người một cách nhanh chóng và real time.
Nhưng phương pháp này lại không thể giải quyết triệt để được điều kiện thứ 2: Cùng một thiết bị. Phương pháp này chỉ đúng khi cả 2 vai trò Driver và Navigator không thay đổi (Driver code trên máy và share screen để Navigator xem), nhưng rules của paring (mobbing) là luân phiên thay đổi vai trò liên tục, như vậy, cả team mình phải tìm thêm phương pháp khác để đảm bảo được sự thay đổi vai trò liên tục một cách dễ dàng.
Sau khi tìm hiểu và research rất nhiều, team mình quyết định áp dụng và trải nghiệm thử một công cụ có sẵn trên store Extensions của VS Code, đó là tool: VS Code Live Share. Công cụ này khá hữu ích khi giải quyết được gần như triệt để điều kiện thứ 2: Cùng một thiết bị.
Giới thiệu về VS Code Live Share
VS Code Live Share là một công cụ khá hữu ích do Microsoft phát triển. Nó giúp cho các thành viên khi thông qua tool này có thể code cùng nhau trên cùng một dự án.
Để giải thích rõ hơn, mình sẽ cho 1 ví dụ:
- Trong một project nọ, team cần sửa một file tên “article.php”.
- Khi chủ room bật file này lên, thì tất cả các member khác có trong room đều sẽ thấy.
- Khi bất kỳ member nào có tùy chỉnh code, thì tất cả các member còn lại đều có thể thấy những gì mà member đó tùy chỉnh.
- Khi chủ room vận hành dòng code trên command line, tất cả các member khác đều có thể thấy kết quả mà chủ room thực hiện.
Như vậy, với đặc điểm này, team đã có thể giải quyết được vấn đề: Cùng một thiết bị. Vì sao mình có thể đảm bảo như vậy: Vì bản chất cả project này được share cho tất cả các member có trong room. Nó xuất phát từ thiết bị của chủ room và được vận hành dựa trên chính môi trường phát triển của chủ room, các member còn lại chỉ là thông qua tool mà kết nối vào thiết bị của chủ room để tùy chỉnh code.
Giờ thì cả team đã có thể thoải mái đổi vai trò liên tục mà không bị cản trở nữa rồi.
Cách sử dụng VS Code Live Share
Hãy làm theo hướng dẫn của mình để có thể ứng dụng tool VS Code Live Share.
Bước 1: Vào Extensions của VS Code, tìm với từ khóa: “Live Share” và nhấn “Install”.
Bước 2: Sau khi cài đặt xong, một icon sẽ xuất hiện trên thanh sidebar của VS Code, các bạn click vào đây để bắt đầu sử dụng.
Bước 3: Tạo room hoặc tham gia vào một room
Bước 3.1: Tạo một room mới
Sau khi click OK, hệ thống sẽ hỏi quyền truy cập vào account Microsoft hoặc Github, team mình thống nhất chọn Github.
Khi click vào Github, hệ thống tự chuyển bạn đến một trang yêu cầu quyền truy cập, bạn nhấn đồng ý nhé. Sau đó hệ thống tự kết nối vào tài khoản. Cho đến khi màn hình hiển thị như bên dưới là thành công. Các bạn click vào “Invite participants”, sẽ có một thông báo hiện ra góc dưới màn hình với nội dung: “Invite link copied to clipboard! Send it to anyone you trust.”. Bạn gửi link này đến các member khác để họ có thể kết nối đến room của bạn.
Bước 3.2: Tham gia vào một room
Đối với các member tham gia với tư cách là khách, thì chỉ cần click vào link do chủ room gửi, hệ thống tự dẫn bạn đến một trang web và yêu cầu mở VS Code, bạn click vào “Open Live Share for VS Code”. Hệ thống tự truy cập đến room đã mở.
Trong trường hợp không hiển thị popup trên, bạn cũng có thể truy cập bằng cách khác: Vào VS Code, click vào icon Live Share, nhấn vào “Join collaboration session” và nhập link do chủ room gửi, sau đó gõ enter để truy cập vào room.
Vậy là đã xong rồi đó, từ giờ phút này, cả team mình đã có thể paring (mobbing) với nhau thoải mái rồi, nếu mình đang ở vai trò Driver, chỉ cần mở file bất kỳ lên, tùy chỉnh code thì tất cả các thao tác đều được truyền tải trọn vẹn đến các member khác (Với điều kiện mạng tốt).
Trải nghiệm
Trên thực tế, team mình đã trải nghiệm các phương pháp trên để pairing (mobbing) với nhau hơn một tuần và tổng kết lại một vài điểm sau:
- Có một số task mà kết quả phải xem trên browser, do đó team mình phải dùng share screen để xem kết quả trực tiếp trên máy của chủ room. Có một cách khác, đó là đưa code lên Cloud và truy cập vào link thông qua IP trên browser, nhưng cách này không khả thi cho lắm vì khá chậm và không đồng nhất về mặt cảm giác giữa các member.
- Cả team mình chủ yếu dùng skype và chức năng share screen trên skype để giao tiếp qua lại giữa các member, cũng như xem kết quả từ máy chủ room.
- Về việc tùy chỉnh code, khi mình đang code mà có member khác scroll đến dòng khác, mình cũng sẽ bị scroll theo nên khá khó chịu, do vậy team mình đã đề ra là không scroll trong lúc driver đang code.
- Mạng yếu cũng là một vấn đề khá nhức nhối, bản thân mình khi WFH sử dụng 3G là chính, nên tốc độ mạng cũng khá “cùi”, nó làm ảnh hưởng đến chất lượng cuộc nói chuyện với các member khác, thậm chí khi mình tùy chỉnh code. Tool phải delay mất hơn 10 giây để các đoạn code của mình truyền tải đến các member khác.
Nhìn chung, cách này chỉ áp dụng trong điều kiện khi cả team không thể gặp nhau trên cùng một không gian. Còn nếu không vấn đề gì xảy ra, hãy trở lại cách truyền thống để đạt hiệu quả tốt nhất khi pairing và mobbing.
Tổng kết
Mình xin kết thúc bài chia sẻ tại đây, thông qua bài này mình hy vọng sẽ giúp các bạn phần nào giải quyết được các vấn đề liên quan đến pair và mob programming trong điều kiện WFH.
Trong tình hình đại dịch Corona đang diễn biến phức tạp, hoặc trong bất kỳ điều kiện nào khiến cả team không thể gặp mặt nhau (VD: Remote job). Bạn đều có thể áp dụng các phương pháp này để có thể cùng nhau làm việc. Nhưng trên tinh thần “cứu cánh”, chúng ta mới dùng phương pháp này. Nếu điều kiện thuận lợi, hãy trở về cách truyền thống, nó sẽ giúp cả team đạt hiệu quả cao nhất khi pairing và mobbing.