Chúng ta đều từng làm việc với một rockstar developer. Họ join team nhiều năm trước, đầy năng lượng. Có ý tưởng tốt về công nghệ mới, paradigm mới, architecture mới. Những ý tưởng cutting-edge khiến những người khác cảm thấy bị tụt lại phía sau.
Họ rewrite phần lớn core architecture của company. Đưa vào build process mới, tool mới, ngôn ngữ mới. Reject hầu hết pull request, raise bar cho cả team. Không ai hiểu code họ viết nhưng không ai dám thừa nhận.
Mọi task khó nhất đều giao cho rockstar. Họ làm nhanh hơn bất cứ ai. Engineering nghe rất ấn tượng, dù chỉ rockstar mới biết các phần ghép vào nhau thế nào.
Mọi người còn lại chậm hơn nhiều khi so sánh. Vật lộn theo kịp, học các library mới, và làm mọi thứ theo cách của rockstar.
Vài năm sau khi join team, đột nhiên họ biến mất. Chán rồi, muốn việc tốt hơn ở project thử thách hơn ở company lớn hơn.
Dọn dẹp hậu quả
Đột nhiên, bạn được giao tiếp quản project của rockstar. Đào vào code, bị chôn sống. Luồng data khó theo dõi đến mức cứ như ai đó đang cover up vụ giết người.
Bạn bắt đầu thử fix một bug đơn giản. Riêng việc chạy code trên laptop đã mất một tuần.
Nửa code viết bằng ngôn ngữ bạn không hiểu. Nửa còn lại dùng library bạn chưa nghe bao giờ.
Bạn nói với sếp rằng code cần rewrite. Sếp không tin, vì code do chính rockstar viết. Khi lội qua đống slop, bạn browse job posting và mơ chuyện bỏ việc.
Dọn dẹp sau rockstar
Tôi làm việc với nhiều team/agency cần dọn dẹp sau những rockstar này. Tôi thực sự thích thử thách hiểu và rescue một messy codebase. Như ngồi với hộp đèn dây bị rối, gỡ ra cho đến khi dùng được.
Tôi thấy vài pattern. Rockstar yêu code, yêu học, yêu paradigm mới — show ra rõ. Họ luôn push bản thân tới giới hạn khả năng, viết code clever nhất có thể. Họ focus đi nhanh nhất có thể.
Đáng tiếc, điều rockstar quan tâm cuối cùng là viết code mà người khác có thể work với.
Khi AI bước vào
Vài năm qua, hầu hết team bị overwhelmed bởi một đội quân rockstar. Mỗi lần ai đó start chat mới, có risk thêm một rockstar vào team.
Agent không nhớ hôm qua làm gì. Vui vẻ generate hàng chục nghìn dòng code trong vài phút. Làm task nhanh hết mức inhuman. Không quan tâm code có fit với phần còn lại của system hay không. Cũng không quan tâm system đang trở nên dễ hiểu hơn hay tệ hơn.
AI có toolbox “best practice” có thể không apply ở đây. Khăng khăng “belt and suspenders”, ngay cả khi độ phức tạp vượt benefit. Khi được review code của bạn, nó đưa ra danh sách dài improvement, nhiều cái bạn không đồng ý. Bar bị raise cho mọi người, nhiều người cảm thấy phải dùng LLM nếu không sẽ tụt lại. (Dù tôi tin chính những ai để LLM viết toàn bộ code sẽ là người tụt lại.)
Với quá nhiều generated code, độ phức tạp của system có thể tăng theo cấp số nhân. Phức tạp đến mức cách duy nhất để make sense là dùng LLM. Developer, team, cả company có thể trở nên addicted và phụ thuộc vào generative AI.
Dọn dẹp sau hàng trăm AI rockstar
Ngồi với đống slop không vui bằng dọn sau một rockstar. Ít nhất rockstar còn có design trong đầu, đang cố làm tốt nhất.
Vibe-coded slop không phải do một artificial developer viết. Nó generate qua nhiều chat khác nhau, nhiều context khác nhau. Như codebase do hàng trăm rockstar khác nhau viết, một feature/bugfix một lần.
Đôi khi technical debt nhiều đến mức không bao giờ trả hết.
Build software bền vững
Có nhiều cách dùng LLM mà không cho nó act như rockstar. Bạn có thể lead engineering, hướng LLM generate snippet nhỏ một lần. Đảm bảo software được viết theo cách mà mọi người trong team đều có thể hiểu và work với.
Nếu bạn thấy lạc, không hiểu LLM đang làm gì hay tại sao, tap brake. OK để chậm hơn, để đảm bảo software bạn generate là high quality. Cũng OK để chặn over-engineering, simplify và simplify cho đến khi architecture match với độ phức tạp của problem.
Cũng OK để LLM trong toolbox đôi lúc, tự viết code. Craftsmanship sẽ luôn ở trong tay chúng ta — một thứ không bao giờ outsource được cho máy.