É comum ouvirmos falar em Projetos de Software. Isto é principalmente comum nas chamadas “fábricas de software”. Este tipo de empresa se presta a disponibilizar um serviço de criação de software. O conceito é que o cliente quer um software, mas não sabe, ou não tem os recursos para o criar. Então, contrata a empresa para o criar. Este tipo de software criado por encomenda é conhecido como “Software on Demand”.Em inglês “on demand” é literalmente “sob demanda”, que traduzimos por “sob encomenda”. Outra expressão usada é “tailor made” , que literalmente significa “criado por um alfaiate” mas que traduzimos para “sob medida”. Os dois termos são diferentes: “sob encomenda”, significa que apenas quando há um interesse do cliente é que acontece o projeto. “sob medida” significa, não apenas que o projeto é sob encomenda, mas que o resultado é único e apenas válido para aquele cliente.A maior parte daquilo que uma “fábrica de software” faz é sob medida e não apenas sob encomenda.
Ao fechar o contrato com o cliente a empresa diz que fechou mais um “projeto de software”. Esta designação é simultaneamente certa e errada. É verdade que o que está sendo vendido é um projeto. Um projeto sob encomenda para a criação de algo. Até aqui não se distingue de um projeto para criar um móvel sob encomenda, ou um vestido sob medida. É verdade que o resultado final do projeto – o entregável (deliverable, em inglês) é um software. Mas será um “produto de software” ?
Se o cliente não detém nenhum software do mesmo tipo ou família e a empresa terá que começar do zero, no final teremos uma versão do software. Uma versão que podermos instalar e usar e irá realizar operações e ter funcionalidades tal como imaginado pelo cliente. Mas se o cliente já tem um software funcionando e ele só deseja um adendo ou incremento do software que já tem, então o projeto irá servir para aumentar as capacidades do software já existente. Em ambos os casos o projeto irá criar um incremento entregável do produto de software. Quando o software ainda não existe estaremos incrementando a partir do zero. Depois, estaremos incrementando a partir de uma base. O projeto contratado, portanto, é um “projeto de incremento de software”. Mas seria isto diferente de “projeto de produto de software ?” . Sim.
O Produto de Software é simultaneamente um conceito abstrato e de marketing (/comercialização). O que chamamos apenas de “software” é a realização desse conceito. É o artefacto que realmente pode ser utilizado. Por outro lado este artefato utilizável é comercializado ( na realidade a sua licença o é) e como tal é considerado um produto, no sentido de mercado. Quando falamos do pacote Office, do WordPress ou do windows falamos em “produtos de software”, mas realmente queremos dizer “artefacto de software que é comercializado”, ou simplesmente “bem de software”. “Bem” é genérico para produto ou serviço que é comercializado. O artefato de software em si mesmo é um serviço porque seu uso ( consumo) não o gasta. Dai ser fácil prover software como serviço (SaaS)
O Produto de Software é o conceito por detrás destes bens. O pacote office, por exemplo, já enfrentou diferentes modificações ao logo do tempo, tanto em funcionalidade como em aparência e facilidade de uso. São mais de uma dezena de versões, de artefatos, de bens de consumo, mas apenas um produto. O mesmo poderia ser dito do worpress , por exemplo, ou qualquer outro produto de software. Infelizmente as palavras e a forma como falamos confundem – propositalmente – o conceito de produto de software e bem de software.
Voltando à nossa “fábrica de software”. O nome “fábrica” vem desde conceito de que o software é um bem que é construído. Em particular construído em serie. Ora, um artefato de software só é construído uma vez (pelo compilador). Ele pode ser copiado várias vezes e distribuído em diferentes mídias. O que não ha é uma fabricação em série de um software, apenas distribuição em série.A expressão “fábrica de software” é tão errada quanto “fábrica de casas” ou , “fábrica de navios”, ou “fábrica de pontes”. Embora estas coisas sejam construídas, elas são construídas não apenas sob encomenda ( on demand) mas também sob medida. Uma ponta só existe para ligar dois pontos específicos no mundo. Não existem dois navios iguais, mesmo que construídos com base no mesmo modelo. E o mesmo é verdade para casas. Os locais onde estes artefatos são construídos chama-se normalmente estaleiros ( ou canteiro de obras), não fábricas. A diferença é que não se trata de um processo em série, e cada artefato é único e diferente dos outros, mesmo que seguindo um mesmo modelo base. A expressão “estaleiro de software” seria mais apropriada. Contudo, a expressão aceite contemporaneamente é “oficina de software”.
Do outro lado da moeda temos empresas que desenvolvem produtos de software com base do seu negócio. Os e-comerce e os sites de bancos são exemplos. Estes produtos não apenas estabelecem um canal para o negócio, eles fazem ou quebram o negócio. Nesta categoria temos ainda aquelas empresas cujos produtos de software são o seu negócio. O uso dos bens de software produzidos são licenciados e a renda é utilizada para incrementar e evoluir o mesmo produto e/ou original novos produtos que se relacionem ao primeiro. O exemplo clássico é o, já mencionado, pacote Office da Microsoft.
O que é então o Produto de Software ? É um conjunto de ideias , diretivas e relações que ajudam o utilizador em alguma tarefa, são realizadas como um artefato de software e comercializadas como um bem de software. A principal característica de um produto é o conjunto de funcionalidades e capacidades que já estão integradas no bem de software e nas funcionalidades e capacidades ainda a serem integradas. Os bens de software que são gerados são apenas incrementos – versões – do produto. Isto é fácil de notar numa nomenclatura clássica para versões de [artefatos] de software de três algarismos. Por exemplo, sabemos que a versão 3.0.1 do software contém mais funcionalidades ou capacidades que a versão 2.9.0 e que os incrementos da versão 3.0.1 para 3.0.2 aconteceram apenas para corrigir falhas ou erros e não existiram alterações na funcionalidade.
O incremento do software não necessariamente resulta em uma nova versão. Vários incrementos podem ser agrupados para montar uma versão; ou mais propriamente uma Publicação (em inglês, release).
O incremento do software é uma atividade que transforma ideias, diretivas e outros conceitos abstratos em um artefato de software concreto, real, e funcional. Normalmente cada incremento é feito por uma razão (comercial, técnica, ou de outro tipo) e portanto contém um objetivo. Guiar um conjunto de pessoas a alcançarem esse objetivo sob determinadas condições e restrições é que forma um Projeto.
Um produto de software é transformado em um bem de software através da execução continuada de projetos que transformam conceitos abstratos em artefatos de software.
No meu ultimo post falei sobre o Gerente de Produto e o Gerente de Projeto. Mas acho que o assunto não fica completo sem falar o que é um Produto, o que é um Projeto e a diferença, e a relação, entre eles.
É comum as empresas focarem no aspeto ‘projeto” e esquecerem o aspeto “produto” e chegarem no fim do projeto com um artefato de software que simplesmente não é o que haviam concebido.
É necessário entender que existe esta dualidade e que um excelente bem de software só se alcança se o produto de software for excelente e o processo de realização dos incrementos for excelente. Se um falhar, tudo falha.