¿Cuánta documentación de código debe producir un Scrum Team efectivo?

Como parte de la auditoría y el cumplimiento de mi empresa (PLC), todos los proyectos ágiles se tratan como proyectos en cascada normales con fines de revisión, aunque se ejecutan de acuerdo con las mejores prácticas de Scrum. No interferimos en el proceso, simplemente los tratamos por igual para su cumplimiento.

¿Cuánta documentación de software es razonable que produzca un equipo ágil mientras trabaja en Sprints quincenales?

El nuevo Scrum Master se opuso a cualquier documentación y parece que nos hemos decidido a documentar cualquier aspecto que tenga el riesgo de afectar la dependencia de otros departamentos.

(En resumen, si rompen algo que no es suyo, tienen alguna documentación para respaldar el proceso, la intención y el razonamiento).

¿Cuánta documentación esperaría que produzca un equipo Scrum trabajando dentro de una corporación multinacional? Las herramientas actuales en uso para la administración son Confluence/JIRA.

La principal refutación contra la documentación en profundidad fue que

  • Debe tenerse en cuenta como una historia de usuario y recibir un valor en puntos (que acepto)
  • Arruina el flujo de trabajo de los desarrolladores (también aceptado)
  • La documentación está desactualizada dentro de una semana debido a cambios/mejoras en el código, etc. (que no acepto por completo)
  • La documentación está contenida dentro del código (que he rechazado por completo como la peor práctica)

mis preocupaciones son

  • En 3, 5 o 10 años, un nuevo desarrollador podría requerir documentación
  • Después de haber leído Code Complete y haber sido desarrollador front-end, me enseñaron a documentar
  • Los puristas ágiles usan el principio de "software de trabajo" como escudo para no documentos
  • Cumplimiento con auditores externos, gobierno interno y valor para el accionista

Espero haber proporcionado suficientes detalles para que alguien me responda o me guíe en mi aprendizaje. ¿Algún escritor ha tocado este aspecto?

Mis esperanzas son que

  • Una pieza de software puede extraer comentarios de código y empaquetarlos como un informe
  • El Scrum Master solo está siendo protector, pero se puede llegar a un consenso.
Opinión: el equipo scrum eficaz debería centrarse más en crear BUENAS pruebas unitarias y lograr una alta tasa de cobertura de código en lugar de documentación masiva; a la larga, es más productivo y (a través del mantra de los entusiastas del "código autodocumentado") ) hay un poco de superposición allí. -- Los nuevos desarrolladores incorporados al proyecto pueden ver de inmediato si rompieron algo y cómo deben funcionar las cosas. -- Pueden corregir errores con confianza sin preocuparse por romper la funcionalidad existente o retroceder errores ya corregidos, etc. -- Cada prueba de unidad debe tener comentarios que describan la prueba.
@BrainSlugs83... eso suena muy bien aparte de que el Equipo Scrum no es una entidad en sí misma. Son parte de un todo más grande que tiene que responder a una auditoría a nivel empresarial. No permitimos que los ingenieros de hardware produzcan hardware sin documentación; Me cuesta ver quiénes los desarrolladores de software deberían estar exentos porque podría incomodar su proceso de pensamiento. Sigo pensando que la documentación mínima funciona muy bien... justo hasta que algo sale mal fuera de las competencias del Equipo Scrum debido a un cambio que hicieron y la empresa tiene un problema inmediato de alta prioridad. La documentación es la clave.
el problema es que demasiados equipos se enfocan mucho en producir toneladas de documentación de "solo escritura" que rápidamente queda desactualizada y ya no es útil cuando realmente lo hace; usted realmente tiene que asegurarse de que no lo hagan simplemente para cumplir con una cuota arbitraria y que realmente estén produciendo documentación útil y manteniéndola actualizada. Si la documentación no se actualiza con frecuencia (una gran pérdida de tiempo), tendrá errores. Cuando tiene errores, los lectores no confiarán en él...
Las pruebas unitarias, por otro lado, reducen los errores que le preocupan antes de que sucedan y sirven como una especie de documentación viva que siempre está actualizada y detalla hasta el último bit del sistema (si lo está haciendo bien). Obviamente, las pruebas unitarias no reemplazan la documentación, sino que la aumentan. -- Afirmo mi opinión de que, especialmente en los tipos de situaciones que describe: Muchas buenas pruebas unitarias sólidas > Mucha documentación.

