¿Cuándo se debe documentar?

El ciclo de vida ideal de la documentación de un proyecto de ingeniería se parece a esto:

  • Un documento de diseño se escribe antes de que se inicie la implementación o al menos antes de que esté demasiado avanzado. Explica los objetivos y no objetivos del sistema y enumera las posibles soluciones y sus respectivas compensaciones. Con suerte informado por los objetivos explícitos, elige una de esas soluciones como el enfoque actual. El documento de diseño se mantiene corto (~ un par de párrafos / conjuntos de viñetas) y de alto nivel para evitar equivocarse y / o exigir mucho tiempo. Aquí hay un ejemplo particularmente completo de Asana: https://docs.google.com/document…
  • Durante la implementación, los límites públicos / privados se consideran cuidadosamente, y los comentarios orientados a la implementación se aplican a funciones privadas y los comentarios orientados a casos de uso se aplican a las funciones públicas. Se siguen las mejores prácticas, como la organización razonable del código y la anotación de cualquier parámetro no obvio en los comentarios.
  • Como parte de la implementación (o antes si TDD es apropiado), las pruebas documentan el comportamiento en casos de borde / error, así como las API básicas, los casos de uso, etc. Las mejores prácticas de prueba merecen su propio conjunto de puntos pero se aplican principios similares a la documentación, donde los análogos de la documentación incorrecta, la documentación de alto nivel y la documentación de bajo nivel son, respectivamente, pruebas inocentemente fallidas, pruebas funcionales y pruebas unitarias.
  • Cuando los sistemas pasan por una actualización significativa, los documentos de diseño se modifican para reflejar las actualizaciones, pero el nivel de detalle sigue siendo bajo.
  • Con el tiempo, se agrega gradualmente algún tipo de documentación de alto nivel para describir cómo los sistemas funcionan juntos y cómo moverse por la base de código, pero el nivel de detalle se mantiene incluso más bajo que los documentos de diseño de los sistemas.
  • Todo lo anterior se aplica con criterio, y se omite la documentación que es evidente por sí misma, en particular, que consume mucho tiempo, que es difícil de mantener o de cualquier otra forma que no sea rentable.
  • Aceptas que no haces nada de lo anterior perfectamente, pero está bien: todo es un equilibrio entre prioridades en competencia, especialmente tu tiempo.
  • Un buen momento para agregar documentación es durante la incorporación. Debe enseñar a sus nuevos empleados sobre su sistema, y ​​escribirlo lo ayudará a componer sus pensamientos y evitará que tenga que volver a hacerlo la próxima vez que contrate a alguien.

Probablemente sea una respuesta impopular pero …

Nunca y continuamente

Llegué a la conclusión de que la mayoría de los esfuerzos de documentación probablemente no tengan sentido *. Como dice Assaf, la mala documentación es * peor * que ninguna documentación. Al menos cuando * sabes * no hay documentación que profundices en el funcionamiento (probablemente leyendo la fuente o contactando fuentes primarias),

Esto es lo que he visto funcionar (y de ahí la génesis de mi empresa …):

Transición del producto a un nuevo equipo (al menos temporalmente).

Después de haber estado hasta las rodillas en un proyecto, es casi imposible ponerse en el lugar de un novato completo. La documentación es siempre la * última * cosa en la que trabaja (generalización, pero en general es cierta), por lo que pierde el contexto de lo que es obvio y lo que no.

Cuando lo haga, son 12 páginas de la placa de caldera estándar (tal vez una página de historial de revisión que se mantiene perennemente en algo así como: 0.5 DRAFT), algunos diagramas de “arquitectura” aleatorios y un montón de javadoc generados. Si eres realmente afortunado, obtienes un montón de títulos de secciones que suenan interesantes como: “Implicaciones de rendimiento para Single Stack vs Clustered” con un cuerpo que consta de: tbd pendiente de revisión. Si tienes mala suerte, obtienes un montón de palabras que realmente no dicen nada en absoluto. Tal vez una tabla confusa arrojada.

Básicamente, obtienes un montón de texto que describe lo que es completamente obvio y no hay suficiente explicación de las partes difíciles. Siempre un nivel muy alto o muy bajo.

En cambio, si le pide a alguien completamente nuevo en el proyecto que se hunda o nade con algunas tareas reales y registre con qué áreas tuvieron problemas, tiende a descubrir que la documentación cubre lo más importante … es decir, los bits que necesitaban explicación. También obtienes una buena mezcla de preguntas de alto nivel frente a preguntas de bajo nivel y un flujo lógico a ellas.

Además de eso, hacer preguntas directas concretas a las personas como: “Bien, estoy tratando de implementar un nuevo módulo utilizando su API, pero el código de muestra solo imprime Hello World … ¿Cómo hago para que funcione la carga?” tiende a obtener mejores respuestas que: “Bien, tiene 6 semanas para escribir documentación (para una audiencia completamente genérica como: desarrolladores”.

* y con esto me refiero a la línea de pedido al final de un plan de proyecto que dice: documentación – 6 semanas

* También estoy hablando de ingeniería de software para proyectos que involucran un alto grado de descubrimiento de requisitos … es decir, no sistemas de control en tiempo real para cohetes

* Puntos de bonificación: implemente su documentación como un sistema vivo con una plataforma de preguntas y respuestas … como Stack Exchange 🙂 (he oído que hay otra compañía que genera automáticamente preguntas frecuentes que podrían proporcionar la tabla de contenido y los números de página que desea …)

More Interesting

¿Es importante saber cómo codificar en C ++ para una carrera en ingeniería de software?

¿Qué problema resuelve Java bien que otros lenguajes no?

¿Qué te emociona sobre el futuro de la ingeniería de software?

¿Hay personal militar que actualmente escribe código de software?

¿Vale la pena obtener un título de maestría de una universidad extranjera después de tener 2 años de experiencia en el sector del software (en una reconocida multinacional)?

¿Qué trabajos son tan intensivos o más intensivos que la ingeniería de software?

¿Hay alguna ingeniería de software involucrada en la ingeniería de hardware?

Desarrollé un motor de base de datos en el trabajo y entiendo bien los conceptos básicos, como los árboles B y la integridad transaccional. ¿Cuál sería un buen libro sobre los temas avanzados, como los tipos de índice poco comunes y las técnicas para indexar el lenguaje natural?

¿Es robusto cada software confiable?

¿Quién debería idealmente escribir la función (casos de prueba automatizados) en el desarrollo ágil: Tester o Developer?

¿Es una buena idea desarrollar ERP en PHP? ¿Cuáles son los pros y los contras involucrados?

¿Cuál es la mejor manera de implementar ITIL en una organización que hace UX (diseño de experiencia de usuario)?

¿Sería atractivo tener experiencia en desarrollo web si solicita el curso de ingeniería de software en el Imperial College de Londres?

¿Cómo se compara el alcance de los grados de ingeniería de aviónica y aeroespacial en IISt? ¿La aviónica abarca mucho CSE y ECE para que tenga un alcance mucho más amplio?

¿Cuál es el proceso de prueba (prueba de carga) de una compilación de software integrada?