Qual é a melhor maneira de permitir que um cliente contribua para um projeto?

12

Estamos construindo um CRM para um cliente. Agora que a primeira fase principal foi concluída e a segunda concordada, o cliente gostaria de pegar parte do trabalho, fazendo pequenas alterações no esquema do banco de dados e nos processos de negócios na primeira fase enquanto construímos a segunda .

Não sei se isso é prático, mas, supondo que seja, gostaria de algumas dicas sobre quais medidas podem ser tomadas para tornar isso viável. Aqui está o que eu tenho até agora:

  • Até agora, o cliente via principalmente o projeto do ponto de vista do usuário; claramente, um seminário de duas partes deve ocorrer onde o apresentamos ao funcionamento interno:

    • primeiro, mostrando o esquema do banco de dados existente e, a título de exemplo, estendendo-o,
    • em seguida, mostrando algum código de amostra e gravando um novo processo de negócios para o aprimoramento do esquema.
  • O código atualmente reside em um repositório interno do Subversion. Embora possamos configurar um ou um público em sua rede (na qual podemos VPN), acho que um sistema distribuído funcionaria melhor. Parece que sou o único que se sente assim, para poder usar alguns bons argumentos convincentes.
  • Não sei como determinar / garantir que o código executado na produção seja confirmado. Parece que "x fez uma mudança crítica e sem documentos, pouco antes de sair de férias; agora você está tentando descobrir esse bug que ocorre desde que" os desastres são inevitáveis. Idealmente, todas as alterações, antes da implantação, seriam:

    • ser documentado em um sistema de rastreamento de problemas,
    • ocorrer primeiro em um ambiente de teste separado e
    • precisa passar por testes automatizados.

    Infelizmente, duvido que a disciplina para qualquer uma delas prevaleça.

Suponha que uma arquitetura de plug-in ou projeto separado não sejam opções viáveis, porque 1) o primeiro não existe e 2) o último proibiria o cliente de examinar e possivelmente modificar o código existente, uma capacidade que acredito que ele insistir em.

Sören Kuklau
fonte
2
Diga a eles que você precisa deles para desempenhar o papel de cogumelo. Mantenha-os no escuro e alimente-os com bs.
Capdagon
@capdragon Concordo, (e assim que faz Mark Whalberg de Os Infiltrados )
Chani
1
Você já considerou os aspectos legais de tal acordo? Quem é responsável por manter o código modificado pelo cliente? Quem é o proprietário dos direitos autorais do código produzido por você e pelo cliente? Você deseja vender o sistema ou partes do sistema para outro cliente?
21412 Jaydee
Sim; os aspectos legais estão sendo tratados. Os direitos autorais não são relevantes (ou melhor, não são um problema específico para este projeto), pois são códigos específicos do cliente, portanto, eles são os proprietários de qualquer maneira.
Sören Kuklau

Respostas:

2

Essa será a resposta menos favorita - mas, no entanto, aqui está ela!


É arriscado (tanto quanto permitir que um novato dirija um carro novo) - mas não é uma má idéia.

Entenda por que eles querem fazer isso: não é que eles tenham recursos extras, é apenas para se sentirem sob controle.

O que você precisa fazer é seguir:

  1. Eduque seu cliente - o software é mais do que um código. Se eles quiserem participar, primeiro revise aspectos arquitetônicos, projetos e assim por diante. Faça perguntas e mostre as implicações das escolhas que eles fazem antes.

  2. Você sempre deve voltar com opções sobre os prós / contras das abordagens (e documentar bem essas reuniões), mas deve permitir que eles tomem algumas decisões. Pelo menos eles começarão a perceber que não sabem muito - ou se apropriarão deles mesmos.

  3. Você pode criar espaço separado - como ramificações, para que possam codificar o que quiserem - as coisas devem ser devidamente testadas antes de serem confirmadas ou mescladas.

Embora eu saiba que complicações podem acontecer, todo problema é uma oportunidade. Se tudo correr bem, seu cliente realmente apreciará mais os problemas internos e desenvolverá uma confiança melhor porque eles sabem (como) você fez um bom trabalho!

