¿Por qué Software Craftsman?

kendru Estrada

Compartir

¿Por qué Software Craftsman?

El trabajo del desarrollo de software durante el tiempo que ha existido se ha realizado de muchas maneras distintas, han pasado muchas metodologías, todas intentando resolver el mismo problema, desarrollar software de calidad rápido, y ojala barato. Esto cada vez es más importante pues ahora el desarrollo de casi cualquier negocio está supeditado a cómo resuelve sus problemas con tecnología y en general el negocio avanzará mucho más rápido si es capaz de construir o adoptar soluciones antes que la competencia.

Ahora la metodología tendencia es el desarrollo Ágil (principalmente Scrum), lo que tengo que reconocer es un avance ante las metodologías que se utilizaban anteriormente, sin embargo aún es bastante difícil lograr lo que se desea: software de calidad rápido, y barato, ¿porque ocurre esto? creo que sabemos la respuesta, sin embargo aún no la hemos aceptado completamente: finalmente lo que hace la diferencia son las personas, personas inteligentes con un buen nivel técnico, podrían desarrollar excelentes proyectos de software aún sin tener ninguna metodología formal, esto ya ha sido planteado antes, Fred George lo llamaba Programer Anarchy, ( simplificando bastante consiste en dejar que lo desarrolladores resuelvan los problemas sin tener mandos intermedios), Esto sin duda funciona en entornos con programadores motivados que pueden entender el negocio y tienen altos niveles técnicos.

Entonces viene la pregunta ¿ Porque no siempre es así?, una respuesta obvia sería que los desarrolladores en general no son lo suficientemente buenos, pero creo que estaríamos equivocados si nos quedamos con esa respuesta, el desarrollo de software requiere una inteligencia de normal a alta, hay cientos de lenguajes y herramientas que los programadores deben aprender cada día y lo hacen, por lo que no creo que esa sea la respuesta.

Creo que el problema es más grande y tiene relación con que por un lado las empresas siguen enfocándose en los procesos, y por otro lado los programadores siguen siendo piezas dentro de una fábrica generadora de software, comportándose como empleados de esta, que deben recibir instrucciones precisas sobre lo que se debe hacer sin aportar ningún valor adicional.

Que han hecho las empresas

Cuando el desarrollo Ágil se hizo popular las organizaciones se dieron el trabajo de crear material, herramientas , gráficos, prácticas y varias otras cosas, siempre con la idea de mejorar el proceso, lo que quedo bastante bien. pero se olvidaron del principio “personas sobre procesos” ahora la agilidad es básicamente un proceso que nos ayuda a coleccionar requerimientos, reducir desperdicios, enfocarse en el valor, etc. pero no se enfoca en las personas, perdió el espíritu que tenía en un inicio, esto produce que, aún cuando realmente hacemos software más rápido la calidad no mejora, pues si antes eras malo desarrollando software con las metodologías tradicionales, ¿porque ahora lo harías mejor?.

y los desarrolladores.

Los desarrolladores en general no quieren hacer mal software, nadie se levanta por la mañana diciendo voy a hacer un código malo, pero pasa, principalmente por la presión del negocio, y como desarrolladores muchas veces creemos que lo hacemos mejor si cedemos a esta presión, pero no es así, creemos que si lo hacemos más rápido es mejor y por eso nos saltamos las pruebas unitarias, no pensamos lo suficiente antes de escribir, medimos mal el tiempo (gastamos mucho más tiempo depurando y corrigiendo que desarrollando nuevas funcionalidades) y esto produce que entreguemos software mediocre cada 2 semanas.

Esto crea una amenaza invisible, cada vez es más difícil añadir una nueva funcionalidad, al no haber puesto nuestra atención en la calidad en un principio las entregas se van haciendo más lentas, y finalmente terminamos con un sistema que nadie quiere tocar.

Que deberíamos hacer

Creo que el concepto de Software Craftsmanship tiene la respuesta, debemos dejar de comportarnos como piezas dentro de esta fábrica de software, debemos ser una comunidad de profesionales, como ocurre con otras profesiones como doctores, abogados, contadores etc.

Si cambiamos nuestra actitud hacia el trabajo y nos enfocamos en agregar valor al software que construimos poniendo énfasis en la facilidad de realizar pruebas, la legibilidad del código, la documentación (cuando tiene sentido), la preocupación por el performance (cuando aporta algo), y cualquier otra característica que nos ayude a nosotros y por consiguiente al negocio que usa dicho software, entonces estaremos cimentando las bases para que el producto de nuestro trabajo sea exitoso, esto es importante pues queremos construir nuestra carrera en base a éxitos, no debemos permitir que otros sin conocimiento manejen nuestras acciones y nos lleven a hacer software mediocre porque por ejemplo, no hay suficiente tiempo para programar pruebas.

Además debemos hacernos responsables de nuestro trabajo, cuando se toma la actitud de empleado es fácil decir: “es lo que me dijeron que tenia que hacer”, no me imagino a un doctor o un abogado diciendo tal cosa, porque en esas profesiones se entiende que ellos son los expertos y como expertos ellos deciden cuáles son las acciones que se deben tomar, y probablemente no aceptaran hacer un trabajo si saben que saldrá mal. Sin embargo esto es muy común en la programación, es por eso que debemos cambiar.

Las prácticas y la metodología no cambiarán nuestra actitud, y tampoco cambiará mágicamente por leer un artículo, el camino a la maestría está lleno de obstáculos sin embargo creo que si tomamos la actitud correcta con persistencia, y pasión por lo que hacemos, finalmente ocurrirá el cambio.