Jira ट्यूरिंग-पूर्ण है
(seriot.ch)- Jira Automation दो अनंत काउंटर और सीमित instruction states वाले Minsky machine को व्यक्त कर सकता है, जिससे Jira की ट्यूरिंग-पूर्णता दिखाई जा सकती है
- Epic state program counter का काम करती है, और जुड़े हुए Bug व Task की संख्या दो registers बन जाती है; Automation rules हर instruction के लिए dispatch table बनती हैं
INCऔरDECको linked issues के create/delete से लागू किया जाता है, और conditional branching JQL condition rules के जरिए linked issue counts की जांच करके तय होती है- addition उदाहरण में
A=2,B=3से शुरू करके Bug घटाए जाते हैं और Task बढ़ाए जाते हैं, और वास्तविक*.atlassian.netexecution में 5 Task और halt state तक पहुंचा जाता है - Fibonacci उदाहरण में issue type conversion से loops कम किए जाते हैं, और Jira Cloud की chain depth limit 10 तक पहुंचने पर manual re-trigger से आगे बढ़ना संभव है
Jira Automation से बनाया गया Minsky machine
- Jira Automation दो अनंत काउंटर और सीमित instruction states वाले Minsky register machine को व्यक्त कर सकता है, इसलिए Jira की ट्यूरिंग-पूर्णता दिखाने वाला reduction संभव है
- Minsky ने 1967 में जिस मॉडल को सिद्ध किया था, वह केवल
INC r; goto Sऔरif r == 0 goto S else (DEC r; goto S')से बना है - Jira के components, Minsky machine के हर element से मेल खाते हैं
- Register A: जुड़े हुए Bug issues की संख्या
- Register B: जुड़े हुए Task issues की संख्या
- Program Counter: एक single Epic issue की state
- Dispatch Table: हर instruction state के लिए Jira Automation rules
- Clock: automation द्वारा trigger किए गए transitions, या chain limit के बाद external re-trigger
- Epic state current instruction को encode करती है, और Automation rules जुड़े हुए issues की संख्या जांचकर अगली state में transition करती हैं
INCऔरDECको संबंधित type के linked issues के creation और deletion से लागू किया जाता है, और conditional branching को JQL condition rules संभालती हैं
execution के उदाहरण और सीमाएं
- addition program एक ऐसा Minsky program है जो
Aको घटाते हुएBको बढ़ाता है1. if A == 0 goto 3 else (DEC A; goto 2) 2. INC B; goto 1 3. HALT - minimal implementation में एक Epic, 5 linked issues, और हर instruction state के लिए एक-एक Automation rule शामिल है
-
workflow और rules
- Jira Workflow में initial state
BACKLOG, और उसके बादTODO,DEV,PRODबनाई जाती हैं, और सभी states को एक-दूसरे में transition करने योग्य सेट किया जाता है BACKLOGstate में एक Epic बनाया जाता हैTODOrule,DEC A; if A=0 halt, else goto DEVको लागू करती है- Epic state
TODOमें बदलते ही यह trigger होती है - अगर कम-से-कम एक linked Bug हो, तो एक Bug delete किया जाता है और Epic को
DEVमें transition किया जाता है - अगर Bug न हो, तो Epic को
PRODमें transition करके halt किया जाता है
- Epic state
DEVrule,INC B; goto TODOको लागू करती है- Epic state
DEVमें बदलते ही यह trigger होती है - एक नया Task बनाया जाता है और Epic से link किया जाता है
- Epic को
TODOमें transition किया जाता है
- Epic state
- दोनों rules में "Allow rule to trigger other rules" enabled होता है
- Jira Workflow में initial state
-
initial values और result
- Epic से 2 Bug और 3 Task link करके
A=2,B=3के रूप में initialize किया जाता है - Epic को
TODOमें transition करने पर नीचे दिया गया flow chain की तरह execute होता है(2,3) TODO → (1,3) DEV → (1,4) TODO → (0,4) DEV → (0,5) TODO → (0,5) PROD - यह वास्तविक
*.atlassian.netinstance पर चलाया गया, और अंत में EpicPRODतक पहुंचता है जबकि उससे 0 Bug और 5 Task जुड़े होते हैं - यह execution, Jira automation के जरिए
2 + 3 = 5की गणना का परिणाम बन जाता है
- Epic से 2 Bug और 3 Task link करके
-
Fibonacci configuration
- Convert Issue Type Bug → Story, Story → Task की तरह issue type को तुरंत बदल सकता है
CONVERTकोDEC + INCके रूप में व्यक्त किया जा सकता है, इसलिए यह computational power नहीं बढ़ाता, लेकिन move loops की dispatch table को छोटा करके अधिक complex programs को संभालना आसान बनाता है- Fibonacci को
(A, B) → (B, A+B)के रूप में व्यक्त किया जाता है, और यह तीन registersA=Bug,B=Task,C=Storyऔर तीन statesTODO,QA,DEVसे बना हैTODO: 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 - initial state
A=1,B=1,C=0होती है, औरBयानी Task count में1, 1, 2, 3, 5, 8, 13, ...sequence दिखाई देता है - addition machine के विपरीत, Fibonacci machine में कोई halt state नहीं है, और यह Jira Cloud की chain depth limit 10 तक चलता है
- limit तक पहुंचने पर operator Epic को फिर से trigger करके execution जारी रख सकता है, और एक बार state edit करते ही chain execution फिर शुरू हो जाता है
- Jira Data Center,
automation.rule.execution.timeoutऔर संबंधित settings को configurable properties के रूप में expose करता है - यदि अनंत issue creation और rule execution माना जाए, तो Jira automation language दो-counter machine को encode कर सकती है, और जिस सामान्य मानदंड में physical computers भी finite माने जाते हैं, उसमें Jira Cloud के finite quotas इस निर्माण को खारिज नहीं करते
1 टिप्पणियां
Hacker News की राय
Jira पूरी तरह भयानक है, और उसमें किसी भी दूसरे तरह के भयानक रूप में बदल जाने की संभावना है
अगर Marx, Atlassian को जानते, तो Grundrisse आग उगल देता
बस 2014 के GitHub Issues और आज के उसके रूप की तुलना कर लें: https://github.com/features/issues
और वे लगातार, लगातार डुप्लिकेट फीचर जोड़ते जा रहे हैं
Jira बहुत लोकप्रिय है और आपकी पसंदीदा भाषा के लिए API wrapper भी अच्छी तरह उपलब्ध हैं
यह हैरानी की बात है कि hacker mindset वाले enterprise developers ने Python command-line script जैसी चीज़ों से Jira में करवाए जाने वाले ज़्यादातर काम automate नहीं कर दिए
अगर मैं Jira थोपने वाले लोगों से एक अंक से भी ज़्यादा आसान तरीके से इसे इस्तेमाल करने लायक बना दूँ, तो पूरा खेल बदल जाता है, और Jira खुद को बचाने के लिए ठेला जाने वाला tool बन जाता है
मैंने कभी-कभी Jira को लगभग दुर्भावनापूर्ण तरीके से इस्तेमाल किया है, और ज़िम्मेदारी से बचने के लिए यह शानदार है
जब समस्या होती है, तो बस कह दीजिए, “यह सब मैंने लिखे हुए सैकड़ों Jira updates में साफ़-साफ़ लिखा था, और आप उन्हें पढ़ रहे थे, है न?”
अब AI भी है, तो custom script से सब कुछ जोड़कर AI से Jira का सारा छोटा-मोटा काम कराया जा सकता है
कई बार API ऐसे काम कर सकती है जिन्हें UI अनुमति नहीं देता, और क्योंकि सब UI को आधार मानकर चलते हैं, आप अजीब तरह से टूटे हुए कोनों में जा फँसते हैं
उदाहरण के लिए, हो सकता है आपको पता ही न चले कि custom_field_5537 को custom_field_442 के साथ pair करना पड़ता है, तभी वह किसी और के dashboard पर दिखाई देता है
और custom_field_10995 खुद को integer field बताता है और XML में भी integer की तरह लौटता है, लेकिन issue create करते समय आपको undocumented magic constant string इस्तेमाल करनी पड़ती है, जबकि update के समय फिर उसकी ज़रूरत नहीं होती
web UI ऐसा नहीं करता; HTML और requests में तो बस integer जाता है, और string का सिर्फ़ 80% dropdown display text से मेल खाता है
Jira automation मेरे जीवन का सबसे खराब programming experience था
यक़ीनन इससे सरल setup भी मौजूद होंगे और काफ़ी आसान भी हो सकते हैं, लेकिन फिर भी यह हद से ज़्यादा है
दुख की बात यह है कि इसके बावजूद लगाया गया effort पूरी तरह वाजिब है। ज़ोरदार सिफारिश है
हमने हर ticket में इंसानों के पढ़ने लायक विवरण के लिए एक custom text field जोड़ा था, और जब release deploy होती थी, तो deployment script अपने-आप timestamp भर देती थी
हम काम की इकाई के हिसाब से एक-एक ticket release करते थे, और एक दिन में कई tickets निपटा देते थे
custom filters के साथ मिलकर Jira हर board और पूरी कंपनी के लिए इंसानों के पढ़ने लायक change log देता था, और ये messages Slack पर business side तक पहुँचते थे ताकि सबको पता रहे कि क्या deploy हो रहा है
यह code changes से जुड़ा एक searchable release audit log भी था
deployment process Jira ticket status भी transition कर देता था, इसलिए developers को बस ticket को
mainमें merge करना होता था, और वह deploy भी हो जाता था और Jira में complete भीrepetitive tasks के लिए tickets अपने-आप बनाने वाली छोटी scripts भी बहुत थीं
यह सालों तक बहुत मज़बूती से चला, और बहुत संभव है कि आज भी चल रहा हो
custom field naming convention कोई खास अच्छी नहीं थी, लेकिन अगर team Jira setup को control करती हो, तो सबके लिए एक ही मानक बनाए रखना मुश्किल नहीं था
शुरू में मुझे Jira पसंद नहीं था, और बहुत पहले इसमें काफ़ी समस्याएँ थीं, लेकिन आजकल अगर setup सही हो तो यह इतना बुरा नहीं है
अपनी कंपनी के लिए मैं इसे नहीं चुनूँगा, लेकिन developer, manager, end user और internal tools developer के रूप में इसे इस्तेमाल करने के अनुभव से कहूँ तो, एक बार यह configure होकर चलने लगे, तो आम तौर पर रास्ते का रोड़ा नहीं बनता
इसमें और text जोड़ दीजिए, फिर Jira somehow उस सारे text पर हर चीज़ को हमेशा auto-run करेगा, तो यह और धीमा ही होगा
अगर आपकी कंपनी को heating चाहिए, तो Jira इस्तेमाल कीजिए
यह काफ़ी flexible है, और AI की वजह से यह और खुल गया है
ज़्यादातर processes Jira पर निर्भर हैं, और कुछ खास transitions automation के लिए webhook चलाते हैं
जैसे ही AI access मिला, मैंने सबसे पहले जो चीज़ों में से एक बनाई, वह Jira MCP थी
अब मैं Jira को सीधे लगभग छूना ही नहीं चाहता, और Claude से Jira issues बनवाता हूँ, comments लिखवाता हूँ, subtasks बनवाता हूँ, issues link करवाता हूँ वगैरह
पहले जब भी implementation का तरीका खोजना होता था और उसे tasks में तोड़ना पड़ता था, मुझे डर लगता था
क्योंकि जितना बारीक बाँटते, उतने ज़्यादा Jira issues हर task के लिए बनाने पड़ते थे
अब मैं बस सब कुछ एक file में लिख देता हूँ और large language model को Jira का छोटा-मोटा काम सौंप देता हूँ
जब मैं अपने पुराने कार्यस्थल पर वापस गया तो देखा कि वे अभी भी JIRA इस्तेमाल कर रहे थे
इंटरव्यू में मैंने स्वाभाविक रूप से कहा, “अच्छा JIRA? आप लोग अभी भी वह इस्तेमाल करते हैं? हाँ, मैं इस्तेमाल कर सकता हूँ”
मैं वास्तव में उसे इस्तेमाल कर सकता हूँ, लेकिन नया JIRA देखकर मुझे सचमुच झटका लगा
उसमें लगभग हज़ार छोटी-छोटी परेशानियाँ हैं, और सबसे खराब में से एक यह है कि जब आप टेक्स्ट को डबल-क्लिक करके चुनना चाहते हैं तो वह अचानक फ़ील्ड को edit mode में डाल देता है
मुझे जो याद था वह JIRA Server 4.0 था, और उसकी पुरानी याद यहाँ देखी जा सकती है: https://www.jirastrategy.com/wp-content/uploads/2020/04/depl...
ज़ूम इन करने पर हर issue में title, type, fix version, affected version वगैरह होते थे, और उसका ढाँचा सीधे comments तक जाता था। बहुत सरल था
यह बेहद चिढ़ाने वाला है। बुनियादी text manipulation तक ग़लत है
लेकिन एक project manager ने कहा कि उसे यह पसंद है
क्योंकि वह पूरे शब्द चुनने के लिए double-click drag इस्तेमाल नहीं करता
हमेशा की तरह, जो लोग मुश्किल से कंप्यूटर चला पाते हैं उनकी सुविधा के लिए ज़्यादा दक्ष users को नीचे खींच लिया जाता है
मुझे लगा शायद मैं कुछ मिस कर गया, या किसी time hole में गिर गया
समझ नहीं आता Jira के बारे में Visicalc की तरह क्यों बात की जा रही है
मैं अभी IT कंपनी में काम नहीं करता, इसलिए हो सकता है पिछले 2 साल में कोई बड़ा बदलाव मिस कर दिया हो
4.x से 6.x में जाते समय, OFBiz के डगमगाते बक्सों और ऊपर-ऊपर से मिलते-जुलते लेकिन पूरी तरह अलग products की तरह, ढेर सारी छोटी असुविधाएँ भी साथ आईं
वे engineers बहुत पहले जा चुके, और $280 per share भी साथ ले गए
JIRA की मूल समस्या यह है कि उसे ठीक से configure करने की authority हमेशा कुछ ही लोगों के पास होती है, और वे या तो आलसी होते हैं, या उनके पास समय नहीं होता, या वे उसे रोज़ इस्तेमाल नहीं करते इसलिए परवाह नहीं करते
बेशक समस्या सिर्फ वही नहीं है
यह कल्पना से परे धीमा है, और इसमें ऐसे अजीब restrictions भी हैं जैसे एक issue दूसरे issue का parent नहीं बन सकता
JIRA बहुत धीमा है, और admins को शायद उसे सही तरह configure करना आता ही नहीं
सिर्फ इस्तेमाल करने भर से trauma हो गया है
बस इस ग्रह पर एक भी ऐसा इंसान नहीं है जो इस tool को सही तरीके से configure कर सके
tool को इंसानी अयोग्यता के लिए दोषी नहीं ठहराया जा सकता
फिर यह सवाल कि इसे आखिर किसके लिए बनाया गया है, वह बिल्कुल अलग मुद्दा है, और अभी उस पर बात नहीं करनी चाहिए
मूल रूप से ticket system, tickets के बीच relations और states रखने वाले database से ज़्यादा कुछ नहीं है
हाँ, linked tickets, custom fields और plugins बहुत ज़्यादा हों तो complexity बहुत बढ़ सकती है
फिर भी समझ नहीं आता कि साधारण text data और attachments संभालने वाली चीज़ इतनी असहनीय रूप से धीमी कैसे हो सकती है
आख़िरकार अब Jira में Doom खेला जा सकता है
https://mattrickard.com/accidentally-turing-complete
तो इससे समझ आता है कि कुछ Jira tasks के halt होंगे या नहीं यह तय क्यों नहीं किया जा सकता
क्या Jira उन दानवों को मारने के लिए pump-action shotgun भी देता है जो इससे पैदा होते हैं?
इसके बजाय Azure Boards इस्तेमाल करके देखिए, आपको JIRA से प्यार हो जाएगा
क्योंकि ऐसी कोई software चीज़ नहीं जिसे Microsoft और खराब न बना सके
Outlook के प्रति अपनी घृणा को ठीक से व्यक्त करने के लिए शब्द ढूँढना मुश्किल है, और “नापसंद” तो शुरुआत भी नहीं है
यह email पाने और भेजने जैसे सबसे बुनियादी कामों में भी जूझता है
फ़ोन पर email notification आता है, ऐप खोलते हैं तो कुछ नहीं होता, नीचे खींचकर refresh करने पर भी कुछ नहीं होता
आम तौर पर 1 से 15 मिनट बाद जाकर वह दिखता है
Outlook में हर काम बेहद झंझटभरा है
बहुत पहले Office 2003 के समय भी मैंने Outlook इस्तेमाल किया था, लेकिन याद नहीं कि यह इतना खराब था। समझ नहीं आता यह इतना पीछे कैसे चला गया
Teams की तो बात ही शुरू नहीं करना चाहता। मुझे ठीक से पता भी नहीं कि वह program किस समस्या को हल करना चाहता है
shared files OneDrive में हैं, Teams में भी हैं, और किसी वजह से Outlook में भी हैं
मुझे कंप्यूटर backup files, लगभग 30GB के CloneZilla images, OneDrive/Teams/Outlook में ले जाने पड़े, जिसमें हमेशा लग गया, और Win11 चलाने वाले 6-core Ryzen laptop का fan लगातार पागलों की तरह घूमता रहा
कैसे? क्यों?
सभी workflow और orchestration engines Turing-complete होते हैं
क्योंकि उनका उद्देश्य ही execution flow को automate करना है
या कोई इंसान उन्हें फिर से trigger करके जहाँ रुके थे वहाँ से आगे बढ़ा सकता है?
पहली बात, JIRA orchestration नहीं है
दूसरी बात, workflow का काम किसी state को बाहरी जानकारी से जोड़ना और उन चीज़ों को आसानी से manipulate करने योग्य बनाना है
Turing-complete होने के लिए triggers और rules, infinite counter जैसी कोई चीज़, दो stacks, bidirectional tape जैसी चीज़ें चाहिए
साबित करो कि मैं ग़लत हूँ
मुझे Jira automation पसंद है
जब मैं किसी नई team में शामिल होता हूँ जो Jira इस्तेमाल करती है, तो मैं ऐसी automations सेट करता हूँ जो subtasks के story points अपने-आप जोड़कर parent task के story points भर दें, या अगर पर्याप्त refined properties न हों तो ticket को अपने-आप backlog में भेज दें
जैसे assignee, story points, priority, description वगैरह गायब हों
सिर्फ एक sprint के बाद team board काफ़ी व्यवस्थित हो जाता है
पता नहीं यह default क्यों नहीं है, लेकिन automation से इसे आसानी से ठीक किया जा सकता है
assignee तो उस व्यक्ति को मिलना चाहिए जो वह काम उठाए, यह refinement stage का हिस्सा नहीं होना चाहिए