{"id":11287,"date":"2022-01-18T19:10:11","date_gmt":"2022-01-19T01:10:11","guid":{"rendered":"https:\/\/threecloud.wpengine.com\/?p=11287"},"modified":"2023-09-19T15:48:10","modified_gmt":"2023-09-19T22:48:10","slug":"understanding-the-problem-is-the-hardest-part-of-any-software-project","status":"publish","type":"post","link":"https:\/\/3cloudsolutions.com\/resources\/understanding-the-problem-is-the-hardest-part-of-any-software-project\/","title":{"rendered":"Understanding the Problem is the Hardest Part of Any Software Project"},"content":{"rendered":"<p style=\"color: #333333; line-height: 24px;\"><span style=\"font-size: medium;\">It doesn\u2019t matter what piece of software you\u2019re building, the key to success lies in having a deep understanding\u00a0 of the problem you are aiming to solve.\u00a0 It\u2019s so common to for a project to get well underway before the problem domain is fully understood. It\u2019s a natural thing to happen.<\/span><\/p>\n<p style=\"color: #333333; line-height: 24px;\"><span style=\"font-size: medium;\">When a client comes to you with an idea for software, we usually begin by talking about their idea in terms of our technical minds. When they\u2019re explaining whatever requirements they\u2019ve put together, our wheels start spinning with how we\u2019re going to architect our solution, or how we\u2019re going to design this feature or that. Before we know it, we fire up our IDE of choice and start hammering out our solution.<\/span><\/p>\n<p style=\"color: #333333; line-height: 24px;\"><span style=\"font-size: medium;\">Before long, we begin to run into scenarios that we\u2019re not sure of what the right answer is. At this point, we are left with a choice: get the answers to the questions we have to better understand the problem, or make assumptions about what is probably the right answer, and keep being productive. The misunderstanding is that breaking stride to get a better understanding of the problem is not productive. When we do this, we\u2019ve already set ourselves up to fail. It doesn\u2019t necessarily mean you are going to fail, but there will be pain. As we jump to implementation, we are giving up great opportunities to dive deep into the problem domain. By taking the time to dive into the problem domain, not only are we still productive, but we\u2019re actually more productive in the long run as we will inevitably be more accurate in our solution, requiring much less rework.<\/span><\/p>\n<p style=\"color: #333333; line-height: 24px;\"><span style=\"font-size: medium;\">So how do we dive deep into understanding the problem domain? The short answer is to ask questions. But it\u2019s not just asking questions, it\u2019s asking the right questions.<\/span><\/p>\n<p style=\"color: #333333; line-height: 24px;\"><span style=\"font-size: medium;\">The end user is your greatest asset. The key to understanding the problem is to understand how the end user works and how the product fits into how they work. Get the end user talking and keep them talking by asking \u201cWhat else?\u201d and \u201cTell me more about _____\u201d.<\/span><\/p>\n<p style=\"color: #333333; line-height: 24px;\"><span style=\"font-size: medium;\">Understand the business domain. Your technical domain should match your user\u2019s business domain. When you begin introducing technical terms to a user\u2019s vocabulary, you are attempting to change the way they work. Instead you should be aiming to avoid technical terms that have no place in the business user\u2019s mind.<\/span><\/p>\n<p style=\"color: #333333; line-height: 24px;\"><span style=\"font-size: medium;\">Understanding the problem domain is both hardest and most important aspect to developing any piece of software. I like to never assume that I know enough about the business domain to make assumptions about it. It\u2019s always a better use of time to get the answers to questions as they come up than making assumptions and continuing down the wrong path.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>It doesn\u2019t matter what piece of software you\u2019re building, the key to success lies in&mldr;<\/p>\n","protected":false},"author":21,"featured_media":10853,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[292,264],"tags":[],"class_list":["post-11287","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-app-innovation","category-enterprise-apps","topics-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/posts\/11287","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/comments?post=11287"}],"version-history":[{"count":0,"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/posts\/11287\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/media\/10853"}],"wp:attachment":[{"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/media?parent=11287"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/categories?post=11287"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/tags?post=11287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}