<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://luispe.me/feed.xml" rel="self" type="application/atom+xml" /><link href="https://luispe.me/" rel="alternate" type="text/html" /><updated>2026-03-07T05:22:55+00:00</updated><id>https://luispe.me/feed.xml</id><title type="html">Luis P Perez</title><subtitle>Technologist passionate for creating products that customers love. Dad, foodie, traveler, stock trader.</subtitle><entry><title type="html">Ticket Hierarchy in JIRA</title><link href="https://luispe.me/product-management/agile/2025/02/08/ticket-hierarchy-in-jira.html" rel="alternate" type="text/html" title="Ticket Hierarchy in JIRA" /><published>2025-02-08T00:00:00+00:00</published><updated>2025-02-08T00:00:00+00:00</updated><id>https://luispe.me/product-management/agile/2025/02/08/ticket-hierarchy-in-jira</id><content type="html" xml:base="https://luispe.me/product-management/agile/2025/02/08/ticket-hierarchy-in-jira.html"><![CDATA[<h2 id="defining-ticket-hierarchy-in-jira">Defining Ticket Hierarchy in JIRA</h2>

<p>In any software project, maintaining a <strong>clear ticket hierarchy</strong> is essential for organizing work, ensuring accountability, and driving efficient development. In this post, I’ll break down the different ticket types used in <strong>JIRA</strong> and how I structure them for my <strong>Permabot project</strong>.</p>

<h2 id="understanding-jira-ticket-types"><strong>Understanding JIRA Ticket Types</strong></h2>

<p>JIRA provides several ticket types, each serving a specific purpose. Here’s how I categorize them:</p>

<ul>
  <li><strong>Epic</strong> – A high-level deliverable representing a scoped user value.</li>
  <li><strong>Story (User Story)</strong> – A feature or user interaction that enhances the product.</li>
  <li><strong>Bug</strong> – An unintended behavior that needs fixing.</li>
  <li><strong>Task</strong> – Non-development work, such as data backfilling or customer interactions.</li>
  <li><strong>Subtask</strong> – The smallest unit of work, breaking down a Story, Bug, or Task.</li>
</ul>

<p>A well-structured hierarchy ensures <strong>clarity in ownership, progress tracking, and smooth execution</strong>.</p>

<hr />

<h2 id="example-permabots-ticket-hierarchy"><strong>Example: Permabot’s Ticket Hierarchy</strong></h2>

<p>Here’s how I structure JIRA tickets for <strong>Permabot</strong>:</p>

<ol>
  <li><strong>Epic:</strong> Clearly defines end-user value and deliverables.</li>
  <li><strong>Stories:</strong> Break down the epic into actionable work.</li>
  <li><strong>Bugs:</strong> Track issues that arise during testing.</li>
</ol>

<h3 id="jira-ticket-breakdown-example"><strong>JIRA Ticket Breakdown Example</strong></h3>

<p>For Permabot v2.3.1, the Epic started with these high-level goals:</p>

<ul>
  <li>Improve logging to capture delta values for option legs, enabling better risk assessment and strategy adjustments.</li>
  <li>Implement dynamic contract sizing to limit potential losses to a maximum of 3% per trade on a $21,000 account.</li>
  <li>Enhance logging for HTTP errors to improve debugging and system reliability.</li>
</ul>

<p>Here’s how my JIRA hierarchy appears in the timeline view:</p>

<p><img src="/assets/images/jira-timeline-permabot-v2.3.1-done.jpg" alt="JIRA Ticket Hierarchy" /></p>

<p>During development, the number of features expanded due to <strong>scope creep</strong>. While this is natural, as deeper exploration surfaces additional issues and opportunities, it’s crucial for a <strong>product manager to monitor and manage scope effectively</strong>. As a general rule, I allow developers to add necessary stories when changes to existing code are required to deliver on the original goals. For instance, before enhancing HTTP error logging, it may be necessary to implement basic logging first. However, external stakeholders should not bypass the product manager when requesting additional features directly from developers.</p>

<p>Another key takeaway is that the Epic initially had <strong>zero bugs</strong>, but as development progressed, unexpected behaviors surfaced—especially given that <strong>the software is still evolving</strong> despite being at version v2.3+. This is normal. Logging these issues ensures they are addressed appropriately, whether as immediate fixes (<strong>P0 priority</strong>) or for future consideration (<strong>P1+ priority</strong>). I’ll cover prioritization strategies in a separate post.</p>

<hr />

<h2 id="example-changelog-permabot-v231"><strong>Example Changelog: Permabot v2.3.1</strong></h2>

<p>Here’s a real changelog from one of Permabot’s releases:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## [2.3.1] - 2024-XX
### Added
- Configured max delta to 0.20 and stop loss is 1.75x
- Created Utils function to log response / requests for debugging
- Dynamic sizing defaulting to 3% max loss on 21000 act
- Added push notifications for active monitoring, alerting in event of 401
- WBPR Bot: Refactored William's Brown Price Reversion strategy supporting &gt;1 daily entries
- Introduction of Perma Journal
- WBPR Bot: standardized notifications
- Json dump utils with logger support

### Fixed
- monitor_and_exit loop continues forever when there are http errors, in case connection comes back.
- WBPR Bot: no trade days end the bot
</code></pre></div></div>

<hr />

