<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Salunga Agile]]></title><description><![CDATA[Salunga Agile]]></description><link>https://blog.penchi.co.uk</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 18:44:23 GMT</lastBuildDate><atom:link href="https://blog.penchi.co.uk/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Split Value, Not Teams: How AI Can Turn Big Stories into Shippable Slices]]></title><description><![CDATA[Most backlogs are full of pseudo-stories—tickets like “Frontend login page,” “Create user table,” or “Backend API for auth.” They feel tidy, but they aren’t stories. They’re fragments that force waterfall handoffs inside a sprint, inflate WIP, and ma...]]></description><link>https://blog.penchi.co.uk/split-value-not-teams-how-ai-can-turn-big-stories-into-shippable-slices</link><guid isPermaLink="true">https://blog.penchi.co.uk/split-value-not-teams-how-ai-can-turn-big-stories-into-shippable-slices</guid><category><![CDATA[productowner]]></category><category><![CDATA[agile]]></category><category><![CDATA[agile development]]></category><category><![CDATA[agile methodology]]></category><dc:creator><![CDATA[James Massey]]></dc:creator><pubDate>Thu, 18 Sep 2025 16:37:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1758213390291/60f92135-a6f2-4993-bcff-c284ffc8bbdb.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most backlogs are full of <em>pseudo-stories</em>—tickets like “Frontend login page,” “Create user table,” or “Backend API for auth.” They feel tidy, but they aren’t <strong>stories</strong>. They’re fragments that force waterfall handoffs inside a sprint, inflate WIP, and make it impossible to answer: <em>what user outcome will be done this week?</em></p>
<p>This post lays out a practical way to spot oversized, fuzzy stories and use AI to split them into <strong>vertical, end-to-end slices</strong>that ship value—without turning your board into a graveyard of chores. The examples assume Battra, but the approach applies anywhere.</p>
<hr />
<h2 id="heading-the-smell-test-big-story-vs-non-story">The Smell Test: “Big Story” vs. “Non-Story”</h2>
<p>A real story should pass a simple 5-point sniff test:</p>
<ol>
<li><p><strong>User-observable</strong> (demoable behind a flag counts).</p>
</li>
<li><p><strong>Valuable</strong> (changes a user behavior or outcome).</p>
</li>
<li><p><strong>Independent enough</strong> to complete without cross-team choreography.</p>
</li>
<li><p><strong>Small</strong> (1–3 days of elapsed work for a pair/small swarm).</p>
</li>
<li><p><strong>Testable</strong> (clear acceptance criteria).</p>
</li>
</ol>
<p>Fail any two of these and you’re likely holding a <strong>big story</strong> or a <strong>non-story</strong> (role/tech slice).</p>
<p>Common anti-patterns:</p>
<ul>
<li><p><strong>Team splits:</strong> “Frontend,” “Backend,” “QA,” “Docs.”</p>
</li>
<li><p><strong>Architecture splits:</strong> “DB migration,” “API endpoint,” “React component.”</p>
</li>
<li><p><strong>Burndown theater:</strong> Lots of movement on tiny tasks, nothing demoable.</p>
</li>
</ul>
<hr />
<h2 id="heading-the-reframe-split-by-outcomes-not-org-charts">The Reframe: Split by Outcomes, Not Org Charts</h2>
<p>Good splits are <strong>thin, end-to-end verticals</strong>. Think “walking skeleton”: deliver one narrow path that works from UI through storage and back, even if it’s rough and behind a flag. Then add more narrow paths.</p>
<p>Useful axes for splitting by <strong>outcome</strong>:</p>
<ul>
<li><p><strong>Persona / Role</strong>: admin vs. employee vs. contractor</p>
</li>
<li><p><strong>Trigger / Context</strong>: web vs. mobile, first-time vs. returning</p>
</li>
<li><p><strong>Variant of the capability</strong>: Google login vs. email/password vs. magic link</p>
</li>
<li><p><strong>Workflow stage</strong>: happy path → error handling → edge cases</p>
</li>
<li><p><strong>Risk first</strong>: de-risk an unknown (external API, compliance) as a separate slice</p>
</li>
<li><p><strong>Data slice</strong>: one product line/region/currency before all</p>
</li>
<li><p><strong>Rollout stage</strong>: internal users → beta cohort → general availability</p>
</li>
</ul>
<p>Pick <strong>one or two axes</strong> to start. If a split doesn’t produce something demoable, it’s not a story—merge it back.</p>
<hr />
<h2 id="heading-example-the-login-mega-story">Example: The “Login” Mega-Story</h2>
<blockquote>
<p><strong>Big story:</strong> “As a user, I want to log in so I can perform privileged activities.”</p>
</blockquote>
<h3 id="heading-bad-non-story-splits">Bad (non-story) splits</h3>
<ul>
<li><p>“Create login page (frontend)”</p>
</li>
<li><p>“Auth endpoints (backend)”</p>
</li>
<li><p>“User table (database)”</p>
</li>
<li><p>“QA test login”</p>
</li>
</ul>
<p>Each depends on the others; none is user-complete.</p>
<h3 id="heading-better-vertical-splits">Better, vertical splits</h3>
<ol>
<li><p><strong>Google login (internal users only, behind a flag)</strong><br /> <strong>AC:</strong> Internal users can authenticate with Google; success leads to a basic “Timesheet” page; failures show friendly error; event logged; telemetry visible.</p>
</li>
<li><p><strong>Email/password happy path (flagged)</strong><br /> <strong>AC:</strong> Existing seeded users can log in; can log out; p95 &lt; 200ms; audit log writes.</p>
</li>
<li><p><strong>Magic link (edge case + a11y copy)</strong><br /> <strong>AC:</strong> One-time links expire in 15 minutes; keyboard-only flow passes.</p>
</li>
<li><p><strong>Error handling &amp; rate limit</strong><br /> <strong>AC:</strong> Lockout after N attempts with reset instructions; 429 surfaces; alarm on brute-force signal.</p>
</li>
<li><p><strong>Rollout to external cohort</strong><br /> <strong>AC:</strong> Feature flag to 10% external users; kill switch; docs updated.</p>
</li>
</ol>
<p>Each slice is demoable, testable, and safe to ship behind a flag.</p>
<hr />
<h2 id="heading-why-humans-struggle-and-where-ai-helps">Why Humans Struggle (and Where AI Helps)</h2>
<p>Humans tend to mirror their org chart: “I do backend, so the story is an API.” Under pressure, we also <strong>over-optimize for motion</strong> (lots of tickets moving) instead of <strong>flow</strong> (value finishing).</p>
<p>AI can help by:</p>
<ul>
<li><p>Recognizing <strong>non-story language</strong> (“create,” “set up,” “implement”) vs. <strong>outcome language</strong> (“user can…”).</p>
</li>
<li><p>Extracting <strong>persona, capability, value</strong> from a big story and proposing <strong>vertical splits</strong> along meaningful axes.</p>
</li>
<li><p>Generating <strong>acceptance criteria</strong> and <strong>test notes</strong> per slice.</p>
</li>
<li><p>Flagging <strong>risk hotspots</strong> (e.g., “SSO provider unknown; propose capability probe slice”).</p>
</li>
<li><p>Replacing the big story with an <strong>epic + linked end-to-end stories</strong> (or a single story with a checklist if that’s truly better).</p>
</li>
</ul>
<hr />
<h2 id="heading-what-ai-assisted-splitting-looks-like-in-practice">What AI-Assisted Splitting Looks Like (in practice)</h2>
<p><strong>Input (the “too big” story):</strong></p>
<blockquote>
<p>“As a user, I want to log in so that I can perform privileged activities.”</p>
</blockquote>
<p><strong>AI proposes (example output):</strong></p>
<p><strong>Epic:</strong> <em>User Authentication (MVP)</em><br /><strong>Goal:</strong> Enable secure authentication for employee timesheets with staged rollout.</p>
<p><strong>Stories:</strong></p>
<ol>
<li><p><strong>Login with Google (internal, flagged)</strong></p>
<ul>
<li><p><strong>AC:</strong> Internal user can authenticate via Google; redirected to <em>Timesheet</em>; errors are actionable; event <a target="_blank" href="http://auth.login.google"><code>auth.login.google</code></a><code>.success/failure</code> recorded; feature off by default.</p>
</li>
<li><p><strong>Test notes:</strong> Seed one internal Google account; synthetic telemetry check.</p>
</li>
</ul>
</li>
<li><p><strong>Timesheet access gated by session</strong></p>
<ul>
<li><p><strong>AC:</strong> Timesheet page redirects to login if session missing/expired; logout works; session TTL 24h; audit trail recorded.</p>
</li>
<li><p><strong>Test notes:</strong> Simulate expiry; verify redirect chain.</p>
</li>
</ul>
</li>
<li><p><strong>Email/Password happy path (seeded users only, flagged)</strong></p>
<ul>
<li><p><strong>AC:</strong> Seeded users authenticate; password policy enforced; basic lockout after N failures (no UX polish yet).</p>
</li>
<li><p><strong>Test notes:</strong> Brute force simulator; ensure alarms.</p>
</li>
</ul>
</li>
<li><p><strong>Error handling &amp; a11y</strong></p>
<ul>
<li><p><strong>AC:</strong> Tokens expire gracefully; screen reader labels present; keyboard flow passes.</p>
</li>
<li><p><strong>Test notes:</strong> VoiceOver/NVDA pass.</p>
</li>
</ul>
</li>
<li><p><strong>Rollout control</strong></p>
<ul>
<li><strong>AC:</strong> Gradual enablement (0% → 10% → 100% for internal; beta cohort for external); kill switch; on-call playbook.</li>
</ul>
</li>
</ol>
<p><strong>AI also suggests:</strong></p>
<ul>
<li><p><strong>Reject</strong> these non-stories if created: “Create user table,” “Implement OAuth client” (fold them into the vertical slices).</p>
</li>
<li><p><strong>Risk slice:</strong> “SSO capability probe” if identity provider is unknown.</p>
</li>
</ul>
<p>This is the difference between <strong>shipping</strong> and <strong>assembling parts</strong>.</p>
<hr />
<h2 id="heading-heuristics-the-ai-uses-transparent-rules-you-can-teach">Heuristics the AI Uses (transparent rules you can teach)</h2>
<ol>
<li><p><strong>INVEST guardrails:</strong> If a candidate slice isn’t Independent, Valuable, or Testable, merge it back.</p>
</li>
<li><p><strong>Demo rule:</strong> Every slice must be demoable to a real or fake persona (internal is fine) behind a flag.</p>
</li>
<li><p><strong>Two-axis max:</strong> Prefer splitting on <strong>one primary axis</strong> (e.g., capability variant) and <strong>one safety axis</strong> (e.g., rollout stage). More axes → explosion of tickets.</p>
</li>
<li><p><strong>Risk-first slice allowed:</strong> If something is unknown (3rd-party API limits, compliance, perf), create a <strong>capability probe</strong> slice whose output is knowledge + a thin working path.</p>
</li>
<li><p><strong>Checklist, not child tickets:</strong> Sub-activities (migrations, copy polish) become PR/story checklists unless they genuinely require separate validation.</p>
</li>
</ol>
<hr />
<h2 id="heading-replace-child-tickets-with-smart-checklists">Replace Child Tickets with Smart Checklists</h2>
<p>Keep flow tight by embedding detail <strong>inside</strong> the story/PR:</p>
<pre><code class="lang-markdown"><span class="hljs-section">### Acceptance Criteria</span>
<span class="hljs-bullet">-</span> [ ] Internal users can log in with Google and reach the Timesheet
<span class="hljs-bullet">-</span> [ ] Failure states provide actionable guidance (no vague “Error”)
<span class="hljs-bullet">-</span> [ ] Telemetry: auth.login.google.{success,failure} captured
<span class="hljs-bullet">-</span> [ ] Feature flag default OFF; kill switch documented

