Documentos de Académico
Documentos de Profesional
Documentos de Cultura
proyectos de software
José Luis Becerra Pozas
Por supuesto, es difícil saber cuántos programadores son suficientes. A veces, los
obstáculos y los problemas se interponen en el camino. Puede que no sea culpa
del gerente que el trabajo duplique su tamaño, pero si no tiene suficientes
personas en el trabajo, es probable que su proyecto esté condenado al fracaso.
Demasiada comunicación
El software de escritura es un arte solitario. Los humanos pueden trabajar juntos,
pero sólo en episodios limitados. Muchos desarrolladores odian las reuniones
porque necesitan cambiar sus engranajes mentales del pensamiento lógico
inmersivo profundo al modo social más abierto. Esto lleva tiempo. Algunos líderes
de equipo intentan combatir el fracaso celebrando más reuniones para mantener a
todos sincronizados. Es un esfuerzo noble, pero se oye rechinar los engranajes. El
equipo necesita compartir suficiente información para mantenerse sincronizado,
pero más solo desperdicia los ciclos cerebrales.
Priorización deficiente
Los buenos planificadores elaboran una lista de características y las
priorizan. Pero a veces las prioridades no se alinean con la realidad de
implementarlas. En el peor de los casos, las características más importantes son
las más difíciles de crear.
Una buena planificación requiere más que una lista de verificación. La visión
arquitectónica debe tener en cuenta las necesidades y el costo de su entrega.
Al final, el genio de la arquitectura que creó esta red de microservicios me dijo que
todo era muy simple y trazó un camino sinuoso a través de cinco capas de la
arquitectura. Mi trabajo consistía en agregar cinco nuevas llamadas API a cinco
microservicios diferentes, lo que también significaba agregar cinco conjuntos de
pruebas automatizadas para cada capa. Y cada API fue desarrollada por un
equipo diferente a lo largo de los años, lo que me obligó a comprender y emular
cinco estilos diferentes de codificación. Todo para cambiar un número.
Conflictos políticos
Culpar a los factores políticos por una falla técnica puede parecer una tontería,
pero es cada vez más cierto. A medida que los proyectos crecen y abarcan
múltiples organizaciones, no debería sorprender que aparezcan facciones y
grupos que luchan por el control, los recursos y, en última instancia, el poder.
Esto se ha vuelto aún más común a medida que los arquitectos dividen las
aplicaciones en varios servicios y API más pequeños. Diferentes grupos
terminarán controlando estos y no siempre se llevarán bien. Si al Grupo A le gusta
JSON y el Grupo B se aferra a XML, bueno, su equipo deberá implementar ambos
o hacer que uno de ellos cambie. Los tres son un dolor para cualquier equipo que
deba trabajar tanto con el Grupo A como con el Grupo B.
Competencia imprevista
Un buen gerente de producto encuesta a la competencia antes de sumergirse,
pero nadie puede predecir qué competencia puede aparecer de la nada. Si nuevos
competidores introducen nuevas funciones que debe duplicar, consulte las
secciones sobre cambios de funciones y desajustes de prioridad, más arriba.
Acelerando el proceso
Muchos proyectos de software comienzan como la visión de una persona o equipo
que quiere arreglar algo. Se les ocurre una frase como “Snapchat para Y” o “Uber
para Y” y luego esperan que el equipo de producto sea tan receptivo como
Snapchat o Uber. El problema es que averiguar el alcance del proyecto, esbozar
los flujos de datos e imaginar la interfaz de usuario a menudo es diez veces más
trabajo que escribir el código. Pero los imaginadores quieren pasar de la idea al
código de inmediato.
Subcontratistas malvados
Amamos a los proveedores que producen las bibliotecas y herramientas que nos
permiten crear magia con solo unas pocas líneas de código. De vez en cuando, se
enteran de su poder y lo utilizan para destruir un proyecto. La hoja de presupuesto
de la versión 1.0 era tan buena que la dirección no dudó en aprobar la versión
2.0. Entonces el vendedor decide exprimirnos triplicando o quintuplicando el
precio.
Cambio de mar
En un año de pandemias y protestas, nada ha cambiado más rápido que el
zeitgeist. ¿El proyecto hizo de las fuertes protecciones de privacidad una
característica central? ¡Ups! La pandemia ha hecho que todos se interesen en el
rastreo de contactos. ¿Alguien quería centrarse en los viajes de
negocios? ¡Ups! La industria hotelera se ha derrumbado. Los proyectos de
software más grandes que pueden tardar un año o más corren el riesgo de ser
trastocados por eventos cataclísmicos. Lo que parecía una idea maravillosa al
principio puede parecer irremediablemente perdido y desconectado cuando llega
el momento de lanzarse.
Turnos técnicos
No se trata solo de cambios en el mundo en general. Los cambios de marea en la
comunidad tecnológica pueden tener el mismo efecto. NoSQL fue una vez una
idea genial que nos liberaría del esquema relacional. Entonces alguien se dio
cuenta de que los archivos se hinchaban porque cada registro tenía un esquema
local. Un buen equipo de desarrollo ágil puede cambiar cuando los cambios
tecnológicos cambian las actitudes de los líderes y los clientes. Pero incluso los
equipos más ágiles no pueden hacer frente a grandes cambios que absorben todo
el aire de sus planes arquitectónicos. El sistema se construyó asumiendo que X
era una gran idea y de repente X es suciedad. A veces es mejor hacerla explotar y
volver a protagonizar.
Demasiadas adiciones
Algunos proyectos de software comienzan bien e incluso se envían con
éxito. Luego, alguien agrega una característica adicional o tres, insertando un
nuevo código en la versión existente de una manera que el código continúa
cojeando. Los desarrolladores heroicos pueden lograr esto varias veces,
especialmente si el arquitecto inicial lo planeó bien. Pero en algún momento, los
cimientos se derrumban. Quizás la base de datos no pueda manejar la
carga. Quizás se necesitan demasiados JOIN para satisfacer las distintas
consultas. Un buen software puede engordar demasiado, a veces gracias a
pequeñas mejoras que lo llevaron al límite.
Es raro que los cambios arruinen las cosas por sí solos. Pero los nuevos objetivos
pueden revelar debilidades y desencadenar modos de falla. Quizás el equipo
ahora sea demasiado pequeño para completar el proyecto con éxito. Quizás las
bases técnicas sean tremendamente ineficientes para el nuevo enfoque. Es difícil
para todos anticipar la inquietante combinatoria cuando se toma la decisión de
cambiar los objetivos.