Từ dark factory đến khu vườn phần mềm
Vì sao Camunda bỏ ẩn dụ dark factory để dùng khu vườn: agent làm code mọc lên, con người dựng và chăm sóc cấu trúc; kèm demo Nano BPM và CubeFarm.
✓ Đã duyệt độc lập · cập nhật 31/10/2026 · 16 min
1. 30 năm lập trình, 18 tháng không tự viết code
Josh Wulf tự giới thiệu là một kỹ sư từng làm ở Red Hat. Anh đã lập trình chuyên nghiệp hơn 30 năm. Theo lời anh trong video đăng ngày 30/10/2026, trong 18 tháng gần nhất anh không tự viết dòng code nào, vậy mà lượng code anh làm ra và deploy còn nhiều hơn cả mấy thập kỷ trước đó trong sự nghiệp kỹ sư của mình. Anh cũng cho biết (tính đến video đăng ngày 30/10/2026) mình đã có hơn 3.000 giờ pair programming và điều phối LLM trong phát triển phần mềm.
Josh vừa trở về từ Agentic Engineering Day NZ, nơi anh nói ở hội nghị chính và ở các buổi talk trước hội nghị. Ở đó anh làm một bộ explainer, sau đó mở rộng thành một loạt chương. Anh nói lúc đầu là tám hay chín chương, rồi chốt lại: chín chương (tính đến video đăng ngày 30/10/2026), giải thích những điều cơ bản của agentic engineering. Toàn bộ dựa trên việc phân tích ngược lại xem điều gì đã khiến cách làm này thành công.

2. Dark factory ở Camunda và loạt explainer
Josh nhắc lại điều anh đã nói ở hội nghị: tại Camunda, nơi anh đang làm (tính đến video đăng ngày 30/10/2026), anh và nhóm bắt đầu "dark factory" của mình vào tháng 7/2025. Anh nhắc đó cũng là lúc Dex Horthy bắt đầu dark factory của anh ấy, "nếu bạn biết Dex". Theo Josh (video đăng ngày 30/10/2026), factory của Dex thất bại, còn factory của Camunda thì thành công và vẫn tiếp tục lớn lên, mở rộng.
Vì vậy, anh và nhóm đã đào sâu xem điều gì làm nó thành công, và làm sao mở rộng thành công đó ra cả tổ chức rộng hơn và ra ngành. Theo Josh (video đăng ngày 30/10/2026), loạt explainer này là về chuyện đó.
3. Chương đầu tiên: từ nhà máy tối sang khu vườn
Josh muốn đi qua từng explainer, lần lượt từng cái một, trong một loạt video. Video này (đăng ngày 30/10/2026) xem chương đầu tiên: "the organization of agents", cách tổ chức các agent. Chương này nói về một sự chuyển đổi trong phép ẩn dụ mà anh và nhóm dùng cho vòng đời phát triển phần mềm có agent (agentic software development lifecycle): từ dark factory sang một phép ẩn dụ hữu cơ hơn.
Anh nói mình phải ghi công cho người đầu tiên đã hệ thống hoá ý này và "nói nó thành hiện thực" trong tai anh (theo Josh, video đăng ngày 30/10/2026): phép ẩn dụ khu vườn. Nhưng trước khi tới đó, Josh dẫn người xem đi một hành trình nhỏ.
4. Bộ công cụ: Nanocoder và Nano BPM
Để điều phối agent, Josh đang mở một terminal với nhiều session khác nhau. Anh dùng Nanocoder, mà anh mô tả (video đăng ngày 30/10/2026) là một agent harness dạng CLI chạy trong bộ nhớ, nặng 6 megabyte, do chính anh viết bằng Rust. Anh làm nhiều việc điều tra và lập kế hoạch ngay ở đây.
Còn để điều phối phần việc thật, anh dùng một thứ gọi là Nano BPM. Theo Josh (video đăng ngày 30/10/2026), đó là một agent graph orchestration engine dành cho máy trạm của developer, và nó đặc biệt hợp với loại việc này. Trên màn hình là trang chủ của Nano BPM với dòng tiêu đề "Agent Graph Orchestration for the Developer Workstation".
5. Web console: các convergence loop chạy dưới dạng BPMN
Josh mở web console. Đây là giao diện cho phần việc đang chạy, và tất cả được quản lý dưới dạng Business Process Model and Notation (BPMN). Anh xem các instance đang active, tên là "convergence-loop". Lúc đó (demo trong video đăng ngày 30/10/2026) có một nhóm agent đang hội tụ với reviewer GitHub Copilot: xử lý các review comment, và đẩy bất cứ thứ gì cần con người chú ý vào task inbox trong giao diện.
Anh giải thích: BPMN giống như một state diagram, một state diagram chạy được, định nghĩa workflow mà các agent sẽ đi qua. Theo Josh (video đăng ngày 30/10/2026), nó còn cho thấy workflow đang chạy: anh có thể mở một instance đang chạy và xem dữ liệu lịch sử về những gì đã xảy ra, kiểm tra xem các agent khác nhau đang làm gì.