Respuestas (2)

No puede haber una respuesta general a esto. Las empresas multinacionales o públicas varían mucho. El software desarrollado por dichas empresas varía aún más en tamaño, tipo, propósito, uso, esperanza de vida, etc. En general, cuanto más grande, más tiempo se usa y se mantiene, más complejo es el software y más personas están involucradas (al mismo tiempo y /o a largo plazo), y cuanto más regulado esté el dominio, más documentación requiere.

El nuevo Scrum Master se opuso a cualquier documentación.

... lo que suena un poco exagerado para mí. Es muy probable que todas estas personas puedan citar de memoria las partes relevantes del Manifiesto Ágil :

[...] que hemos llegado a valorar: [...] Software funcional sobre documentación completa [...]

Sin embargo, a menudo se olvidan de citar esto:

Es decir, mientras hay valor en los elementos de la derecha, valoramos más los elementos de la izquierda.

Tu dices

parece que nos hemos decidido por documentar cualquier aspecto que tenga el riesgo de impactar en la dependencia de otro departamento.

(En resumen, si rompen algo que no es suyo, tienen alguna documentación para respaldar el proceso, la intención y el razonamiento).

lo que me suena a un enfoque pragmático, el mismo que yo seguiría. De hecho, no tiene ningún valor producir documentación simplemente porque sí, pero siempre que las partes interesadas soliciten documentación y/o se identifique un problema derivado de una documentación inadecuada o desactualizada, el equipo Scrum debe abordarlo. Por supuesto, la conversación cara a cara es más efectiva en muchos niveles que la documentación escrita; sin embargo, dura sólo mientras la memoria de los participantes, y no es factible en algunos casos (por ejemplo, equipos distribuidos). Siempre que necesitamos rastros más duraderos y/o más transferibles de las cosas, necesitamos documentarlos.

La principal refutación contra la documentación en profundidad fue que

  • Debe tenerse en cuenta como una historia de usuario y recibir un valor en puntos (que acepto)
  • Arruina el flujo de trabajo de los desarrolladores (también aceptado)

Bueno, también se puede decir que las pruebas arruinan el flujo de trabajo de los desarrolladores. Además de las pausas para el almuerzo ;-P

Tenga en cuenta que cualquier cosa a la que uno no esté acostumbrado, tiende a romper el flujo. Una vez que nos acostumbremos y ganemos experiencia, se volverá parte del flujo.

  • La documentación está desactualizada dentro de una semana debido a cambios/mejoras en el código, etc. (que no acepto por completo)

De hecho, es un riesgo, pero depende completamente de lo que esté documentado. No documente los detalles de bajo nivel del código que pueden cambiar la próxima semana, sino los aspectos de nivel superior (arquitectura, decisiones de diseño, patrones utilizados, interfaces, etc.) que no tienden a cambiar tan a menudo y/o no están directamente presentes dentro del código, pero son cruciales, por ejemplo, para que una persona externa o un nuevo miembro del equipo obtenga rápidamente una imagen general del sistema.

  • La documentación está contenida dentro del código (que he rechazado por completo como la peor práctica)

Depende de lo que esto signifique. Si esto significa la generación automática de documentación a partir de comentarios de código como Javadoc, está bien, aunque en mi experiencia tiene un uso limitado (excepto para las interfaces públicas). Si significa incrustar comentarios explicativos dentro del código, en mi humilde opinión, casi siempre es una mala idea (excepto en casos raros y limitados, como implementar un algoritmo específico o cambios de ajuste de rendimiento). Si significa escribir un código legible, autoexplicativo y fluido, estoy completamente de acuerdo. En mi humilde opinión, el código limpio y bien escrito rara vez necesita comentarios.