PS: Para lhe dar uma visão - eu sou da Índia; e conheço muitas lojas de TI nas quais o gerenciamento realmente não tem muita pista. Eles geralmente não se importam (nem se sentem felizes) com o fato de o cliente colocar recursos adicionais para garantir que o projeto não caia no lixo! Isso funciona muito bem para eles; todos eles seguem uma mentalidade "O que você diz, senhor!". Isso não é para humilhar meu próprio compatriota - mas para mostrar que o desenvolvimento conjunto não é uma idéia tão ruim. Afinal, o que muitos gurus da administração retratam é a " abordagem do consumidor " para os problemas de negócios.

Dipan Mehta
fonte
+1 boa resposta com base na experiência pessoal, exatamente como o OP queria.
Sardathrion - contra abuso de SE
13

Ouch ... Você tem a idéia certa, mas eu vi como isso pode ser confuso, e ambas as partes sofrem consideravelmente. Atualmente, estou mantendo esse aplicativo.

Descubra os reais motivos pelos quais o cliente considera necessário contribuir diretamente para o projeto. Agora eles querem que o projeto seja executado mais rapidamente do que você realmente pode realizá-lo? Eles já querem mudanças, mas têm medo de incorrer em custos adicionais para fazer alterações nas especificações ou solicitar recursos adicionais? Existe uma luta política em sua organização em que os recursos internos de desenvolvimento desejam mais controle e contribuição no projeto ou onde procuram trabalho ocupado para desenvolvedores internos? (este último bate perto de casa para mim)

Descubra quais são suas verdadeiras motivações e lide com elas, se possível. O fato de que eles até sugerem é um enorme sinal de alerta de que problemas estão chegando no futuro. Tente aliviar suas preocupações reais antes de concordar com uma coisa dessas, porque o mais provável é que eles reforcem o controle do projeto e o eliminem gradualmente, ou causarão um caos maciço e um projeto fracassado.

EDIT: Infelizmente esse navio navegou para você, mas não se desespere ainda. Ainda há coisas que você pode fazer para minimizar bastante a dor que virá. Independentemente do que seja, certifique-se de que eles sejam UM ÚNICO GERENTE DE PROJETO e PROPRIETÁRIO DO PRODUTO e que essa pessoa esteja associada à sua organização / empresa. Essa pessoa deve ter a capacidade de planejar sprints, incluir ou remover histórias de usuários e atribuir tarefas a recursos da sua empresa e da empresa do cliente. Aconteça o que acontecer, verifique se os recursos de desenvolvimento da sua empresa não funcionam separadamente dos recursos de seus clientes e, o que é mais importante, NÃOpermita que os desenvolvedores da sua empresa se reportem aos gerentes de projeto ou proprietários de produtos! Eles tiram vantagem total do trabalho gratuito não coberto pelo contrato ou excluem você do seu próprio projeto. É uma certeza.

maple_shaft
fonte
As duas primeiras razões são provavelmente pontuais, mas provavelmente imutáveis; naturalmente, há uma sobrecarga na coleta de solicitações de mudança, repassando-as para nós, pagando por elas, fazendo-nos testes internos e, depois, testando por conta própria. Eu me preocupo que o navio já tenha navegado e, portanto, estou mais procurando maneiras de mitigar o problema, daí a minha pergunta.
Sören Kuklau
@ SörenKuklau Então lamento que você já tenha perdido essa batalha. Vou editar minha resposta e fornecer uma alternativa.
Maple_shaft
Eu concordo, é suficiente para o cliente pagar . Na verdade, cobramos mais por qualquer participação maior do lado deles!
Chani
6

Do ponto de vista jurídico, você está basicamente perguntando "Qual é a melhor maneira de montar um burro com os olhos vendados através de um campo minado?"

Do ponto de vista da programação, eu pediria mais informações - o que o cliente está pedindo pode ser implementado usando algum tipo de sistema EAV definido pelo usuário ou com ganchos que podem ser adicionados ao sistema? Idealmente, eu gostaria de manter o código do cliente o mais separado possível do seu por vários motivos.

