Unidades de Medida e Composição de Preço do Software
Precificar um produto ou serviço é uma tarefa relativamente simples.
Basicamente, trata-se de somar custos de produção + impostos + margem de lucro e o valor final é o preço a ser cobrado pelo produto ou serviço.
Em algumas áreas existe um fator adicional que são as Unidades de Medida utilizadas para compor o preço.
Quando falamos de água temos o metro cúbico (m³), em energia elétrica temos o kilowatt (kW), em construção civil temos o metro quadrado (m²).
Na área de software temos algumas Unidades de Medida que utilizamos para dar tamanho ao software, dentre as quais temos o Ponto de Função (PF) como uma das mais utilizadas.
Descobrir o custo para fechar o preço do sistema
No segmento de métricas e estimativas sempre fazem a seguinte pergunta: “qual o valor do ponto de função?”.
A finalidade é obter a resposta para utilizá-la como referência ou base para definição do valor do ponto de função a ser cobrado em algum projeto.
Mas essa pergunta não tem uma resposta simples. Mas infelizmente muitas empresas acreditam que tem.
Se a empresa XYZ cobra R$ 800,00 por um ponto de função, isso significa que a empresa ABC deve cobrar o mesmo valor?
Isso se aplicaria somente se todas as variáveis para composição de preço fossem iguais nas duas empresas, o que na vida real, é quase impossível.
O preço (valor) de um Ponto de Função, excetuando os impostos e margem de lucro, é calculado com base no custo de se produzir o Ponto de Função.
O mais importante antes de se pensar no valor a cobrar por um Ponto de Função é entender “em todos os detalhes” quanto custa produzir um ponto de função. O “todos os detalhes” é a parte mais crítica, e onde mora um cupim de margem de lucro de muitas empresas de software.
Definir o custo de produção do Ponto de Função
Outra pergunta muito comum é: “qual a produtividade do ponto de função em C#?”, ou “qual a produtividade do ponto de função em Java?”.
A finalidade é obter a resposta para utilizá-la como referência ou base para definição da produtividade para produção do ponto de função em alguma linguagem de programação específica.
E isso também não tem resposta simples.
A produtividade para se produzir um ponto de função não pode ser medida tendo-se como base apenas a linguagem de programação utilizada.
Se a empresa XYZ consegue produzir um ponto de função utilizando C# em 8h, isso não significa que a empresa ABC conseguirá produzir um mesmo ponto de função em 8h.
Fatores que precisam ser avaliados
- Arquitetura do software a ser produzido (utilização de ORM, camadas e padrões de projeto aplicados etc.).
- Utilização de framework para construção (frameworks proprietários [não framework .net ou JDK por exemplo]).
- Perfil da equipe envolvida no projeto (quantidade de profissionais conforme experiência [júnior/pleno/sênior]).
- Segmento de negócio para o qual o software está sendo produzido (ERP para bancos tende a ser algo bem mais complexo que ERP para Posto de Gasolina).
- Nível de acesso ao cliente (agilidade no acesso ao cliente para tirar dúvidas, validar especificações etc.).
- Metodologia aplicada ao ciclo de vida do projeto (Waterfall ou Iterativo/Incremental, por exemplo).
- Modelo organizacional ao qual o projeto foi submetido (desenvolvido internamente, contratação de fábrica de software etc.)
- Produto final do projeto (primeira versão de um software, projeto de melhoria, customizações etc.).
Como então definir o valor do Ponto de Função?
A melhor maneira é descobrir quanto custou o Ponto de Função em projetos semelhantes. Isso é possível com análise de base histórica.
Não havendo base histórica de projetos, o melhor a fazer é:
- Identificar os projetos semelhantes produzidos pela empresa.
- Levantar a quantidade de horas gastas (esforço realizado) em cada projeto.
- Identificar as variáveis de cada projeto (linguagem de programação, nível de senioridade da equipe, segmento de negócio que o sistema atendeu, banco de dados utilizado, arquitetura etc.).
- Levantar o custo de cada projeto.
- Realizar uma contagem de pontos de função atualizada de cada projeto.
- Dividir o total de pontos de função pelo custo do projeto.
Se não há como extrair tal histórico a saída é tentar avaliar todas as variáveis envolvidas com o máximo de cuidado possível, e obter parâmetros de mercado, estimar a produtividade viável para o projeto, e então calcular o risco.
E partir do primeiro projeto, começar a montar a base histórica!
E se o valor do Ponto de Função for estabelecido pelo cliente?
Isso é muito comum em contratos de governo, por exemplo.
Neste caso, a avaliação sobre vender ou não o projeto é fundamental.
Se for vendido, deve-se adequar a realidade do projeto ao valor do ponto de função estabelecido pelo cliente, visando obter-se a maior produtividade, para que o custo de produção seja o mínimo possível e margem de lucro a maior possível.
/* Eu já vi empresas assumirem projetos de porte significativo – 3000 pontos de função por exemplo – e no meio do projeto arrependerem-se amargamente de vender o projeto. Muitas das vezes quem vende o projeto e fixa o valor do ponto de função não considera que um valor muito baixo inviabiliza o fornecedor de realizar uma entrega, e isso nunca dá coisa boa. */
Obs.: tão importante quanto o cuidado na definição do ponto de função é saber realizar a métrica com a maior acuracidade possível. De nada adianta saber calcular-se o valor do ponto de função com qualidade, se os pontos de função foram calculados incorretamente. Para reflexão, veja a importância de uma métrica bem feita.
Concluindo
Salvo quando o valor do ponto e função é pré-estabelecido pelo cliente (sem margem para negociação), não deve haver um valor único para todos os projetos.
Cada projeto é singular, e todo cuidado é pouco na definição do preço a ser cobrado. Procure sempre garantir a melhor concepção possível do software, fazer toda a diferença para um negócio mais justo para todas as partes.
Abraços!