Uma carta aberta sobre o desenvolvimento de software profissional

Caio Vaccaro
Sep 4, 2017 · 5 min read

Nós seres humanos temos um problema inato com a comunicação, existe uma grande distância entre o que sentimos e pensamos, até o que falamos e os outros entendem.

Comunicação

O que fazemos com a linguagem falada e escrita, no máximo traz aos ouvintes e leitores uma aproximação do que o emissor quer passar. Nosso próprio pensamento foi moldado através da cultura do país onde nascemos, mas também por toda a experiência de vida que tivemos até então. Quantas vezes as palavras que escolhemos rapidamente durante a fala parecem não serem 100% aptas para representar o que está sendo dito?

Programar é sobre tentar transformar uma idéia (abstrato, intangível) em algo exato, mais exato impossível. Afinal, é uma máquina que vai ler o que for programado, no fim transformando as instruções nas famosas sequências de zeros e 1s.

Programar é colocar à prova todas as inconsistências naturais da comunicação. Uma representação simplista do que acontece no mundo profissional, seria assim:

Há quem diga que bom desenvolvimento de software é uma das coisas mais difíceis do mundo.

Complexidade

Ser difícil pode ser análogo a ser complexo. O conceito de complexidade pode ser demonstrado dessa maneira:

Usando essa fórmula, a complexidade de uma idéia, só pela dificuldade de comunicação na figura acima, seria de 24. Cada vez que uma equipe participa de uma reunião por exemplo, a comunicação acontece em todas essas direções.

Unidades de negócio

Muito raramente uma idéia vêm de uma pessoa só. Quem quer que seja o interlocutor, muito provavelmente participa de uma estrutura maior. É inevitável, todos participamos de um organismo, quer seja uma empresa, um grupo de amigos, a própria família, ou mesmo um contexto como o país onde você vive. Podemos revisitar a primeira imagem, imaginando uma possível estrutura:

Uma ideia (abstrata, que pode vir a se manifestar em um produto ou serviço) é interdependente com o contexto de onde ela surgiu. Por isso, é muito provável que ela vá atender demandas de diversos “setores” diferentes.

Multiplicando a complexidade de comunicação, pelas unidades e camadas envolvidas, temos 408.

Linhas de tempo

Quer você queira ou não, a internet é extremamente recente. Por mais que a maioria dos conceitos base permaneçam, a tecnologia envolvida evolui constantemente e exponencialmente.

Da mesma maneira que uma ideia é interdependente com o seu contexto, esse contexto por sua vez depende em algum nível de outros sistemas. Qualquer projeto, tem pelo menos 3 linhas de tempo: legado, atual e futuro.

Mesmo que seja um produto novo, é quase impossível este não depender de algum outro serviço ou sistema. De alguma maneira, existe o que foi feito no passado e já está ultrapassado (não necessariamente ruim, mas que não permite os benefícios que viriam se fosse refeito hoje), o projeto atual que de alguma forma ainda depende do passado, e pelo menos uma idéia de uma nova arquitetura futura.

Vamos multiplicar o que vimos até aqui por três. Complexidade: 1.224.

Tecnologia

Cada sistema, serviço ou tecnologia, depende também de uma série de outras coisas:

Cada uma dessas tem novas versões, bugs, e sofrem as mesmas influências que falamos anteriormente.

Complexidade 11.116.

Mudança

Ecossistema

Mesmo parecendo que um projeto só existe no mundo das idéias, ele existe no nosso contexto, regido pelas suas limitações. Há certas coisas que provavelmente não vão mudar, mas que se mudassem alterariam bastante o que quer que você desenvolva, como o número de horas em um dia, o calendário gregoriano, ou se as pessoas trabalham de dia ou de noite por padrão. Mas outros fatores podem mudar e muitas vezes mudam.

Uma mudança no mecanismo de um país, em um acordo político, uma determinada nova lei, um novo acordo comercial entre as empresas envolvidas, pode criar uma nova necessidade que vai influenciar o seu projeto.

Se você considerar toda essa interdependência, e sabendo que cada idéia e tecnologia sofre as mesmas influências de comunicação e múltiplas linhas de tempo, seria muito inocente pensar que as coisas não vão mudar durante o desenvolvimento de um projeto.

Satisfação

Esse artigo é um humilde pedido a todos os envolvidos com software, não só desenvolvedores, mas gestores também. Para todos que de alguma forma trabalham com desenvolvimento de software profissional: é melhor não lutar contra a mudança, mas saber trabalhar com ela.

Programar é muito bom, dá uma sensação de empoderamento e controle, em ciclos rápidos de feedback que mantém milhões de desenvolvedores como nós programando por muitos anos.

Mas tenha em mente que desenvolvimento profissional é diferente. Se a programação acabar virando o reflexo do seu mundo interno, onde você gostaria de ter controle absoluto e que tudo fosse perfeito, você sempre ficará frustrado. Ao invés de gastar uma energia tremenda se revoltando com mudanças inevitáveis, é melhor abraçá-las e focar no crescimento pessoal e profissional.

Ludolf Backhuysen, — Christ in the Storm on the Sea of Galilee

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade