{"id":177,"date":"2018-04-17T01:55:25","date_gmt":"2018-04-17T01:55:25","guid":{"rendered":"http:\/\/52.201.184.187\/?p=177"},"modified":"2018-04-17T01:55:25","modified_gmt":"2018-04-17T01:55:25","slug":"sobreingenieria-diseno-software","status":"publish","type":"post","link":"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/","title":{"rendered":"Sobreingenier\u00eda en el dise\u00f1o de software"},"content":{"rendered":"<h2>Qu\u00e9 entiendo por sobre ingenier\u00eda<\/h2>\n<p>Los desarrolladores de software tenemos un doble desaf\u00edo cuando escribimos nuestras aplicaciones. Por un lado, escribir c\u00f3digo que funcione y sea entendible, y por otro, evitar la sobreingenier\u00eda.\u00a0 En el ambiente muchas veces nos referimos a este problema como \u00abmandar cohetes a la luna\u00bb. Obvio, en el caso de que el requierimiento no sea mandar un cohete a la luna, aunque generalmente no es el caso. Yendo a casos m\u00e1s concretos, entiendo por sobreingenier\u00eda la acci\u00f3n de complejizar el c\u00f3digo para tratar de solucionar problemas que no tenemos en el presente, y que es poco probable que tengamos en el futuro.<\/p>\n<h2>C\u00f3mo detectar la sobre ingenier\u00eda<\/h2>\n<p>Se me ocurren varias maneras de detectar la sobreingenier\u00eda. La primera, un poco in\u00fatil y anecd\u00f3tica es la cantidad de patrones de dise\u00f1o que tenemos aplicados en nuestro c\u00f3digo, que no responden a un problema real que tengamos. Tanto la falta de aplicaci\u00f3n de los patrones, como su excesiva aplicaci\u00f3n son se\u00f1ales de mal c\u00f3digo. Los patrones de dise\u00f1o son herramientas que responden a un problema determinado. Si\u00a0 los usamos para problemas que no tenemos, solo estamos empeorando la calidad de nuestro c\u00f3digo, porque lo hacemos m\u00e1s abstracto y probablemente m\u00e1s dif\u00edcil de leer. Pero claro, una vez que est\u00e1 escrito el c\u00f3digo, si bien lo podemos refactorizar, implica un esfuerzo adicional. Entonces, como hacemos para detectar la sobreingenier\u00eda en un punto del desarrollo que nos sea \u00fatil?<\/p>\n<h2>Detectar la sobre ingenier\u00eda en una instancia \u00fatil<\/h2>\n<p>El momento m\u00e1s \u00fatil para detectarlo es cuando estamos pensando el dise\u00f1o y cuando estamos escribiendo el c\u00f3digo. Ese es justamente el momento en donde suele surgir el problema. Como trato de detectarlo antes de que sea tarde?\u00a0 No tengo un m\u00e9todo concreto, pero si varias situaciones que me sirven de patr\u00f3n.<\/p>\n<ul>\n<li>Pensar y re pensar qu\u00e9 problema estoy tratando de solucionar con mi dise\u00f1o. Contrastar la soluci\u00f3n que estoy obteniendo para ver si soluciona el problema o lo empeora.<\/li>\n<li>Si estoy usando un patr\u00f3n de dise\u00f1o, que este sea emergente del problema que trato de solucionar.<\/li>\n<li>Preguntarme iterativamente \u00abc\u00f3mo puedo hacerlo m\u00e1s simple? Partiendo de la base de que seguramente hay una opci\u00f3n m\u00e1s simple para cada c\u00f3digo que escribamos, solamente que puede no salir a la luz en ese momento.<\/li>\n<li>Pedirle opini\u00f3n a otro desarrollador. A veces solamente con explicar el problema a otra persona se nos ocurre la soluci\u00f3n m\u00e1s simple (tambi\u00e9n conocida como la t\u00e9cnica del pato de goma)<\/li>\n<li>Suenan las alarmas cuando escucho la frase \u00abpor las dudas hagamos [bla bla bla]\u00bb . En el nombre del por las dudas se realizan muchas sobreingenierias. Est\u00e1 bueno tratar de hacer software robusto, pero para eso tambi\u00e9n tenemos que saber priorizar los problemas que vamos a resolver, y qu\u00e9 vamos a generar con considerar ese nuevo caso en nuestro c\u00f3digo.<\/li>\n<\/ul>\n<h2>Y ahora qu\u00e9 hacemos?<\/h2>\n<p>Les propongo que la pr\u00f3xima l\u00ednea de c\u00f3digo que escriban se pregunten lo siguiente:<\/p>\n<p>Para qu\u00e9 estoy escribiendo esta l\u00ednea de c\u00f3digo?\u00a0 Si tienen respuesta, ahonden un poco m\u00e1s: &#8230;Y para qu\u00e9?\u00a0 &#8230;Y para que? Es normal en alg\u00fan punto quedarse sin respuesta, o darnos cuenta de que vamos mal encaminados con nuestra soluci\u00f3n. Ese es el punto ideal para reemplazar las l\u00edneas de c\u00f3digo por conversaciones con otros desarrolladores, analistas funcionales y usuarios, porque probablemente estemos equivocando el rumbo.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Qu\u00e9 entiendo por sobre ingenier\u00eda Los desarrolladores de software tenemos un doble desaf\u00edo cuando escribimos nuestras aplicaciones. Por un lado, escribir c\u00f3digo que funcione y sea entendible, y por otro, evitar la sobreingenier\u00eda.\u00a0 En el ambiente muchas veces nos referimos a este problema como \u00abmandar cohetes a la luna\u00bb. Obvio, en el caso de que\u2026 <span class=\"read-more\"><a href=\"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/\">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":[32,13,14],"tags":[33,34],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v17.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Sobreingenier\u00eda en el dise\u00f1o de software - 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\/buenas-practicas\/sobreingenieria-diseno-software\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sobreingenier\u00eda en el dise\u00f1o de software - Desarrollo \u00c1gil\" \/>\n<meta property=\"og:description\" content=\"Qu\u00e9 entiendo por sobre ingenier\u00eda Los desarrolladores de software tenemos un doble desaf\u00edo cuando escribimos nuestras aplicaciones. Por un lado, escribir c\u00f3digo que funcione y sea entendible, y por otro, evitar la sobreingenier\u00eda.\u00a0 En el ambiente muchas veces nos referimos a este problema como \u00abmandar cohetes a la luna\u00bb. Obvio, en el caso de que\u2026 Leer m\u00e1s &raquo;\" \/>\n<meta property=\"og:url\" content=\"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/\" \/>\n<meta property=\"og:site_name\" content=\"Desarrollo \u00c1gil\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-17T01:55:25+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\/buenas-practicas\/sobreingenieria-diseno-software\/#webpage\",\"url\":\"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/\",\"name\":\"Sobreingenier\\u00eda en el dise\\u00f1o de software - Desarrollo \\u00c1gil\",\"isPartOf\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#website\"},\"datePublished\":\"2018-04-17T01:55:25+00:00\",\"dateModified\":\"2018-04-17T01:55:25+00:00\",\"breadcrumb\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"http:\/\/desarrollo-agil.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sobreingenier\\u00eda en el dise\\u00f1o de software\"}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/#webpage\"},\"author\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"headline\":\"Sobreingenier\\u00eda en el dise\\u00f1o de software\",\"datePublished\":\"2018-04-17T01:55:25+00:00\",\"dateModified\":\"2018-04-17T01:55:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/#webpage\"},\"wordCount\":620,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"keywords\":[\"Agile\",\"ingenier\\u00eda de software\"],\"articleSection\":[\"Agile\",\"Buenas practicas\",\"experiencias\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/#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":"Sobreingenier\u00eda en el dise\u00f1o de software - 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\/buenas-practicas\/sobreingenieria-diseno-software\/","og_locale":"es_ES","og_type":"article","og_title":"Sobreingenier\u00eda en el dise\u00f1o de software - Desarrollo \u00c1gil","og_description":"Qu\u00e9 entiendo por sobre ingenier\u00eda Los desarrolladores de software tenemos un doble desaf\u00edo cuando escribimos nuestras aplicaciones. Por un lado, escribir c\u00f3digo que funcione y sea entendible, y por otro, evitar la sobreingenier\u00eda.\u00a0 En el ambiente muchas veces nos referimos a este problema como \u00abmandar cohetes a la luna\u00bb. Obvio, en el caso de que\u2026 Leer m\u00e1s &raquo;","og_url":"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/","og_site_name":"Desarrollo \u00c1gil","article_published_time":"2018-04-17T01:55:25+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\/buenas-practicas\/sobreingenieria-diseno-software\/#webpage","url":"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/","name":"Sobreingenier\u00eda en el dise\u00f1o de software - Desarrollo \u00c1gil","isPartOf":{"@id":"http:\/\/52.201.184.187\/blog\/#website"},"datePublished":"2018-04-17T01:55:25+00:00","dateModified":"2018-04-17T01:55:25+00:00","breadcrumb":{"@id":"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"http:\/\/desarrollo-agil.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Sobreingenier\u00eda en el dise\u00f1o de software"}]},{"@type":"Article","@id":"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/#article","isPartOf":{"@id":"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/#webpage"},"author":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"headline":"Sobreingenier\u00eda en el dise\u00f1o de software","datePublished":"2018-04-17T01:55:25+00:00","dateModified":"2018-04-17T01:55:25+00:00","mainEntityOfPage":{"@id":"http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/#webpage"},"wordCount":620,"commentCount":0,"publisher":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"keywords":["Agile","ingenier\u00eda de software"],"articleSection":["Agile","Buenas practicas","experiencias"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/52.201.184.187\/blog\/buenas-practicas\/sobreingenieria-diseno-software\/#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\/177"}],"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=177"}],"version-history":[{"count":6,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/177\/revisions"}],"predecessor-version":[{"id":183,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/177\/revisions\/183"}],"wp:attachment":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/media?parent=177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/categories?post=177"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/tags?post=177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}