{"id":10,"date":"2021-06-03T15:05:58","date_gmt":"2021-06-03T15:05:58","guid":{"rendered":"https:\/\/lafilosofiadelsoftware.wordpress.com\/?p=10"},"modified":"2021-08-23T22:17:53","modified_gmt":"2021-08-24T03:17:53","slug":"cargos-innecesarios-software","status":"publish","type":"post","link":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/cargos-innecesarios-software\/","title":{"rendered":"\u00bfSon todos los cargos en la ingenier\u00eda de software realmente necesarios?"},"content":{"rendered":"\n<p id=\"c891\">Tocar\u00e9 un tema que puede llegar a herir susceptibilidades en algunas personas, antes de juzgar por favor leer todo.<\/p>\n\n\n\n<p id=\"0078\">Alguna vez se han preguntado \u00bfes realmente necesario una persona de&nbsp;<a href=\"https:\/\/www.freelancermap.com\/blog\/es\/que-hace-analista-qa\/\">QA<\/a>&nbsp;en nuestro equipo? \u00bfNecesitamos un Scrum master para que nos de \u2018asistencia\u2019? \u00bfNos da valor tener un Agile Coach en nuestra empresa? Si la respuesta es s\u00ed a alguna de las preguntas anteriores d\u00e9jame decirte que tienes un equipo\/empresa a\u00fan con muchas oportunidades de mejora y te voy a explicar por qu\u00e9.<\/p>\n\n\n\n<p id=\"7b19\">Empecemos por el&nbsp;departamento de calidad la cual es un \u00e1rea creada por la incompetencia de los developers de garantizar calidad, son el fantasma de la navidad pasada creado por ellos mismos. He tenido la oportunidad en los \u00faltimos 10 a\u00f1os de encontrarme con excelentes tester y tambi\u00e9n de encontrarme con el que no entiende la misi\u00f3n de su cargo y su \u00fanica objetivo\/placer es de llenar de bugs al equipo (su misi\u00f3n es que el software funcione correctamente no llenar de bugs al equipo lo cual son dos cosas completamente diferente).<\/p>\n\n\n\n<p id=\"9a5e\">Sin embargo, a pesar de que existan excelentes profesionales encargados de garantizar la calidad, no anula la siguiente afirmaci\u00f3n \u2018Es un cargo que NO deber\u00eda de existir y toca tenerlo por la incompetencia de los developers\u2019 son los mismos developers quienes deben garantizar la calidad del software, \u00bfentonces qu\u00e9 sucede? \u00bfpor qu\u00e9 no se logra?<\/p>\n\n\n\n<p id=\"aa2b\">Existen varias razones:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Se nos ense\u00f1a desde la academia (universidad, cursos, bootcamps) que existe un rol encargado de garantizar la calidad. Esto genera una especie de bloqueo mental en los developers en que empiezan a creer que la calidad es responsabilidad de un equipo o personas diferentes a ellos, que ellos solo deben producir software y esta otra \u00e1rea encargarse de que no existan defectos, por supuesto que existen developers preocupados por la calidad y defensores n\u00famero 1 de la calidad, pero \u00bfson todos as\u00ed? esta pregunta la dejo para que se la respondan ustedes<\/li><li>La imposibilidad ver nuestros propios errores, la ceguera inconsciente de los developers haciendo m\u00e1s f\u00e1cil ver los errores ajenos a sus propios y obvios errores, lo cual lo aludo a:<\/li><li>Orgullo que puede llegar a sentir un developer al \u2018finalizar\u2019 su trabajo, que a\u00fan no comprende que el final, no es terminar el c\u00f3digo sino probarlo las veces y maneras necesarias hasta garantizar que esta correcto.<\/li><li>Tiempos de desarrollo apretados y la necesidad de sacar una versi\u00f3n al costo que sea, cayendo en la frase \u201cEs mejor sacar algo (con errores) a no sacar nada\u201d<\/li><\/ol>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"d629\">Empezando a depender menos del cargo<\/h1>\n\n\n\n<p id=\"cb5c\">Veamos una serie de pasos para lograrlo:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Lo primero es un cambio de mentalidad (sin esto no hay nada). El developer debe entender que la calidad del software es \u00fanica y exclusiva responsabilidad de \u00e9l. Olvid\u00e9monos del developer encargado de \u00fanicamente la etapa del COMO, \u00e9l debe participar en el QUE apoyando y debatiendo las definiciones de negocio. (M\u00e1s del 60% de los bugs nacen desde la etapa de definici\u00f3n. Adicionalmente siempre preguntarnos si todo lo que vamos hacer realmente sirve o le aporta al producto). Los developers deben estar llenos de&nbsp;<a href=\"https:\/\/www.paradigmadigital.com\/techbiz\/los-51-valores-de-equipos-scrum-altamente-efectivos\/\">coraje<\/a>&nbsp;y no escuchar las definiciones del Product owner con obediencia.<\/li><li>Un buen proceso de&nbsp;<a href=\"https:\/\/es.wikipedia.org\/wiki\/Integraci%C3%B3n_continua\">CI<\/a>&nbsp;en el que existan branch protegidos (v\u00e9ase&nbsp;<a href=\"https:\/\/www.atlassian.com\/es\/git\/tutorials\/comparing-workflows\/gitflow-workflow\">gitflow<\/a>) y para que un nuevo desarrollo llegue a la rama \u201cdevelop\u201d debe pasar por un proceso de revisi\u00f3n de&nbsp;<a href=\"https:\/\/www.atlassian.com\/es\/git\/tutorials\/making-a-pull-request\">PR<\/a>. Lo anterior debe ir acompa\u00f1ado de una mentalidad de calidad, nada debe llegar a develop sin garantizar que est\u00e1 bien desarrollado (un developer que apruebe un PR sin hacer una revisi\u00f3n exhaustiva es un developer que no entiende a\u00fan su trabajo ).<\/li><li>Buenas pruebas unitarias y de integraci\u00f3n, no pruebas para cumplir con el&nbsp;<a href=\"https:\/\/openwebinars.net\/blog\/code-coverage-el-resultado-de-tus-pruebas-unitarias\/\">coverage<\/a>&nbsp;que nos den un falso positivo y una sensaci\u00f3n de falsa calidad.<\/li><li>Revisiones pares o en conjunto de la funcionalidad terminada y no por partes. A veces sucede que el \u2018Developer A\u2019 le hace una revisi\u00f3n par al \u2018Developer B\u2019 y todo funciona correctamente, pero al integrar los desarrollos no funcione y qued\u00e1ndose con la idea de que funciona porque \u2018Developer A\u2019 hizo una revisi\u00f3n. Por supuesto no estoy diciendo que no sirva las revisiones Par al finalizar un desarrollo individual, digo que se debe hacer una revisi\u00f3n completa una vez se tiene lista la versi\u00f3n por&nbsp;<a href=\"https:\/\/www.bbva.com\/es\/metodologia-scrum-que-es-un-sprint\/\">Sprint<\/a>&nbsp;si es posible entre varios mejor.<ul><li>Si se tiene un equipo digamos de 5 personas se puede dividir el equipo en dos, revisan de manera separada ambos grupos y luego verifican que bugs encontraron y c\u00f3mo los encontraron, lo m\u00e1s probable que suceda es que el el \u2018equipo A\u2019  encontr\u00f3 algunos bugs diferente al \u2018equipo B\u2019 y viceversa, permitiendo generar retroalimentaci\u00f3n de c\u00f3mo generar las pruebas.<\/li><li>Rotar entre los developers el sombrero de \u201cCapit\u00e1n de la calidad\u201d, como dije anteriormente la calidad es responsabilidad de todos, pero hacer responsable a 1 developer por sprint de la calidad ocasionar\u00e1 que tenga un doble sentido de responsabilidad debido a que ser\u00e1 responsable de que el proceso de desarrollo se cumpla. Con el tiempo este sombrero de Capit\u00e1n debe desaparecer.<\/li><\/ul><\/li><li>Dejar de ver a los developers como productores de l\u00edneas de c\u00f3digo para cumplir casos de uso y empezar a verlos como los productores totales del sistema. Ejecutar un plan de acci\u00f3n de mejora sobre un developer que produce decenas de linea de c\u00f3digo por d\u00eda y decenas de bugs por sprint es un paso que no puede faltar (cu\u00e1ntas veces hemos tenido que sobrevivir al \u201cgran developer\u201d que hace mucho c\u00f3digo y poco software de calidad).<\/li><\/ol>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"5d98\">Apostando por alcanzar la utop\u00eda<\/h1>\n\n\n\n<p id=\"717c\">Por la volatilidad de nuestra carrera evitar los bugs en el software al 100% es una utop\u00eda, lo que no deben de existir son errores obvios\/f\u00e1ciles de detectar, aquellos errores que lleguen a producci\u00f3n deben ser excepcionales o aquellos flujos dif\u00edciles de encontrar.<\/p>\n\n\n\n<p id=\"5b7c\">Pero existen casos donde apostar por un 100% de calidad es la meta (Banca, salud) podemos apostar por la figura del&nbsp;<a href=\"https:\/\/synoptek.com\/insights\/it-blogs\/qa-testing-vs-qc-testing-whats-the-difference\/\">QC<\/a>, aquella persona que no hace parte del equipo de desarrollo pero interviene en una etapa previa al final, esta persona debe tener un alto conocimiento de negocio o lo que pretende lograr el software.<\/p>\n\n\n\n<p id=\"13e4\">\u00bfC\u00f3mo trabajar con la persona QC?<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Su trabajo se ejecutar\u00e1 finalizado el sprint y trabajara sobre un ambiente de pre productivo, que solo cuenta con las versiones actuales de producci\u00f3n y los artefactos actualizados a instalar en producci\u00f3n (<a href=\"https:\/\/searchsoftwarequality.techtarget.com\/definition\/staging-environment\">Staging<\/a>), en gitflow el desarrollo a certificar calidad estar\u00e1 alojado en la rama Release (separado del nuevo trabajo que estar\u00e1n haciendo los develops que estar\u00e1 en las ramas feature y develop) y los bugs que se presenten se solucionaran en ramas \u201cFix\u201d que se deben reintegrar a la rama release.<\/li><li>Contabilizar y revisar el porque se pasaron al equipo de software exhaustivamente cada uno de los issues que encuentran.<\/li><li>Si el sprint tuvo una duraci\u00f3n de dos semanas, su revisi\u00f3n deber\u00e1 durar m\u00e1ximo 3 d\u00edas (recordemos que esta persona garantiza que a nivel de negocio se cumplieron las expectativas, la calidad debi\u00f3 ya fue garantizada en el sprint inmediatamente anterior) y en un mundo ideal los issues encontrados deben ser solucionados por el \u201ccapit\u00e1n calidad\u201d del sprint inmediatamente anterior.<\/li><li>\u00bfDebe ser Ingenier@? No necesariamente (si lo es bien, sino, tambi\u00e9n), esta persona debe conocer a detalle el prop\u00f3sito del sistema, los flujos a ejecutar, invariantes, necesidades a cumplir del negocio.<\/li><li>Una vez la persona de QC garantiza que los artefactos a desplegar a producci\u00f3n cumple con lo requerido por negocio, esta versi\u00f3n queda cerrada y puede desplegarse a producci\u00f3n, otorgando el OK para hacer un&nbsp;<a href=\"http:\/\/gitflow\/\">merge<\/a>&nbsp;hacia la rama master<\/li><li>\u00bfHace parte del Scrum team?, respondanse ustedes esta pregunta.<\/li><\/ul>\n\n\n\n<p id=\"d97a\">En el siguiente Post hablaremos del scrum master \u2014 agile coach. Lo que se debe esperar de su cargo y el poco valor que aportan muchos para ayudar a encontrar al verdadero y valioso scrum master.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tocar\u00e9 un tema que puede llegar a herir susceptibilidades en algunas personas, antes de juzgar por favor leer todo. Alguna vez se han preguntado \u00bfes realmente necesario una persona de&nbsp;QA&nbsp;en nuestro equipo? \u00bfNecesitamos un Scrum master para que nos de \u2018asistencia\u2019? \u00bfNos da valor tener un Agile Coach en nuestra empresa? Si la respuesta es &#8230; <a title=\"\u00bfSon todos los cargos en la ingenier\u00eda de software realmente necesarios?\" class=\"read-more\" href=\"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/cargos-innecesarios-software\/\" aria-label=\"Leer m\u00e1s sobre \u00bfSon todos los cargos en la ingenier\u00eda de software realmente necesarios?\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3],"tags":[4,11,14,15,17,19],"class_list":["post-10","post","type-post","status-publish","format-standard","hentry","category-software-engineer","tag-agile-coach","tag-ingeniera-de-software","tag-qa","tag-qc","tag-scrum-master","tag-software-engineer"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/posts\/10"}],"collection":[{"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/comments?post=10"}],"version-history":[{"count":1,"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/posts\/10\/revisions"}],"predecessor-version":[{"id":141,"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/posts\/10\/revisions\/141"}],"wp:attachment":[{"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/media?parent=10"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/categories?post=10"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/tags?post=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}