O que é Gerência de Mudanças
Nem todas mudanças em um projeto podem ou devem ser implementadas, algumas aumentam os custos do projeto, introduzem comportamentos inesperados ou não são de grande benefício para a maioria dos usuários. Tais mudanças se não forem controladas com algum tipo de critério podem prejudicar e causar instabilidade em um sistema estável.
O gerenciamento de mudanças ajuda na identificação e no gerenciamento das possíveis mudanças de um projeto, fazendo a análise dos impactos no cronograma, orçamento e qualidade. Com isso podemos garantir que tais mudanças sejam compatíveis com o projeto, aprovadas pelos envolvidos neste processo, diminuindo o impacto causado, assim como os custos.
Modelo de Ian Sommerville #
Um modelo muito conhecido para gerenciamento de mudanças é de Ian Sommerville. Neste modelo os passos seguem a seguinte ordem:
- O cliente envia a solicitação de mudança utilizando um formulário modelo;
- Alguém da equipe faz a análise deste pedido e verifica se é válido;
- Caso a mudança seja valida a equipe de desenvolvimento estuda qual a complexidade para implantação desta mudança, incluindo na conta final o custo e o impacto no projeto;
- A equipe responsável pelo controle de mudanças ou o próprio time de desenvolvimento faz validação de quais das mudanças requisitadas serão realizadas e quais deverão ser fechadas/rejeitadas;
- A equipe de desenvolvimento implementa as mudanças aprovadas e faz os testes necessários para garantir seu funcionamento;
- No fim, com todos os testes realizados e aprovados, a mudança é considerada como completa e é fechada.
Algumas perguntas importantes a serem feitas na análise de uma mudança requisitada são:
- A mudança está relacionada com o escopo do projeto?
- Qual o motivo dessa mudança ter sido requisitada?
- Há benefícios para o projeto como um todo caso essa mudança seja implementada?
- O tempo de conclusão do projeto aumentará muito com essa mudança
- A mudança já foi realizada de alguma outra forma?
Tais perguntas devem estar em conformidade com a equipe para evitar que mudanças não necessárias passem para a equipe de desenvolvimento e sejam fechadas por algum motivo não coberta na pré análise da mesma.
Implementar ou não uma mudança #
As consequências de fazer ou não uma mudança em um projeto devem ser avaliadas com cuidado. A mudança está relacionada a um bug do sistema? Será preciso levar em consideração a gravidade do bug, o quão rápido a mudança deverá ser implementada priorizando tarefas da equipe de desenvolvimento.
Também é importante medir se a mudança traz benefícios para toda base de usuários do sistema ou só uma pequena parte. O esforço e o tempo para implementar a mudança está de acordo com a quantidade de usuários beneficiados? Caso não, a prioridade para a mudança pode ser baixa dando prioridade para outras que trarão mais benefícios.
Os custos para realizar a mudança também entram na conta. Mudanças que necessitam de alterações em muitas partes do sistema podem introduzir bugs, aumentando assim o tempo de desenvolvimento e consequentemente os custos..
Ferramentas #
Algumas ferramentas podem ser úteis no processo de gerenciamento de mudanças, como as citadas abaixo:
-
JIRA: permite o gerenciamento de mudanças focado em projetos ágeis. Permite a organização das mudanças utilizando categorias, status personalizados, separação por projetos, responsáveis e equipes.
-
TRELLO: utiliza o modelo Kanban para gerenciamento de projetos. Cada projeto tem seu board com listas dinâmicas criadas pelo próprio time. Com um pouco de criatividade é possível fazer um gerenciamento de mudanças de forma bem organizada. Oferece categorização de cards por labels, prazo de entregas, anexos de documentos e mais.
-
GITHUB: plataforma de hospedagem de código fonte e arquivos com controle de versão que conta também com gerenciamento de mudanças. Lá é possível categorizar as mudanças com labels, utilizar bots para fechar mudanças que não serão implementadas. A vantagem é que o gerenciamento de mudanças está estritamente ligado ao controle de versão tornando fácil assim referenciar em commits qual mudança é afetada, gerenciar branchs relacionados a mudanças e mais.