Gestionar múltiples twigs de código y entregas

Trabajo para una pequeña empresa de un solo producto y un solo cliente que está en transición a una compañía de un solo producto y múltiples clientes. Aunque solo hemos tenido un cliente, hemos tenido diferentes proyectos con diferentes dates de entrega, pero para cada proyecto hemos podido entregar el último lanzamiento mensual que mantuvimos en una twig de código separada en caso de que lo hagamos ". Tuve que entregar correcciones de errores para esa versión específica.

Recientemente, hemos adquirido varios clientes nuevos y ha surgido un nuevo problema: la sucursal principal normalmente resolverá (sin interrumpir la funcionalidad) muchos problemas diferentes específicos del cliente, y no todos los clientes desean todos los cambios, pero preferirían preferir la cereza. -pick arreglos y características.

¿Tienes alguna experiencia con esa situación y cómo manejarla prácticamente sin sobrecargarla con testings y trabajo (nuestras testings mensuales de lanzamiento tardan aproximadamente 3 días de time en la computadora)? Y en cuanto al control de versiones, ¿cómo se las arregla (supongo que los cvs finalmente tendrán que irse …)?

La solución más simple es cortar el producto en un producto central y cada característica en un plug-in. De esta forma, cada cliente puede seleccionar las características que desea. Pero incluso esta solución puede abrumar rápidamente a una empresa pequeña.

En realidad, generalmente se encuentra en una situación peor: tiene una nueva característica que ayuda al cliente A y rompe algo para el cliente B (por ejemplo, el cliente B no está listo para modificar su database y la nueva característica no funciona sin el cambio, así que esto de hecho hace que la nueva versión no se pueda usar para el cliente B). Si fueras grande, simplemente podrías ignorar al cliente B.

Tal como está, realmente necesita encontrar una forma de convencer a sus clientes para que sigan adelante. La forma más simple es el dinero: dígales cuánto les costará get un producto a medida y cuánto ahorrarán todos si puede encontrar una solución que se adapte a todos. Invite a sus clientes, elabore una list de cambios juntos y haga que todos estén de acuerdo con el plan.

Además, realmente debe tener testings unitarias automáticas, para que pueda estar 100% seguro de que el producto que sale de la casa hoy en día no puede ser peor que el que vendió hace cuatro semanas.

Incluso con el mejor sistema de control de versiones que existe (para mí, eso sería git ), no puedes resolver la cantidad de fans que obtienes si no puedes lograr que todos tiren en la misma dirección (excepto, por supuesto, puedes realmente dividir a cada cliente en un complemento).

Tenemos una configuration similar de un producto (bastante especializado) y varios (pero solo el pedido de cientos) de clientes que desean su propia característica para mascotas.

Por lo que puedo ver, puede ir a la ruta 'estándar' donde su producto no es específico del cliente, y cualquier característica que agregue es por el bien del producto (posiblemente a petición del cliente); o recorre la ruta de consultoría personalizada, donde cada cliente tiene su propia versión única del producto.

Si todos sus clientes requieren básicamente el mismo producto, entonces debe ir por la primera ruta y eso significa que todas las funciones van a todos los clientes.

Ocultar las características es fácil, ¡mantener múltiples versiones simultáneas es una pesadilla!

Una solución que podría funcionar si sus clientes exigen seleccionar sus características es mantener sucursales para cada una de ellas y luego copyr cuidadosamente los cambios relevantes de su sucursal.

Esto significa que sus compromisos deben ser tan atómicos como sea posible, solo corrija exactamente un problema, y ​​que ningún cambio debe ir directamente a las sucursales de los clientes. Pero ese enfoque sigue siendo muy peligroso.

Es posible usar CVS en esta situación (aunque recomendaría que eche un vistazo a otras opciones como SVN).

Trabajé en algunos proyectos similares. y lo que hicimos fue tener una sucursal Commom, para las características principales del sistema y una twig "Cliente" para cada variación del producto, de esta manera puede implementar características específicas y correcciones de errores de cada cliente y aún usar los mismos cambios en "commom" "a todas las variaciones del producto.

Sin embargo, este enfoque requiere mucho esfuerzo de gestión de configuration (fusión y construcción), por lo que es posible que desee tener una persona específica para manejar estas tareas.

EDITAR:

Además, debería (si no lo hace ya) tener un sistema de seguimiento de errores, en el cual debe documentar el cliente / sucursal en la que está trabajando.

Solo admita la cabecera / troncal principal, a less que haya una twig que tenga una corrección / function de error que no esté presente en la línea principal.

Sé que dijiste que algunos clientes no quieren eso, pero he visto el resultado final del apoyo de muchas sucursales. No quieres eso. Es una pesadilla y paralizará sus equipos de desarrollo, producto y testing.

No lo hagas

Se firme.