Hãy hình dung công ty vừa tuyển một đồng nghiệp mới. Tạm gọi là A. A viết code khá ổn, không nghỉ trưa, không có ngày phép và không cần ngủ. Sáng bạn đến, A đã mở hai chục pull request. Chiều bạn về, A mở thêm hai chục nữa.
A không làm gì sai. A chỉ bấm cùng những cái nút bạn vẫn bấm, nhưng với tần suất mà chưa ai từng đo. Trước khi bàn công cụ nào hợp với A, tôi muốn quay lại xem cái nút đó được thiết kế cho ai.
Git ra đời từ chuyện của Linux
Theo lịch sử trong Pro Git , nhân Linux dùng BitKeeper từ năm 2002. Đến năm 2005, quyền dùng miễn phí bị rút, và Linus cùng cộng đồng tự xây công cụ thay thế. Yêu cầu khá rõ: nhanh, phân tán, chịu được nhiều nhánh song song, và gánh nổi một dự án cỡ nhân Linux. Người dùng mà Git hình dung là lập trình viên ngồi trước máy của mình, có cả lịch sử nằm trên đĩa, mất mạng vẫn làm việc được.
Rồi Git thắng, và thắng theo cách khiến nó khó bị thay. Tôi hay nghĩ đến bàn phím. Giả sử ngày mai có một bố cục phím mới, chuyên gia đánh giá gõ dễ hơn và nhanh hơn QWERTY. Bạn có đổi ngay không? Mười ngón tay bạn đã thuộc bàn phím này từ hồi đi học. Máy ở công ty, laptop của đồng nghiệp, cái bàn phím mượn ngoài quán cà phê đều xếp phím y như vậy. Đổi nghĩa là học lại từ đầu, và kể cả khi đã quen, mỗi lần ngồi vào máy của người khác bạn lại phải gõ chậm lại một nhịp. Đó là cái vướng trong câu chuyện QWERTY : thứ phổ biến nhất không tự động là thứ tối ưu nhất cho mọi việc, nhưng đổi cả thói quen lẫn hệ sinh thái quanh nó thì tốn kém đến mức ít ai muốn thử.
Với Git, chuyện cũng na ná. Ngón tay bạn gõ git pull trước khi não kịp nhớ nó làm gì. GitHub, CI, IDE, hook, script deploy, tất cả nói tiếng Git. Bao nhiêu công cụ, đồng đội và kinh nghiệm đã mọc quanh Git khiến nó rất khó bị thay, dù nó có là phần mềm tốt nhất mọi mặt hay không. Hai công cụ tôi sắp nói tới hiểu rõ điều đó, nên không chọn cách đập đi làm lại.
jj và Sapling: sửa nhà cho dễ ở
Dùng Git lâu, chắc bạn cũng từng thấy phiền vì phải nhớ quá nhiều thứ ngoài việc viết code. Đang sửa dở một tính năng, có người nhắn cần vá gấp một lỗi khác. Phần đang làm cất đi đâu để lát quay lại khỏi lẫn, câu hỏi ấy lặp lại mỗi ngày. jj được thiết kế để bạn bớt phải nhớ. Nó coi thư mục bạn đang sửa là một thay đổi được ghi nhận, và tự chụp lại trạng thái đó trước phần lớn lệnh. Bạn cứ chuyển sang việc gấp, xong rồi quay về, mọi thứ vẫn nằm đúng chỗ. Vì jj làm việc thẳng trên kho Git, đồng nghiệp vẫn pull như thường, không cần biết bạn dùng gì.
Sapling của Meta xuất phát từ nỗi khổ khác: kho mã quá lớn. Khi monorepo chứa gần như mọi thứ công ty có, một việc nhỏ cũng dễ bị kéo chậm, chỉ vì phải kéo về và lục lọi những phần không liên quan. Mỗi kỹ sư lại thường có nhiều thay đổi xếp chồng chờ review, nhìn cho gọn trong Git không dễ. Meta xây Sapling cùng hạ tầng quanh nó để lấy đúng phần code đang cần, và để thấy, sửa, gửi review cả chuỗi thay đổi mà ít phải xoay xở. CLI của Sapling cũng làm việc được với kho Git, nên không có cảnh cả team phải di cư cùng lúc.
Cả hai giải những chỗ vướng của người ngồi trước bàn phím. Còn A thì đụng vào một thứ khác: không phải cách bấm nút, mà là số lần bấm.
Khi A làm việc thành chuyện thường ngày
Quay lại với A. Lúc A còn đang thử việc, bạn xử lý hai chục pull request như xử lý một tuần bận. Khi A thành thường ngày, và không chỉ một A mà vài trăm A chạy song song cùng hàng nghìn job CI, nhịp của kho mã không còn là nhịp của người nữa. Mỗi thao tác vẫn y như cũ, nhưng số lần thao tác ấy được lặp lại thì không còn ai ngồi đếm nổi.
Chỗ này tôi hay nghĩ đến quán phở quen. Lúc chỉ có khách ngồi ăn tại chỗ, bếp và bàn chung một nơi là hợp lý. Rồi app giao hàng nở rộ, tài xế xếp hàng ngoài cửa. Sớm muộn chủ quán cũng phải dọn một quầy riêng cho giao hàng, để chỗ ngồi không còn là nút thắt.
Anthropic ở vào tình huống của quán ấy. Theo bài họ đăng ngày 13/10/2026 , monorepo nội bộ của họ có hơn ba mươi nghìn thay đổi được merge mỗi ngày, từ cả người lẫn agent. Bên cạnh kỹ sư còn có hàng nghìn job CI và agent, nhiều cái chỉ sống vài phút và chỉ cần một câu trả lời: thay đổi này chạm file nào, nhánh này có merge sạch không.
Câu trả lời của họ là Scion. Các thao tác versioning chạy trên server, nơi dữ liệu vốn đã nằm sẵn. Job nào không cần checkout thì gọi thẳng API, không phải dựng working copy chỉ để hỏi một câu. Kỹ sư vẫn có CLI và working copy trên máy, nhưng Scion là một hệ thống khác với toolchain riêng, chứ không phải một backend cắm vào Git hôm nay.
Nhìn lại thì đây là một chương tiếp theo khá tự nhiên. Git ra đời vì nhân Linux cần một kho mã nhanh và phân tán cho hàng nghìn người đóng góp. jj và Sapling ra đời vì người ngồi trước bàn phím mệt với thao tác và với kho mã quá lớn. Scion ra đời vì ngày càng nhiều người dùng của kho mã không ngồi trước bàn phím nào. Đó là các AI agent đang viết code, các job trong CI pipeline đang chạy kiểm tra, cùng nhiều công việc tự động khác.
Khám bệnh cho người không biết đau
Có một điều tôi mới để ý về A. Mọi công cụ tôi dùng hằng ngày đều được làm cho người biết mỏi tay, biết sốt ruột, biết càu nhàu khi phải chờ. Khi một việc hơi chậm, ta nhăn mặt. Cái nhăn mặt ấy là tín hiệu để công cụ được sửa.
A không có cái nhăn mặt đó. Những chỗ ta thấy hơi chậm nhưng chịu được, A lặp đi lặp lại cả nghìn lần mà không hề than phiền. Làm việc với A giống như khám cho một người không biết đau: bạn không thể chờ họ kêu rồi mới biết có chuyện, mà phải chủ động hỏi và nhìn. A không than không có nghĩa công cụ đang hợp với A.
Tôi đoán Scion chỉ là một trong những câu trả lời đầu tiên. Khi những đồng nghiệp không biết đau, không biết mệt ngày càng đông, sẽ còn nhiều công cụ và cách làm khác ra đời cho họ.
No comments yet