Jonathan Rich
fonte
10
What's the best way to ride a donkey blindfolded through a mine field?Eu acho que a resposta é "Bêbado !!"
FrustratedWithFormsDesigner
“Do ponto de vista jurídico, você está basicamente perguntando:" Qual é a melhor maneira de montar um burro com os olhos vendados através de um campo minado? " aqui. Metáfora legal, no entanto. :) Quanto a uma arquitetura de plug-in ou projeto separado, veja minha edição; eles não são perspectivas realistas.
Sören Kuklau
Se for esse o caso, o que há de errado em vender ao cliente uma licença de origem para o CRM, com um SLA?
Jonathan Rich
O cliente tem o direito legal do código. Essa não é a questão aqui; trabalhando colaborativamente nisso.
Sören Kuklau
1
Se o cliente tiver o direito legal do código, a melhor solução é tratá-lo claramente como dele, configurar o controle de versão no servidor e cobrar qualquer manutenção a cada hora.
Jonathan Rich
3

Alguém que geralmente desempenha o papel de cliente aqui. Eu honestamente não teria esse problema, porque se chegasse tão longe, você estaria no meu controle de origem, usando minha configuração de IC e minha configuração de controle de qualidade para testar as coisas. Esse arranjo pode ser bem difícil de configurar - recebo muitas críticas dos consultores, especialmente quando as coisas estão funcionando. Tendo processo interfere com horas faturáveis, parece.

Eu acho que sua perspectiva é honestamente um pouco distorcida. Primeiro, lembre-se de que não é sua base de código, mas nossa base de código. O segundo é que, na maioria dos casos, a loja de TI do lado do cliente tem muito mais motivação para garantir que este produto funcione como projetado e seja fácil de manter, gerenciar e dar suporte no futuro. Mergulhar de volta para corrigir bugs não é mais horas faturáveis ​​para nós, ao contrário da maioria dos consultores. Além disso, construir coisas para serem facilmente configuráveis ​​e falharem de maneiras previsíveis é muito mais importante quando você também possui o lado operacional da moeda. Você pode acabar com um projeto de maior qualidade, porque parte da equipe de desenvolvimento não é limitada por horas faturáveis.

Na medida em que fazê-lo funcionar, o DCVS é ​​definitivamente o caminho a seguir, se for possível que isso aconteça. Escolher algo neutro (bitbucket, github) pode ajudar. Ter o CI no lugar também é uma dádiva de Deus - é mais difícil as coisas saírem do controle quando todo mundo sabe que ele saiu do controle no último commit. Se você pode forçar a implantação de itens via CI - algo que normalmente precisamos impor aos fornecedores -, você pode realmente garantir que todas as alterações sejam confirmadas. Em termos de treinamento, você considerou emparelhar-se com o cliente por alguns dias? Essa pode ser uma boa maneira de estabelecer os laços laterais necessários. No geral, a melhor aposta é convencer todos que estão no mesmo time. Porque eles estão no mesmo time.

Wyatt Barnett
fonte
3

Parece que esse é um problema de gerenciamento e técnico. Eu lidei com situações como essa em empresas de consultoria e software. De um total "Quanto valor o cliente obterá do software?" e "Quanto esforço precisarei para manter a pós-produção?" Esta é realmente uma boa situação para você. Muitos clientes insistem em envolver seu pessoal. Vai levar muito trabalho embora.

Começando com o fim em mente, você precisará de uma boa Declaração de Trabalho . Isso listará o que você está procurando e o que eles estão procurando. Uma matriz de papéis e responsabilidades é um documento menos legalista que descreve quem possui cada item, quem está envolvido e quem precisa ser informado. Ambos assumem que você tem uma Estrutura de detalhamento de trabalho bem definida que lista em um nível baixo (baixo o suficiente para estimar) o que é cada tarefa.

Em termos de criação, geralmente é a ordem inversa: Escopo (que você já possui) -> PEP (que você pode ter) -> Matriz de Papéis e Responsabilidades -> SOW.

Depois de definir claramente a propriedade, é hora de gerenciar o código e os ambientes. Sou bastante independente das ferramentas de gerenciamento de código. O que vou dizer é que é vital fazer uma revisão de código para tudo o que é feito por alguém fora da equipe principal. Se a ferramenta que você está usando sinalizar isso, melhor. Você deseja evitar que alguém prenda algo que contrarie as principais decisões arquiteturais tomadas anteriormente. O conceito de 4 olhos (2 olhos adicionais revisando tudo) é a decisão tática mais importante que você pode tomar.

