- Trabajar en una gran base de código es una de las cosas más difíciles para un ingeniero de software. Es difícil obtener esta experiencia con proyectos personales o de código abierto
- Millones de líneas de código, entre 100 y 1000 ingenieros trabajando al mismo tiempo, y una base de código con al menos 10 años de antigüedad
- Requiere una habilidad distinta para entender un estado acumulado de complejidad y tiempo
El mayor error es la falta de consistencia
- El error más común es ignorar la base de código existente e implementar tu propia funcionalidad. Esto impide mantener la consistencia y aumenta el desorden de la base de código
- Normalmente se implementa de forma aislada para minimizar la interacción con la base de código existente, conservar el propio código “limpio” y evitar el código “legacy” existente
- La consistencia reduce la complejidad de la base de código y facilita las mejoras futuras
- Por ejemplo, al implementar un endpoint de API, es importante seguir el método de autenticación existente. Esto te permite atravesar con seguridad el campo minado de la base de código
- Sin patrones consistentes, todo el código debe actualizarse manualmente, y eso se vuelve cada vez más difícil
Otros factores importantes
- Entender cómo se usa realmente el servicio
- Identificar los principales endpoints de API más utilizados y las rutas críticas (hot path)
- Los cambios en el código de uso frecuente deben manejarse con cuidado
- La importancia de las pruebas y el monitoreo
- En proyectos grandes no se pueden probar todos los estados, así que solo se prueban las rutas principales
- Escribe el código de forma defensiva y apóyate en despliegues graduales y monitoreo
- Evitar agregar dependencias
- Las dependencias provocan problemas de seguridad y aumentan los costos de mantenimiento
- Si son realmente necesarias, elige dependencias confiables
- Eliminar código con cautela, pero de forma activa
- Analiza los datos de producción para eliminar llamadas de forma segura y luego borra el código
- Quitar código innecesario facilita el mantenimiento de la base de código
- Esta es una de las tareas más valiosas en una gran base de código
- Trabajar con PR pequeños y atender primero los cambios que afectan el código de otros equipos
- Esto permite que los expertos del dominio detecten problemas y eviten incidentes
¿Por qué son importantes las grandes bases de código?
- El valor de una gran base de código
- La mayoría de las empresas tecnológicas generan ingresos a partir de grandes bases de código
- Trabajar en una “base de código legacy” representa el trabajo real de la empresa
- Hace falta entender antes de separar el código
- Para dividir una gran base de código, primero hay que entender suficientemente cómo funciona en conjunto
- Sin comprensión, un rediseño a gran escala es imposible
Resumen
- Las grandes bases de código tienen un valor importante para el negocio
- Lo más importante es mantener la consistencia
- Antes de implementar una nueva función, investiga el código existente y sigue sus patrones
- Si no sigues los patrones existentes, debe haber una muy buena razón
- Entiende cómo se usa el código en producción
- Como no se pueden probar todos los casos, no dependas demasiado de las pruebas; apóyate en el monitoreo y en despliegues graduales
- Aprovecha activamente las oportunidades para eliminar código, pero hazlo con cuidado
- Trabaja en PR pequeños para que los expertos del dominio puedan revisarlos
8 comentarios
La consistencia es importante, pero eso no significa que sea buena idea posponer mejoras en el código o seguir repitiendo patrones incorrectos existentes... es un problema difícil. Porque por mantener la consistencia, uno podría terminar acumulando la misma deuda técnica.
Más que nada, hay que respetar las reglas de codificación.
Especialmente las reglas de sangría...
¿Trabajas en un dominio donde no se pueden aplicar herramientas que lo detecten automáticamente...? T_T
Sí... T_T
Voy a llorar por ti.. T_T
La escala del proyecto != la madurez
Estoy de acuerdo en que la consistencia es algo muy importante, pero creo que hay que evitar usar eso como excusa para bajar la prioridad de mejorar la base de código.
Como los proyectos siempre están vivos y siguen creciendo, si no se hacen mejoras en el momento adecuado, hará falta mucho más tiempo y esfuerzo para revertirlo después.
Yo también estoy de acuerdo. Estoy trabajando con un proyecto de más de 20 años, pero tiene muchas partes realmente inmaduras en comparación con los estándares actuales.
Aunque la consistencia tiene la ventaja de mejorar la comprensión del código, las limitaciones de la estructura terminan provocando limitaciones funcionales y frenan la evolución del servicio, así que creo que a veces también hace falta una reestructuración drástica.
Opiniones de Hacker News
Cuando una base de código existente carece de consistencia, es importante introducir nuevas formas de hacer las cosas, documentarlas y recibir retroalimentación. Hay que esforzarse por mantener la consistencia con el código existente.
Hay que usar las herramientas de la base de código existente, pero construir una base de código nueva puede ser más disfrutable.
Para dividir una base de código grande, primero hace falta entenderla, y si un equipo sin experiencia intenta hacerlo, es muy probable que fracase.
En las bases de código grandes hay muchos intentos de hacer mejoras al azar.
Mantener la evolución de una base de código es difícil.
Si la base de código es grande y falta personal, toma mucho tiempo para que alguien nuevo llegue a ser productivo.
Mantener una base de código limpia significa hacer solo el trabajo mínimo necesario para lanzar funcionalidades.
La consistencia no es lo más importante, y es bueno mejorar partes de la base de código.
La frase "la falta de consistencia es un error fatal" es correcta al 100%.
Tres máximas para los ingenieros: