La importancia de la excelencia técnica

¿A qué llamamos excelencia técnica?

En febrero de 2012 publicaba mi primer libro: “En busca de la excelencia del código” [1]. En él se trataba el concepto de la excelencia técnica aplicado a la industria del desarrollo de software, definiendo el concepto de código excelente como: el código que al menos cumpla con la funcionalidad esperada sin errores, sea fácilmente comprensible para cualquier desarrollador, se haya desarrollado utilizando los mecanismos proporcionados por el paradigma sobre el que se construya (por ejemplo, la orientación a objetos) y sea conciso.

Excelencia tecnica
Abstract tech background with binary code design

Realizando una pequeña disección de la definición proporcionada, se puede afirmar que este concepto de Excelencia Técnica es algo complejo de alcanzar (¡o incluso quizá imposible!), puesto que el camino a su consecución puede estar lleno de baches, vueltas y trampas:

  • Que cumpla la funcionalidad esperada: aquí nos encontramos con el primer problema, ya que muchas veces la funcionalidad esperada llega al desarrollador a través de una sucesión de interlocutores, por lo que aún cumpliendo con lo que esperaba el último eslabón de la cadena, como en el juego del teléfono escacharrado [2], puede que el mensaje recibido al final de la cadena nada tenga que ver con el mensaje transmitido al inicio de la misma.
  • Sin errores: lamentablemente, y como ya dijo E.W. Dijkstra, «la prueba puede demostrar la presencia de errores en un programa, pero no su ausencia”, por lo tanto, cabría preguntarse si el desarrollador puede demostrar de algún modo que su código no tenga errores, o simplemente utilizar diferentes técnicas para tratar de minimizar los errores y sus consecuencias (test automatizados, correcta gestión de errores/excepciones…).
  • Fácilmente comprensible para cualquier desarrollador: hoy en día existe un número que tiende a infinito de soluciones tecnológicas (lenguajes, entornos, paradigmas), que provocan que sea imposible que cualquier desarrollador pueda entender cualquier código de forma “natural”, y para lograrlo pueda ser preciso un proceso de inmersión previa en conceptos, técnicas y/o herramientas propias del stack tecnológico utilizado y, por ello, quizá a lo sumo podamos exigir que sea fácilmente comprensible a cualquier desarrollador con experiencia en dicho stack.
  • Se haya desarrollado utilizando los mecanismos proporcionados por el paradigma sobre el que se construya: de nuevo, el nivel de seniority y el conocimiento de los desarrolladores será clave para conocer, entender y saber cuándo aplicar estos mecanismos y cuáles utilizar en cada caso.
  • Sea conciso: en ocasiones, el código más conciso no es el más fácilmente mantenible.
codigo1 excelencia técnica
– Ejemplo 1 de código –
Codigo2 excelencia técnica
– Ejemplo 2 de código –

Teniendo en cuenta los dos siguientes códigos de ejemplo equivalente: 

¿Cuál de los dos ejemplos de código es más conciso? ¿Y cuál es más fácil del mantener?

Por tanto, si nos alejamos del mundo de la teoría y examinamos el concepto de excelencia técnica en el mundo real del desarrollo de software, parece necesario acotar la anterior definición al contexto del producto software que se esté desarrollando, teniendo en cuenta aspectos como el stack tecnológico utilizado, los working agreements del equipo y las restricciones y/o la cultura organizacional de la organización desarrolladora y, en su caso, incluso, la del cliente.

¿Es únicamente aplicable al desarrollo de software?

La definición anterior surgió en un contexto de desarrollo de software que, además de ser el contexto en el que se desarrolló la Agilidad, es el contexto en el que inicié mi carrera profesional. 

"El código excelente es el que al menos cumpla con la funcionalidad esperada sin errores, sea fácilmente comprensible para cualquier desarrollador, se haya desarrollado utilizando los mecanismos proporcionados por el paradigma sobre el que se… Clic para tuitear

Sin embargo, la experiencia nos demuestra que, al igual que la Agilidad, la definición de excelencia técnica es aplicable a otros muchos contextos, y podemos hablar de excelencia técnica en cualquier actividad llevada a cabo por el ser humano.

Para ello, creo que en general debemos lograr que los productos o servicios que desarrollemos, sea cual sea su naturaleza, logren el cometido esperado con el menor número de errores/incidencias posible, de una forma tal que otros profesionales del sector puedan entender fácilmente el trabajo realizado, y continuarlo en caso necesario, utilizando técnicas y herramientas estandarizadas en “la industria” y evitando la sobre-ingeniería. 

Y eso, nos vale igual si estamos cocinando en las cocinas de un gran hotel, si estamos redactando informes técnicos para proyectos de construcción, si estamos llevando a cabo una intervención quirúrgica o si, como vimos anteriormente, estamos desarrollando software.

¿Por qué es tan importante en el mundo ágil?

Si acudimos a los orígenes de la Agilidad constatamos que en el noveno principio del Manifiesto por el Desarrollo Ágil de Software [3] [4] ya se indica que “La atención continua a la excelencia técnica y al buen diseño mejora la Agilidad”.

¿Pero, qué llevó a los autores del Manifiesto Ágil a poner foco en la excelencia técnica?

Para aclararlo, lo primero que tenemos que entender es el porqué de la Agilidad en sí misma y el problema que trata de resolver: hacer frente a los cambios rápidos en el contexto que afectan a las necesidades de los usuarios del producto o servicio a desarrollar. 

Teniendo esto en cuenta, creo que es fácil entender que si el trabajo desarrollado hasta el momento no es excelente, cualquier cambio en el contexto que afecte a las necesidades de los usuarios en partes que ya hayan sido desarrolladas, implicará un fuerte trabajo de análisis para tratar de identificar los posibles impactos, y un desarrollo especialmente cuidadoso para evitar que los nuevos cambios afecten de manera negativa al producto o servicio, invalidando en su totalidad o generando un alto número de errores o incidencias debido a las adaptaciones realizadas.

Y hoy en día, cada vez más, somos testigos de cómo estos cambios de requisitos que inicialmente afectaron a los desarrollos de software provocando el movimiento Ágil, también están afectando al desarrollo de productos o servicios en en cualquier otra industria o actividad humana.

Referencias

[1] En Busca de la Excelencia del Código: http://www.scrummanager.net/files/scrum_manager_excelencia_del_codigo.pdf

[2] Teléfono escacharrado – Wikipedia: https://es.wikipedia.org/wiki/Tel%C3%A9fono_descompuesto

[3] Manifiesto por el Desarrollo Ágil de Software – https://agilemanifesto.org/iso/es/manifesto.html

[4] Principios del Manifiesto Ágil – https://agilemanifesto.org/iso/es/principles.html

La importancia de la excelencia técnica

Deja un comentario

Scroll hacia arriba
A %d blogueros les gusta esto: