Un poco de antecedentes aquí: somos un pequeño equipo (de 5) de desarrolladores de RAD responsables del desarrollo de software interno en una gran empresa que no es de software. El "software interno" varía desde una aplicación .NET de escritorio que utiliza un servidor MSSQL como back-end para scripts de Python que se ejecutan en segundo plano para documentos y plantillas de MS Word, un zoológico de tecnologías.
Todo el equipo está formado por todos los agentes capaces de obtener los requisitos de los usuarios, codificarlos, probarlos e implementarlos en producción. Una vez que el software en la producción está siendo atendido por otro equipo, pero generalmente es fácil para nosotros intervenir si algo sale mal.
Todo suena bien hasta ahora, pero hay un problema: al ser un equipo RAD, tenemos que lanzar a menudo, y no hay día sin que lancemos nuevas versiones de una o dos aplicaciones (o podría ser un script, un documento de Word actualizado , Aplicación de consola C ++, etc.) en la producción. Hacemos una prueba de desarrollo y también involucramos a los usuarios finales al permitirles ejecutar el software en el entorno UAT ...
... pero de todos modos los errores están llegando a la producción. Los usuarios entienden que estos errores y la inestabilidad ocasional es el precio que están pagando por obtener lo que quieren realmente rápidamente, pero al mismo tiempo nos hizo pensar: tal vez podríamos mejorar nuestro desarrollo o las prácticas de lanzamiento para mejorar la estabilidad del software y reducir la cantidad de errores que presentamos al agregar una nueva funcionalidad.
Lo bueno: realmente no tenemos muchos de los procesos en primer lugar, por lo que debería ser fácil comenzar a mejorar, lo malo: al ser un pequeño equipo de RAD, realmente no tenemos mucho tiempo y recursos para implementar algo grande, pero hemos estado pensando en las siguientes iniciativas y agradeceríamos cualquier comentario, sugerencia, sugerencia o sugerencia.
Actualmente, algunas de las aplicaciones se lanzan a la producción inmediatamente después de la prueba del desarrollador, pasando por alto la prueba de aceptación del usuario. Esa práctica debe suspenderse e incluso un pequeño cambio debe ser probado por un usuario final. Cada aplicación tendrá un beta-tester dedicado seleccionado entre los usuarios finales. Solo después de que un beta-tester haya aprobado la nueva versión, se promociona del entorno de prueba al entorno de producción.
No realizamos revisiones de código, pero comenzaremos a hacer revisiones de código antes de que uno de nosotros registre el conjunto de cambios. También estaba pensando en una "revisión de implementación": básicamente, uno de los desarrolladores tiene que sentarse junto con el otro y ver cómo realiza la implementación del software (copiar binarios, actualizar configuraciones, agregar una nueva tabla a la base de datos, etc.), generalmente solo toma de 5 a 10 minutos, por lo que no tomará mucho tiempo de "revisión de implementación".
Cómo minimizar el tiempo de reversión cuando se demuestra que una nueva versión tiene errores suficientes para retirarse de la producción y ser reemplazada por una buena versión anterior. Almacenamos un historial de todos los lanzamientos (como archivos binarios) para facilitar el regreso de una versión, y aunque es rápido "sobrescribir los archivos binarios recién lanzados con los archivos binarios de versiones anteriores", sigue siendo un proceso manual que es propenso a errores y exigiendo a veces "qué pasa si la reversión fallará y hará que el sistema sea inutilizable en lugar de tener errores".
Aquí es donde nos quedamos sin nuestras ideas y nos gustaría recibir sus comentarios sobre estas y si pudiera compartir algunos consejos simples de mejora del proceso de lanzamiento / desarrollo, sería increíble.