Entonces, para resumir con algunas reglas generales:

  • Hable con su OP, las partes interesadas y el equipo de Scrum para averiguar quién necesita qué tipo de documentación y por qué (y si su razón es lo suficientemente buena).
  • (durante, por ejemplo, revisiones y retrospectivas) Identifique cualquier problema causado por documentación faltante o inadecuada.
  • Si hay una necesidad justificada, hacer el trabajo mínimo necesario para satisfacer esa necesidad. (Teniendo en cuenta la vida útil esperada de la necesidad / artefactos, es posible que desee optimizar a largo plazo, no a corto plazo. Por ejemplo, escribir un script para generar automáticamente un documento a partir de archivos de configuración es obviamente más costoso que copiarlo manualmente una vez, pero si este documento debe actualizarse cada semana durante los próximos 5 años o más, el script se amortizará rápidamente).
  • Esfuércese siempre por evitar la duplicación de información tanto como sea posible. Idealmente, cada pieza de información tiene una sola fuente, por lo que si necesita una actualización, puede hacerlo una vez en la fuente. Es posible que deba replicarse / copiarse en otros lugares, pero esfuércese por resolver esto mediante la automatización en lugar del trabajo manual.
  • Si (y tanto como) produce documentación, esfuércese por hacerlo en el formato más accesible y fácil de mantener (a menos, por supuesto, que sea confidencial). En mi experiencia, esto significa un wiki como Confluence que mencionaste. Puede importar documentos de Word, mantiene un historial de todos los cambios e incluso puede actualizarse automáticamente mediante scripts.
  • Además, a medida que cambian los procesos y las necesidades, busque documentación obsoleta o fuera de uso y, si encuentra algo así, elimínelo.
Peter, estás cumpliendo rápidamente el papel de mi entrenador personal. Como soy un administrador de proyectos/soporte de cartera muy joven, sus respuestas me han ayudado a enfocar mis intenciones en gran medida. Realmente aprecio que haya tirado de varios hilos en mis preguntas.
@ Venture2099, wow, me siento honrado. Me alegra saber que mis respuestas te resultaron tan útiles :-)

Bueno, la respuesta es realmente "Depende" mezclado con "¿Por qué lo necesitan?" y "¿Qué es lo mínimo que puedes hacer?"

Se trata realmente de entrevistar a las partes interesadas y hacer un análisis tipo 5 por qué. Averigüe por qué necesitan algo, para que luego pueda trabajar para satisfacer esa necesidad con el mínimo trabajo de su parte o incluso no hacerlo porque no se aplica.

Solía ​​ser el líder de PMO para un grupo ágil dentro de una enorme cascada, Six-Sigma, empresa impulsada por el control de calidad. Necesitábamos poder lanzar productos de hardware al mercado a menudo en tan solo tres meses. La nave nodriza tardó de dos a tres años en lanzar un producto. Si bien la empresa principal necesitaba esos 2 o 3 años, tomamos sus productos terminados y los pusimos en nuestro producto, por lo que usamos todos los componentes terminados a los que luego agregamos software.

El proceso de cascada/calidad de la empresa principal sumó meses a nuestros proyectos. Debido a que el equipo de calidad podría impedirnos realizar envíos, no podíamos ignorar el proceso.

Programé entrevistas con las partes interesadas con todas las organizaciones con las que tocamos. Descubrí lo que necesitaban y por qué lo necesitaban. Al profundizar en el por qué, a menudo pude ver que realmente no se aplicaba a nosotros. Fue solo un proceso tan arraigado que nadie lo cuestionó. Luego pude explicar cómo funcionaban nuestros proyectos y por qué no necesitábamos cumplir con estos requisitos.

En los casos en los que teníamos que cumplir con algún requisito corporativo, el análisis de por qué nos permitió ver qué era lo mínimo que necesitábamos hacer para satisfacer.

Ah, y en algunos casos, el análisis de por qué nos mostró que aunque pensábamos que éramos especiales, en realidad no lo éramos. A veces, nuestro equipo tenía que aguantarse y darse cuenta de que teníamos que hacer todo ese trabajo porque realmente era necesario.

Joel: esa es una respuesta fantástica y excepcionalmente cercana a la descripción de mi empresa. ¿Qué nivel de documentación del código consideran suficiente los auditores externos (KPMG, PWC et al) en su experiencia?
He tenido la suerte o la mala suerte de evitar productos que tenían auditorías externas. Trabajé con grupos de calidad de hardware y son bastante exigentes. Sin embargo, todavía recortamos las cosas. En lugar de usar la plantilla de calidad de 30 páginas impares, les dimos una hoja de cálculo que respondía las preguntas que realmente les importaban (temperaturas bajo carga, resultados de pruebas de caída, etc.).