{"id":1323,"date":"2017-03-06T23:36:37","date_gmt":"2017-03-07T07:36:37","guid":{"rendered":"https:\/\/www.ussherpress.com\/blog\/?p=1323"},"modified":"2017-03-08T20:08:45","modified_gmt":"2017-03-09T04:08:45","slug":"software-development-tip-how-to-prioritize-your-work","status":"publish","type":"post","link":"https:\/\/www.ussherpress.com\/blog\/?p=1323","title":{"rendered":"Software development: How to prioritize your work"},"content":{"rendered":"<p style=\"text-align: right;\"><a href=\"https:\/\/www.ussherpress.com\/blog\/?attachment_id=1374\" rel=\"attachment wp-att-1374\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1374\" src=\"https:\/\/www.ussherpress.com\/blog\/wp-content\/uploads\/IMG_2995-copy-1.jpg\" alt=\"\" width=\"1024\" height=\"768\" srcset=\"https:\/\/www.ussherpress.com\/blog\/wp-content\/uploads\/IMG_2995-copy-1.jpg 1024w, https:\/\/www.ussherpress.com\/blog\/wp-content\/uploads\/IMG_2995-copy-1-580x435.jpg 580w, https:\/\/www.ussherpress.com\/blog\/wp-content\/uploads\/IMG_2995-copy-1-768x576.jpg 768w, https:\/\/www.ussherpress.com\/blog\/wp-content\/uploads\/IMG_2995-copy-1-940x705.jpg 940w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><span style=\"color: #999999;\"><em>Photo by the author<\/em><\/span><\/p>\n<blockquote><p>tl;dr &#8211; Work on tasks\u00a0that will eliminate risk and reduce unknowns first.<\/p><\/blockquote>\n<p>Software development is a complex and\u00a0unpredictable activity. Because there are a lot of moving parts, big problems\u00a0may not present themselves immediately. Many technical challenges often don&#8217;t come up until other supporting work is done first. Usability issues may remain unforeseen until the bulk of an app has been written. These challenges can affect the schedule of the project if not tackled early\u00a0as they can cause unnecessary re-work to be done.<\/p>\n<p>Many of these challenges remain unknown simply because they are needlessly prioritized behind other work. <strong>Endeavor\u00a0to\u00a0constantly reduce\u00a0risk by\u00a0finding and completing high-risk work items first.<\/strong><\/p>\n<p>When breaking down your work into bigger pieces, assess the risk of each piece. Figure out what has the highest risk. These are the things that you\u00a0understand the least. Ask yourself how much you know about the problem space. How many assumptions are you\u00a0making? Are they valid? Are there a lot of moving parts? If so,\u00a0can those parts work well together?<\/p>\n<p>After coming up with a risk assessment, prioritize the highest risk items first. The goal in attacking the high risk tasks first is to learn and gather more information and\u00a0then\u00a0adjust your schedule, your designs, and your product goals as necessary.<\/p>\n<p>Likely the biggest risk most products will have is the usefulness of the product itself. Is it something people actually want? <em>How do you know?<\/em> One way startups mitigate this huge unknown is to build a prototype (with a limited feature set and with basic UI) as soon as possible. Get it in your hands and potential customers&#8217; hands early.\u00a0You&#8217;ll likely find issues right away that you couldn&#8217;t see with static design mockups.<\/p>\n<p>Another big risk is architecture. How should the product be built? If you aren&#8217;t familiar with the technical space,\u00a0prototype using components as soon as possible. The goal is not to come up with a pristine architecture, but to just understand the problem space and see what is even possible with the tools and components available. Find out what the tolerances of each component are. Will it be enough for your goals? If you were planning on using open source components, do you have everything you need? The worst thing you can do here is to design at too high a level with limited knowledge of the space. Don&#8217;t commit to big decisions based on missing information.<\/p>\n<p>In my experience, getting\u00a0an end-to-end scenario working reveals so much. Plumbing, i.e. getting data from one place to another, is one of those things that is hard to theorize about and is only really knowable by writing code. Once you get a basic end-to-end scenario that uses most of the pieces of the stack you expect (even with prototype pieces in the middle), you will find out what components you&#8217;ll need and how to difficult or easy it is to connect them together. This will reveal more than a theoretical\u00a0design ever could.<\/p>\n<p>High risk work has a\u00a0greater impact on the success of a\u00a0product than anything else. It\u00a0also means it&#8217;s harder to reverse these decisions, so it&#8217;s important to get them right earlier than later.\u00a0As you complete more and more high\u00a0risk work, the stability of your\u00a0completion date should improve. How the final product and final software design will look should stabilize as well. Don&#8217;t let high risk and difficult-to-reverse decisions be made late in the project. Get those out of the way early!<\/p>\n<p>In summary, map out what you need to do to complete your project.\u00a0Figure out where the big\u00a0unknowns (and big risk!) are and then prioritize those items first. Prototype as necessary to help validate your hypotheses, learn, and\u00a0adjust your plan as you learn more. Repeat until you are done. Good luck!<\/p>\n<p>&nbsp;<\/p>\n<p><em>These thoughts come from my\u00a0own work experience, but many of the ideas weren&#8217;t\u00a0obvious to me until I read\u00a0<a href=\"https:\/\/www.amazon.com\/Lean-Software-Development-Agile-Toolkit\/dp\/0321150783\">Lean Software Development<\/a>, so please\u00a0read that for a more information.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Photo by the author tl;dr &#8211; Work on tasks\u00a0that will eliminate risk and reduce unknowns first. Software development is a complex and\u00a0unpredictable activity. Because there are a lot of moving parts, big problems\u00a0may not present themselves immediately. Many technical challenges often don&#8217;t come up until other supporting work is done first. Usability issues may remain &hellip; <a href=\"https:\/\/www.ussherpress.com\/blog\/?p=1323\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Software development: How to prioritize your work<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[138,120],"tags":[128,129,127],"_links":{"self":[{"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1323"}],"collection":[{"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1323"}],"version-history":[{"count":27,"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1323\/revisions"}],"predecessor-version":[{"id":1380,"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1323\/revisions\/1380"}],"wp:attachment":[{"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}