O desenvolvimento de software ainda é uma área recente, mas está amadurecendo nas últimas décadas e sendo influenciado por várias áreas, dentre elas a industrial. Mas há um debate se programar é algo artesanal ou se podemos criar uma “esteira de produção” para o desenvolvimento de software. Este artigo visa contribuir para tal debate!

O desenvolvimento de software era restrito a poucas pessoas até a década de 70, virou “profissão” entre 80 e 90, e a partir dos anos 2000 se tornou algo comum e essencial a muitas empresas. Nessa evolução percebemos que desenvolver software é muito mais do que apenas programar instruções que serão executadas no computador.

Programmers

Sendo uma área que ainda está em amadurecimento, a forma de se organizar e como pensar tem herança de outras áreas. A industrial foi uma das mais influentes embora os desenvolvedores tenham sido mantidos dentro de escritórios.

O fato é que muitas características e processos que utilizamos hoje, derivam da visão industrial, como algumas:

  • Esteiras de desenvolvimento.
  • Processos de validação e qualidade.
  • Separação forte de papéis e níveis hierárquicos.
  • Dress code focando em pessoas uniformizadas.
  • Horário fixo, com cartão ponto.
  • Manuais de programação do tamanho de bíblias.
  • Documentações de software burocráticas e extensas.
  • Projetos com grandes entregas de longa duração.

Todas elas foram relevantes e gostando ou não, elas são parte do processo de amadurecimento da área. Mas a pergunta que muitos fazem é: desenvolver software se encaixa em um modelo industrial?

Se considerarmos que nos últimos anos mudamos quase todas as questões citadas acima, parece que não!

Software não é uma composição de peças iguais e totalmente previsíveis, e esta é uma das grandes dificuldades para a geração de soluções em série. E embora exista um espaço para questionamento sobre essa afirmação, reflita sobre duas perguntas:

  • Você já viu softwares feitos por pessoas diferentes serem exatamente iguais?
  • Você já viu soluções resolverem um mesmo problema de forma exatamente iguais?

Mesmo que um software seja implementado para resolver os mesmos problemas, ao pegarmos 100 desenvolvedores separadamente, provavelmente teremos 100 softwares diferentes. Eles poderão até resolver de forma semelhante o problema, mas ainda assim sua composição e código certamente terão diferenças.

O fato então é: desenvolver software não é algo repetível, que gera peças iguais a ponto de possibilitar produção em série, e não pode-se confundir produção de software com distribuição de software, já que a distribuição de software é uma “cópia” dele e isso é algo fácil. E aí está outra grande diferença para o processo industrial, pois neste não há a fabricação de algo e depois as cópias são distribuídas, mas sim sempre é fabricado algo da mesma forma, repetidas vezes, e esse item fabricado é entregue ao cliente.

Estes motivos possibilitam afirmar que o desenvolvimento de software não se encaixa perfeitamente em um processo industrial!

Mas… Seria então o desenvolvimento de software um processo artesanal?

Para ajudar nossa linha de raciocínio, vamos considerar alguns aspectos:

  • Elaborar algoritmos que resolvam um problema é um processo criativo.
  • Codificar é uma atividade na qual escrevemos algo, essa escrita pode ser feita de muitas formas e em muitas linguagens.
  • Há momentos onde conseguimos escrever código facilmente e já em outros ficamos “travados”, e pouco código é escrito.

Pode-se comparar a atividade de programar a de escrever um livro, pintar um quadro, esculpir algo, compor uma música! Para muitos poderá parecer um exagero, mas é inegável que essa atividade requer inspiração.

Programar pode sim ser considerado algo artesanal!

Mas desenvolver um software não se trata apenas de programar e envolve atualmente muito mais coisas para que de fato tenhamos uma solução entregue aos clientes.

No artesanato, um dos princípios é produzir algo através de um trabalho manual, com baixa mecanização e muitas vezes de forma rudimentar, normalmente com poucas pessoas envolvidas. E produzir software atualmente, com todo conhecimento, tecnologias e ferramentas que temos não parece ser algo rudimentar, e muito menos que deva ser realizado totalmente de forma manual, principalmente quando temos times grandes.

Podemos concluir então que desenvolvimento de software não é um processo industrial, mas também não é totalmente um processo artesanal.

E chegamos então a uma outra questão simples: porque desenvolver software precisa ser um ou outro? Porque temos dificuldade em unir as boas técnicas e práticas deste dois modelos, ou até de outros?

Considerando as últimas décadas, temos total capacidade de entender o que funcionou e o que não funcionou no desenvolvimento de software, e devemos construir nosso próprio modo de trabalhar, que terá influências, mas que será único e inclusive pode influenciar outras áreas, como até já o faz. A indústria por exemplo já entendeu que vivemos em um momento onde as pessoas não desejam mais ter um produto exatamente igual, vivemos a era da personalização. E o software contribuiu para essa visão.

Como unir estes modos?

O principal ponto é entender que há momentos de criatividade e construção, os quais estão mais próximos de uma visão artesanal, e momentos de execução que seguem mais uma linha industrial.

Mas não há ainda um modelo definitivo que una esses dois modos, estamos vivendo o momento onde esse modelo está sendo construído, experimentado e validado. E há algumas dicas que contribuem para construção:

  • Entender o problema do cliente não é algo trivial, não será apenas identificar “qual parafuso está frouxo”. As áreas de produto e design vieram para complementar o desenvolvimento de software, indo além da programação e elas agregam muito valor quando levadas a sério. Então às vezes o problema não será apenas o “parafuso que afrouxou”, mas sim as condições que geram esse fato.
  • Elaborar uma solução, seja a nível de negócio ou técnico, arquitetar como ela será implementada e implementá-la certamente é a parte criativa no processo de desenvolvimento de software. O termo “artesão” se encaixa muito bem, e estão corretos aqueles que se definem como artesãos de software. Mas isso não pode ser confundido com fazer o trabalho de forma rudimentar, sem métodos, boas práticas e prazos. É importante entender que algo em um determinado tempo deverá ser entregue. A busca por fazer “uma obra prima”, pode fazer com que nenhuma obra seja entregue.
  • Integrar, testar e validar a implementação, seguidos de implantação e disponibilização do software ao cliente são as atividades que mais se aproximam do modelo industrial. O sucesso delas estará em seguir adequadamente as etapas definidas, e isso lembra a um esteira de produção.

As empresas de maior sucesso têm mostrado que é preciso se libertar de modelos mentais onde os clientes e usuários não são o centro das atenções. Para isso é preciso estar ciente que parte do processo de desenvolvimento de software é criativo, poderá ser impreciso, mas também precisará garantir entregas. Já outra parte do processo é a repetição de etapas, a qual pode sim se inspirar no modelo industrial, ou até em outras áreas de engenharia como apresentado em outro artigo.

Em todas as etapas de um processo de desenvolvimento de software o mais importante é estar atento para permitir o uso saudável e livre da criatividade unido a momentos onde deverá sim ser respeitado práticas e padrões que contribuem para qualidade e entrega confiável de software.

Quanto a nós desenvolvedores, podemos sim nos considerar artesãos, e no mundo de software isso representa mais profissionalismo, como apresentado pelo Manifesto Software for Craftsmanship.

Estar aberto para a união destes modelos é o primeiro passo para trilhar um novo caminho e adequado à realidade da área de desenvolvimento de software.


As imagem principal foi composta a partir de ilustrações de: Fundo vetor criado por macrovector - br.freepik.com e Developer Team Illustration by Delesign Graphics on Iconscout