¿Es típico que las grandes compañías de software no documenten o refactoricen el código? [cerrado]

8

Comencé a trabajar en una gran empresa de software y fui asignado a un proyecto que tiene más de un millón y medio de líneas de código. Es parte de un conjunto de programas que se vende a los clientes (no es un proyecto interno) y el código fuente se puede comprar si lo desean (aunque dadas las tarifas adicionales asociadas con esto, esto parece raro). Han estado haciendo diseño de software durante años y sus productos actuales están destinados a continuar en el futuro previsible.

Para mi sorpresa, el millón y medio de líneas de código carecen casi por completo de documentación. Además, hay algunas áreas de código que son increíblemente complicadas de seguir o que podrían usar algunas refactorizaciones para que sean mucho más fáciles de entender (por ejemplo, una mejora en el lenguaje de programación salió hace más o menos 10 años, lo que generaría grandes porciones de código mucho limpiador, sin mencionar menos propenso a errores). No parece haber ningún esfuerzo para rectificar esto y mis ofertas para hacerlo para las partes con las que estoy trabajando se han encontrado con resistencia, para lo cual realmente nunca obtuve una respuesta clara.

¿Son estas prácticas comunes en una gran empresa en la industria del software? ¿O es mi compañía única en su falta de refactorización y documentación?

Anexo: Basado en algunos de los comentarios, me gustaría aclarar lo que estoy buscando. Entiendo que mi empresa tiene deudas técnicas y esto es malo. No estoy buscando determinar si mi compañía está o no en peor situación debido a esto, solo quiero saber si esta falta de documentación y resistencia a la refactorización es una realidad en el mundo de la programación que tendré tratar si sigo trabajando en ello.

