No século XX tínhamos as 8 leis da evolução de software, criadas por Meir Lehman na década de 70, uma abordagem condizente à época, não falava de pessoas, detinha-se a uma abordagem técnica. Por 30 anos a Lei de Lehman esteve para o Software do século XX assim como a Lei de Moore esteve para o hardware (duplicação da densidade de transistores a cada 2 anos).

Somente no final do século XX algumas empresas e profissionais de software perceberam a necessidade de uma abordagem mais humana, o software deixou de ser algo restrito a grandes empresas, adquiriu relevância estratégica à todas as empresas e disseminou-se em todos os momento da vida das pessoas. Tornou-se mais interativo, envolvente e sofisticado, exigindo uma abordagem mais holística.

Século XX - As 8 Leis de Lehman sobre evolução de software

A Lei de Lehman é uma fonte histórica de bom senso em software, Meir Lehman nasceu na Alemanha e transferiu-se para a Inglaterra na década de 30, trabalhando na IBM entre 1964 e 1972. Em 74 publicou o que seria mundialmente conhecido como as “Leis de Lehman sobre evolução de software” para sistemas do tipo E ou E-Programs.

Sistemas do tipo E são os softwares desenvolvidos para resolver problemas do mundo real, operados por pessoas que se beneficiem deles em seu dia-a-dia. Seus primeiros estudos em sistemas para OS-360 ficaram conhecidos como “leis de Lehman” porque eram generalizáveis e aplicáveis a diferentes contextos na tomada de decisão, planejamento, desenvolvimento e manutenção de software.

1. Mudança contínua - Um software deve ser continuamente adaptado, senão torna-se aos poucos, cada vez menos satisfatório. A cada alteração no ambiente em que ele roda que exija nele melhorias, não fazê-las o tornarão progressivamente menos satisfatório naquilo para o que foi construído.

2. Complexidade crescente - Se não forem tomadas medidas para reduzir ou manter a complexidade de um software, conforme ele é alterado sua complexidade irá aumentar progressivamente. Deve haver um esforço para reduzir a complexidade final de um sistema enquanto este recebe alterações.

3. Auto regulação - A curva pertinente ao processo de evolução de um software em relação a seus atributos e processos são auto reguláveis e próximos a uma curva normal, subindo até um teto, quando começa a diminuir.

4. Conservação da estabilidade organizacional - A velocidade de atividade global efetiva de um software em evolução deverá se manter invariável durante todo o ciclo de vida deste produto. O mix que é levado em consideração para as tomadas de decisão que levam a evolução de um software tendem a ser constantes.

5. Conservação de familiaridade - Durante a vida útil de um software em evolução, a taxa de mudanças tende a ser proporcional ao domínio que a equipe detém. A taxa de evolução de um software está intimamente ligado ao grau de familiaridade dentre os profissionais que o mantém.

6. Crescimento Contínuo - Todo software deve ter o conteúdo funcional continuamente ampliado durante seu ciclo de vida para manter a satisfação dos seus usuários. O projeto inicial não consegue incluir absolutamente tudo o necessário e progressivamente precisará ser aumentado.

7. Qualidade diminuindo - Os softwares desenvolvidos para resolver problemas do mundo real se depreciam progressivamente se eles não receberem as mudanças necessárias para adaptar-se ao que acontece em seu ambiente operacional durante todo o tempo de seu ciclo de vida útil.

8. Sistema de feedback - Os processos de manutenção e evolução de um software refletem sistemas de feedback em múltiplos níveis, loops e agentes e devem ser assim tratados para manter-se significativos.

Até hoje as Leis de Lehman são válidas, elas não deixaram de ser provocativas, por gerarem reflexão em pontos relevantes no que diz respeito a pontos de atenção relacionados ao planejamento, construção e manutenção de software no seu aspecto tático-técnico. Mas na década de 90 iniciaram experiências para trazer ao desenvolvimento de software princípios preconizados pela indústria automobilísticas no modelo Lean Toyota.