Instance đầu tiên không có nhiều thứ để xem. Josh thử một cái khác: nó ghi "Starting". Anh tìm xem có cái nào nhiều dữ liệu hơn không, nhưng cái nào cũng đang ở trạng thái starting. Anh mở thêm một cái đang "tool calling", trông như lẽ ra phải có nhiều dữ liệu hơn. Josh đoán có thứ gì đó chưa được nối đúng: văn phòng của anh bị mất điện đêm hôm trước, anh phải khởi động lại mọi thứ, nên có thể anh đã khởi động sai. Dù sao, đây là loại giao diện mà anh và nhóm đang dùng (tính đến video đăng ngày 30/10/2026).
6. Lớp SDLC và hộp việc cần con người
Josh nói phần vừa xem là lớp quản lý quy trình nghiệp vụ chung (anh tự sửa: "không phải trừu tượng, mà là generic"). Bên trên đó, anh có một lớp theo domain cụ thể: SDLC (demo trong video đăng ngày 30/10/2026).
Trong lớp này (demo trong video đăng ngày 30/10/2026) có một trang tổng quan về những gì đang diễn ra: các PR convergence đang active, một số feature đang được tạo, và các task cần con người chú ý. Josh gọi phần cuối giống như một to-do list: các agent sẽ đẩy việc lên để anh xử lý, và anh thậm chí có thể cho một agent tự giải quyết chúng khi phù hợp.

7. CubeFarm: tổ chức phần mềm trong một toà nhà
Josh nói nếu bạn đã thấy CubeFarm, bạn có thể nhận ra giao diện kiểu hoạt hình này, vì anh đã mượn thiết kế từ đó. Nhưng rồi anh nối thẳng CubeFarm vào hệ thống. CubeFarm là một giao diện 3D, kiểu VR, do một developer khác tạo ra (anh nói lúc đó không nhớ ra tên người này), và dự án tên là CubeFarm. Theo Josh (video đăng ngày 30/10/2026), nó mô hình hoá mọi thứ như một tổ chức phát triển phần mềm trong một toà nhà, "software factory, nếu bạn muốn gọi vậy".
Các process đang chạy nằm ở các tầng khác nhau của toà nhà. Josh đi lên một tầng mà giao diện báo có người đang làm việc. Trên tấm bảng ở phía trước là state diagram của workflow đang chạy, và có một coder đang làm việc đâu đó trong tầng (demo trong video đăng ngày 30/10/2026).

Anh tìm thấy coder đó, nhìn qua vai nó, và thấy agent đang làm gì. Bạn thậm chí có thể tương tác với chúng, "nhưng sao lại làm thế?", Josh nói. Mọi thứ chạy headless, nhưng có giao diện kiểu này để nhìn vào (demo trong video đăng ngày 30/10/2026).
Josh kể rằng trong talk ở hội nghị, khi anh cho xem giao diện này để minh hoạ ý dark factory và phép ẩn dụ dark factory, mọi người đã vỗ tay. Nhưng theo anh, một điều hiển nhiên rút ra từ đây là anh và nhóm đang quản lý một quy trình nghiệp vụ (business process). Trước đây BPMN dành cho các task scripting tự động và cho con người. Josh cho rằng (video đăng ngày 30/10/2026) agentic coder giống một thứ lai giữa hai bên: chúng có một số đặc điểm giống cả hai, và cùng những primitive đó dùng được với chúng.
8. Chế độ dark factory: vì sao nó có vẻ thù địch với con người
Josh đã thêm một chế độ dark factory vào giao diện, và anh bật nó lên: đèn tắt hết (demo trong video đăng ngày 30/10/2026). Anh giải thích tên gọi dark factory đến từ những nhà máy nơi hệ thống tự động và robot làm toàn bộ việc; chúng không cần nhìn, nên người ta có thể tắt đèn, và gọi đó là nhà máy tối.

