Há muito tempo, adicionamos um recurso em que nossos usuários podiam "Aceitar" uma imagem após ser adicionada a uma fila de fluxo de trabalho. Acontece que usamos o termo errado e os usuários realmente "aprovam" a imagem.
É fácil alterar Aceitar para aprovar em nossa interface, basta substituir uma palavra. Mas programamos todas as camadas com a palavra "accept", desde o nome da classe CSS até os valores do banco de dados.
- A classe CSS que ativa o botão verde: ".accepted";
- O método de modelo que verifica e vincula o atributo de classe no nó DOM: "isAccepted";
- Atributo de status JavaScript: matriz com "não revisado", "aceito" e "publicado";
- Coluna de status do Mysql: ENUM com "não revisado", "aceito" e "publicado";
- Nomes de teste;
É trivial (especialmente quando você tem testes) substituir a maioria das ocorrências de aceitação para aprovação. Um pouco mais difícil é migrar os dados, especialmente porque eles precisam ser sincronizados com a implantação.
Esse caso específico é simples, mas já enfrentei casos semelhantes, ainda mais complexos, durante minha carreira. Quando um arquivo também é renomeado e a implantação ocorre em dezenas de servidores, ou quando o cache do proxy, o memcached e o mysql estão envolvidos.
Deixar "aceito" em todas as outras camadas, exceto a interface, é uma péssima idéia, pois novos programadores que ingressam na equipe podem não aprender as razões históricas que levaram a essa decisão e, apesar de aceitar -> aprovar, são palavras próximas em termos de significado, se foi renomeado para "na fila para a próxima reunião de status gerencial", certamente não faria sentido. E parece que, se comprometermos aqui e ali, em algumas iterações, os conceitos de interface do usuário não terão influência nos internos do sistema, e eu certamente não quero trabalhar em um sistema em que metade da saída não tenha conexão com suas entranhas.
Então, você sempre renomeia tudo quando necessário? Se isso aconteceu com você e você decidiu que o trade-off não valia, ele voltou a morder você? O comentário do código ou a documentação do desenvolvedor é suficiente para evitar esse problema?