- Debido a la corta permanencia y las frecuentes reorganizaciones en las grandes empresas tecnológicas, muchos ingenieros trabajan en bases de código que no les resultan familiares
- Una parte considerable de los cambios en el código la realizan ingenieros de nivel "principiante" dentro de sus primeros 6 meses en la empresa
- Algunos ingenieros experimentados "old hands" compensan la calidad, pero tienen límites por la sobrecarga de trabajo y las responsabilidades informales
- Las empresas priorizan la movilidad del personal y la legibilidad interna (legibility) por encima de la especialización, y ese es el costo aceptado de una degradación deliberada de la calidad
- Como resultado, sin importar la capacidad individual de cada ingeniero, la causa de fondo del mal código es un problema estructural: trabajar con plazos cortos en sistemas desconocidos
La estructura que produce mal código en las grandes empresas
- Las grandes tecnológicas contratan ingenieros talentosos con salarios altos, pero muchos solo permanecen entre 1 y 2 años
- La compensación en acciones (share grant) suele consolidarse por completo a los 4 años, y después de eso el salario efectivo puede reducirse a la mitad
- Hay algunos refresh anuales, pero no están garantizados, así que muchos ingenieros optan por cambiar de trabajo
- Incluso contando la movilidad interna, es raro permanecer más de 3 años en una misma base de código
- Las reorganizaciones (re-org) ocurren cada año, o incluso con más frecuencia
- En cambio, las bases de código suelen mantenerse durante más de 10 años, así que la mayoría de los ingenieros sigue “aprendiendo” sistemas nuevos
- Como resultado, una parte importante de los cambios en el código la hacen principiantes con menos de 6 meses en la empresa
El rol y los límites de los “old hands”
- Algunos ingenieros permanecen mucho tiempo en un sistema específico y desarrollan una especialización profunda
- Pueden detectar problemas temprano mediante la revisión de código
- Pero esta estructura es informal y no está institucionalizada
- A las empresas les interesa poco conservar la especialización de largo plazo, y a menudo trasladan a los más experimentados a otros equipos
- Los ingenieros experimentados siempre están sobrecargados de trabajo
- No tienen tiempo para revisar personalmente todos los cambios
- Si baja su propio rendimiento individual, incluso corren el riesgo de salir perjudicados
La realidad del ingeniero promedio que sí produce
- El ingeniero promedio productivo en una gran empresa suele tener estas características
- Tiene la capacidad suficiente para pasar el proceso de contratación, pero no está familiarizado con una base de código o un lenguaje nuevos
- Al mismo tiempo, trabaja intentando cumplir múltiples plazos superpuestos de varios proyectos
- El resultado es una estructura donde todos hacen lo mejor posible en un entorno centrado en las fechas de entrega más que en la calidad
- Ejemplo: un ingeniero principiante corrige de forma provisional un bug en código desconocido, un ingeniero experimentado lo revisa rápidamente y luego se despliega
- Años después, ese código vuelve a aparecer y surge la pregunta: “¿por qué se escribió así?”
Por qué las empresas mantienen esta estructura
- Las grandes empresas valoran la legibilidad interna (legibility) más que la productividad
- Prefieren una estructura en la que sea visible quién hace qué y donde sea posible reasignar personal en cualquier momento
- Esta es una decisión deliberada que sacrifica especialización y calidad del código
- Aceptan la pérdida de pericia a cambio de ganar flexibilidad para redistribuir personal rápidamente cuando surgen problemas
- Sobre todo ahora que se ha vuelto importante pivotear rápido hacia nuevas áreas como la IA, esta estrategia funciona a favor de las empresas
- Pero en un entorno así, inevitablemente aumenta el número de ingenieros que trabajan a toda prisa en sistemas desconocidos
Los límites individuales del ingeniero y la ingeniería “pura/impura”
- Un ingeniero individual no tiene poder para cambiar esta estructura
- En 2025, el centro del poder se ha desplazado de los ingenieros hacia la dirección
- Lo mejor que una persona puede hacer es convertirse en un “old hand” de un área específica y proteger un nivel mínimo de calidad
- Pero intervenir demasiado incluso puede implicar el riesgo de ser evaluado por bajo rendimiento (PIP)
- El texto plantea la diferencia entre ingeniería “pura” e “impura”
- Ingeniería pura: proyectos técnicos independientes (por ejemplo, desarrollar un lenguaje de programación)
- Ingeniería impura: el entorno realista de trabajar contra el reloj en sistemas desconocidos
- La mayoría de los ingenieros en grandes empresas pertenece a la ingeniería impura, y en ese contexto el mal código es un subproducto inevitable
- Si el sistema funciona lo suficiente, el proyecto se considera exitoso
Conclusión: la “base de código desconocida” como causa estructural
- Las grandes empresas tienen la facultad de mover ingenieros libremente, y esa es una elección corporativa que acepta la pérdida de especialización
- La responsabilidad del mal código no recae en individuos, sino en la estructura organizacional y la forma de administrar al personal
- Incluso si se duplicara la capacidad de todos los ingenieros, los errores en bases de código desconocidas seguirían ocurriendo
- La causa de fondo es una estructura en la que “la mayoría de los ingenieros debe hacer la mayor parte de su trabajo en código que no conoce bien”
- Señalar ejemplos de mal código puede ayudar a mejorar, pero el blanco de la crítica no debe ser el ingeniero, sino el sistema
5 comentarios
Por experiencia, si tienes bases sólidas de CS, especialmente de PLT, al final escribes código relativamente mejor en cualquier entorno.
Aunque no tengas conocimientos extraordinarios, si al menos entiendes los principios más básicos, cuando tienes suficiente tiempo y trabajas con código que te resulta familiar, sale una calidad de código bastante decente. Si haces
refactoringn veces, hasta si lo escribió una IA termina viéndose razonablemente bien.Por más tiempo que alguien pase aferrado a un mismo código fuente, también hay muchas personas que dicen tener 20 años de experiencia pero no saben hacer más que producir espagueti, y ni siquiera entienden por qué no debería hacerse así.
A menos que te den un entorno perfecto con tiempo y presupuesto infinitos, me parece un contenido vacío que no tiene demasiado sentido. ¿No es esto igual en cualquier época y en cualquier trabajo?
Escribir mejor código dentro del mismo sistema claramente sí es una capacidad del ingeniero.
Sería ideal que un sistema estuviera diseñado con suficiente holgura y flexibilidad para poder ofrecer buena calidad. Y sin duda, en promedio hoy es más así que en épocas en las que la ingeniería organizacional y las metodologías de desarrollo estaban menos avanzadas que ahora.
Aun así, a mis ojos suena como si alguien con un ego inflado como ingeniero, pero con poco sentido de responsabilidad como miembro de una organización, estuviera poniendo excusas diciendo que nada de esto es culpa suya sino de la gerencia.
¿Acaso los arquitectos, los diseñadores industriales y los animadores no tienen fechas de entrega y son evaluados solo por creatividad y calidad en vez de productividad, y únicamente los programadores sí tienen plazos?
Qué montón de tonterías hay por ahí... eso de código malo o código bueno es cosa de juniors que andan hablando; lo más importante es si hay o no seniors que sepan hacer bien el diseño de software adecuado para ese sector...
Los textos que se publican aquí pueden corresponder a un entorno algo distinto de ciertas perspectivas o experiencias del mercado local de SI, donde a menudo incluso se ignora el OCP.
En cualquier caso, Linus Torvalds no es un junior...
Opiniones de Hacker News
He leído los textos de esta persona varias veces y siempre me dejaban una sensación incómoda. Ahora creo que ya sé por qué. El análisis en sí es lógico, pero debajo parece haber una especie de nihilismo. Probablemente alguien que alguna vez fue idealista, pero que por malas experiencias terminó intentando explicar que “creer en algo es inútil”. Por eso surgen preguntas como estas: por qué las grandes empresas tienen que actuar así, por qué el mal código atormenta a los ingenieros, si de verdad ese sentimiento está mal, si es culpa de la estructura económica en la que vivimos, o si adaptarse a fuerzas enormes es lo que significa madurar.
Creo que el problema no es la antigüedad, sino la motivación. Me recuerda a la frase de la película Office Space: “si no hay recompensa por trabajar duro, no hay motivación”.
Las grandes empresas tratan a los ingenieros como recursos reemplazables. No es solo un tema de eficiencia, sino una estrategia para inclinar el equilibrio de poder hacia la gerencia. La intención es que los proyectos clave no dependan de un grupo específico de ingenieros.
A menudo veo código cuya sintaxis y estructura son correctas en lo superficial, pero con un enfoque de fondo equivocado. Los code reviews se enfocan solo en la sintaxis, y no se discuten el problema de negocio ni la complejidad. A corto plazo parece aceptable, pero a largo plazo la deuda técnica explota.
A las grandes empresas no les importa el código en sí. El código es solo un medio para hacer funcionar la empresa. Al final, lo importante no es el código sino el proceso. Lo clave es si existe un procedimiento para recuperar el sistema cuando se rompe.
Todas las industrias hacen concesiones parecidas cuando crecen. La ganancia viene de una calidad “suficientemente buena”, no de la perfección. Como la diferencia entre una silla de IKEA y una de Herman Miller, lo que cambia son las restricciones. La verdadera habilidad está en saber dónde ceder. La estructura de las grandes empresas obliga a los ingenieros a hacer ese tipo de concesiones.
Un buen ingeniero senior no escribe mal código desde el principio. El problema es la presión por resultados a corto plazo y la falta de bases sólidas. La causa real es saltarse reviews o no pensar suficiente la arquitectura.
La conclusión del autor de que ‘la legibilidad tiene prioridad sobre la calidad’ implicaría que todos los proyectos de grandes empresas deberían tener herramientas de análisis estático y formateadores automáticos como algo obligatorio. Pero en la práctica no es así. Adoptar esas herramientas es una decisión de gerentes no técnicos, y a ellos no les gustan los costos de corto plazo. Al final, la fecha de lanzamiento se impone a todo.
Cuando hice consultoría para una gran empresa manufacturera, había un patrón extraño de modelado de objetos en todo el código. Rastreando el origen, resultó que el equipo de desarrollo había malentendido por completo el concepto que quería el diseñador (plano–molde–producto). Propuse corregirlo, pero la respuesta fue: “ya es demasiado tarde”. Como resultado, ese modelo equivocado se mantuvo por más de 10 años y generó una enorme deuda técnica.
La estadística de baja antigüedad en grandes empresas puede llevar a conclusiones erróneas. Solo parece baja porque el número de empleados creció de golpe, lo que reduce la mediana. En realidad, para medirlo bien hay que mirar a quienes efectivamente se van.