¿Cuál es la mejor manera de permitir que un cliente contribuya a un proyecto?

12

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.

Sören Kuklau
fuente
2
Diles que los necesitas para desempeñar el papel de un hongo. Mantenlos en la oscuridad y aliméntalos bs.
capdragon
@capdragon Estoy de acuerdo, (y Mark Whalberg de The Departed )
Chani
1
¿Ha considerado los aspectos legales de tal acuerdo? ¿Quién es responsable de mantener el código modificado del cliente? ¿Quién posee los derechos de autor sobre el código producido por usted y por el cliente, si alguna vez desea vender el sistema o partes del sistema a otro cliente?
Jaydee
Si; Los aspectos legales están siendo atendidos. El copyright no es relevante (o, más bien, no es un problema específico de este proyecto), ya que es un código específico del cliente, por lo que es el propietario de todos modos.
Sören Kuklau

Respuestas:

2

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.

Comprenda por qué quieren hacer esto: no es que tengan recursos libres, es solo para sentirse bajo control.

Lo que debe hacer es lo siguiente:

  1. 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.

  2. 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.

  3. 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.

Dipan Mehta
fuente
+1 buena respuesta basándose en la experiencia personal, tal como quería el OP.
Sardathrion - contra el abuso SE
13

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.

árbol de arce
fuente
Las dos primeras razones son probablemente acertadas, pero probablemente inmutables; naturalmente, hay gastos generales en la recopilación de solicitudes de cambio, pasándonoslas, pagándolas, haciéndonos hacer pruebas internas y luego haciendo algunas pruebas propias. Me preocupa que el barco ya haya navegado y, por lo tanto, estoy buscando formas de mitigar el problema, de ahí mi pregunta.
Sören Kuklau
@ SörenKuklau Entonces lamento que ya hayas perdido esa batalla. Voy a editar mi respuesta y ofrecer una alternativa.
maple_shaft
Estoy de acuerdo, es suficiente para que el cliente pague . En realidad, ¡cárgueles extra por cualquier mayor participación de su lado!
Chani
6

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.

Jonathan Rich
fuente
10
What's the best way to ride a donkey blindfolded through a mine field?Supongo que la respuesta es "¡Borracho!"
FrustratedWithFormsDesigner
"Desde una perspectiva legal, básicamente se pregunta" ¿Cuál es la mejor manera de montar un burro con los ojos vendados a través de un campo de minas? "" La cuestión de responsabilidad / culpa / posibles problemas legales es realmente interesante e importante, pero no el alcance aquí. Bonita metáfora, sin embargo. :) En cuanto a una arquitectura de plug-in o proyecto separado, vea mi edición; No son perspectivas realistas.
Sören Kuklau
Si ese es el caso, ¿qué tiene de malo venderle al cliente una licencia de origen al CRM, con un SLA?
Jonathan Rich
El cliente tiene derecho legal al código. Ese no es el problema aquí; en colaboración trabajando en ello es.
Sören Kuklau
1
Si el cliente tiene derecho legal al código, entonces la mejor solución es tratar el código como suyo, hacer que configure el control de versiones en su servidor y facturar cualquier mantenimiento por hora.
Jonathan Rich
3

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.

Wyatt Barnett
fuente
3

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 ...

  1. 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).

  2. No asuma que el cliente conoce su metodología.

  3. No asumas que el cliente comparte el trabajo de tu equipo. (He visto sorpresas tanto hacia arriba como hacia abajo).

  4. Pase mucho tiempo entrenando y co-ubicando.

  5. Cada hora que pase enseñando al cliente a solucionar problemas ahorrará muchos días en el futuro.

  6. Utilice al cliente para trabajar a través de su organización interna por usted y encuentre expertos en cuestiones de contenido y dominio.

  7. Utilice al cliente para vender capacitar a su organización.

  8. 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!

MathAttack
fuente
1
Estoy de acuerdo, pero en cuanto a una de las preocupaciones técnicas, cada organización que tenga su propio repositorio y cadena de herramientas está bien, pero si esa es la ruta que sigue, declarar una fuente 'maestra' es crucial: ya sea el suyo, el suyo o un mantenido por separado "maestro compartido". Sin un 'maestro', la capacidad de integrar y revertir por partes será, y no puede ser, problemática, como sospecha OP. Un único repositorio 'maestro' simplificaría las pruebas de mapeo y los defectos a una única versión de origen, en lugar de tener un mapeo doble primero a la versión maestra, y luego a cada copia independiente 'local'.
JustinC
1
Puede haber razones políticas o económicas por las cuales cualquiera de las partes duda en ceder el control o conceder acceso, pero si el objetivo es trabajar juntos, simultáneamente, ninguna de las partes será efectiva sin primero negociar el control. P.ej. quién está a cargo y el cuidador del maestro, cómo se resuelven las disputas sobre el maestro y cómo hará la transición del control del maestro al cliente (si usted, como empresa contratante, mantiene y controla al maestro).
JustinC
@JustinC - Te escucho. Uno de mis proyectos tiene la mitad de la mañana FTE solo manteniendo sincronizados dos repositorios de defectos.
MathAttack
0

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.

Ryathal
fuente