De experiências anteriores com uma base de código do Big Ball Of Mud que evoluiu naturalmente ao longo de muitos anos nas mãos de muitos desenvolvedores juniores não supervisionados, gostaria de salientar o que acontece quando você não pratica CI com esses desenvolvedores.
Editar / Atualizar : conforme comentário de RubberDuck; Esta resposta assume que seu destino de mesclagem para integração é um ramo de desenvolvimento, em vez de um ramo de avaliação ou liberação.
- Obviamente, precisa haver muito mais controle sobre o código para lançamento e implantação ao vivo; se não houver uma ramificação de produção separada, vale a pena considerar uma alteração em sua estratégia de ramificação / mesclagem para executar uma ramificação de desenvolvimento principal (usada para teste de integração e nunca para liberação) juntamente com a ramificação de liberação principal. Isso mantém todos os benefícios do CI e mesclagens frequentes sem arriscar quebrar o código de produção.
1. Os desenvolvedores juniores são menos propensos a se comunicar com seus colegas de trabalho ou supervisor
A integração contínua não é simplesmente uma questão de mesclar código, é um momento no qual um desenvolvedor é forçado a interagir com outras partes interessadas.
A comunicação é importante e, sem querer generalizar demais, tende a ser uma habilidade aprendida que chega menos naturalmente aos desenvolvedores inexperientes do que àqueles que estão acostumados a trabalhar em um ambiente de equipe.
Se você permitir que os desenvolvedores juniores permaneçam em seu cubículo e joguem fora o código por semanas sem serem solicitados relatórios / análises frequentes, é mais provável que evitem completamente a comunicação.
2. O código que eles estão produzindo provavelmente precisará de uma revisão mais rigorosa
Você já revisou algo tão ruim que desejou ter buscado antes e impedido de ter sido escrito? Isso acontece muito.
Você não pode impedir que um código incorreto seja gravado, mas pode limitar o tempo perdido. Se você se comprometer a análises e mesclagens frequentes, minimiza o escopo por tempo perdido.
O pior cenário é que você pode deixar um desenvolvedor júnior sozinho por várias semanas em seu próprio projeto em miniatura e, quando ele estiver finalmente pronto para a revisão do código, simplesmente não haverá tempo suficiente para ele jogar toda a bagunça. longe e comece novamente do zero.
Muitos projetos se tornam uma grande bola de barro simplesmente porque toda uma carga de código incorreto foi escrita quando ninguém prestava atenção até que fosse tarde demais.
3. Você deve ter menos certeza de que um desenvolvedor júnior ou outro novo membro da equipe entendeu os requisitos
Às vezes, um desenvolvedor pode criar a solução perfeita para o problema errado; este é triste porque geralmente se resume a simples mal-entendidos que seriam tão fáceis de evitar se alguém tivesse feito a (s) pergunta (s) correta (s) no início do processo.
Novamente, esse é um problema que provavelmente afetará desenvolvedores inexperientes, com maior probabilidade de aceitar requisitos "ruins" pelo valor nominal, em vez de recuar e questionar a sabedoria do requisito.
4. É provável que eles estejam menos familiarizados com padrões comuns, com a arquitetura do código existente e com ferramentas e soluções conhecidas
Às vezes, um desenvolvedor gasta muito tempo reinventando a roda desnecessariamente, simplesmente porque não sabia que existia uma solução melhor. Ou eles podem passar dias tentando martelar uma estaca quadrada em um buraco redondo sem perceber o que estão fazendo de errado.
Novamente, é mais provável que esse tipo de coisa ocorra com desenvolvedores inexperientes, e a melhor maneira de resolver o problema é garantir revisões regulares.
5. Longos períodos entre as confirmações / mesclagens de código tornam os defeitos mais difíceis de identificar e corrigir
Quando um bug surge imediatamente após várias semanas de alterações no código terem sido mescladas no ramo principal, o desafio de identificar qual alteração pode ter causado o bug fica mais difícil.
Obviamente, sua estratégia geral de ramificação também entra em jogo aqui; idealmente, todos os seus desenvolvedores trabalharão em suas próprias ramificações ou dentro das ramificações de recursos (ou ambos) e nunca funcionarão diretamente fora do mestre / tronco.
Vi situações em que equipes inteiras estão trabalhando diretamente no mestre / tronco ao mesmo tempo, e esse é um ambiente terrível para o CI, mas felizmente a solução de afastar todos do mestre / tronco geralmente fornece estabilidade suficiente para o trabalho individual itens / bilhetes / etc.
Sempre deve ser "bom" para qualquer desenvolvedor interromper a ramificação mestre / tronco, com o entendimento de que a mesclagem deve ocorrer regularmente, que as alterações e defeitos de quebra devem ser identificados mais rapidamente e, portanto, resolvidos mais rapidamente. Os piores defeitos são tipicamente aqueles que permanecem despercebidos por meses ou até anos.
Em suma; As principais vantagens da integração / implantação contínua são:
- A comunicação entre sua equipe melhora
- A qualidade do código geralmente é mantida em um padrão mais alto
- É menos provável que os requisitos sejam perdidos ou mal interpretados
- Os problemas de arquitetura e design devem ser detectados mais rapidamente,
- É mais provável que os defeitos sejam detectados e corrigidos em um estágio anterior
Portanto, se você não pratica o IC com seus desenvolvedores juniores, está aceitando muitos riscos desnecessários significativos, pois esses são os membros da sua equipe que precisam mais do que o resto.
it is more scary to wait a week to deploy all micro services at once to make sure that everything works together, than to strictly enforce api versioning, write lots of automatic tests (...), and auto deploy to production as soon as your commit passes as tests on stage
- baseado na opinião;) IMHO é muito mais difícil garantir o sucesso com a implantação de serviços independentes do que com uma abordagem monolítica: softwareengineering.stackexchange.com/a/342346/187812 . E com o IC verdadeiro (sem ramificações de recursos / integração), você não precisa esperar uma semana.