Nhưng theo Josh (video đăng ngày 30/10/2026), một điều hiển nhiên khi nhìn cảnh này, và nó sẽ kích hoạt trong tiềm thức của bạn kể cả khi bạn chưa từng nghĩ tới, là: khi đèn tắt như thế này, môi trường này trông vốn dĩ thù địch với con người. Dark factory, "chúng ta sẽ tắt hết đèn", và phản ứng là: thế thì tôi nhìn kiểu gì nếu đèn tắt hết?
Josh nói nếu nhân vật Star Wars yêu thích của bạn là Darth Vader, có lẽ bạn thấy cảnh này thật tuyệt; Josh nói đó là 20% dân số (theo cách nói của anh trong video đăng ngày 30/10/2026). 80% còn lại đang nghĩ: khoan đã, cái này có vẻ thù địch với tôi và với việc tôi tham gia vào đây. Tôi nằm ở đâu trong toàn bộ chuyện này?
Vì vậy anh và nhóm đã rời bỏ dark factory như cách mô tả và đóng khung toàn bộ chuyện này, để chuyển sang phép ẩn dụ khu vườn. Josh cũng cho rằng (video đăng ngày 30/10/2026) khu vườn có vài điểm then chốt về chỗ đứng của con người mà dark factory không có, hoặc không dễ tiếp cận như thế.
9. Agent swarm: con người nằm ở đâu?
Josh mở explainer đầu tiên. Ở đây là một agent swarm, hay agent fleet: tất cả đều là các agent worker được một orchestration engine trung tâm điều phối. Trong trường hợp của anh và nhóm, đó là Nano BPM, mà anh mô tả (video đăng ngày 30/10/2026) là một engine "gần với Camunda". Anh nói thêm rằng anh tin ứng dụng Nano Workforce thật ra sẽ chạy được trên một Camunda server, vì nó dùng cùng kiểu ngữ nghĩa REST API.

Josh nói (video đăng ngày 30/10/2026) agent swarm này rất hữu cơ: tất cả cùng làm việc với nhau. Và câu hỏi đặt ra là: con người nằm ở đâu trong toàn bộ chuyện này?
10. Mỗi agent đi theo một process: epic và fan-out
Mỗi agent đều đi theo một process. Cái Josh đang xem trông như một epic. Theo anh (video đăng ngày 30/10/2026), quy trình đi như sau: bạn tạo một issue, các agent phân tích issue để lập kế hoạch, rồi fan-out nó ra cho một số agent, thứ mà anh và nhóm sẽ gọi là sub-agent, nhưng thật ra chúng chỉ là các agent làm việc song song.
Các agent lập luận xem phần việc nào làm song song được và phần nào phải làm tuần tự, rồi tạo ra một business process model động, riêng cho việc implement epic đó, và chạy nó. Chúng implement, chạy review convergence, rồi merge phần của mình vào một epic branch. Sau đó bạn có thể đánh giá và merge cả epic vào (theo Josh, video đăng ngày 30/10/2026).

Josh quay lại phép so sánh khu vườn sâu hơn: mỗi con kiến hoá ra là một token đi qua một BPMN process, plan, implement, review, merge (mô phỏng trong video đăng ngày 30/10/2026). Anh quay lại một bước rồi dùng nút điều hướng để đi tiếp thay vì double-click.
11. Codebase là một khu vườn: khi không có cấu trúc
Bên trong là codebase. Josh nói nếu nghĩ về codebase như một khu vườn, đó là một phép so sánh rất hay, vì trong một khu vườn cây tự mọc. Bạn không phải ép cây mọc, bạn không lắp ráp cây bằng tay. Tương tự, theo anh (video đăng ngày 30/10/2026), trong agentic SDLC code được các agent làm ra; nó cứ thế xảy ra, kiểu tự động.
Nếu bản thân khu vườn không có cấu trúc, bạn đổ thêm agent vào, chúng chỉ gieo hạt vào đó, mọc lên đủ thứ, và cuối cùng bạn có một khu rừng rậm um tùm. Theo Josh (video đăng ngày 30/10/2026), đây là một codebase hoàn toàn không có cấu trúc.

