Jira là Turing hoàn chỉnh
(seriot.ch)- Jira Automation có thể biểu diễn một máy Minsky với hai bộ đếm vô hạn và trạng thái lệnh hữu hạn, qua đó cho thấy tính Turing hoàn chỉnh của Jira
- Trạng thái Epic đóng vai trò bộ đếm chương trình, còn số lượng Bug và Task được liên kết là hai thanh ghi; các quy tắc Automation trở thành bảng điều phối theo từng lệnh
INCvàDECđược triển khai bằng cách tạo hoặc xóa issue liên kết, còn rẽ nhánh có điều kiện được quyết định bằng cách kiểm tra số issue liên kết qua quy tắc điều kiện JQL- Ví dụ phép cộng bắt đầu từ
A=2,B=3, giảm Bug và tăng Task, và trong lần chạy thực tế trên*.atlassian.netđã đạt tới 5 Task cùng trạng thái dừng - Ví dụ Fibonacci giảm số vòng lặp nhờ chuyển đổi loại issue, và khi chạm giới hạn độ sâu chuỗi 10 của Jira Cloud thì có thể tiếp tục bằng cách kích hoạt lại thủ công
Máy Minsky được tạo bằng Jira Automation
- Jira Automation có thể biểu diễn một Minsky register machine với hai bộ đếm vô hạn và trạng thái lệnh hữu hạn, nên có thể dùng một phép quy giản để chỉ ra tính Turing hoàn chỉnh của Jira
- Mô hình được Minsky chứng minh năm 1967 chỉ gồm
INC r; goto Svàif r == 0 goto S else (DEC r; goto S') - Các thành phần của Jira tương ứng với từng thành phần của máy Minsky
- Register A: số issue Bug được liên kết
- Register B: số issue Task được liên kết
- Program Counter: trạng thái của một issue Epic duy nhất
- Dispatch Table: các quy tắc Jira Automation theo từng trạng thái lệnh
- Clock: các chuyển trạng thái do automation kích hoạt hoặc việc kích hoạt lại từ bên ngoài sau khi chạm giới hạn chuỗi
- Trạng thái Epic mã hóa lệnh hiện tại, còn Automation rules kiểm tra số issue liên kết để chuyển sang trạng thái tiếp theo
INCvàDECđược triển khai bằng cách tạo và xóa issue liên kết của loại tương ứng, còn rẽ nhánh có điều kiện được xử lý bằng quy tắc điều kiện JQL
Ví dụ thực thi và giới hạn
- Chương trình cộng được cấu thành như một chương trình Minsky giảm
Ađồng thời tăngB1. if A == 0 goto 3 else (DEC A; goto 2) 2. INC B; goto 1 3. HALT - Cách triển khai tối thiểu gồm một Epic, 5 issue liên kết và mỗi trạng thái lệnh có một quy tắc Automation tương ứng
-
Workflow và quy tắc
- Trong Jira Workflow, tạo trạng thái khởi đầu
BACKLOG, sau đó làTODO,DEV,PROD, và cấu hình để mọi trạng thái đều có thể chuyển qua lại với nhau - Tạo một Epic ở trạng thái
BACKLOG - Quy tắc
TODOtriển khaiDEC A; if A=0 halt, else goto DEV- Được kích hoạt khi trạng thái Epic đổi sang
TODO - Nếu có ít nhất một Bug liên kết thì xóa một Bug và chuyển Epic sang
DEV - Nếu không có Bug thì chuyển Epic sang
PRODđể dừng
- Được kích hoạt khi trạng thái Epic đổi sang
- Quy tắc
DEVtriển khaiINC B; goto TODO- Được kích hoạt khi trạng thái Epic đổi sang
DEV - Tạo một Task mới và liên kết nó với Epic
- Chuyển Epic sang
TODO
- Được kích hoạt khi trạng thái Epic đổi sang
- Cả hai quy tắc đều bật "Allow rule to trigger other rules"
- Trong Jira Workflow, tạo trạng thái khởi đầu
-
Giá trị khởi tạo và kết quả
- Liên kết 2 Bug và 3 Task với Epic để khởi tạo
A=2,B=3 - Khi chuyển Epic sang
TODO, chuỗi thực thi sẽ diễn ra như sau(2,3) TODO → (1,3) DEV → (1,4) TODO → (0,4) DEV → (0,5) TODO → (0,5) PROD - Đã được chạy trên một instance
*.atlassian.netthực tế, và cuối cùng Epic đạt đếnPRODvới 0 Bug và 5 Task được liên kết - Lần chạy này là kết quả Jira automation tính được
2 + 3 = 5
- Liên kết 2 Bug và 3 Task với Epic để khởi tạo
-
Cấu hình Fibonacci
- Convert Issue Type có thể đổi ngay loại issue như Bug → Story, Story → Task
CONVERTcó thể biểu diễn bằngDEC + INC, nên không mở rộng năng lực tính toán, nhưng giúp giảm bảng điều phối của các vòng lặp di chuyển để dễ xử lý các chương trình phức tạp hơn- Fibonacci được biểu diễn thành
(A, B) → (B, A+B), gồm ba thanh ghiA=Bug,B=Task,C=Storyvà ba trạng tháiTODO,QA,DEVTODO: if any linked Task exists: CONVERT Task → Story INC Bug transition to TODO else: transition to QA QA: if any linked Bug exists: CONVERT Bug → Task transition to QA else: transition to DEV DEV: if any linked Story exists: CONVERT Story → Bug transition to DEV else: transition to TODO - Trạng thái khởi đầu là
A=1,B=1,C=0, và dãy1, 1, 2, 3, 5, 8, 13, ...xuất hiện ởB, tức số lượng Task - Khác với máy cộng, máy Fibonacci không có trạng thái dừng và sẽ chạy cho đến khi chạm giới hạn độ sâu chuỗi 10 của Jira Cloud
- Khi chạm giới hạn, người vận hành có thể kích hoạt lại Epic để tiếp tục, và chỉ với một lần chỉnh sửa trạng thái là chuỗi thực thi sẽ khởi động lại
- Jira Data Center hiển thị
automation.rule.execution.timeoutvà các thiết lập liên quan dưới dạng thuộc tính có thể cấu hình - Nếu giả định có thể tạo issue và thực thi quy tắc vô hạn, thì ngôn ngữ automation của Jira có thể mã hóa máy hai bộ đếm; theo tiêu chuẩn thông thường rằng máy tính vật lý cũng hữu hạn, các quota hữu hạn của Jira Cloud không bác bỏ cấu hình này
1 bình luận
Ý kiến trên Hacker News
Jira hoàn toàn khủng khiếp, và có tiềm năng biến thành mọi kiểu khủng khiếp khác
Nếu Marx biết Atlassian, thì Grundrisse hẳn đã bốc cháy dữ dội
Chỉ cần so sánh GitHub Issues năm 2014 với hiện tại: https://github.com/features/issues
Và họ cứ tiếp tục, tiếp tục thêm chức năng trùng lặp
Jira rất phổ biến và cũng có API wrapper tốt cho ngôn ngữ bạn ưa dùng
Điều đáng ngạc nhiên là các lập trình viên doanh nghiệp có tinh thần hacker lại chưa tự động hóa phần lớn những việc Jira bắt làm bằng thứ như script dòng lệnh Python
Nếu tôi có thể khiến nó dễ dùng hơn cho mình hơn hẳn những người ép người khác dùng Jira, thì cục diện sẽ đảo chiều và Jira sẽ trở thành công cụ bị thúc ép để tự bảo vệ chính nó
Thỉnh thoảng tôi đã dùng Jira theo cách gần như ác ý, và nó rất tuyệt cho việc né trách nhiệm
Khi có vấn đề xảy ra, chỉ cần nói “Điều này đã được viết rất rõ trong hàng trăm cập nhật Jira của tôi, và mọi người đều đã đọc rồi đúng không?”
Giờ còn có AI nữa, nên chỉ cần bọc mọi thứ bằng script tùy chỉnh rồi để AI làm việc lặt vặt trong Jira
API thường làm được những việc mà UI không cho phép, và vì mọi người đều vận hành theo UI nên rất dễ rơi vào những góc hỏng hóc kỳ quặc
Ví dụ, bạn có thể không nhận ra rằng custom_field_5537 phải đi cùng custom_field_442 thì nó mới hiện trên dashboard của người khác
Hoặc custom_field_10995 tự nhận là trường số nguyên và cũng trả về số nguyên trong XML, nhưng khi tạo công việc thì lại phải dùng một chuỗi hằng ma thuật không được tài liệu hóa, còn khi cập nhật thì lại không cần như vậy
Web UI thì không làm thế, trong HTML và request chỉ là số nguyên bình thường, còn 80% chuỗi chỉ khớp với văn bản hiển thị trong dropdown
Tự động hóa Jira là trải nghiệm lập trình tệ nhất tôi từng gặp
Chắc chắn có những thiết lập đơn giản hơn và có thể khá dễ, nhưng ngay cả vậy cũng quá mức
Đáng buồn là công sức bỏ ra vẫn hoàn toàn xứng đáng. Rất khuyến nghị
Chúng tôi thêm một trường văn bản tùy chỉnh mô tả dễ đọc cho con người vào mỗi ticket, và khi bản phát hành được triển khai thì script deploy sẽ tự động điền timestamp
Chúng tôi phát hành từng ticket theo từng đơn vị công việc, và mỗi ngày xử lý nhiều ticket
Kết hợp với các bộ lọc tùy chỉnh, Jira cung cấp changelog dễ đọc cho con người cho từng board và cho toàn công ty, và các thông điệp này được chuyển sang Slack cho phía kinh doanh để mọi người biết cái gì đang được triển khai
Nó cũng là nhật ký kiểm toán phát hành có thể tìm kiếm, gắn với các thay đổi mã nguồn
Quy trình triển khai cũng chuyển trạng thái ticket trên Jira, nên lập trình viên chỉ cần merge ticket vào main là nó sẽ được deploy và cũng hoàn tất trên Jira
Cũng có nhiều script nhỏ tự động tạo ticket cho các tác vụ lặp lại
Trong nhiều năm nó rất vững chắc, và có lẽ đến giờ vẫn đang chạy
Quy ước đặt tên trường tùy chỉnh thì không hay lắm, nhưng nếu đội ngũ kiểm soát được cấu hình Jira thì không khó để mọi thứ giữ cùng một chuẩn
Ban đầu tôi không thích Jira, và ngày xưa nó có nhiều vấn đề, nhưng dạo này nếu cấu hình tốt thì cũng không tệ đến vậy
Nếu là công ty của tôi thì tôi sẽ không chọn nó, nhưng với tư cách người đã dùng nó như lập trình viên, quản trị viên, người dùng cuối và người phát triển công cụ nội bộ, thì một khi đã được cấu hình và chạy ổn, nó thường không gây cản trở nhiều
Nếu thêm nhiều văn bản hơn, Jira bằng cách nào đó sẽ luôn tự động chạy mọi thứ trên đống văn bản ấy, nên nó sẽ còn chậm hơn
Nếu công ty cần sưởi ấm thì cứ dùng Jira
Nó khá linh hoạt, và nhờ AI mà còn cởi mở hơn nữa
Hầu hết quy trình đều phụ thuộc vào Jira, và một số chuyển trạng thái nhất định sẽ kích hoạt webhook cho tự động hóa
Ngay khi có quyền truy cập AI, một trong những việc đầu tiên tôi làm là tạo Jira MCP
Giờ tôi gần như cố không đụng trực tiếp vào Jira nữa, mà bảo Claude tạo issue Jira, viết comment, tạo sub-task, liên kết issue, v.v.
Trước đây tôi luôn thấy sợ mỗi khi phải nghiên cứu cách triển khai và tách nó thành các đầu việc
Vì càng chia nhỏ chi tiết thì càng phải tạo nhiều issue Jira để chứa từng phần việc đó
Giờ chỉ cần ghi mọi thứ vào file rồi giao việc lặt vặt trên Jira cho mô hình ngôn ngữ lớn
Khi quay lại chỗ làm cũ, tôi thấy họ vẫn đang dùng JIRA
Lúc phỏng vấn thì dĩ nhiên tôi nói kiểu “À JIRA à, vẫn còn dùng cái đó sao? Dùng được chứ”
Thực tế là vẫn dùng được, nhưng nhìn JIRA bản mới đúng là bị sốc thật
Có phải đến cả nghìn phiền toái lặt vặt, và một trong những thứ tệ nhất là khi bạn cố double-click để chọn văn bản thì nó đột nhiên chuyển trường đó sang chế độ chỉnh sửa
Thứ tôi nhớ là JIRA Server 4.0, và có thể ôn lại ký ức ở đây: https://www.jirastrategy.com/wp-content/uploads/2020/04/depl...
Nếu phóng to đủ mức thì mỗi issue có tiêu đề, loại, phiên bản sửa lỗi, phiên bản bị ảnh hưởng, v.v. và cấu trúc nối thẳng tới phần bình luận. Rất đơn giản
Bực mình kinh khủng. Ngay cả thao tác với văn bản cơ bản cũng làm sai
Thế mà có quản lý dự án lại bảo họ thích như vậy
Vì họ không dùng kiểu double-click rồi kéo để chọn cả từ
Như thường lệ, người dùng thành thạo hơn lại bị kéo xuống chỉ để phục vụ sự tiện lợi của những người chỉ vừa đủ biết dùng máy tính
Làm tôi tự hỏi có phải mình bỏ lỡ gì đó hay bị rơi vào hố thời gian không
Tôi không hiểu sao lại nói về Jira như thể nó là Visicalc
Giờ tôi không còn làm ở công ty IT nữa, nên có thể trong 2 năm qua đã bỏ lỡ một biến động lớn nào đó
Khi chuyển từ 4.x sang 6.x, nó cũng mang theo những phiền toái lặt vặt, giống như các hộp OFBiz ọp ẹp và những sản phẩm hoàn toàn khác chỉ được chỉnh cho giống về bề ngoài
Mấy kỹ sư đó đã rời đi từ lâu, và họ cũng mang theo cả 280 đô một cổ phiếu
Vấn đề cốt lõi của JIRA là quyền cấu hình cho tử tế lúc nào cũng chỉ nằm trong tay một số ít người, mà những người đó thì lười, hoặc không có thời gian, hoặc không dùng hằng ngày nên không quan tâm
Tất nhiên vấn đề không chỉ có vậy
Nó chậm đến mức khó tin, và còn có những hạn chế kỳ quặc như issue không thể làm cha của một issue khác
JIRA quá chậm, và có vẻ như các quản trị viên chẳng biết cấu hình cho đúng
Chỉ riêng việc từng dùng nó thôi cũng đã thành chấn thương tâm lý
Chỉ là trên hành tinh này không có lấy một người nào biết cách cấu hình nó cho đúng
Chắc không thể quy trách nhiệm cho công cụ chỉ vì sự bất tài của con người
Còn chuyện nó được tạo ra cho ai thì lại là vấn đề hoàn toàn khác, và giờ chưa nên bàn đến
Về bản chất, hệ thống ticket chẳng hơn gì một cơ sở dữ liệu chứa ticket, quan hệ giữa các ticket, và trạng thái
Dĩ nhiên nếu có nhiều ticket liên kết, custom field, và plugin thì độ phức tạp có thể bùng nổ
Nhưng tôi vẫn không hiểu nổi tại sao một thứ chỉ xử lý dữ liệu văn bản đơn giản và tệp đính kèm lại có thể chậm đến mức không chịu nổi như vậy
Cuối cùng thì giờ có thể chơi Doom trong Jira rồi
https://mattrickard.com/accidentally-turing-complete
Vậy là giải thích được vì sao không thể xác định một tác vụ Jira có dừng hay không
Jira có cung cấp luôn shotgun bơm tay để giết lũ quỷ do chính nó tạo ra không?
Cứ thử dùng Azure Boards đi rồi bạn sẽ lại yêu JIRA
Vì trên đời này không có phần mềm nào mà Microsoft không thể làm cho tệ hơn
Khó mà tìm được từ ngữ diễn tả đúng mức sự khinh bỉ tôi dành cho Outlook, và từ “ghét” còn chưa đủ để bắt đầu
Ngay cả việc cơ bản nhất là nhận và gửi email nó cũng làm như cực hình
Điện thoại báo có email mới, tôi mở ứng dụng ra thì không thấy gì, kéo xuống để làm mới cũng không có chuyện gì xảy ra
Thường phải 1 đến 15 phút sau nó mới hiện ra
Mọi việc làm trong Outlook đều phiền phức đến khủng khiếp
Ngày xưa thời Office 2003 tôi cũng từng dùng Outlook, nhưng tôi không nhớ nó tệ đến mức này. Không hiểu sao nó lại thụt lùi được như vậy
Còn Teams thì tôi chẳng muốn bắt đầu nói tới. Tôi cũng không rõ cái chương trình đó đang cố giải quyết vấn đề gì
File chia sẻ thì có trên OneDrive, lại có trong Teams, và vì lý do nào đó còn có cả trong Outlook
Tôi đã phải chuyển các file sao lưu máy tính, khoảng 30GB image CloneZilla, lên OneDrive/Teams/Outlook, việc đó mất gần như vô tận, còn quạt của chiếc laptop Ryzen 6 nhân chạy Win11 thì quay như điên suốt thời gian đó
Làm sao? Tại sao?
Mọi công cụ workflow và orchestration đều là Turing-complete
Vì mục đích của chúng vốn là tự động hóa luồng thực thi
Hoặc để con người kích hoạt lại và tiếp tục từ chỗ đã dừng?
Thứ nhất, JIRA không phải orchestration
Thứ hai, việc một workflow cần làm là gắn một số trạng thái với thông tin bên ngoài và giúp thao tác chúng dễ dàng
Để Turing-complete thì cần có trigger và rule, một thứ như bộ đếm vô hạn, hai stack, băng hai chiều, hoặc tương tự
Hãy chứng minh tôi sai đi
Tôi thích tự động hóa trong Jira
Khi vào một đội mới dùng Jira, tôi sẽ thiết lập các automation như tự động cộng story point của các sub-task để điền story point cho task cha, hoặc tự động đưa ticket về backlog nếu nó thiếu đủ thuộc tính để được coi là đã refinement
Ví dụ như thiếu assignee, story point, mức ưu tiên, mô tả, v.v.
Chỉ sau một sprint, board của cả đội sẽ gọn gàng hơn hẳn
Tôi không hiểu sao đó không phải mặc định, nhưng sửa bằng automation thì dễ
Người phụ trách nên là người nhận việc đó khi họ quyết định làm, chứ không nên là một phần của giai đoạn refinement