O desenvolvimento de software por serviços de IT está hoje associado a diversos tipos de modelos de entrega. Para os abordarmos é fundamental conhecer os diferentes modelos de desenvolvimento de software e as formas de contratação de serviços, visto que se encontram intimamente ligados.
A premissa “nem só de código vive um projeto de software” é um daqueles pressupostos, quase bíblico, que qualquer comprador ou implementador de software deveriam ter por base. Isso evitaria expetativas desajustadas e asfixias contratuais.
Muitas vezes a implementação de software é feita de forma básica, sem seguir qualquer regra e, no final, o software até funciona. Mas podemos afirmar que esse software cumpre os melhores padrões de qualidade? E está adequado do ponto de vista de usabilidade e manutenção futura?
A produção de software é uma atividade de enorme complexidade, que envolve importantes grupos de interessados (stakeholders) que precisam de soluções para resolver uma necessidade de negócio.
É uma atividade onde existe um elevado grau de incerteza (risco) e as alterações no âmbito e nos prazos de entrega podem ser inevitáveis.
Modelos de Desenvolvimento de Software
Desde a década de 70 que os grandes fabricantes de software perceberam que a sua produção teria maior sucesso, seria mais rentável e reduziria riscos se utilizasse modelos-padrão comprovados em outras indústrias.
Da compreensão de que a engenharia de software não se resume apenas à codificação, existindo outras disciplinas a contribuírem de forma decisiva para a produção de software, nasceram as primeiras metodologias que tinham por base um conjunto sequencial de atividades (Modelo Waterfall).
Existem também Modelos Iterativos, como a framework RUP (Rational Unified Process) propriedade da IBM, que preconiza uma sequência de etapas pré-definidas:
No entanto, esta framework permite que o desenvolvimento ocorra de forma interativa e incremental, o que diminui a complexidade da integração, reduz custos e aumenta a sua eficácia.
As ineficiências e fragilidades das abordagens clássicas abriram caminho ao aparecimento de metodologias ágeis. Estas possuem ciclos de desenvolvimento mais curtos e, consequentemente, mais iterativos. Permitem também maior flexibilidade na gestão do âmbito e são menos pesadas do ponto de vista documental que o Waterfall Model.
Acima de tudo, introduzem uma nova dinâmica de projeto e envolvimento do cliente focada totalmente no valor para o negócio. Nasce assim o Agile Software Development que, tal como aconteceu nas metodologias clássicas, com o passar do tempo deu origem a vários processos de desenvolvimento, como o RAD, SCRUM ou XP.
Ao mesmo tempo, é possível resgatar técnicas e modelos mais antigos, como o LEAN e KANBAN, que podem ser acoplados ao processo ágil.
As metodologias ágeis trazem várias vantagens:
- Ciclos de implementação mais curtos;
- Entregas bem definidas em função da prioridade para o negócio;
- Foco no alinhamento da equipa e na melhoria contínua.
Passa a ser mais fácil ao cliente identificar desalinhamentos logo numa fase embrionária do desenvolvimento e as equipas têm também maior flexibilidade para alterações, sem comprometer o objetivo final de cada iteração.
No entanto, a aplicabilidade da metodologia ágil pressupõe a existência de um conhecimento mútuo sobre os seus princípios, fundamentos e rituais, bem como uma significativa maturidade organizacional.
Contratação de Serviços
Os modelos mais utilizados no mercado português para a contratação de serviços de desenvolvimento de software, são os Fixed-Price e os Time and Materials.
-
Contratos Fixed-Price
Mais conhecido como contratos “chave-na-mão”, o valor é estipulado pelo fornecedor, com base no âmbito, esforço e risco do projeto. Neste caso, o risco e controlo de custos são da exclusiva responsabilidade do fornecedor.
-
Contratos Time and Materials
Neste caso, é definido um preço por hora e uma estimativa temporal do projeto. Estes modelos são tipicamente utilizados na contratação de projetos quando o âmbito não é totalmente conhecido. O risco e a gestão da execução são controlados pelo cliente.
Nas abordagens clássicas, como o Waterfall Model, pode fazer sentido um contrato Fixed-Price, mas as metodologias ágeis são, por definição, incompatíveis com estes modelos de contratação. Apesar de o mais adequado ser um contrato Time and Materials, coloca grandes desafios ao cliente, abrindo a porta a modelos de entrega ágil com partilha de risco.
Modelos de Entrega para Projetos de Desenvolvimento de Software
Basicamente, os Modelos de Entrega são a combinação consentânea entre Modelos de Desenvolvimento de Software e os tipos de Contratação de Serviços.
- Quando o âmbito do projeto está bem definido, há um orçamento fechado e uma duração fixa, será apropriado um Modelo de Desenvolvimento Waterfall ou Iterativo com um Contrato Fixed-Price. Esta é uma boa solução para quando o cliente não pretende assumir riscos.
- Se o âmbito, duração e orçamento não forem conhecidos à partida e o cliente tiver capacidade para gerir e assumir a totalidade do risco, então é recomendado um Modelo de Desenvolvimento Ágil suportado num Contrato Time and Materials.
Modelos de Entrega com Partilha de Risco
Para os clientes, os benefícios dos Modelos de Desenvolvimento Ágeis é inequívoco e reconhecido. No entanto, havia necessidade de encontrar um meio-termo no que respeita à partilha de risco.
Surgiram então modelos que contribuem para promover a confiança, flexibilidade e alinhamento de objetivos entre clientes e parceiros de implementação.
- Modelo People-Driven – Modelo de equipas fixas (Squads) e autónomas, organizadas em Tribes ou Guilds. Este modelo conjuga Agile com contratos Time and Materials. Há uma partilha de risco em termos da velocidade contratada e do tamanho da equipa no projeto.
- Modelo Output-Driven – No modelo Output-Driven, o cliente contrata uma certa velocidade de entrega e cabe ao fornecedor do serviço garantir que é cumprida. No final de cada intervalo de tempo (Sprint), o cliente valida e paga o produto entregue.
Um projeto de software vai muito para além da tecnologia
Existe um conjunto de linhas orientadoras para ajudar a encontrar o melhor modelo de entrega para projetos de desenvolvimento de software. Há que considerar o nível de partilha de risco e as metodologias usadas.
A expressão “nem só de código vive um projeto de software” deve agora fazer mais sentido. As linguagens de programação, bases de dados e sistemas operativos são, sem sombra de dúvida, importantes, mas não determinam o sucesso de um projeto de IT. É redutor circunscrever a implementação de um projeto de software apenas à tecnologia.
SABER MAIS SOBRE A NEXLLENCE