Hemos estado construyendo un CRM para un cliente. Ahora que la primera fase principal ha finalizado, y una segunda acordada, al cliente le gustaría retomar parte del trabajo, realizando enmiendas menores al esquema de la base de datos y a los procesos comerciales la primera fase mientras construimos la segunda .
No estoy seguro de si esto es práctico, pero suponiendo que lo sea, quisiera algunos consejos sobre las medidas que se pueden tomar para que esto sea viable. Esto es lo que tengo hasta ahora:
Hasta ahora, el cliente ha visto principalmente el proyecto desde el punto de vista del usuario; claramente, debería llevarse a cabo un seminario de dos partes donde le presentamos el funcionamiento interno:
- primero, mostrando el esquema de base de datos existente y, a modo de ejemplo, extendiéndolo,
- luego, muestra un código de muestra y escribe un nuevo proceso de negocio para la mejora del esquema.
- El código actualmente reside en un repositorio interno de Subversion. Si bien podríamos configurar uno público o uno en su red (que podemos usar para VPN), creo que un sistema distribuido funcionaría mejor. Sin embargo, parezco ser el único que se siente así, así que podría usar algunos buenos argumentos convincentes.
No estoy seguro de cómo ordenar / garantizar que el código que se ejecuta en producción esté comprometido. Parece que "x hizo un cambio crítico e indocumentado justo antes de irse de vacaciones; ahora está tratando de descubrir este error que ha estado ocurriendo desde que" los desastres son inevitables. Idealmente, todos los cambios, antes del despliegue, deberían:
- estar documentado en un sistema de seguimiento de problemas,
- ocurrir primero en un entorno de prueba separado y
- tiene que pasar pruebas automatizadas.
Por desgracia, dudo que prevalezca la disciplina para cualquiera de ellos.
Suponga que una arquitectura de plug-in o un proyecto separado no son opciones viables, porque 1) el primero no existe, y 2) el último prohibiría al cliente mirar y posiblemente modificar el código existente, una habilidad que creo que él haría insistir.
fuente
Respuestas:
Esta será la respuesta menos favorita, ¡pero, sin embargo, aquí está!
Es arriesgado (tanto como permitir que un novato conduzca un auto nuevo), pero no es una mala idea.
Lo que debe hacer es lo siguiente:
Eduque a su cliente: el software es más que un código. Si quieren participar, déjenlos primero revisar aspectos arquitectónicos, diseños, etc. Hágales preguntas y muéstreles las implicaciones de las elecciones que hacen antes.
Siempre debe regresar con opciones sobre pro / contras en los enfoques (y documentar bien estas reuniones), pero debe permitirles tomar algunas decisiones. Al menos comenzarán a apreciar que no saben mucho, o tomarán posesión de sí mismos.
Puede crear un espacio separado, como ramas para que puedan codificar lo que quieran, las cosas deben ser debidamente probadas antes de las confirmaciones o fusiones.
Si bien sé que pueden ocurrir complicaciones, cada problema es una oportunidad. Si todo va bien, su cliente realmente apreciará más los problemas internos y desarrollará una mejor confianza porque ¡saben (cómo) ha hecho un buen trabajo!
PD: Para darte una idea, soy de la India; y conozco muchas tiendas de TI donde la administración realmente no tiene mucha pista. Por lo general, no les importa (incluso se sienten felices) que el cliente ponga recursos adicionales para garantizar que el proyecto no se vaya a la basura. Esto funciona muy bien para ellos; todos van con una mentalidad "¡Lo que usted diga señor!". Esto no es para degradar a mi compatriota, sino para mostrar que el desarrollo conjunto no es una mala idea. Después de todo, lo que muchos gurús de la gestión representan es el " enfoque prosumidor " a los problemas comerciales.
fuente
Ouch ... Tienes la idea correcta, pero he visto lo complicado que puede resultar, y ambas partes sufren considerablemente. Estoy manteniendo una aplicación de este tipo actualmente.
Descubra las razones reales por las que el cliente considera necesario contribuir directamente al proyecto. ¿Es que ahora quieren que el proyecto se realice más rápido de lo que realmente puedes lograr? ¿Quieren cambios ya, pero tienen miedo de incurrir en costos adicionales por hacer cambios en las especificaciones o solicitar funciones adicionales? ¿Existe una lucha política en su organización donde los recursos de desarrollo interno quieren más control y aportes en el proyecto o donde están buscando trabajo ocupado para desarrolladores internos? (este último golpea cerca de casa para mí)
Encuentre cuáles son sus verdaderas motivaciones y abordelas si es posible. El hecho de que incluso lo sugieran es una gran señal de advertencia de que se avecinan problemas. Trate de aliviar sus preocupaciones reales antes de aceptar tal cosa porque lo más probable es que lo que suceda sea que controlarán con fuerza el proyecto y lo eliminarán, o causarán un caos masivo y un proyecto fallido.
EDITAR: Desafortunadamente ese barco ha navegado por ti, pero no te desesperes todavía. Todavía hay cosas que puede hacer para minimizar en gran medida el dolor que vendrá. No importa qué, asegúrese absolutamente de que sea UNO Y SOLO UN GERENTE DE PROYECTO y PROPIETARIO DE PRODUCTO y que esta persona esté asociada con su organización / empresa. Esta persona debe tener la capacidad de planificar sprints, incluir o eliminar historias de usuarios y asignar tareas a recursos en su empresa, así como a la empresa de su cliente. Pase lo que pase, asegúrese de que los recursos de desarrollo de su empresa no funcionen por separado de los recursos de sus clientes y, lo que es más importante, NO¡permita a los desarrolladores de su empresa informar a sus gerentes de proyecto o propietarios de productos! Aprovecharán por completo el trabajo gratuito no cubierto por el contrato o lo rechazarán de su propio proyecto. Es una certeza.
fuente
Desde una perspectiva legal, básicamente se pregunta "¿Cuál es la mejor manera de montar un burro con los ojos vendados por un campo de minas?"
Desde una perspectiva de programación, pediría más información: ¿se puede implementar lo que está pidiendo el cliente utilizando algún tipo de sistema EAV definido por el usuario o con ganchos que se pueden agregar al sistema? Idealmente, me gustaría mantener el código del cliente lo más separado posible del suyo por varias razones.
fuente
What's the best way to ride a donkey blindfolded through a mine field?
Supongo que la respuesta es "¡Borracho!"Alguien que suele desempeñar el papel de cliente aquí interviene. Sinceramente, no tendría este problema porque si llegara tan lejos, estaría en mi control de fuente, utilizando mi configuración de CI y mi configuración de control de calidad para probar cosas. Este arreglo puede ser bastante difícil de configurar: recibo muchos rechazos de los consultores, especialmente para poner las cosas en marcha. Al parecer, el proceso interfiere con las horas facturables.
Creo que su perspectiva es bastante honesta. Primero, tenga en cuenta que no es su base de código sino nuestra base de código. En segundo lugar, en la mayoría de los casos, la tienda de TI del lado del cliente tiene mucha más motivación para asegurarse de que este producto funcione según lo diseñado y sea fácil de mantener, administrar y brindar soporte en el futuro. Zambullirse nuevamente para corregir errores no es más factible para nosotros, a diferencia de la mayoría de los consultores. Además, construir cosas para que sean fácilmente configurables y fallan de manera predecible es mucho más importante cuando también posee el lado de operaciones de la moneda. Es posible que termine con un proyecto de mayor calidad porque parte del personal de desarrollo no está limitado por horas facturables.
En cuanto a cómo hacerlo funcionar, DCVS es definitivamente el camino a seguir si se puede hacer que suceda. Elegir algo neutral (bitbucket, github) puede ayudar. Tener CI en su lugar también es un regalo del cielo aquí: es más difícil que las cosas se salgan de control cuando todos saben que se salió de control en el último compromiso. Si puede forzar que las cosas se implementen a través de CI, algo que generalmente tenemos que imponer a los proveedores, realmente puede asegurarse de que todos los cambios estén comprometidos. En cuanto a la capacitación, ¿ha considerado vincularse con el cliente durante unos días? Esa podría ser una buena manera de establecer los lazos laterales que necesitará. En general, la mejor opción es convencer a todos de que están en el mismo equipo. Porque están en el mismo equipo.
fuente
Parece que este es un problema de gestión, ya que es un problema técnico. He tratado situaciones como esta en empresas de consultoría y software. De un "¿Cuánto valor obtendrá el cliente del software?" y "¿Cuánto esfuerzo necesitaré para mantenerlo después de la producción?" Esta es realmente una buena situación para ti. Muchos clientes insisten en que su gente participe. Sin embargo, tomará mucho trabajo.
Comenzando con el fin en mente, necesitará una buena Declaración de trabajo . Esto enumerará para qué estás enganchado y para qué están enganchados. Una matriz de Roles y Responsabilidades es un documento menos legalista que describe quién posee cada elemento, quién está involucrado y quién solo necesita ser informado. Ambos suponen que tiene una Estructura de desglose del trabajo bien definida que enumera en un nivel bajo (lo suficientemente bajo como para estimar) lo que es cada tarea.
En términos de creación, generalmente es el orden inverso: Alcance (que claramente ya tiene) -> WBS (que puede tener) -> Matriz de Roles y Responsabilidades -> SOW.
Una vez que tenga la propiedad claramente definida, es hora de administrar el código y los entornos. Soy bastante agnóstico con respecto a las herramientas de administración de código. Lo que diré es que es vital hacer una revisión del código para todo lo que haga alguien ajeno al equipo central. Si la herramienta que está usando marca esto, mucho mejor. Desea evitar que alguien sujete algo que va en contra de las decisiones arquitectónicas clave previamente tomadas. El concepto de 4 ojos (2 ojos adicionales que revisan todo) es la decisión táctica más importante que puede tomar.
Los entornos también son dolorosos de manejar. Por lo general, he experimentado situaciones en las que "Hacemos nuestro trabajo en nuestro entorno, cuando terminamos, va al suyo" y tanto el vendedor como el cliente luchan. Tu situación suena más compleja. Aconsejaría que trataran de encontrar una manera de trabajar en su entorno hasta que el proyecto haya finalizado. Si puede encontrar una manera de capacitar al cliente en la gestión de sus entornos (no asuma que es bueno en esto), entonces mucho mejor.
Un par de otras advertencias ...
No asuma que el cliente tiene la misma productividad que su equipo. (Obtendrá sorpresas ascendentes en el conocimiento del dominio, sorpresas descendentes en la velocidad específica de su software).
No asuma que el cliente conoce su metodología.
No asumas que el cliente comparte el trabajo de tu equipo. (He visto sorpresas tanto hacia arriba como hacia abajo).
Pase mucho tiempo entrenando y co-ubicando.
Cada hora que pase enseñando al cliente a solucionar problemas ahorrará muchos días en el futuro.
Utilice al cliente para trabajar a través de su organización interna por usted y encuentre expertos en cuestiones de contenido y dominio.
Utilice al cliente para vender capacitar a su organización.
Por defecto, involucrar a los clientes en su proceso de desarrollo lo obligará a pensar como una empresa de servicios profesionales. David Maister escribió el mejor libro sobre el tema. Incluso si solo el 20% es relevante para usted, vale la pena leerlo.
A pesar de todas estas advertencias, incluir clientes en sus equipos puede hacer maravillas para acercarlo a sus compradores. Estos clientes son los que tienen más probabilidades de ser referencias futuras. ¡Buena suerte en sacar lo mejor de esta situación!
fuente
Definitivamente, a su cliente se le debe dar un recorrido de cómo se configura todo, debería haber sido un requisito para cerrar sesión en la primera fase. Debe presionar para permitir que su cliente edite cualquier cosa directamente, debe completar una solicitud de cambio que se ingresa en su sistema de seguimiento de problemas y se prioriza con el resto del trabajo. Depende de usted y su cliente decidir qué solicitudes están fuera del alcance del contrato. La forma en que esto sucede debe diseñarse en algún tipo de documento / flujo de trabajo de gestión de cambios; si no existe, le sugiero que cree uno y haga que su cliente acepte que este es el proceso a través del cual puede cambiar las cosas, y poner esto en práctica. escritura. De lo contrario, no puede hacer mucho más que rezar para que nada salga mal.
fuente