<h2 id="final-thoughts"><strong>Final Thoughts</strong></h2>
<p>A well-defined <strong>ticket hierarchy</strong> in JIRA helps ensure a structured and scalable software development process. By clearly defining <strong>Epics, Stories, Bugs, and Tasks</strong>, teams can streamline execution and maintain better control over project progress.</p>

<p><strong>How do you structure your JIRA tickets? Let’s connect and share insights!</strong></p>]]></content><author><name></name></author><category term="product-management" /><category term="agile" /><summary type="html"><![CDATA[Defining Ticket Hierarchy in JIRA]]></summary></entry><entry><title type="html">Product Development Lifecycle</title><link href="https://luispe.me/product-management/agile/2025/01/04/product-development-lifecycle.html" rel="alternate" type="text/html" title="Product Development Lifecycle" /><published>2025-01-04T00:00:00+00:00</published><updated>2025-01-04T00:00:00+00:00</updated><id>https://luispe.me/product-management/agile/2025/01/04/product-development-lifecycle</id><content type="html" xml:base="https://luispe.me/product-management/agile/2025/01/04/product-development-lifecycle.html"><![CDATA[<h2 id="product-development-lifecycle">Product Development Lifecycle</h2>

<p>Throughout my career, I’ve had the opportunity to build and scale small software development teams. As a <strong>technical product manager</strong>, I rely on <strong>time-tested processes</strong> to ensure smooth software iteration. One of the key aspects of scaling a team is <strong>defining a clear product development lifecycle</strong>. Today, I’ll share my approach to structuring this lifecycle, ensuring that software iterations flow as seamlessly as possible.</p>

<h2 id="understanding-the-development-lifecycle"><strong>Understanding the Development Lifecycle</strong></h2>

<p>At its core, the product development lifecycle follows the <strong>Build → Measure → Learn</strong> loop. This iterative process ensures that the product <strong>evolves continuously</strong>:</p>

<ol>
  <li>It starts with an <strong>idea (feature request)</strong> or a <strong>bug (unintended behavior or learning)</strong>.</li>
  <li>The team moves into <strong>development</strong>.</li>
  <li>The feature undergoes <strong>quality control</strong>:
    <ul>
      <li><strong>Automated testing</strong> (unit &amp; integration tests).</li>
      <li><strong>User testing</strong> (where applicable).</li>
    </ul>
  </li>
  <li>The feature is <strong>deployed</strong>.</li>
  <li>Bugs or new learnings emerge, restarting the cycle.</li>
</ol>

<p>A well-defined lifecycle helps teams <strong>minimize bottlenecks</strong> and improve efficiency.</p>

<hr />

<h2 id="example-permabots-development-lifecycle"><strong>Example: Permabot’s Development Lifecycle</strong></h2>

<p>To illustrate this process, let’s look at how I apply these principles to my <strong>Permabot project</strong>:</p>

<ol>
  <li><strong>Feature Ideation</strong> – Every new idea starts as an <strong>Epic</strong> in JIRA, providing a high-level view of the initiative.</li>
  <li><strong>Bug Tracking</strong> (Ongoing) – Issues discovered during development or testing are logged as <strong>Bugs</strong>, which are prioritized for an upcoming release.</li>
  <li><strong>Development Phase</strong> – Code is written, reviewed, and prepared for testing.</li>
  <li><strong>Testing &amp; Validation</strong> – Both <strong>automated and manual testing</strong> ensure that new features and bug fixes meet stability and performance expectations.</li>
  <li><strong>Deployment</strong> – The validated update is released into <strong>production</strong>.</li>
  <li><strong>Iteration &amp; Continuous Improvement</strong> – Bugs and feature enhancements from the latest deployment are logged, feeding into the next development cycle.</li>
</ol>

<hr />

<h3 id="jira-workflow-example"><strong>JIRA Workflow Example</strong></h3>

<p>Here’s a look at how my JIRA workflow is structured:</p>

<p><img src="/assets/images/jira-workflow.jpg" alt="JIRA Workflow Example" /></p>

<p>Being a <strong>team of one</strong> allows me to keep my workflow simple, yet structured enough to ensure quick iterations while maintaining software stability. One key aspect I’ve found useful is having a <strong>“Won’t Do”</strong> state. Plans change, and keeping an <strong>audit trail</strong> of ideas—along with the reasoning for cancellation—prevents unnecessary churn when those ideas resurface in the future.</p>

<p>Additionally, you’ll notice that <strong>all statuses can transition freely</strong> within the workflow. This flexibility allows tasks to move as needed, avoiding unnecessary process constraints. While some teams may prefer a <strong>strict, linear workflow</strong> with clear handoffs and deliverables between states, I’ve found that overly rigid workflows often make JIRA a blocker rather than an enabler for agile development. Ultimately, the <strong>tool should adapt to the team, not the other way around</strong>.</p>

<hr />

<h2 id="final-thoughts"><strong>Final Thoughts</strong></h2>
<p>Defining a <strong>clear product development lifecycle</strong> ensures that software teams can scale <strong>efficiently and iteratively</strong>. JIRA workflows play a crucial role in enforcing these processes while keeping development streamlined.</p>

<p><strong>How do you structure your development lifecycle? Feel free to reach out—I’d love to hear your thoughts!</strong></p>]]></content><author><name></name></author><category term="product-management" /><category term="agile" /><summary type="html"><![CDATA[Product Development Lifecycle]]></summary></entry></feed>