Os ambientes também são difíceis de gerenciar. Normalmente, tenho vivenciado situações em que "fazemos o nosso trabalho em nosso ambiente, quando terminamos, ele é direcionado ao seu" e o fornecedor e o cliente se esforçam. Sua situação parece mais complexa. Eu aconselho a tentar encontrar uma maneira de trabalhar em seu ambiente até que o projeto seja concluído. Se você puder encontrar uma maneira de treinar o cliente no gerenciamento de seus ambientes (não pense que eles são bons nisso), melhor ainda.

Algumas outras advertências ...

  1. Não presuma que o cliente tenha a mesma produtividade que sua equipe. (Você terá surpresas para cima no conhecimento do domínio, surpresas para baixo na velocidade específica do seu software.)

  2. Não assuma que o cliente conhece sua metodologia.

  3. Não assuma que o cliente compartilha a ética de trabalho de sua equipe. (Vi surpresas para cima e para baixo.)

  4. Passe muito tempo treinando e co-localizando.

  5. Cada hora que passa ensinando o cliente a solucionar problemas economizará muitos dias no futuro.

  6. Utilize o cliente para trabalhar com sua organização interna e encontre especialistas em questões de conteúdo e domínio.

  7. Utilize o cliente para vender treinar sua organização.

  8. Por padrão, envolver clientes em seu processo de desenvolvimento forçará você a pensar como uma empresa de serviços profissionais. David Maister escreveu o melhor livro sobre o tema. Mesmo que apenas 20% sejam relevantes para você, vale a pena ler.

Apesar de todas essas advertências, incluir clientes em suas equipes pode fazer maravilhas para aproximar você dos seus compradores. Esses clientes são os que mais provavelmente serão referências futuras. Boa sorte em tirar o melhor proveito desta situação!

MathAttack
fonte
1
Eu concordo, mas quanto a uma das preocupações técnicas, cada organização com seu próprio repositório e cadeia de ferramentas é boa, mas se esse é o caminho a seguir, declarar que uma fonte 'mestre' é crucial: a sua, a deles ou uma 'mestre compartilhado' mantido separadamente. Sem um 'mestre', a capacidade de integrar e reverter por partes será, não pode ser, problemática, como suspeita de OP. Um único repositório 'mestre' simplificaria os testes de mapeamento e os defeitos de volta para uma única versão de origem, em vez de fazer um mapeamento duplo primeiro para a versão mestre e depois para cada cópia 'local' independente.
JustinC 15/02/12
1
Pode haver razões políticas ou econômicas pelas quais os dois lados hesitam em abrir mão do controle ou conceder acesso, mas se o objetivo é trabalhar juntos, simultaneamente, nenhum dos lados será eficaz sem primeiro negociar o controle. Por exemplo. quem é o encarregado e o responsável pelo mestre, como são resolvidas as disputas sobre o mestre e como você fará a transição do controle do mestre de volta para o cliente (se você, como empresa contratante, mantiver e controlar o mestre).
23712 JustinC
@JustinC - eu ouço você. Um dos meus projetos tem o meio-dia ETI, mantendo apenas dois repositórios de defeitos em sincronia.
MathAttack
0

Definitivamente, seu cliente deve ter uma explicação de como tudo está configurado, deveria ter sido um requisito para assinar na primeira fase. Você deve permitir que seu cliente edite qualquer coisa diretamente; ele deve preencher uma solicitação de alteração inserida no sistema de rastreamento de problemas e priorizada com o restante do trabalho. Caberá a você e seu cliente decidir quais solicitações estão fora do escopo do contrato. Como isso acontece deve ser projetado em algum tipo de fluxo de trabalho / documento de gerenciamento de alterações, se não existir, sugiro que você crie um e peça ao seu cliente que concorda que esse é o processo pelo qual ele pode mudar as coisas. escrevendo. Caso contrário, não há muito que você possa fazer além de rezar para que nada dê errado.

Ryathal
fonte