{"id":1008,"date":"2010-07-20T08:34:33","date_gmt":"2010-07-20T15:34:33","guid":{"rendered":"https:\/\/simpleprogrammer.com\/?p=1008"},"modified":"2013-08-04T23:34:22","modified_gmt":"2013-08-05T03:34:22","slug":"the-hardest-thing-i-struggle-with","status":"publish","type":"post","link":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/","title":{"rendered":"The Hardest Thing I Struggle With"},"content":{"rendered":"<p>I ran up against it again as I was trying to figure out the \u201cright\u201d way to build an android application.<\/p>\n<p>Some of your coworkers probably don\u2019t struggle with the issue because they really just don\u2019t think about it that much.<\/p>\n<p>But, if you are reading this blog, you probably have encountered the problem I am about to talk about.\u00a0 It may be for you, like it is for me, the single greatest thing holding you back.<\/p>\n<p>What am I talking about?<\/p>\n<h2>The struggle with perfection<\/h2>\n<p>We want to build perfect software, we want to build perfect code, but it is just not possible.<\/p>\n<p>Like Tyler Duren\u2019s alter ego, we want to put everything in a nice little box.<\/p>\n<p><a href=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/07\/fightclub0015.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; border-width: 0;\" title=\"fight-club-0015\" alt=\"fight-club-0015\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/07\/fightclub0015_thumb-1.jpg\" width=\"460\" height=\"346\" border=\"0\" \/><\/a><\/p>\n<p>I had mentioned earlier that not all software developers struggle with this problem.\u00a0 I think it arises when you start to actively seek to improve your development skills.\u00a0 It is natural to look for the \u201cright\u201d way to do something you want to get better at.<\/p>\n<ul>\n<li>There is a right way to swing a baseball bat.<\/li>\n<li>There is a right way to do mathematical calculations.<\/li>\n<li>You can play a piece of music perfectly on a piano.<\/li>\n<\/ul>\n<p>But there isn\u2019t a right way to build software.<\/p>\n<p>There are lots of wrong ways, and then there are many better ways that all have trade-offs against each other.<\/p>\n<p>It is vey hard to come to grips with this reality.\u00a0 At least for me it is.\u00a0 I want to know how I am supposed to do it and I don\u2019t want to hear \u201cany way you like\u201d, or, \u201chowever seems right to you.\u201d<\/p>\n<h2>Software development is part craft<\/h2>\n<p>There is some science to it.\u00a0 Don\u2019t get me wrong.<\/p>\n<p>The biggest problem in software development is not people struggling with perfection, but rather developers believing that there are no wrong ways to develop software.<\/p>\n<p>You can learn what is right to some degree, up to a point.\u00a0 But, after you steer away from the obviously wrong, you end up drifting into the true craft of software development.<\/p>\n<p>When you only have one tool, software development is easy.\u00a0 You just hack on things with your one tool.\u00a0 You might not be very effective or very efficient, and you may make a pretty big mess, but you generally can get things done and you know what to do.<\/p>\n<p>When you have a toolbox full of tools, the world stops being so black and white.\u00a0 Software development truly becomes an art or craft at this point, as you are forced to make trade-offs and choose architectures and technologies based on experience and intuition combined.<\/p>\n<p>Our minds fight against this concept of unrule.\u00a0 It is like playing monopoly with generalizations or ideas of how the game should be played, but no explicit rules.\u00a0 Sometimes life is just easier within preset boundaries that clearly tell us what is right and what is wrong.<\/p>\n<p>It is a strange twist of fate that the act of building something that is absolutely structured and governed by rules is such a rule-less and judgment based pursuit.<\/p>\n<h2>Dealing with perfection in an imperfect world<\/h2>\n<p>So, why is striving for perfection bad anyway?<\/p>\n<p>Well, it can be a major roadblock that prevents us from getting things done.<\/p>\n<p>I\u2019ll often find myself at the 90% better than I started solution and pushing to get to 95%.\u00a0 That push to 95% can take the same amount of time it took to get to 90%.<\/p>\n<p>Sometimes when we are looking for the perfect architecture or trying to apply patterns because we believe they are right, we end up making things more complicated than they need to be, or we miss a better \u201cless perfect\u201d solution, because we have deemed it so.<\/p>\n<p>One thing I have tried to do to curb my insatiable desire for perfection is to <strong>strive to always improve rather than for perfection itself.<\/strong><\/p>\n<p>It is important for us to recognize when we are at that 90% mark and move on.<\/p>\n<p>Next time we encounter a similar situation we\u2019ll hit the 91% mark because we will have more experience and will have built better intuition.<\/p>\n<p>Here are some tips and strategies I have picked up for dealing with the problem of perfection.<\/p>\n<ul>\n<li>Try to get rid of the all or nothing mentality.\u00a0 Don\u2019t do things just good enough to get by, but don\u2019t try to do them perfectly either.\u00a0 Do an excellent job and know what that is.<\/li>\n<li>Start working on things in a rough draft form.\u00a0 Fill in details later.\u00a0 This especially helpful with web pages or anything that requires design work.<\/li>\n<li>Don\u2019t get stuck on a problem that is mainly just polish.\u00a0 If the elegant way to do something is causing you 10 hours of debugging but you can do it in a less elegant way and hide the mess in a nice package, opt for the second.\u00a0 You can always come back later, when you don\u2019t feel pressured to find a solution.<\/li>\n<li>Get a second opinion.\u00a0 If you are struggling with a design issue and going back and forth in your head about the best way to do something, ask someone else and it might make one way or another perfectly clear.<\/li>\n<li>Make yourself a research note.\u00a0 Move on for now, and make a note to come back later or to research a technology or design.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>I ran up against it again as I was trying to figure out the \u201cright\u201d way to build an android application. Some of your coworkers probably don\u2019t struggle with the issue because they really just don\u2019t think about it that much. But, if you are reading this blog, you probably have encountered the problem I&#8230;<\/p>\n","protected":false},"author":2,"featured_media":1006,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[2185,148,5895],"tags":[],"class_list":["post-1008","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices","category-design","category-self-improvement"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>The Hardest Thing I Struggle With - Unobtainable Perfection<\/title>\n<meta name=\"description\" content=\"The problem of perfectionism in software development and five strategies to overcome the perfectionist mindset.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Hardest Thing I Struggle With - Unobtainable Perfection\" \/>\n<meta property=\"og:description\" content=\"The problem of perfectionism in software development and five strategies to overcome the perfectionist mindset.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/\" \/>\n<meta property=\"og:site_name\" content=\"Simple Programmer\" \/>\n<meta property=\"article:published_time\" content=\"2010-07-20T15:34:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-08-05T03:34:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/07\/fightclub0015.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"480\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"John Sonmez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"John Sonmez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/\"},\"author\":{\"name\":\"John Sonmez\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#\\\/schema\\\/person\\\/1abc70edfb189184827740310672de67\"},\"headline\":\"The Hardest Thing I Struggle With\",\"datePublished\":\"2010-07-20T15:34:33+00:00\",\"dateModified\":\"2013-08-05T03:34:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/\"},\"wordCount\":902,\"commentCount\":8,\"image\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2010\\\/07\\\/fightclub0015.jpg\",\"articleSection\":[\"Best Practices\",\"Design\",\"Self Improvement\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/\",\"name\":\"The Hardest Thing I Struggle With - Unobtainable Perfection\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2010\\\/07\\\/fightclub0015.jpg\",\"datePublished\":\"2010-07-20T15:34:33+00:00\",\"dateModified\":\"2013-08-05T03:34:22+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#\\\/schema\\\/person\\\/1abc70edfb189184827740310672de67\"},\"description\":\"The problem of perfectionism in software development and five strategies to overcome the perfectionist mindset.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/#primaryimage\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2010\\\/07\\\/fightclub0015.jpg\",\"contentUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2010\\\/07\\\/fightclub0015.jpg\",\"width\":640,\"height\":480},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/the-hardest-thing-i-struggle-with\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/simpleprogrammer.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Hardest Thing I Struggle With\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/\",\"name\":\"Simple Programmer\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/simpleprogrammer.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#\\\/schema\\\/person\\\/1abc70edfb189184827740310672de67\",\"name\":\"John Sonmez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g\",\"caption\":\"John Sonmez\"},\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/author\\\/jsonmez\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Hardest Thing I Struggle With - Unobtainable Perfection","description":"The problem of perfectionism in software development and five strategies to overcome the perfectionist mindset.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/","og_locale":"en_US","og_type":"article","og_title":"The Hardest Thing I Struggle With - Unobtainable Perfection","og_description":"The problem of perfectionism in software development and five strategies to overcome the perfectionist mindset.","og_url":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/","og_site_name":"Simple Programmer","article_published_time":"2010-07-20T15:34:33+00:00","article_modified_time":"2013-08-05T03:34:22+00:00","og_image":[{"width":640,"height":480,"url":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/07\/fightclub0015.jpg","type":"image\/jpeg"}],"author":"John Sonmez","twitter_card":"summary_large_image","twitter_misc":{"Written by":"John Sonmez","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/#article","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/"},"author":{"name":"John Sonmez","@id":"https:\/\/simpleprogrammer.com\/#\/schema\/person\/1abc70edfb189184827740310672de67"},"headline":"The Hardest Thing I Struggle With","datePublished":"2010-07-20T15:34:33+00:00","dateModified":"2013-08-05T03:34:22+00:00","mainEntityOfPage":{"@id":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/"},"wordCount":902,"commentCount":8,"image":{"@id":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/#primaryimage"},"thumbnailUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/07\/fightclub0015.jpg","articleSection":["Best Practices","Design","Self Improvement"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/","url":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/","name":"The Hardest Thing I Struggle With - Unobtainable Perfection","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/#primaryimage"},"image":{"@id":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/#primaryimage"},"thumbnailUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/07\/fightclub0015.jpg","datePublished":"2010-07-20T15:34:33+00:00","dateModified":"2013-08-05T03:34:22+00:00","author":{"@id":"https:\/\/simpleprogrammer.com\/#\/schema\/person\/1abc70edfb189184827740310672de67"},"description":"The problem of perfectionism in software development and five strategies to overcome the perfectionist mindset.","breadcrumb":{"@id":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/#primaryimage","url":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/07\/fightclub0015.jpg","contentUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/07\/fightclub0015.jpg","width":640,"height":480},{"@type":"BreadcrumbList","@id":"https:\/\/simpleprogrammer.com\/the-hardest-thing-i-struggle-with\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/simpleprogrammer.com\/"},{"@type":"ListItem","position":2,"name":"The Hardest Thing I Struggle With"}]},{"@type":"WebSite","@id":"https:\/\/simpleprogrammer.com\/#website","url":"https:\/\/simpleprogrammer.com\/","name":"Simple Programmer","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/simpleprogrammer.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/simpleprogrammer.com\/#\/schema\/person\/1abc70edfb189184827740310672de67","name":"John Sonmez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g","caption":"John Sonmez"},"url":"https:\/\/simpleprogrammer.com\/author\/jsonmez\/"}]}},"_links":{"self":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/1008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/comments?post=1008"}],"version-history":[{"count":0,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/1008\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media\/1006"}],"wp:attachment":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media?parent=1008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/categories?post=1008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/tags?post=1008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}