Theo Josh (video đăng ngày 30/10/2026), đây là loại vấn đề bạn gặp kể cả khi bắt đầu từ một bãi đất trống, một implementation sạch, rồi xối vào đó các PR do agent làm: cuối cùng nó vẫn thành một khu rừng rậm. Anh nghĩ đó đại khái là vấn đề mà Dex và các cộng sự đã gặp với dark factory của họ (theo Josh, video đăng ngày 30/10/2026).
12. Có một phần cấu trúc: giàn leo và luống trồng
Tiếp theo là một biểu diễn có một phần cấu trúc. Josh xoay góc nhìn (mô phỏng trong video đăng ngày 30/10/2026): đây là một codebase có cấu trúc một phần, có một cấu trúc bên trong. Trong một khu vườn có cây, có đất, rồi có những cấu trúc như giàn leo (trellis), hệ thống tưới, luống trồng để tách riêng các cây đang mọc.
Josh nói anh và nhóm chưa quen đặt trọng tâm chính vào cấu trúc của khu vườn. Trước đây phần lớn sự chú ý dồn vào việc viết code, phần implementation. Giờ khi agent viết code (theo Josh, video đăng ngày 30/10/2026), con người chịu trách nhiệm nhiều hơn cho việc giữ gìn cấu trúc.

13. Agentic speed và bài học từ Red Hat
Với khu vườn có một phần cấu trúc, Josh chuyển sang agentic speed để xem chuyện gì xảy ra. Ở agentic speed (mô phỏng trong video đăng ngày 30/10/2026), các agent phải chờ con người xử lý những vấn đề phát sinh: PR review, CI fail, defect rate tăng theo quy mô, mọi hệ quả kỹ thuật của một lượng đóng góp rất lớn.

Josh nói (video đăng ngày 30/10/2026) thời gian ở Red Hat định hình cách anh nghĩ về kỹ thuật trong môi trường này. Anh ở đó 10 năm, tám năm trong số đó ở engineering services và operations. Khi đó anh và đồng nghiệp phải đối mặt với dòng phần mềm open source đổ vào Linux kernel và cả hệ sinh thái GNU/Linux rộng hơn ở user space, một lượng code khổng lồ. Anh và đồng nghiệp phải dựng các cấu trúc để ổn định code đó và bảo đảm độ tin cậy của nó cho doanh nghiệp.
Quay lại mô phỏng: các agent đang bị chặn. Theo Josh (video đăng ngày 30/10/2026), như vậy không đạt được agentic velocity, nhưng vẫn giữ được cùng mức chất lượng output và cùng throughput của hệ thống, nhờ con người can thiệp thủ công rất dày vào chính hệ thống.
14. Xả agent hết tốc lực: entropy
Josh thử một kịch bản khác: cứ xả agent vào, để agent chạy hết tốc lực, còn con người cố theo kịp. Do thiếu cấu trúc, codebase thay đổi theo hướng mà Josh gọi là entropy; trên màn hình, dòng chú thích ghi "Agentic speed, agents carry on: unhandled changes escape containment" và cây mọc tràn ra khỏi luống (mô phỏng trong video đăng ngày 30/10/2026).
Trong một khu vườn có cả sự tăng trưởng lẫn entropy: cây thì lớn lên, còn cấu trúc thì xuống cấp. Cây sẽ lớn và thậm chí làm đổ giàn leo, đâm xuyên qua tường nhà kính. Josh nói (video đăng ngày 30/10/2026) chuyện đó cần được xử lý.
15. Có cấu trúc: giai đoạn refactor để tăng tốc
Josh chuyển sang chế độ có cấu trúc. Theo cách anh mô tả (video đăng ngày 30/10/2026), giai đoạn đầu tiên giống một giai đoạn refactor để tăng tốc. Con người giám sát agent và xử lý cấu trúc của khu vườn, cấu trúc của codebase: kiến trúc, các convention được mã hoá thành quy tắc kiến trúc.
Anh và nhóm gỡ bỏ những đợt refactor dở dang bị bỏ lại giữa chừng, vì theo Josh (video đăng ngày 30/10/2026) chúng lọt vào context của agent. Anh và nhóm chuẩn hoá mọi thứ, rồi dựng các cấu trúc: boundaries, kiến trúc, CI, quality gates, module.

