Uma das questões mais discutidas e polêmicas das empresas de TI é a produtividade. O tópico é um dos conceitos fundamentais da Administração, que teve boa parte deles cunhados antes da Revolução Industrial. No mundo do desenvolvimento de software, atualmente, poucas empresas formalizam um controle de produtividade, e muitas sequer dedicam energia à discussões sobre o tópico. Nenhuma consegue controlar ou prever sua produtividade de forma 100% assertiva. A indústria automotiva, por exemplo, consegue. Então, por que os conceitos de Administração funcionam para a indústria automotiva e não para o mundo digital?
O que é produtividade?
Produtividade é a medida média da eficiência de produção. Pode ser expressada pela razão entre produtos gerados e recursos utilizados no processo de produção. A diferença entre o valor dos produtos gerados e o valor dos recursos utilizados representa a receita gerada pelo processo de produção.
Na indústria, os recursos utilizados e os produtos gerados pelo processo de produção são completamente tangíveis e mensuráveis, como as peças de um carro, as máquinas da linha de montagem e o esforço manual das pessoas que nela trabalham, e os carros que são produzidos periodicamente pela fábrica. No desenvolvimento de software, tanto entrada quanto saída são intangíveis: o conhecimento usado para se desenvolver um software, e a ideia do software que deve ser desenvolvido. Por mais que uma empresa já tenha experiência em produzir software sob demanda para um determinado nicho de mercado, como consultorias e fábricas de software, sempre haverá 2 vertentes de incerteza latentes a serem administradas: a incerteza sobre o negócio, e a incerteza sobre a tecnologia. Ambas podem ser amenizadas com a contratação de especialistas, mas a prática acaba se mostrando ineficiente devido ao alto custo destes profissionais e a um fator que aumenta ainda mais as 2 vertentes de incerteza: a necessidade específica da empresa para a qual estou trabalhando.
Algumas pessoas podem argumentar: Mas a SAP e a Salesforce conseguem um grau de previsibilidade elevado. SAP e Salesforce possuem seus próprios produtos, e construíram um negocio ao redor deles. Ou seja, eliminaram quase que por completo a incerteza sobre tecnologia. Completando, normalmente as empresas que compram seus produtos precisam adaptar seus processos de TI, financeiros, logísticos, etc. Desta forma, a incerteza sobre o negócio é compartilhada entre cliente e fornecedor, e na maioria das vezes SAP e Salesforce são favorecidas pelos processos desenvolvidos em seus produtos.
As empresas que fornecem seus serviços essencialmente através da internet, como Evernote, Mint e Facebook, que fornecem autonomia total para que o usuário se cadastre no produto ou cancele seu cadastro, não são consideradas neste tipo de equação, e precisam considerar a questão da produtividade de uma outra maneira, que já vamos discutir.
Por que medimos produtividade?
Para que possamos construir uma melhor utilização da produtividade no desenvolvimento de software, precisamos, primeiro, entender a necessidade da medição de produtividade. Basicamente, medimos produtividade para saber se vamos conseguir atingir um objetivo. Tangibilizando, se eu preciso construir 100 carros em 1 mês, e ao final da primeira semana eu construí apenas 10 carros, a minha produtividade está mal. Então, assim que percebemos algum problema no processo de produção dos carros, seja ao final da primeira semana ou antes, resolvemos à fim de cumprir o nosso prazo. Quanto mais granular é o controle de produtividade, mais rápida é a detecção de problemas na linha de produção. E mais assertiva é a noção do prejuízo na saída que os problemas causarão, ou que manobras devem ser feitas para que não haja prejuízos. Nestes casos, os mais diversos problemas podem aparecer: problemas com peças, com máquinas, com pessoas, etc.
Na indústria, os operários de qualquer fábrica são meros repetidores de um processo de produção que já foi pensado e otimizado para que seja rentável. Logo, há uma variabilidade maior de fontes de problemas, que vão além das pessoas, e a substituição de operários é muito facilitada devido à simplicidade do trabalho. Desta forma, todo o processo de produção pode ser cronometrado, problemas detectados rapidamente e as saídas são completamente previsíveis. Daí vem a defesa de Taylor de separar (departamentalizar) funcionários que “pensam” (gerentes) de funcionários que executam (operários). À época, as linhas de produção eram pensadas e monitoradas pelos gerentes, e os operários apenas executavam a chamada “operação-padrão”, que são as normas que determinam como a linha de produção deve funcionar para que seja viável e rentável.
No desenvolvimento de software, não há uma linha de produção, não há repetição de processos de desenvolvimento em larga escala e baixo nível e não há previsibilidade completa das saídas dadas as entradas. Por mais que se tente melhorar a produtividade atraveś da escolha de certas linguagens ou da componentização, só há 1 vertente de incerteza sendo aliviada: a incerteza sobre a tecnologia. Então, como lidar com produtividade na era digital?
A produtividade na era digital
Primeiro, vamos listar as motivações para discutir produtividade no meio digital. Existem estas 2 possibilidades:
- Precisamos saber se vamos cumprir um prazo ou objetivo;
- Precisamos identificar quem produz mais e quem produz menos;
Mas, em desenvolvimento de software, o que é produzir? Não necessariamente estou produzindo mais (e com qualidade) se escrevo mais linhas de código. Não necessariamente estou produzindo corretamente se sigo um cronograma à risca. Não necessariamente estou deixando meu cliente satisfeito se entrego X pontos de função por quinzena. Não necessariamente estou produzindo com qualidade se entrego Y user story points por semana. Se na indústria alta produtividade é manter uma linha de produção funcionando perfeitamente, de acordo com as normas estabelecidas para o seu funcionamento, o que é produtividade em um ambiente complexo que mais se aproxima do artesanato do que de uma linha de montagem? O que é produtividade no trabalho criativo, ou no trabalho que exige criatividade; completamente diferente dos operários do século XIX?
No desenvolvimento de software, é insuficiente determinar a produtividade somente pela medição da quantidade de saídas de um determinado processo de desenvolvimento. Arrisco dizer, inclusive, que é perda de tempo discutir sobre produtividade em desenvolvimento de software, se a discussão for pautada nos conceitos tradicionais. Digo isso por alguns fatores como:
- Não há, em software, um processo de produção em massa replicável com saídas idênticas;
- Software é, essencialmente, a automatização de um processo pre-existente. Consequentemente, não há entradas controláveis, o que gera incerteza sobre as saídas;
- Há criatividade envolvida no processo. Consequentemente, nem sempre manter–se produzindo 100% do tempo é a melhor forma de produzir;
- Em um processo criativo, experimento é mais relevante que assertividade;
- É impossível normatizar uma “operação-padrão” para desenvolvimento de software.
Podemos listar diversos outros fatores. A questão é: como saber se a minha equipe de desenvolvimento de software é produtiva? Primeiro, eu substituiria o termo “produtividade” pelos termos “qualidade” e “disponibilidade”. E a pergunta, então, seria: como saber se a minha equipe de desenvolvimento de software produz software de alta disponibilidade com qualidade? Podemos nos fazer estas perguntas:
- O software que minha equipe produz está disponível para uso a qualquer momento?
- Qual a taxa de bugs por funcionalidades disponíveis?
- Minha equipe tem um perfil ativo?
- Minha equipe possui os profissionais especialistas-generalistas necessários para cumprir sua missão?
- Minha equipe tem os melhores equipamentos e ambiente possíveis e coerentes para que não tenha obstáculos?
- O software desenvolvido é facilmentte escalável (caso seja um requisito)?
- O software desenvolvido é seguro (caso seja um requisito)?
Se a resposta a todas estas perguntas for positiva com louvor, há grandes chances de você estar trabalhando com uma equipe de alta produtividade. Do contrário, há grandes chances de você ter uma equipe de baixa produtividade. Repare que o foco em quantidade da era industrial se transforma em foco em disponibilidade na era digital. Qualidade é indiscutível (ou, pelo menos deveria ser). É cada vez mais latente no mundo digital que a escalabilidade de um negócio digital está ligada à sua alta disponibilidade, segurança e qualidade. Porque se o software é útil e relevante, por menor que seja, o céu é o limite para a aquisição de novos usuários ou clientes. Bem diferente do senso comum de bem pouco tempo atrás, onde o mais importante era vender contratos de muitas horas de desenvolvimento de software ou vender software com um número enorme (e por vezes desnecessário) de funcionalidades sem conseguir fornecer o suporte necessário para a sua utilização e posterior evolução, o que levava à estagnação, abandono e irrelevância da solução.