specifications - dallas - ¿Cómo probar las especificaciones de escritura supera al código de los vaqueros?
dallas cowboys (11)
Creo que podría ser útil escribir las especificaciones con todo el equipo. Tómese el tiempo para hacerlo juntos y discutir cosas en grupo. Por lo general, tenemos esas reuniones al comienzo de cada iteración con todo el equipo y, si es necesario, discutimos más detalles con algunos desarrolladores. No es necesario en mi experiencia para discutir cada detalle porque es donde se vuelve aburrido para algunas personas.
Entonces tengo un problema O más bien, mi amigo tiene un problema, ya que nunca escribiría sobre mi empresa en un foro de Internet.
En la especificación de la compañía de mi amigo está, digamos, un poco infrautilizado. Hay una cultura profundamente arraigada de escribir código primero y hacer preguntas más adelante, ya sea para una rutina de biblioteca o una nueva herramienta para infligir a sus diseñadores que tanto sufren.
Esto, por supuesto, conduce a situaciones en las que la funcionalidad es parcialmente correcta, incorrecta o simplemente falta por completo ("ah, solo guarda antes de intentar cualquier cosa que quieras deshacer"). Esto generalmente resulta en una pérdida de productividad para los diseñadores pobres, o periodos beta en los que la corrección de fallas se utiliza en gran medida implementando las cosas correctamente.
Mi amigo encontró que sus sugerencias de redactar (y probar en contra) las especificaciones generalmente son bien recibidas. La mayoría de sus colegas han abrazado la maravillosa sensación de descubrir suposiciones falsas en papel, en lugar de a las 11 pm un domingo en el medio de la versión beta. ¡Viva la revolución!
Sin embargo, hay algunos que caca de todo lo que se interpone entre su tarea y un teclado. Se ríen de la idea de diseñar realmente algo, y escriben código con alegre abandono. En su mayoría, estos son desarrolladores sénior, empleados por mucho tiempo, reacios a "perder el tiempo".
El problema es que este segundo grupo de herejes invariablemente produce cosas (o al menos algo) más rápido que el primero. Posteriormente, esto se convierte en una justificación del tipo "¡No tiene sentido escribir especificaciones para algo tan simple como un redimensionador de imagen! Ah, y esos errores donde el ancho = altura o la imagen usa RLE solo necesitan algunos ajustes".
Y ahora la pregunta :)
Además de decir "se lo dije" al final de un proyecto, ¿cuáles son algunas buenas formas a corto plazo de demostrar cómo la práctica de escribir especificaciones funcionales o técnicas conduce a un mejor software a largo plazo?
¡Aclamaciones!
Esto es bastante difícil ya que la cultura de la oficina y los hábitos de trabajo son muy difíciles de cambiar. Sin embargo, si realmente quiere hablar en serio de esto, intente que la administración acepte una versión de prueba donde las especificaciones se usan para un pequeño proyecto / módulo, y los costos de mantenimiento (tiempo, errores, etc.) se cuantifican a lo largo del tiempo.
Es posible que no tenga a los otros desarrolladores de su lado de esta manera, pero los $$ son más fáciles de entender que las prácticas de desarrollo más abstractas. La administración de los cacadores es responsable de las continuas revisiones de desempeño y empleo de ese grupo, por lo que es una forma de convencerlos de cambiar o hacer que trabajen en otro lado.
La única área donde las especificaciones vencieron a los cowboys es el " alcance lento " y los costos asociados con ella.
Las especificaciones son un contrato entre el cliente y los desarrolladores. Si no tiene un contrato claro, ¿cómo sabría cuándo se ha cumplido el contrato?
Además, tener especificaciones detalladas hace que sea más fácil tener dos o más desarrolladores trabajando en diferentes partes del proyecto al mismo tiempo. ¡Y le da a los probadores algo para comparar el software y asegurarse de que la maldita cosa funcione!
Si tiene el poder, intente que todos los desarrolladores, cuando tengan alguna pregunta sobre las rutinas de otra persona, pregunten directamente al programador original. Los pocos codificadores que todavía creen que las especificaciones y los documentos no son importantes podrían estar dispuestos a intentarlo algunas veces si están atascados respondiendo "preguntas de novatos" todo el tiempo.
Este fue exactamente el escenario en el que trabajé en una gran empresa de desarrollo hace algunos años, y la gente aprendió rápidamente que o bien tenían que documentar su código en gran medida, o arriesgarse a "perder el tiempo" respondiendo a un montón de pequeños problemas.
Por supuesto, esto solo es factible si puedes conseguir suficiente gente para probarlo :)
Solo, dile a tu amigo que debe evitar ir al otro extremo donde no se puede hacer nada hasta que la especificación sea perfecta y esté 100% completa. Y la codificación se retrasó cada semana porque alguien agregó algo más a la especificación. Habrá momentos en que ese enfoque podría tomar de 2 a 3 meses y luego alguien de alto nivel de administración se molestará mucho y dirá "No me importa, solo quiero que el producto se haga" y la situación será peor.
Puede obtener lo mejor de ambos mundos manteniendo el flujo ágil (revisión semanal, entrega anticipada, búsquedas rápidas, etc.)
el objetivo es escribir la pieza correcta de software ... las especificaciones son solo una herramienta para tratar de encontrar / definir lo que es correcto.
Creo que, como grupo, debe decidirse cómo se construye lo correcto y cómo se comunica eso entre todos.
es decir, enfocarse en el problema real y luego obtener un acuerdo compartido sobre cómo resolverlo. En lugar de decir: "aquí hay una solución a un problema, ¡hagámoslo!", A menudo no recibe mucha aceptación de todos. También podría ser que las especificaciones no sean lo suficientemente correctas para resolver el problema.
Por lo general, lleva tiempo, y ese es siempre el problema.
EDITAR:
Para su propia empresa, me refiero a su amigo, necesita documentar cada vez que algo tuvo que cambiar y una especificación no estaba disponible. Siempre que una especificación o documentos hayan ahorrado tiempo, registre ese evento. Registre la cantidad de tiempo invertido (tanto por la persona que investiga como por la persona (si la hubiera) a la que se le preguntó, ayudó, etc. Luego, debe hacer un análisis de costo / beneficio de si el tiempo "guardado" inicialmente no cumplió con una especificación valió la pena no tenerlo cuando fue necesario.
En algunos casos, probablemente vale la pena escribir uno, y puede encontrar otros casos en los que no es "necesario". En la práctica, los pagos son potencialmente tan grandes que siempre es mejor solo hacer eso al principio.
Ahora - la advertencia:
- Puede tener personas reacias. No intentes convencerlos todavía.
- Necesita un repositorio que sea de uso estándar, no importa dónde ni cómo, pero TIENE que ser coherente y conocido para que pueda encontrarlo
- deben mantenerse actualizados y mantenerse
Divida las dos culturas en dos grupos diferentes, proponga las métricas de rendimiento preferidas y desactívelas. El mejor grupo gana y todo eso.
O apúntelos a cualquiera de los miles de diferentes estudios cuantitativos / cualitativos que prueben científicamente su punto.
O, alternativamente, saque a todos los vaqueros y / u otro mandato sabio el uso de un nivel mínimo de especificación, independientemente de quién molesta. Dependiendo de la complejidad del proyecto, es posible que solo se dé cuenta de cuán perjudicial es realmente la falta de especificaciones y documentación hasta que la mayoría de los desarrolladores originales han dejado el camino.
O bien, subcontrate un módulo de aplicación a un equipo subcontratado exclusivamente y comprueba cuán perjudicial es la falta de especificaciones y documentos para su rendimiento y capacidad para cumplir las métricas clave.
O pregunte a los clientes sobre la calidad del producto / costo / etc.
Si sus contratos de trabajo fueron diseñados y aplicados adecuadamente, su amigo no se quedaría atrapado diciéndole a los desarrolladores "ya se lo dije" al final del proyecto, pero podría darles sus hojas rosas.
Además de todo eso, no debería tener que esperar hasta el final de un proyecto para saber que hay un problema ni para hacer cambios personales.
O avise a su amigo que se retire y únase a una tienda que tenga métodos de desarrollo y prácticas más acordes con sus preferencias. "Tal vez solo está en el lugar equivocado".
Las especificaciones son la pérdida de tiempo. La mayoría de las personas que usarán el software no pueden decir lo que quieren pero pueden decir si lo que obtienen es lo suficientemente bueno o no.
Los prototipos rara vez funcionan por la misma razón, no pueden decir si esta característica aún no está lista o no se realizará en absoluto, por lo que se vuelven balísticos y le dicen que todo está mal y que debe volver a hacer todo cuando realmente lo necesiten. solo un ajuste rápido. O te dirán que todo está bien hasta el punto de lanzamiento cuando finalmente se den cuenta de que no se puede usar.
La mejor forma de diseñar es ir allí y ver cómo solían hacer las cosas y tratar de adaptar su aplicación a su flujo de trabajo. CADA miembro del equipo debería hacer eso.
No digo que no puedas escribir los requisitos pero mostrarlos a tus usuarios reales no tiene sentido. Y puede mantener todas las especificaciones en su cabeza si trabaja solo en la función.
En resumen : no escriba especificaciones, espíe a sus usuarios. Asegúrese de que todos los miembros del equipo hagan eso.
Una especificación se trata de saber qué se hace. ¿Cómo puede saber que es hora de irse a casa si no sabe qué se hace?
En el caso más simple, ¿los desarrolladores hablan con las partes interesadas para tener una idea de lo que quieren? Si es así, lo que decidan es la ''especificación''.
Blanco abajo - implementarlo - y vete a casa.
Pasar demasiado tiempo en las especificaciones es una pérdida de tiempo. Una vez trabajé en un proyecto en el que se vendía, escribía y enviaba una aplicación de Servicios Profesionales única, después de lo cual los jefes exigían que escribiéramos especificaciones. El caso es que tardó más tiempo en escribir la especificación, requirió más personas y costó más que la aplicación original, que nunca volverá a usarse.
La metodología ágil dice que no debemos agobiarnos volviéndonos locos con la documentación. En su lugar, los requisitos deben estar claramente delineados y asignados a equipos individuales y desarrolladores, con revisiones de código regulares. Esto funciona de maravilla cuando tiene un arquitecto competente a bordo, pero puede ser desastroso si el liderazgo del proyecto no está calificado para determinar el mérito técnico relativo de los diferentes enfoques avanzados por diferentes partes del equipo.
El código debe ser autodocumentado. Se deben cumplir los estándares del código. Los requisitos deben ser cuidadosamente pensados y enumerados. Pero lo que no necesita es un documento de 200 páginas que describa lo que ocurre en cada línea de código en cada módulo, o comentarios que son más detallados que el código en sí. Los desarrolladores deberían poder leer esto. Si no pueden, tu problema está en otra parte.