Século XXI - Manifesto Ágil para Desenvolvimento de Software

No início do século XXI foi promulgada a proposta de uma nova "Lei" sobre evolução de software, conhecido mundialmente como "Manifesto Ágil". Um grupo de desenvolvedores e consultores que já vinham praticando novas formas de composição de times, técnicas de elicitação, interação, análise, desenvolvimento, testes e evolução reuniram-se em uma estação de esqui em Utah (USA) e também fizeram história.

Cada um dos signatários ou em grupos menores vinham praticando a uma década métodos informalmente chamados de "lightwave", como Crystal Clear com Cockburn, Scrum com Schwaber, Shuterland e Beedle, XP com Fowler, Beck e Jeffries, Lean Thinking com Womack e Jones, DSDM com Bennekun, FDD com De Luca e Coad, ASD com Cockburn e Highsmith, The Pragmatic Programmer com Hunt e Thomas.

O Manifesto dizia: "Estamos descobrindo maneiras melhores de desenvolver software fazendo-o nós mesmos e ajudando outros a fazê-lo. Através deste trabalho, passamos a valorizar:"

  • Indivíduos e interação entre eles mais que processos e ferramentas
  • Software em funcionamento mais que documentação abrangente
  • Colaboração com o cliente mais que negociação de contratos
  • Responder a mudanças mais que seguir um plano

Ou seja, mesmo havendo valor nos itens à direita, deveríamos valorizar mais os itens à esquerda. O manifesto ágil continha 12 princípios ágeis, que devem ser entendidos e trabalhados para o seu sucesso, a saber:

  • Nossa maior prioridade é satisfazer o cliente, através da entrega adiantada e contínua de software de valor;
  • Aceitar mudanças de requisitos, mesmo no fim do desenvolvimento. Processos ágeis se adequam a mudanças, para que o cliente possa tirar vantagens competitivas;
  • Entregar software funcionando com freqüencia, na escala de semanas até meses, com preferência aos períodos mais curtos;
  • Pessoas relacionadas à negócios e desenvolvedores devem trabalhar em conjunto e diáriamente, durante todo o curso do projeto;
  • Construir projetos ao redor de indivíduos motivados. Dando a eles o ambiente e suporte necessário, e confiar que farão seu trabalho;
  • O Método mais eficiente e eficaz de transmitir informações para, e por dentro de um time de desenvolvimento, é através de uma conversa cara a cara;
  • Software funcional é a medida primária de progresso;
  • Processos ágeis promovem um ambiente sustentável. Os patrocinadores, desenvolvedores e usuários, devem ser capazes de manter indefinidamente, passos constantes;
  • Contínua atenção à excelência técnica e bom design, aumenta a agilidade;
  • Simplicidade: a arte de maximizar a quantidade de trabalho que não precisou ser feito;
  • As melhores arquiteturas, requisitos e designs emergem de times auto-organizáveis;
  • Em intervalos regulares, o time reflete em como ficar mais efetivo, então, se ajustam e otimizam seu comportamento de acordo.

As Leis do século XX são mais genéricas que o Manifesto do século XXI, pois enquanto o primeiro apontava para pontos que tornaram-se consenso sob o aspecto técnico no desenvolvimento de software, o segundo propõe uma abordagem menos industrial ou menos comando-controle, uma abordagem sócio-técnica em que um bom artefato técnico é consequência da interação humana que o cria e mantém.

Enquanto as Leis de Lehman relatavam uma percepção técnica objetiva e prática, racional, o Manifesto Ágil sugere uma grande quebra de paradigma, para praticá-lo é preciso implementar um processo de mudança cultural onde o centro não é o artefato e as tarefas, mas a mobilização das pessoas para em conjunto e com técnicas apropriadas desenvolverem a melhor solução possível.

É bom ter opções e o primeiro passo para a tomada de decisão é o conhecimento!