Kết quả là, theo Josh (video đăng ngày 30/10/2026), giờ có một môi trường thật sự sạch cho agent làm việc, và nhờ vậy chúng làm rất tốt. Nhưng thực tế là entropy vẫn ở đó, khi agent tiếp tục mở rộng codebase.
16. Evolving: agent là local optimizer
Josh chuyển sang chế độ evolving. Anh nói: agent chăm sóc dây leo, chúng lớn lên và ra quả. Rồi anh giải thích: bạn dựng một giàn leo, nhưng khi dây leo lớn lên, có quả hay rau to treo trên đó và sức nặng tăng dần, giàn leo bắt đầu cong (mô phỏng và lời Josh trong video đăng ngày 30/10/2026).
Theo Josh (video đăng ngày 30/10/2026), feature thì miễn phí, nhưng tốc độ ra feature bền vững thì không, vì sự tăng trưởng gây ra entropy cho cấu trúc. Một cách nhìn khác: agent là local optimizer, chúng bào mòn tính gắn kết (cohesion) và tính mạch lạc (coherence) của codebase. Vì vậy con người tham gia bằng cách nhìn vào cấu trúc và chăm sóc cấu trúc khi khu vườn tiếp tục lớn.

Josh xem lại những gì còn trên explainer: khu vườn có một phần cấu trúc; ở agentic speed thì mọi thứ thoát khỏi vòng kiểm soát, như đã xem; con người refactor cấu trúc, đó là phần vừa nói; rồi agent chăm sóc một khu vườn có cấu trúc; và khi nó đang tiến hoá, con người nhìn xem hệ thống đang cong ở chỗ nào (mô phỏng trong video đăng ngày 30/10/2026).
17. Con người ở chỗ cấu trúc đang cong
Josh đưa ví dụ (video đăng ngày 30/10/2026) về những tín hiệu cho thấy cấu trúc đang cong: defect rate, hay defect report từ phía công chúng. Hoặc phân tích những trường hợp như cùng một issue được báo hai lần vào codebase, vì thật ra nó đã được implement hai lần ở hai chỗ khác nhau. Anh nói bạn có thể phát hiện chuyện đó khi issue đầu tiên tới và bạn đi patch nó, rồi mới phát hiện ra lúc đó: thật ra chuyện này xảy ra ở hai chỗ khác nhau, nên có kiểu một sự trùng lặp.
Josh gọi tên nguyên tắc "derivation over duplication" (dẫn xuất thay vì sao chép) như cách bảo vệ codebase về mặt kiến trúc trước những anti-pattern kiểu agent như vậy (video đăng ngày 30/10/2026).
Theo Josh, đây là phần giới thiệu về phép ẩn dụ làm vườn mà anh và nhóm hiện dùng trong Camunda Engineering (tính đến video đăng ngày 30/10/2026): để hiểu cách anh và nhóm liên hệ với codebase và với vòng đời phát triển phần mềm có agent, và để hiểu vai trò của con người, của sự giám sát của con người, của taste và judgment của con người trong thế giới phát triển phần mềm có agent này.
Josh kết bằng mấy câu ngắn: "Anything's possible", rồi "Tôi là sự khác biệt giữa có thể và không thể, và bạn cũng vậy. Let's go."
Nguồn và liên kết 6 nguồn
- Tên gốc: From Dark Factory to Software Garden
- Sự kiện: YouTube
- Video gốc: https://www.youtube.com/watch?v=kqZNcTfkLEE youtube.com
- Kênh YouTube Agentic Engineering with Josh Wulf (Josh Wulf): youtube.com/channel/UCWrETrX4SmbY3wIhyWy1VbQ youtube.com
- Bộ explainer agentic engineering của Camunda, trang chủ hiện mang tên "The Software Garden" và có các mục "From Dark Factory to Software Garden", "The role of humans", "The organisation of agents" (đọc ngày 31/10/2026): camunda.github.io/agentic-engineering-explainers camunda.github.io
- Repo CubeFarm của Leon van Zyl, mô tả là "A cartoon 3D office where a swarm of Claude Code agents (plus QA testers) works through your GitHub issues" (đọc ngày 31/10/2026): github.com/leonvanzyl/cubefarm github.com