Forja del Trueno
fuente
44
Cerca. Creo que esto reunirá opiniones, no respuestas.
Michael Durrant
1
... y mi opinión, de docenas de compañías diferentes es sí, esa es la norma, excepto para nuevas empresas con un nuevo código escrito utilizando técnicas modernas (por ejemplo, los últimos 5 años).
Michael Durrant
2
¿Estudios? No hace falta un estudio para llegar a conclusiones bastante sólidas. Todo lo que necesitas hacer es mirar a tu alrededor.
Robert Harvey
2
Además, las técnicas modernas incluyen NO escribir comentarios: se desactualizan rápidamente y nunca se mantienen bien, y se mueven más en la dirección del significado de los nombres de clase y método (piense 'pool_of_currently_available_connections' vs. 'pool' y también hay pruebas como " Como usuario que ingresa x, debería ver que se muestra x * 2 ", etc.
Michael Durrant
3
Es decir, sí, la mayoría de las empresas son así, tendrá que aprender a lidiar con eso.
GrandmasterB

Respuestas:

13

Hay una serie de razones por las cuales las compañías no invierten en mejorar sus programas, desde una perspectiva técnica de la deuda:

  1. La reducción de la deuda técnica no agrega nuevas características al software. Por lo tanto, la gerencia percibe que no tiene valor monetario (hasta cierto punto justificadamente)

  2. La naturaleza del negocio de software premia primero al mercado, no el mejor.

Podría continuar, pero todas las otras razones son solo variantes de estos dos. Básicamente, todos se suman al pensamiento a corto plazo, centrándose en las ganancias inmediatas en lugar de la viabilidad a largo plazo.

Todas las empresas con proyectos de software activos no triviales tienen cierto grado de deuda técnica. Ninguna empresa está completamente libre de deudas.

Todos los proyectos de software en los que he trabajado han acumulado Deuda Técnica con el tiempo : Jeff Atwood .

En cuanto a la documentación específica, cuanto menos haya, mejor. Dólar por dólar, obtiene más rentabilidad al hacer que el software sea más simple de usar y más fácil de mantener que al escribir más documentación para él.

Hay algunas encuestas informales sobre la deuda técnica y cómo las empresas la manejan; todo lo que tienes que hacer es buscarlos. Aquí hay uno :

ingrese la descripción de la imagen aquí

O este :

ingrese la descripción de la imagen aquí

Parece bastante evidente que su empresa no es la única que tiene este problema. Puede que ni siquiera sea una minoría.

Lecturas adicionales
Tercer taller internacional sobre gestión de la deuda técnica: descripción general
Gestión de la deuda técnica en sistemas con software confiable

Robert Harvey
fuente
Entonces, para responder a mi pregunta, ¿es esto típico de las empresas?
Thunderforge
¿Qué quieres decir con "típico"?
Robert Harvey
¿La mayoría de las empresas se comportan de la manera que describí? Entiendo la deuda técnica, pero realmente no respondiste si esto fue algo que sucede en la mayoría de las empresas o si es algo con lo que solo unas pocas empresas (como la mía) tratan.
Thunderforge
1
Casi todas las publicaciones han trabajado en menos de 10 o 15 empresas de millones. Por lo tanto, se necesitaría un estudio formal para saberlo. No sé de ninguno. También el código limpio de una persona es otro espagueti, así que creo que no tengo respuesta.
Michael Durrant
1
En mi experiencia con fines de lucro versus sin fines de lucro, el cuidado de la salud versus la consultoría, boston-new york-san fran vs los pueblos del corazón hacen la diferencia. ymmv
Michael Durrant
8

Una perspectiva que no creo que haya sido cubierta en otras respuestas (todavía) es el costo del cambio en tres áreas:

  1. pruebas
  2. re-familiarización
  3. costo de oportunidad

Una empresa con un producto grande deberá probar todos los cambios. Es necesario realizar un seguimiento de estos procedimientos de prueba en varios ejes: diferentes plataformas, diferentes cargas de trabajo, diferentes perspectivas (rendimiento, funcional, usabilidad, compatibilidad con versiones anteriores).

Las personas que trabajan en las áreas de código que está cambiando también necesitarán volver a familiarizarse con el código, y se vuelve especialmente engorroso con múltiples versiones compatibles ("perdón, ¿qué versión es esa? Ahh, esa es la nueva código y necesitas hablar con Bob para eso "). De manera similar, cambiar el código solo para hacerlo bonito tiende a hacer que cosas como los registros de cambios (diferencias, parches, etc.) sean muy complicados de leer ... y rastrear problemas hasta un punto particular en el tiempo cuando se introdujo el error puede ser muy desafiante si hay algo en el historial de código que lo cambia todo. Además, si un error es de larga data (estas cosas suceden) puede estar en múltiples versiones compatibles de su código, y ahora tiene que corregir el código antiguo y el nuevo de maneras potencialmente muy diferentes.

Finalmente, a menudo se debe tomar la decisión de dónde gastar tiempo y dinero. Esto es más que solo su tiempo, sino más bien lo que debería hacer con su tiempo (y el impacto que tiene en los recursos posteriores). ¿Sería preferible pasar el tiempo de su equipo de desarrollo en funciones que pueden producir más ventas, ganar una nueva cuota de mercado y generar ganancias, o si el tiempo / dinero se gasta en cosas que los usuarios finales no notarán, no se pueden poner material de marketing ("oye, nuestro código existente apesta, pero lo hemos mejorado") y es puro costo (sin ganancias).

En pocas palabras, dinero . Siempre (bueno, casi siempre).

rolfl
fuente
5

Si. Basado en las aproximadamente 50 compañías que he conocido personalmente, como empleado o consultor, y en las más de 200 compañías que conozco a través de colegas.

El tipo de producto (1.5 millones de líneas) que describe tardó años en construirse, y muchos de los desarrolladores originales se han mudado (o se han convertido en gerentes).

La alta gerencia y los principales clientes continuos solo quieren un pequeño cambio incremental: quieren estabilidad. Lo que nosotros, los técnicos, creemos que las mejoras son riesgos para ellos. Incluso si podemos mostrar que la nueva versión todavía se comporta igual que la anterior, ven un riesgo porque el sistema antiguo tiene exactamente la característica que usted describe: no está documentado. Para ellos, podría haber un comportamiento indocumentado en el que los clientes confían.

Desde su perspectiva: no está roto, así que no lo arregles. También está viendo que hay una cultura corporativa en ese sentido. Las personas que se resisten a sus "mejoras" probablemente hicieron lo mismo que usted cuando comenzaron.

No esperes "ganar". Este es un problema cultural y no se puede cambiar, excepto mediante un cambio a nivel de CEO.

andy256
fuente
La alta gerencia y los principales clientes continuos solo quieren un pequeño cambio incremental: quieren estabilidad. - No estoy tan seguro de eso. A los clientes les importa un bledo el código y lo grandes o pequeños que son los cambios, pero están muy interesados ​​en los dos mágicos "gratuitos": 100% libres de errores y gratuitos. Ah sí, y por favor entregue ayer. La mayoría de ellos nunca oyeron hablar de Alcance vs. Costo vs. Programa, o de repente olvidan su conocimiento cuando se trata de software. Con respecto al problema cultural y no está en quiebra, no solucione, estoy de acuerdo, pero también entiendo el problema comercial detrás.
JensG
Para mí, un producto se pone como está a través del ciclo de retroalimentación que existe (o no) entre la empresa y sus clientes. Los diferentes clientes que brindan comentarios más sólidos y tienen requisitos "más profundos" empujan al proveedor a cambiar o pasan a un competidor (si hay uno).
andy256
En última instancia, hay un caso para decir que va más allá de lo meramente cultural. Digamos que la administración detuvo todo el desarrollo de nuevas funciones para abordar el 10% superior de la mayoría de las rutinas con errores, tendría que ser administrado con mucho cuidado para evitar convertirse en el trabajo de Sisyphus.
James Snell
@JamesSnell: Sin embargo, ese es un buen punto. Conozco ejemplos en los que un código específico debería haber sido rediseñado y reescrito desde cero hace años. Hoy, los mantenedores de ese código aún luchan por corregir los viejos errores que aún aparecen cada dos semanas, y mucho menos los errores que se han introducido mientras tanto al agregar más funciones. ¿Cuánto tiempo podría haberse ahorrado a largo plazo, si tan solo hubieran decidido deshacerse de la vieja versión mal diseñada hace años?
JensG
@JensG Estoy de acuerdo contigo. Administrar la deuda técnica es cómo debe funcionar un equipo / base de código bien administrado. Pero abordar la deuda técnica significa desestabilizar la base de código incluso si la intención es mejorarla, lo que implica el riesgo de que una vez que comience a refactorizar se convierta en una tarea interminable. Es posible que el código lo haya necesitado, pero el costo a corto plazo puede ser suficiente para matar el proyecto antes de que lleguen los beneficios a largo plazo y ningún gerente querrá sacudir el bote mientras están en él.
James Snell