La excelencia técnica es fundamental en desarrollo de software, pero no es todo
Debemos conocer y saber usar las herramientas para desarrollar software, pero no es lo único en que debemos enfocarnos
Una empresa necesitaba un desarrollo de software a la medida y pidió propuestas a proveedores; me invitaron, junto con un colega, a evaluar las propuestas, para sugerir cuál era la mejor. La empresa tenía un candidato favorito y querían que evaluáramos a ese primero.
Nos reunimos con la empresa en cuestión. Al inicio, los representantes nos hablaron de los clientes importantes que han tenido y el gran tamaño de los proyectos que les habían hecho; continuaron hablándonos de su experiencia tecnológica, hablaron de los stacks, los frameworks, las herramientas que conocían y las intrincadas arquitecturas que hacían con ellas; nos hicieron varios demos de desarrollo a lo largo de dos días, siempre centrándose en las herramientas.
Nos quedó clara su capacidad técnica, así que les preguntamos otras cosas:
¿Cuántos de sus tres últimos proyectos habían sido desplegados a producción sin incidentes?
¿Cuántos de sus tres últimos proyectos habían terminado con una desviación de calendario menor al 30% del plan inicial?
Si el último proyecto, que reemplazaron un sistema existente, el cambio había sido transparente e inmediato o tuvieron que detener la operación del cliente mientras se hacía el despliegue
En cuántos de sus últimos proyectos hacían despliegues frecuentes, en lugar de uno o dos.
El equipo de la empresa no esperaba esas preguntas y tuvieron dificultad para responderlas: nerviosismo, daban vueltas para no responder o no querían hacerlo. Descubrimos que los proyectos eran tortuosos para ellos y los usuarios, que las promesas iniciales nunca se cumplían y el soporte correctivo en producción era largo por la gran cantidad de defectos que solían presentarse.
Recomendamos no trabajar con ellos
La excelencia técnica es fundamental en desarrollo de software...
Muchas personas, fuera y dentro del gremio de la tecnología, creen que nuestra labor más importante es dominar la técnica y usar la tecnología de punta:
Programar
Hacer bases de datos
Conectar aplicaciones y dispositivos en redes complejas
Mantener servidores
Entender y usar diversos dispositivos y sistemas operativos
Aprender cuanto lenguaje de programación existe y existirá
Sí, es importante, debemos conocer nuestras herramientas, saber usarlas, entender bien nuestro trabajo y saber hacerlo
... pero no es suficiente
Una carrera de velocidad no la gana la persona que tiene los mejores zapatos. Podrán ayudarle, pero el ganador será quien tenga ciertas características y haya hecho el entrenamiento adecuado para desarrollar lo necesario para ganar.
El mejor software no es hecho por quien tiene el mayor dominio técnico, sino quien ha desarrollado la forma de trabajo más efectiva para conseguir los mejores resultados. El software no es hecho con las herramientas per-sé. El desarrollo de software depende más de las interacciones entre personas, que el dominio de las herramientas. Enfocarse en lo técnico conduce, invariablemente, a resultados poco deseables, muchos problemas e insatisfacción de usuarios y desarrolladores.
Cada vez que tú o tu equipo lleguen a un resultado no deseado en el desarrollo de software y te preguntes qué salió mal, 9 de cada 10 ocasiones la respuesta será diferente a "lo técnico" y estará en otras habilidades y prácticas.
De eso, te hablaré en siguientes entregas.
Excelente post, gracias por compartir todo tu conocimiento Edgar.
Muy buen post