<span class="hljs-section">### Done Definition</span>
<span class="hljs-bullet">-</span> [ ] Unit + integration tests for happy path
<span class="hljs-bullet">-</span> [ ] Dashboard panel shows success/failure rates
<span class="hljs-bullet">-</span> [ ] Alert on 5-minute failure rate &gt; 5%
<span class="hljs-bullet">-</span> [ ] a11y: focus order and labels verified
</code></pre>
<p>Export these checklists to your audit system <strong>after</strong> merge if you need paper trails. Don’t fragment development to create them.</p>
<hr />
<h2 id="heading-prompt-first-workflow-so-splitting-happens-at-the-right-moment">Prompt-First Workflow (so splitting happens at the right moment)</h2>
<ol>
<li><p><strong>Declare intent once</strong> (CLI, editor, or chat):</p>
<pre><code class="lang-plaintext"> Split the big story "As a user, I want to log in so I can access timesheets"
</code></pre>
</li>
<li><p><strong>AI proposes</strong> an epic and 3–5 vertical slices with AC, risk notes, and rollout.</p>
</li>
<li><p><strong>You prune</strong> (merge or delete) and <strong>accept</strong> the slices.</p>
</li>
<li><p><strong>Tool replaces</strong> the big story with the epic and linked stories, seeds PR templates, and sets flags.</p>
</li>
<li><p><strong>Board policy:</strong> Only <strong>stories</strong> move columns. Checklists live in the PR; no role-sliced tickets.</p>
</li>
</ol>
<p>This keeps <strong>humans</strong> in control of intent, with the AI doing the clerical heavy lifting.</p>
<hr />
<h2 id="heading-metrics-to-prove-it-worked">Metrics to Prove It Worked</h2>
<p>Expect to see improvements in:</p>
<ul>
<li><p><strong>Lead time per story</strong> (request → production behind a flag)</p>
</li>
<li><p><strong>Review latency</strong> (PR open → first review)</p>
</li>
<li><p><strong>Aging WIP</strong> (stories &gt; N days in progress)</p>
</li>
<li><p><strong>Change failure rate</strong> (thin, end-to-end changes tend to fail less)</p>
</li>
<li><p><strong>% of stories demoable per sprint</strong> (no more “done backend” without a path)</p>
</li>
</ul>
<p>Stop counting subtasks; start measuring <strong>flow</strong>.</p>
<hr />
<h2 id="heading-pitfalls-and-how-the-ai-avoids-them">Pitfalls (and how the AI avoids them)</h2>
<ul>
<li><p><strong>Explosion of tiny stories:</strong> Use the <em>two-axis max</em> heuristic and combine micro-splits into a single outcome slice.</p>
</li>
<li><p><strong>Hidden dependencies:</strong> The AI tags slices with “shared concerns” (e.g., session store, email provider) and warns if a slice can’t be demoed without them.</p>
</li>
<li><p><strong>Gold-plating early:</strong> Early slices bias to <strong>happy path</strong> behind a flag; polish and a11y get their own slice once the path exists.</p>
</li>
<li><p><strong>Reintroducing team splits:</strong> The bot gently blocks story titles that start with “Backend/Frontend/QA” and suggests a vertical rewrite.</p>
</li>
</ul>
<hr />
<h2 id="heading-a-30-minute-starter-plan">A 30-Minute Starter Plan</h2>
<ol>
<li><p><strong>Add the sniff test</strong> to your story template (“Demoable? Valuable? Independent? Small? Testable?”).</p>
</li>
<li><p><strong>Pilot AI-assisted splitting</strong> on your next obviously-big story (e.g., “Login,” “Invoicing,” “Search”). Accept 3–5 slices max.</p>
</li>
<li><p><strong>Change board policy</strong>: Only stories move columns; checklists live in PRs; ban role-sliced tickets.</p>
</li>
<li><p><strong>Feature-flag everything</strong> so thin slices can ship safely.</p>
</li>
<li><p><strong>Measure two sprints</strong> of lead time and review latency. Share the deltas at retro.</p>
</li>
</ol>
<hr />
<h2 id="heading-tldr">TL;DR</h2>
<p>Most “splitting” turns stories into role-based chores that don’t ship value. Teach your system (and your team) to split by <strong>user-visible outcomes</strong> along a couple of sensible axes—persona, capability variant, workflow stage, risk—so each slice is <strong>end-to-end, demoable, and testable</strong>. Let AI do the mechanical work: detect non-stories, propose vertical slices with AC, replace the mega-story with an epic + linked stories, and keep the board focused on flow.</p>
<p>That’s how you make splitting useful: fewer chores, more value, shipped sooner.</p>
]]></content:encoded></item><item><title><![CDATA[Lost in the Hierarchy: Why Hunting the Right Ticket Wastes Time (and How a Prompt-First Approach Fixes It)]]></title><description><![CDATA[Agile tools like Jira and its cousins are designed around a hierarchy: Epics contain Stories, which contain Subtasks, which might be linked to other Epics or Initiatives. On paper, it looks tidy. In practice, it often turns every developer and produc...]]></description><link>https://blog.penchi.co.uk/lost-in-the-hierarchy-why-hunting-the-right-ticket-wastes-time-and-how-a-prompt-first-approach-fixes-it</link><guid isPermaLink="true">https://blog.penchi.co.uk/lost-in-the-hierarchy-why-hunting-the-right-ticket-wastes-time-and-how-a-prompt-first-approach-fixes-it</guid><category><![CDATA[agile]]></category><category><![CDATA[agile development]]></category><category><![CDATA[Agile Software Development]]></category><category><![CDATA[developer experience]]></category><category><![CDATA[productowner]]></category><dc:creator><![CDATA[James Massey]]></dc:creator><pubDate>Thu, 11 Sep 2025 15:36:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757604922278/91062112-066c-4ac4-a57a-cac4e50c8745.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Agile tools like Jira and its cousins are designed around a hierarchy: Epics contain Stories, which contain Subtasks, which might be linked to other Epics or Initiatives. On paper, it looks tidy. In practice, it often turns every developer and product owner into a miner with a headlamp, descending into ticket caves in search of the one card that actually matters.</p>
<p>This post explores why hierarchical UIs waste so much time, what kinds of confusion teams typically face, how enforced integrations make the problem worse, and what a <strong>prompt-first, opinionated assistant</strong> does differently.</p>
<hr />
<h2 id="heading-the-thirty-minute-treasure-hunt">The Thirty-Minute Treasure Hunt</h2>
<p>A typical situation: a developer is told to “finish the payment error story.” They open the tool and search <em>payments error</em>. Up come dozens of results:</p>
<ul>
<li><p>An epic called <em>“Improve Checkout Reliability.”</em></p>
</li>
<li><p>A story called <em>“Handle decline codes from providers.”</em></p>
</li>
<li><p>A subtask named <em>“Update error mapping table.”</em></p>
</li>
<li><p>A linked bug <em>“iOS app shows generic error.”</em></p>
</li>
<li><p>Another story <em>“Retry transient errors.”</em></p>
</li>
</ul>
<p>Which one is the right one? The only way forward is to click through them all, read the comments, and try to piece together the intent. What should be a two-minute lookup becomes a 30-minute focus-breaking hunt.</p>
<hr />
<h2 id="heading-why-hierarchies-turn-into-mazes">Why Hierarchies Turn Into Mazes</h2>
<h3 id="heading-naming-drift">Naming Drift</h3>
<p>Epics and stories often share similar titles—“Payments Error,” “Handle Payment Errors,” “Error Handling Improvements”—that overlap without clarifying.</p>
<h3 id="heading-depth-for-depths-sake">Depth for Depth’s Sake</h3>
<p>Some teams use epics as themes, others as oversized stories. Subtasks may be detailed technical work or placeholders. There is no consistency.</p>
<h3 id="heading-too-many-links">Too Many Links</h3>
<p>“Blocked by,” “Relates to,” “Clones,” “Duplicates”… after a few months, the web of links looks official but doesn’t guide action.</p>
<h3 id="heading-search-that-doesnt-help">Search That Doesn’t Help</h3>
<p>Search matches text literally. If you don’t guess the right wording or ID, you’re spelunking.</p>
<hr />
<h2 id="heading-typical-planning-session-confusion">Typical Planning Session Confusion</h2>
<p>During planning, a product owner pulls up an initiative: <em>“Mobile App Performance.”</em> Inside sit 12 epics. One epic, <em>“Improve Load Times,”</em> has 18 stories, each with subtasks.</p>
<p>Leadership asks, “Which of these have actually shipped?”<br />The PO clicks through epic after epic, but there’s no clear signal. Everyone is left with lots of data but no answers.</p>
<p>This isn’t an outlier—it’s a common planning pain.</p>
<hr />
<h2 id="heading-the-developers-daily-grind">The Developer’s Daily Grind</h2>
<ul>
<li><p><strong>Context-switching penalty:</strong> Multiple tabs open, each for a different branch of the hierarchy.</p>
</li>
<li><p><strong>Guesswork navigation:</strong> Without story IDs, devs send Slack messages like “Is it S-142 or S-187?”</p>
</li>
<li><p><strong>Incomplete parent items:</strong> Subtasks show as “Done,” but the user-visible story is still waiting.</p>
</li>
</ul>
<p>The result: developers rely on colleagues for navigation instead of trusting the board.</p>
<hr />
<h2 id="heading-the-product-owners-parallel-pain">The Product Owner’s Parallel Pain</h2>
<ul>
<li><p><strong>Endless grooming:</strong> Sorting, renaming, merging duplicates.</p>
</li>
<li><p><strong>Shadow systems:</strong> Because grooming feels hopeless, many POs keep the “real” priorities in Notion or Excel.</p>
</li>
<li><p><strong>Update stress:</strong> When asked, “What shipped?” they know it will take several clicks and hedging, not a confident answer.</p>
</li>
</ul>
<hr />
<h2 id="heading-stakeholders-and-sponsors-simple-questions-no-simple-answers">Stakeholders and Sponsors: Simple Questions, No Simple Answers</h2>
<p>Executives rarely dive into the tool. When they do, they face a tangle. Their questions are straightforward:</p>
<ul>
<li><p>“What’s blocking the iOS checkout release?”</p>
</li>
<li><p>“Which parts of the security epic are still open?”</p>
</li>
<li><p>“What shipped last week?”</p>
</li>
</ul>
<p>The hierarchy can’t answer those questions clearly. It was designed for structure, not for outcomes.</p>
<hr />
<h2 id="heading-when-git-hooks-make-it-even-worse">When Git Hooks Make It Even Worse</h2>
<p>Many organizations try to enforce discipline by wiring their version control system to their agile tool. A common pattern: every commit message must reference a valid ticket ID, and the ticket must be in the correct state. If it isn’t, the push is rejected.</p>
<p>On the surface, this seems sensible: traceability between code and work items. In practice, it multiplies the pain of hierarchies.</p>
<p>Imagine finishing a feature branch with six commits:</p>
<ul>
<li><p><code>fix error message fallback</code></p>
</li>
<li><p><code>add test coverage for provider X</code></p>
</li>
<li><p><code>retry transient errors on timeout</code></p>
</li>
</ul>
<p>When you push, the hook blocks:<br /><em>“Commit must reference a valid ticket ID in an In Progress or In Review state.”</em></p>
<p>Now the developer must:</p>
<ol>
<li><p>Identify which ticket each commit belongs to.</p>
</li>
<li><p>Navigate the hierarchy to find the correct ticket IDs.</p>
</li>
<li><p>Check if the ticket is in the correct state; if not, move it.</p>
</li>
<li><p>Rewrite six commit messages to append IDs.</p>
</li>
<li><p>Push again.</p>
</li>
</ol>
<p>A task that should take seconds becomes 20 minutes of clerical work. Worse, if the wrong ticket was chosen, the traceability is meaningless anyway.</p>
<p>Instead of creating alignment, enforced hooks amplify the cost of poor hierarchies. They punish developers for the tool’s complexity.</p>
<hr />
<h2 id="heading-why-teams-tolerate-it">Why Teams Tolerate It</h2>
<ul>
<li><p><strong>It’s the norm.</strong> Everyone has grown used to the idea that hierarchies are “just how agile tools work.”</p>
</li>
<li><p><strong>Inertia.</strong> Years of epics, subtasks, and custom workflows make teams hesitant to simplify.</p>
</li>
<li><p><strong>Fear of losing detail.</strong> Leaders think fewer levels means losing oversight, even though the detail is already buried.</p>
</li>
<li><p><strong>Compliance theater.</strong> Hooks and integrations create an illusion of control, even when the quality of the data is questionable.</p>
</li>
</ul>
<hr />
<h2 id="heading-the-prompt-first-alternative">The Prompt-First Alternative</h2>
<p>Instead of spelunking through boards—or fighting hooks—you <strong>ask the system directly</strong>:</p>
<ul>
<li><p>“Show the story blocking checkout for iOS, owned by Payments, estimated under 2 days.”</p>
</li>
<li><p>“What shipped in the last 7 days that touched authentication?”</p>
</li>
<li><p>“List all open high-priority mobile bugs.”</p>
</li>
</ul>
<p>The assistant surfaces results ranked by:</p>
<ul>
<li><p><strong>Code ownership</strong> (which service or repo was touched).</p>
</li>
<li><p><strong>Recency</strong> (recent commits and activity).</p>
</li>
<li><p><strong>Release linkage</strong> (what is tied to an actual shipment).</p>
</li>
</ul>
<p>And for git integration:</p>
<ul>
<li><p>Commits auto-link to the right work item, inferred from branch name, PR context, and test coverage.</p>
</li>
<li><p>If the match isn’t obvious, the assistant prompts: <em>“These commits look related to Story S-142 (Checkout Errors). Link them?”</em></p>
</li>
<li><p>Instead of push-blocks, developers get lightweight suggestions.</p>
</li>
</ul>
<hr />
<h2 id="heading-opinionated-guardrails-that-prevent-the-maze">Opinionated Guardrails That Prevent the Maze</h2>
<ul>
<li><p><strong>Limit nesting.</strong> Epics and stories are enough. Subtasks appear automatically when code is linked.</p>
</li>
<li><p><strong>Detect duplicates.</strong> New stories flagged as similar to existing ones trigger a merge suggestion.</p>
</li>
<li><p><strong>Force clarity.</strong> Duplicate titles aren’t allowed; stories require outcomes.</p>
</li>
<li><p><strong>Archive stale work.</strong> Items untouched in 90 days snooze unless re-affirmed.</p>
</li>
<li><p><strong>Smarter git hooks.</strong> Enforce links without punishing developers—auto-suggest IDs, move tickets based on repo events.</p>
</li>
</ul>
<hr />
<h2 id="heading-a-more-typical-workflow-with-prompts">A More Typical Workflow With Prompts</h2>
<ul>
<li><p>A developer asks: <em>“What’s the next bug in Payments under 4 hours of work?”</em> → The assistant proposes two ranked options.</p>
</li>
<li><p>A PO asks: <em>“Show me everything at risk of missing the sprint goal.”</em> → The assistant surfaces stories with PRs stuck in review.</p>
</li>
<li><p>A sponsor asks: <em>“What shipped to customers this week?”</em> → The assistant lists three stories tied to releases, with user-visible outcomes.</p>
</li>
</ul>
<p>No tree-digging. No guessing. No rewriting commit messages after failed pushes.</p>
<hr />
<h2 id="heading-the-ripple-effects">The Ripple Effects</h2>
<ul>
<li><p><strong>Developers:</strong> Hours saved per week, flow protected, less tool resentment.</p>
</li>
<li><p><strong>Product Owners:</strong> Less grooming, more prioritization.</p>
</li>
<li><p><strong>Sponsors:</strong> Clearer answers tied to outcomes, not IDs.</p>
</li>
<li><p><strong>Leads:</strong> Traceability achieved automatically, without punishing hoops.</p>
</li>
</ul>
<hr />
<h2 id="heading-takeaways">Takeaways</h2>
<p>Ticket hunting is not productive—it’s bureaucracy disguised as organization. Hierarchies encourage wandering, and enforced git hooks amplify the waste by turning commits into paperwork.</p>
<p>A <strong>prompt-first, opinionated assistant</strong> cuts through the maze. Ask what you need, and get context-ranked answers. Link code to work automatically, not by forcing humans to append IDs.</p>
<p>Agile promised speed and focus. To get there, we need tools that answer questions and automate traceability, not ones that bury both in structure.</p>
]]></content:encoded></item><item><title><![CDATA[Why Jira Feels Like Bureaucracy Disguised as Agile]]></title><description><![CDATA[Agile was supposed to free teams. It promised faster feedback loops, empowered developers, and a focus on delivering value, not paperwork. Yet for many teams, Jira has turned “agile” into the very thing it set out to escape: bureaucracy.
Instead of b...]]></description><link>https://blog.penchi.co.uk/why-jira-feels-like-bureaucracy-disguised-as-agile</link><guid isPermaLink="true">https://blog.penchi.co.uk/why-jira-feels-like-bureaucracy-disguised-as-agile</guid><category><![CDATA[#Agile-Coaching]]></category><category><![CDATA[agile]]></category><category><![CDATA[Scrum]]></category><category><![CDATA[developer experience]]></category><category><![CDATA[Product Management]]></category><category><![CDATA[engineering leadership]]></category><category><![CDATA[AgileTransformation]]></category><category><![CDATA[project management]]></category><category><![CDATA[team productivity]]></category><category><![CDATA[devtools]]></category><category><![CDATA[dev tools]]></category><dc:creator><![CDATA[James Massey]]></dc:creator><pubDate>Sat, 06 Sep 2025 16:26:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757176162549/2331562c-39ab-413d-b754-744dc4bace80.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Agile was supposed to free teams. It promised faster feedback loops, empowered developers, and a focus on delivering value, not paperwork. Yet for many teams, Jira has turned “agile” into the very thing it set out to escape: bureaucracy.</p>
<p>Instead of being a tool that quietly supports flow, Jira often dominates the working day — dictating what a product owner or developer can do, when they can do it, and how many hoops they must jump through to do something simple.</p>
<p>This isn’t just inefficient. It actively works against agility.</p>
<hr />
<h2 id="heading-a-day-in-the-life-product-owner">A Day in the Life: Product Owner</h2>
<p>Imagine you’re a product owner preparing the next sprint. You should be focused on vision and value: clarifying what the team should deliver and why. Instead, here’s what often happens:</p>
<ol>
<li><p><strong>Field Fatigue.</strong> Every new story demands that you fill in a dozen fields: “Epic link,” “Component,” “Business Unit,” “Priority Matrix,” “Regulatory Category.” Some of these may never be read by anyone, but they’re enforced, and the ticket won’t save without them.</p>
<p> <em>One PO I know spent fifteen minutes hunting down the right value for a “Risk Classification” dropdown with thirty options. The story was about fixing a typo on a marketing page.</em></p>
</li>
<li><p><strong>Workflow Wrestling.</strong> Want to move a story from “Ready” to “In Progress”? Not so fast — the workflow has three intermediate states. Each requires you to set flags or checkboxes. Miss one, and the story is rejected with a cryptic error.</p>
<p> <em>Another team was blocked for half a day because a ticket couldn’t leave “Analysis” until the “Change Advisory Board” field was completed. The CAB wasn’t even relevant to their team — it was a global requirement inherited from another department.</em></p>
</li>
<li><p><strong>Backlog Bloat.</strong> Jira doesn’t care if you write a monster story that could take a month. In fact, it encourages it — epics, sub-tasks, linked stories. The backlog balloons into an overgrown forest, where grooming is less about clarity and more about compliance.</p>
</li>
</ol>
<p>Instead of thinking about customers, the PO spends much of their time playing <strong>form-filler-in-chief</strong>.</p>
<hr />
<h2 id="heading-a-day-in-the-life-developer">A Day in the Life: Developer</h2>
<p>Now imagine the developer picking up one of those stories. They’re ready to deliver some value. But again, Jira gets in the way:</p>
<ol>
<li><p><strong>Ticket Tetris.</strong> Before they can even start, the developer must navigate the ticket’s fields. Is the “Environment Impact” filled in? Has the “Compliance Risk” flag been set? If not, they can’t transition the ticket, and they’ll need to chase the PO.</p>
<p> <em>I’ve seen developers give up on starting work because they didn’t have permission to edit the required “Cost Centre” field. They literally couldn’t press the “Start Progress” button without waiting for finance to update it.</em></p>
</li>
<li><p><strong>Push Blockers.</strong> Later, when they open a pull request, the integration checks whether the Jira ticket is in the “In Review” state. If it isn’t, the PR is blocked. The developer must context-switch out of GitHub, update the Jira ticket, and re-push.</p>
<p> <em>One engineer told me their PR was blocked three times because the ticket was in the wrong sub-state: “Code Review,” not “Peer Review.” Both meant the same thing — but Jira didn’t care.</em></p>
</li>
<li><p><strong>Time-Tracking Tax.</strong> At the end of the day, they must log hours against each ticket. This isn’t used to improve flow — it’s often just to satisfy management reports. But if it’s missed, the system nags them or even locks their sprint board.</p>
<p> <em>In one large enterprise, developers were forced to split their hours across multiple “billing codes.” A two-hour bug fix might be logged as 0.5h “Maintenance,” 1h “Change Request,” and 0.5h “Unplanned Work.” None of it helped them deliver faster — but it satisfied an Excel sheet somewhere.</em></p>
</li>
</ol>
<p>By the time actual coding happens, the developer has already invested significant time simply <em>satisfying Jira</em>.</p>
<hr />
<h2 id="heading-the-root-of-the-problem">The Root of the Problem</h2>
<p>Jira wasn’t designed to be a lightweight, opinionated tool. It was designed to be <strong>infinitely configurable</strong> — to suit every team, every enterprise workflow, every PMO demand. But that flexibility comes at a cost:</p>
<ul>
<li><p><strong>Bureaucracy by Default.</strong> If a field can be added, it will be. If a workflow can be extended, it is.</p>
</li>
<li><p><strong>Anti-Pattern Reinforcement.</strong> Large, vague stories? Jira supports them. Waterfall disguised as agile? Jira accommodates it.</p>
</li>
<li><p><strong>Cognitive Overhead.</strong> Developers and POs must constantly remember which fields matter, which states are valid, and how to game the system to keep work flowing.</p>
</li>
</ul>
<p>Instead of helping teams be agile, Jira often enforces the <em>illusion</em> of control while consuming real time and energy.</p>
<hr />
<h2 id="heading-an-opinionated-alternative">An Opinionated Alternative</h2>
<p>Our philosophy is different: <strong>less choice, more clarity.</strong></p>
<p>We believe a tool should guide you toward good agile practice, not let you reinvent bureaucracy. That’s why our assistant is opinionated:</p>
<ul>
<li><p><strong>Simplified Workflows.</strong> A story can only be <em>Ready, In Progress, In Review,</em> or <em>Done.</em> That’s it. No labyrinth of states to navigate.</p>
</li>
<li><p><strong>Healthy Story Size.</strong> Try to create a story that’s too big? The tool will stop you. Stories must represent small, testable slices of value.</p>
</li>
<li><p><strong>Automated Hygiene.</strong> Forget moving tickets. If a PR is merged, the story progresses. If tests fail, it rolls back. The board reflects reality, not admin activity.</p>
</li>
<li><p><strong>No Dead Fields.</strong> You’ll never be blocked by an irrelevant enterprise checkbox. Fields are lean and purposeful, designed for teams, not auditors.</p>
</li>
</ul>
<p>This isn’t about restricting freedom. It’s about <strong>protecting flow</strong>. Teams are freed to focus on delivering, not filling forms.</p>
<hr />
<h2 id="heading-where-ai-helps">Where AI Helps</h2>
<p>AI isn’t the headline — it’s the quiet partner reinforcing the opinionated design.</p>
<ul>
<li><p><strong>Spotting Story Smells.</strong> If a story looks too large or unfocused, the assistant suggests splitting it.</p>
</li>
<li><p><strong>Clarifying Acceptance Criteria.</strong> Developers don’t start from a blank page. The assistant drafts criteria aligned to agile best practice.</p>
</li>
<li><p><strong>Context Awareness.</strong> If a “story” is really a “task,” the assistant nudges you to reframe it.</p>
</li>
<li><p><strong>Automatic Linking.</strong> PRs, tests, and stories are connected automatically, without developer intervention.</p>
</li>
</ul>
<p>AI isn’t there to overwhelm. It’s there to <em>reduce friction</em> and keep work flowing.</p>
<hr />
<h2 id="heading-the-human-impact">The Human Impact</h2>
<p>The biggest difference isn’t just fewer clicks — it’s cultural.</p>
<ul>
<li><p><strong>For POs:</strong> More time thinking about customer value, less time in field validation purgatory.</p>
</li>
<li><p><strong>For Developers:</strong> More time coding, less time chasing ticket states.</p>
</li>
<li><p><strong>For Teams:</strong> A shared board that reflects reality, not compliance.</p>
</li>
</ul>
<p>When the tool is opinionated enough to prevent bureaucracy, and intelligent enough to smooth the edges, teams rediscover the agility they were promised in the first place.</p>
<hr />
<h2 id="heading-conclusion">Conclusion</h2>
<p>Jira feels like bureaucracy disguised as agile because it allows — and often enforces — process that serves the tool, not the team. It turns product owners into administrators and developers into compliance officers.</p>
<p>We believe there’s a better way: an <strong>opinionated, constraint-driven assistant</strong> that actively prevents bureaucracy from creeping in. One that makes the right way the easy way, and quietly uses AI to handle the rest.</p>
<p>Because agility shouldn’t be about managing Jira. It should be about delivering value.</p>
]]></content:encoded></item></channel></rss>