Como mudar de casa pode te ajudar a migrar o sistema?

Na vida, sempre chega aquele momento em que a casa fica apertada, os cômodos já não comportam as pessoas, a vazão dos corredores e halls diminuem... Ou simplesmente você mudou de vida. Juntou as escovas de dentes com alguém e chegou o momento de mudar de casa. Antes que você pergunte: Sim, este post é sobre tecnologia.
Carro da década de 1930, com uma montanha de móveis mal acomodados

http://static1.squarespace.com/static/59e8df17f09ca4b0341f35b0/59e8e981b1ffb6c44311e2be/5b8ce65cb8a045c95eb5b157/1537007637140/Moving+Day+3_0.jpg?format=1500w

Recentemente me casei e estamos há quase um mês arrumando a mudança. A cabeça do desenvolvedor não desliga, está sempre compilando. E eu percebi alguns pontos de contato muito interessantes entre a mudança (de casa) e a migração de um sistema para uma nova linguagem. Quero compartilhar alguns insights sobre o assunto com você.

O que define o Software?

Na sua rua pode ser que muitas casas acendam a luz à noite. Pode ser que abaixo ou acima de você, outros apartamentos estejam construídos. Mas entre todas as casas, apartamentos, papelões no chão, apenas um você chama de lar; você chama de "minha casa". O que define um Lar não é o formato ou o material das paredes e teto. É o sentimento que você nutre por ele. Onde você for, seu lar irá com você.

Com o software não é diferente. O que define o software não é a sua versão compilada ou o seu bytecode. Tão pouco, por mais que valha bastante dinheiro, o código fonte. O que realmente define um software é a forma como ele apresenta uma solução para o problema dado. Pode ser lenta, rápida, ágil, ergonômica, bonita, web... Quando você migra para uma outra linguagem, continua sendo o mesmo software. Ainda que CEP mude para 2.0.1.

Antes de mudar, saiba o destino de cada caixa.

A dica de ouro para quem está encaixotando a mudança é: Tenha em mente onde você vai colocar tudo na casa nova. E então enderece as caixas para estes destinos. Se você está saindo de uma casa que tem apenas a cozinha e vai para outra que terá copa, já decida onde vai colocar o quê. Ainda que mais tarde você mude de ideia, ficará mais fácil de manusear as caixas.

Conhecer o software é essencial. E aqui não me refiro a saber de cor todas as opções de menu. Mas sim conhecer o que deu certo, o que não deu, e como poderia ser melhor. Hoje eu tenho um monolito. E se eu migrar para uma arquitetura DDD e depois encarar um microserviço? Onde cada regra de negócio vai ficar? Foi uma boa ideia "aportuguesar" tudo no código? Definir todos (ou o mais próximo disso) os detalhes da arquitetura ANTES da primeira linha de código é fundamental para o sucesso da migração.

Desapega, desapega que a casa é menor

Cada vez que você abre uma caixa, um turbilhão de lembranças é jogado na sua cara. Boas e ruins. Um dos maiores desafios da mudança surge neste momento: O que devo jogar fora? O que eu ainda posso precisar? "Deu tanto trabalho comprar todos esses clipes de plástico colorido...". Quando a casa nova é grande, você pode até esconder no quartinho da bagunça. Mas quando a casa é menor, o jeito é se desfazer. Aliás, se desfazer e sempre a melhor opção.

Quem nunca ouviu a frase: "Esse trecho de código está assim há 25 anos. Não dá pra mudar". Se não dá pra mudar, pra quê migrar para uma linguagem nova, não é mesmo? Pra quê compilar na nova versão da linguagem, se você não quer utilizar os novos recursos? É preciso desapegar de algoritmos pouco performáticos e buscar novas soluções mais simples, mais rápidas. O mesmo eu diria de processos e metodologias. Em software, somente as coisas que fazem sentido devem ser mantidas. TDD é ótimo. Mas não faz sentido você testar se zero é zero. Ou com tantos frameworks de mocking, você estar fazendo os testes na unha... Ou pior ainda: Testando métodos privados, violando o encapsulamento só pra isso. Desapega!

Se não tiver tampa, joga fora.

Ah a Cozinha! Que lugar divertido com todos os seus "tapau-uéri" (sic) multicoloridos e SEM TAMPA! A geladeira então? Um estúdio de física quântica. Afinal, no pote de sorvete pode ser sorvete ou feijão. AO MESMO TEMPO! A regra é: Não tem tampa? Joga fora. Doa pra alguma entidade ou alguém... Mas não deixa na cozinha. Potinhos de sorvete? Manda pra reciclagem.

Ah o código! Alguém já deve ter programado um PGH (Programação Go Horse) ou feito uma bela POG (Programação Orientada à Gambiarra). O problema desses "paradigmas" nós já conhecemos: Eles cobram um preço alto, além de se multiplicarem como coelhos. Ao migrar de sistema, esses pontos de "workaround" precisam ser revistos e re-analizados. Não dá pra você entrar na casa nova, com ela cheia de remendos. Faça direito dessa vez.

Uma janela quebrada chama outra pedra pra vidraça.

Vidro. Cristal. São lindos, mas sujam absurdamente. E você só percebe o quanto está sujo depois que lava. E a mudança é a melhor oportunidade de você lavar a cristaleira. Se você deixa tudo limpo de entrada, as chances de você continuar a limpar aumentam. Dá mais vontade de cuidar de algo limpo e organizado do que ter de lidar com o desafio de limpar 39429 copinhos de licor.

Mantenha o novo código limpo. Escreva testes unitários. Ninguém quer refatorar a unit de dez mil linhas. Mas refatora com prazer aquela com cem, duzentas. Você está com uma chance de ouro! Tem um software que será escrito do zero, já sabe o que tem de ser feito e como. Então foque no Clean Code, no Object Calisthenics, nos Design Patterns. Sim. Demora um pouco deixar tudo limpo, brilhando e cantando com o dedo molhado. Mas vale a pena. Quando chegar aquela SLA de 1 dia e você achar fácil o código e souber arrumar com velocidade, você vai agradecer pelo tempo investido. E lembre-se da teoria da janela quebrada!


Minha dica final é: A arrumação da casa não precisa ser chata. E quando se é um casal novo, é a chance de poder conhecer um pouco melhor o outro. Acredite: você vai encontrar coisas do arco da velha. Coloque uma música, faça piada, um pouco de bagunça. Sorria!
A mesma recomendação vale para a produção do software. Seu trabalho é onde você passa a maior parte da vida. Você não é uma engrenagem. É um ser humano, com relações, sonhos e necessidades. Viva enquanto está no escritório. Sorria. Divirta-se. Discuta. Aprenda. Ensine. Não deixe para viver apenas depois do expediente. Com a mente relaxada, o inconsciente criativo tem mais tempo para compilar aquelas soluções que você nem fazia ideia que poderia construir.

Sorria! É a melhor argamassa para construir o seu lar (e software).

Comentários

Postagens mais visitadas deste blog

Entregando no prazo com a Matriz de Dependência

Como ser um programador profissional? (ou como deixar de ser o sobrinho)

O lugar da mulher na TI