{"id":186,"date":"2024-01-16T11:12:00","date_gmt":"2024-01-16T14:12:00","guid":{"rendered":"https:\/\/suspensao.blog.br\/disbelief\/?p=186"},"modified":"2024-01-22T17:56:58","modified_gmt":"2024-01-22T20:56:58","slug":"tiny-ticket-types","status":"publish","type":"post","link":"https:\/\/suspensao.blog.br\/disbelief\/tiny-ticket-types\/","title":{"rendered":"Tiny Ticket Types"},"content":{"rendered":"\n<p>Tickets in Jira tend to accumulate redundant and optional fields, becoming complex and confusing. I like Jira, but I understand the frustration it causes.<\/p>\n\n\n\n<p>A plausible solution could be inspired by software development. We programmers are used to finding massive source files, and we know that breaking them into smaller files drastically improves code comprehension. Therefore, inspired by coding best practices, I suggest creating smaller tickets.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Only three states<\/h2>\n\n\n\n<p>One way to limit the size of tickets is to simplify the workflow by restricting the number of states. For example, we can define that each type of ticket would have, at most, three states:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>To do<\/li>\n\n\n\n<li>In progress<\/li>\n\n\n\n<li>Done<\/li>\n<\/ul>\n\n\n\n<p>To represent other stages, we can create new types of tickets, such as sub-tasks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A moderately complex ticket type<\/h2>\n\n\n\n<p>Let&#8217;s look at an example. Consider the ticket below:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"652\" height=\"426\" data-attachment-id=\"187\" data-permalink=\"https:\/\/suspensao.blog.br\/disbelief\/tiny-ticket-types\/ticke1-n\/\" data-orig-file=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/ticke1-n.png?fit=652%2C426&amp;ssl=1\" data-orig-size=\"652,426\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"ticke1-n\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/ticke1-n.png?fit=652%2C426&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/ticke1-n.png?resize=652%2C426&#038;ssl=1\" alt=\"Key: XYZ-1234. Status: Testing. Title: Nasal demons. Description: Calling free() on a previosly dealocaded pointer results in demons coming out of the nose. Technical analysis: The root cause is an undefined behavior. Test results: The patch does not work, now ghosts pop out of the user\u2019s ears. Release date: 2023-12-22\" class=\"wp-image-187\" srcset=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/ticke1-n.png?w=652&amp;ssl=1 652w, https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/ticke1-n.png?resize=300%2C196&amp;ssl=1 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n<\/div>\n\n\n<p>It would follow this workflow:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"646\" height=\"189\" data-attachment-id=\"189\" data-permalink=\"https:\/\/suspensao.blog.br\/disbelief\/tiny-ticket-types\/workflow-en\/\" data-orig-file=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/workflow-en.png?fit=646%2C189&amp;ssl=1\" data-orig-size=\"646,189\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"workflow-en\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/workflow-en.png?fit=646%2C189&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/workflow-en.png?resize=646%2C189&#038;ssl=1\" alt=\"Open \u21e8 To do \u21e8 In Analysis \u21e8 Doing \u21e8 Testing \u21e8 Release \u21e8 Done \" class=\"wp-image-189\" srcset=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/workflow-en.png?w=646&amp;ssl=1 646w, https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/workflow-en.png?resize=300%2C88&amp;ssl=1 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n<\/div>\n\n\n<p>How could we reduce the number of phases?<\/p>\n\n\n\n<p>We can start by removing the &#8220;In Analysis&#8221; stage. In its place, we create a new type of ticket called &#8220;Technical Analysis.&#8221; This way, the original task remains in progress (&#8220;Doing&#8221;) while the technical analysis is underway.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fewer fields in a ticket<\/h2>\n\n\n\n<p>An advantage of this would be transferring fields to sub-tasks. Fields that would clutter the original ticket can appear only in tasks where they are relevant.<\/p>\n\n\n\n<p>Consider the &#8220;Release date&#8221; field, which only makes sense in the &#8220;Release&#8221; phase. If developers, testers, etc., are not responsible for the release, this field is confusing and pollutes the original task. With a new task type called &#8220;Release,&#8221; this field would be in the most appropriate place, keeping the original ticket concise.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Repeating stages without regressing<\/h2>\n\n\n\n<p>Another advantage is that the original ticket can go through the same stage multiple times. It&#8217;s common for a ticket to have a development phase followed by quality tests, for example. However, if a problem arises in the evaluation, it&#8217;s not advisable to revert to the development phase. How to deal with this?<\/p>\n\n\n\n<p>By working with sub-tasks, we can mark validation as completed and create a new implementation ticket. In our ticket, for example, we can remove the &#8220;Testing&#8221; phase and create a sub-task of type &#8220;Test,&#8221; as well as another one called &#8220;Development.&#8221; Every time the test fails, we close testing and open a new development task.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Result<\/h2>\n\n\n\n<p>Following this strategy, our ticket would look like this:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"652\" height=\"426\" data-attachment-id=\"188\" data-permalink=\"https:\/\/suspensao.blog.br\/disbelief\/tiny-ticket-types\/ticket-2-en\/\" data-orig-file=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/ticket-2-en.png?fit=652%2C426&amp;ssl=1\" data-orig-size=\"652,426\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"ticket-2-en\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/ticket-2-en.png?fit=652%2C426&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/ticket-2-en.png?resize=652%2C426&#038;ssl=1\" alt=\"Key: XYZ-1234. Status: Doing. Title: Nasal demons. Description: Calling free() on a previosly dealocaded pointer results in demons coming out of the nose. Links: XYZ-1235 Technical analysis; XYZ-2345 Remove text in Latin; XYZ-3456 Test Latin removal; XYZ-2345 Use function medium(); XYZ-3456 Test medium() function; XYZ-4444 Release plan\n\" class=\"wp-image-188\" srcset=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/ticket-2-en.png?w=652&amp;ssl=1 652w, https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/ticket-2-en.png?resize=300%2C196&amp;ssl=1 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n<\/div>\n\n\n<p>And the workflow would be much simpler:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"510\" height=\"57\" data-attachment-id=\"190\" data-permalink=\"https:\/\/suspensao.blog.br\/disbelief\/tiny-ticket-types\/workflow2-en\/\" data-orig-file=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/workflow2-en.png?fit=510%2C57&amp;ssl=1\" data-orig-size=\"510,57\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"workflow2-en\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/workflow2-en.png?fit=510%2C57&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/workflow2-en.png?resize=510%2C57&#038;ssl=1\" alt=\"Open \u21e8 To do \u21e8 Doing \u21e8 Done \" class=\"wp-image-190\" srcset=\"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/workflow2-en.png?w=510&amp;ssl=1 510w, https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/workflow2-en.png?resize=300%2C34&amp;ssl=1 300w\" sizes=\"auto, (max-width: 510px) 85vw, 510px\" \/><figcaption class=\"wp-element-caption\"> <\/figcaption><\/figure>\n<\/div>\n\n\n<p>Naturally, this strategy is flexible. In our case, for example, we haven&#8217;t removed the &#8220;To do&#8221; phase yet. Restricting it to five (including backlog and validation) is another possibility. The core idea is to limit the number of stages to a small value for all tickets.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusions<\/h2>\n\n\n\n<p>In programming, it&#8217;s common to encounter the so-called &#8220;God objects,&#8221; huge objects responsible for various different functions. Breaking them down is a surefire way to achieve code quality. Therefore, I suspect the same principle can apply to tickets in Jira.<\/p>\n\n\n\n<p>I&#8217;m not a project manager, but as a programmer, I believe that limiting the size and steps of tickets can be an effective idea. I&#8217;m curious to know if anyone has tried this and how it went.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tickets in Jira tend to accumulate redundant and optional fields, becoming complex and confusing. I like Jira, but I understand the frustration it causes. A plausible solution could be inspired by software development. We programmers are used to finding massive source files, and we know that breaking them into smaller files drastically improves code comprehension. &hellip; <a href=\"https:\/\/suspensao.blog.br\/disbelief\/tiny-ticket-types\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Tiny Ticket Types&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":200,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[69,43,1],"tags":[],"class_list":["post-186","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agile-development","category-software-engineering","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/suspensao.blog.br\/disbelief\/wp-content\/uploads\/2024\/01\/Card_index_library.jpg?fit=1201%2C1024&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9Ru6q-30","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/suspensao.blog.br\/disbelief\/wp-json\/wp\/v2\/posts\/186","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/suspensao.blog.br\/disbelief\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/suspensao.blog.br\/disbelief\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/suspensao.blog.br\/disbelief\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/suspensao.blog.br\/disbelief\/wp-json\/wp\/v2\/comments?post=186"}],"version-history":[{"count":3,"href":"https:\/\/suspensao.blog.br\/disbelief\/wp-json\/wp\/v2\/posts\/186\/revisions"}],"predecessor-version":[{"id":201,"href":"https:\/\/suspensao.blog.br\/disbelief\/wp-json\/wp\/v2\/posts\/186\/revisions\/201"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/suspensao.blog.br\/disbelief\/wp-json\/wp\/v2\/media\/200"}],"wp:attachment":[{"href":"https:\/\/suspensao.blog.br\/disbelief\/wp-json\/wp\/v2\/media?parent=186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/suspensao.blog.br\/disbelief\/wp-json\/wp\/v2\/categories?post=186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/suspensao.blog.br\/disbelief\/wp-json\/wp\/v2\/tags?post=186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}