Reza a lenda que certa vez, uma grande empresa, dona de uma grande e moderna máquina, da qual dependia toda a sua produção, subitamente enfrentou um grave problema: essa máquina parou e não haviam técnicos na empresa para concertá-la. Foi então que contrataram um famoso engenheiro mecânico para pôr essa preciosa máquina para funcionar.
Como não sabia exatamente qual a origem do problema, nem como poderia concertá-lo, o engenheiro não disse de imediato o valor do seu trabalho. Faria isso após o concerto ser realizado.
Já chegando, deparou-se com um imenso painel repleto de milhares de parafusos que faziam a regulagem da máquina. Após ouvir atentamente o relato dos operários e de analisar por alguns minutos o painel, o engenheiro pediu uma chave-de-fenda e apertou 3/4 de volta um dos para fusos. Nesse instante, a máquina voltou a funcionar.
Após calorosos aplausos, o diretor-presidente da empresa perguntou quanto deveria pagar ao engenheiro, no que este respondeu: R$ 10.000,00.
Com os olhos arregalados, o diretor-presidente pergunto por que um valor tão alto se o engenheiro havia apenas apertado um parafuso.
A resposta do engenheiro foi categórica: "R$ 1,00 pelo aperto no parafuso e R$ 9.999,00 por saber qual parafuso apertar e quanto apertar".
Então. Você, desenvolvedor/programador, sabe o quanto cobrar pelo aperto no parafuso e por saber quanto e qual parafuso apertar?
Como vimos na estória acima, tão importante quanto realizar o trabalho, é saber como realizar o trabalho de forma que os melhores resultados sejam alcançados.
Quando o tema é precificação do trabalho de desenvolvimento/programação, é comum constarem como variáveis a serem consideradas apenas os materiais gastos, viagens para a sede do cliente, horas de trabalho dos programadores. Entretanto estas não são as únicas variáveis a serem consideradas.
Também devem ser consideradas questões como o suporte desejado pelo cliente quando a aplicação estiver em funcionamento, o treinamento necessário para utilização do sistema e a vida útil esperada e a necessidade de atualizações do sistema.
Um software, por mais simples que ele seja, é como um filho: vai exigir cuidados constantes, atualizações, correções e vinculará o seu desenvolvedor eternamente aos seus usuários. Portanto, o suporte ao cliente é uma variável fundamental para estabelecer o preço do trabalho realizado.
Questões como a maneira de se oferecer suporte (internet, telefone, viagens até o local, e-mail, etc) influenciam diretamente no valor do serviço.
O treinamento necessário também é outra questão que deve ser considerada na precificação do serviço de desenvolvimento. Quantas horas de treinamento serão necessárias? Onde ele será realizado? Para quantas pessoas? Todas estas questões devem ser corretamente dimensionadas para evitar que um projeto que espera-se que resulte em lucro, não se torne numa fonte de estresse e de prejuízo para o programador.
A vida útil do sistema é uma variável que poucos se preocupam, porém de grande utilidade, principalmente no momento da negociação com o cliente.
Entende-se por vida útil o tempo em que o sistema poderá ser utilizado pelo cliente sem se tornar obsoleto quanto as tecnologias utilizadas.
Quanto maior esse tempo, maior é a valorização que o programador obtém pelo seu trabalho, uma vez que o cliente não precisará gastar tão cedo com um novo sistema.
Também deve-se considerar a necessidade de atualizações constantes, já que isso significa mais custos no pós-implantação do sistema. Um software destinado a executar rotinas fiscais requer muito mais atualizações do que um software de workflow, por exemplo, em virtude das constantes mudanças na legislação fiscal, e isso deve ser considerado no momento da negociação de preço com o cliente.
Por fim, e não menos importante, a complexidade do sistema deve ser considerada também para a sua precificação, em virtude de que, quanto mais complexo for o software, mais complexa é a sua atualização, rastreamento e correção de erros e maior é o risco de que estes erros aconteçam.
Assim, ao negociar o valor a ser cobrado por determinado projeto, o programador deve considerar os seguintes fatores, além da sua margem de lucro:
- Custos diretos, tais como horas trabalhadas (com base nos salários pagos àqueles diretamente envolvidos no projeto), material a ser utilizado, viagens, telefone e todos os demais gastos que podem ser quantificados e ter quantidades atribuídas aos projetos de acordo com a utilização de cada recurso por cada projeto.
- Custos indiretos: eletricidade, aluguel, internet e todos os custos que não podem ter quantidades diretamente atribuídas a cada projeto, ou seja, sabemos que cada projeto ocupou um pouco de eletricidade, mas não sabemos quanto de eletricidade foi gasto com cada projeto, sendo necessário utilizar critérios de rateio para atribuição dos custos.
- Custos pós-execução: são custos estimados de suporte, treinamento, periodicidade de atualizações e bônus pela vida útil do software.
Para maiores detalhes sobre a atribuição dos custos indiretos e de pós-execução, aconselho a leitura de trabalhos sobre formas de custeio, principalmente o Custeio ABC.