{"id":276,"date":"2020-02-28T17:26:09","date_gmt":"2020-02-28T20:26:09","guid":{"rendered":"http:\/\/desarrollo-agil.ml\/blog\/?p=276"},"modified":"2020-02-28T17:29:40","modified_gmt":"2020-02-28T20:29:40","slug":"over-engineering-in-software-development","status":"publish","type":"post","link":"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/","title":{"rendered":"Over Engineering in Software Development"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"dd96\">What I understand as over engineering<\/h1>\n\n\n\n<p>As software developers we have a double challenge when we write our apps. We must write working readable code, and on the other hand avoid over engineering. In our environment we often refer it as \u2018sending a rocket to the moon\u2019. Obviously, when sending a rocket to the moon is not not the requirement, although in most cases that\u2019s not what we are asked to do. To be more precise, what I understand as over engineering is to make sotfware more complex in order to solve problems we don\u2019t really have, and that we are not likely to have in the future.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"1bb2\">How to detect over engineering<\/h1>\n\n\n\n<p>I can think of several ways to detect over engineering. The first that comes to my mind, a bit useless, is how many software design patterns we applied to our code that don\u2019t answer to a real trouble we are trying to solve. Both the lack of design patters and the abuse of them ar signs of bad code. Design patterns are tools that try to fix a concrete problem in software design. If we use them to solve problems we don\u2019t have, we are just getting our code more complicated and unreadable.<\/p>\n\n\n\n<p>As I mentioned before, detecting this once the code is written is quite useless, because while we can refactor, doing so implies an adittional effort. So, how do we detect over engineering in an usefule state of development?<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"e3de\">Detecting over engineering in an useful situation<\/h1>\n\n\n\n<p>The most useful state to detect over engineering is when we are thinking about design and writing code. That\u2019s the precise moment when the problem arises. How do we detect it before it\u2019s late? I can\u2019t provide a concrete way to do it, but I do have some situations I use as a pattern to raise alarms:<\/p>\n\n\n\n<ul><li>Ask myself: What problem am I trying to solve? What objective does my app have? Is this design solving that, or getting it worse?<\/li><li>If I am using a design pattern, it must be emergent from the problem to be solved.<\/li><li>Ask myself: how can I make it simpler? Over and over again. There\u2019s always a simpler way.<\/li><li>If I can\u2019t find other simpler designs, I ask a colleague. Sometimes just explaining the problem to another person makes you come up with the solution<\/li><li>When designing, go for a walk, have a good night of sleep, or even a short nap with your eyes open. We sometimes suffer of tunneling vision. Let the right part of your brain do the job.<\/li><li>If you say or hear \u201cLet\u2019s do [bla bla bla] just in case [ble ble ble]\u201d raise the alarms. It\u2019s good to make robust software, but we also have to prioritize which problems to solve.<\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"2570\">So what do I do now?<\/h1>\n\n\n\n<p>I propose you the next time you write a single line of code, ask yourself:<\/p>\n\n\n\n<p>What am I writing this line for? If you have an answer (a real one, not a forced one) ask deeper: what am I writing this function for? You have an answer? Go deeper: what am I writing this file for? You have an answer? Go deeper: what am I writing this user story for? You have an answer? Go deeper: what am I writing this software for? It is usual to run out of answers in some point. That\u2019s the right moment to replace that line of code with a conversation. It can be with a partner, with a functional Analyst, or even with a user, because if we loose focus on the main trouble to solve, we might be suffering of over engineering.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What I understand as over engineering As software developers we have a double challenge when we write our apps. We must write working readable code, and on the other hand avoid over engineering. In our environment we often refer it as \u2018sending a rocket to the moon\u2019. Obviously, when sending a rocket to the moon\u2026 <span class=\"read-more\"><a href=\"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/\">Leer m\u00e1s &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[91],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v17.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Over Engineering in Software Development - Desarrollo \u00c1gil<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Over Engineering in Software Development - Desarrollo \u00c1gil\" \/>\n<meta property=\"og:description\" content=\"What I understand as over engineering As software developers we have a double challenge when we write our apps. We must write working readable code, and on the other hand avoid over engineering. In our environment we often refer it as \u2018sending a rocket to the moon\u2019. Obviously, when sending a rocket to the moon\u2026 Leer m\u00e1s &raquo;\" \/>\n<meta property=\"og:url\" content=\"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/\" \/>\n<meta property=\"og:site_name\" content=\"Desarrollo \u00c1gil\" \/>\n<meta property=\"article:published_time\" content=\"2020-02-28T20:26:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-02-28T20:29:40+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@emilianotebes\" \/>\n<meta name=\"twitter:site\" content=\"@emilianotebes\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emiliano\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/52.201.184.187\/blog\/#website\",\"url\":\"http:\/\/52.201.184.187\/blog\/\",\"name\":\"Desarrollo \\u00c1gil\",\"description\":\"Sofware por y para humanos\",\"publisher\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/52.201.184.187\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#webpage\",\"url\":\"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/\",\"name\":\"Over Engineering in Software Development - Desarrollo \\u00c1gil\",\"isPartOf\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#website\"},\"datePublished\":\"2020-02-28T20:26:09+00:00\",\"dateModified\":\"2020-02-28T20:29:40+00:00\",\"breadcrumb\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"http:\/\/desarrollo-agil.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Over Engineering in Software Development\"}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#webpage\"},\"author\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"headline\":\"Over Engineering in Software Development\",\"datePublished\":\"2020-02-28T20:26:09+00:00\",\"dateModified\":\"2020-02-28T20:29:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#webpage\"},\"wordCount\":626,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"articleSection\":[\"Good habits\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#respond\"]}]},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\",\"name\":\"Emiliano\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/52.201.184.187\/blog\/#personlogo\",\"inLanguage\":\"es\",\"url\":\"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g\",\"caption\":\"Emiliano\"},\"logo\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#personlogo\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/emilianotebes\/\",\"https:\/\/twitter.com\/emilianotebes\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Over Engineering in Software Development - Desarrollo \u00c1gil","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":"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/","og_locale":"es_ES","og_type":"article","og_title":"Over Engineering in Software Development - Desarrollo \u00c1gil","og_description":"What I understand as over engineering As software developers we have a double challenge when we write our apps. We must write working readable code, and on the other hand avoid over engineering. In our environment we often refer it as \u2018sending a rocket to the moon\u2019. Obviously, when sending a rocket to the moon\u2026 Leer m\u00e1s &raquo;","og_url":"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/","og_site_name":"Desarrollo \u00c1gil","article_published_time":"2020-02-28T20:26:09+00:00","article_modified_time":"2020-02-28T20:29:40+00:00","twitter_card":"summary_large_image","twitter_creator":"@emilianotebes","twitter_site":"@emilianotebes","twitter_misc":{"Escrito por":"Emiliano","Tiempo de lectura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/52.201.184.187\/blog\/#website","url":"http:\/\/52.201.184.187\/blog\/","name":"Desarrollo \u00c1gil","description":"Sofware por y para humanos","publisher":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/52.201.184.187\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"es"},{"@type":"WebPage","@id":"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#webpage","url":"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/","name":"Over Engineering in Software Development - Desarrollo \u00c1gil","isPartOf":{"@id":"http:\/\/52.201.184.187\/blog\/#website"},"datePublished":"2020-02-28T20:26:09+00:00","dateModified":"2020-02-28T20:29:40+00:00","breadcrumb":{"@id":"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"http:\/\/desarrollo-agil.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Over Engineering in Software Development"}]},{"@type":"Article","@id":"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#article","isPartOf":{"@id":"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#webpage"},"author":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"headline":"Over Engineering in Software Development","datePublished":"2020-02-28T20:26:09+00:00","dateModified":"2020-02-28T20:29:40+00:00","mainEntityOfPage":{"@id":"http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#webpage"},"wordCount":626,"commentCount":0,"publisher":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"articleSection":["Good habits"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/52.201.184.187\/blog\/en\/good-habits\/over-engineering-in-software-development\/#respond"]}]},{"@type":["Person","Organization"],"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851","name":"Emiliano","image":{"@type":"ImageObject","@id":"http:\/\/52.201.184.187\/blog\/#personlogo","inLanguage":"es","url":"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g","contentUrl":"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g","caption":"Emiliano"},"logo":{"@id":"http:\/\/52.201.184.187\/blog\/#personlogo"},"sameAs":["https:\/\/www.linkedin.com\/in\/emilianotebes\/","https:\/\/twitter.com\/emilianotebes"]}]}},"_links":{"self":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/276"}],"collection":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/comments?post=276"}],"version-history":[{"count":1,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/276\/revisions"}],"predecessor-version":[{"id":277,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/276\/revisions\/277"}],"wp:attachment":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/media?parent=276"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/categories?post=276"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/tags?post=276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}