quinta-feira, 7 de agosto de 2008

Quando as leis do software não se aplicam mais

A física Newtoniana especifica um conjunto de leis que descrevem muito bem o universo na escala de espaço e tempo que nós podemos perceber com nossos sentidos. Nesta escala, o universo é 'bem comportado' dentro do limite destas leis, o que significa que se pode prever muito bem as interações entre os corpos usando a física Newtoniana.

Na escala do muito grande ou do muito pequeno, porém, as Leis de Newton falham. No domínio das partículas subatômicas, nós precisamos contar com a física quântica. Quando tratamos de velocidades ou massas muito grandes, é necessário usar a física de Einstein para descrever e predizer o comportamento do universo.

Eu gosto de encarar o software da mesma maneira. Em condições bem controladas, softwares são bem comportados sob as regras tradicionais de engenharia de software. Nesta situação se pode seguir as recomendações da literatura ao projetar sua arquitetura. Você pode projetar sua base de dados usando as regras tradicionais de normalização. Você pode usar os mais populares frameworks, bibliotecas, ferramentas e metodologias (tanto as clássicas quanto as ágeis ou 'extreme'). Estas regras, ferramentas e metodologias existem e são largamente aceitas utilizadas com motivo.

Esta é a situação em que a VASTA maioria do software existente se encontra. Esta é a condição quando se está lidando com requisitos razoáveis para escalabilidade, disponibilidade, responsividade, volume de dados ou data de entrega. E a definição de 'razoável' se estende cada vais mais conforme o tempo passa.

Contudo, quando os requisitos para seu software são estendidos para o limite, e o que eu quero dizer como 'limite' é um caso realmente extremo, jão não é possível se utilizar das regras da literatura. É necessário se pensar em projetos e soluções alternativos. Na arquitetura, será necessário sacrificar a pureza do projeto. Será necessário fazer concessões para extrair a máxima performance. No lado da base de dados, será necessário desnormalizar e pensar em maneiras não tradicionais de armazenar distribuir os dados. No lado das ferramentas, você terá que desenvolver internamente suas próprias ferramentas, bibliotecas e frameworks, ou adaptar as existentes para suas próprias necessidades.

A princípio, estas medidas parecerão heresia. Você irá pensar que as pessoas que desenvolveram o software são um bando de débeis mentais que não têm a menor idéia do que é desenvolvimento de software. Você irá achar que trabalha no lugar perfeito para alimentar o The Daily WTF por anos. Mas se você der um passo atrás, você pode perceber que não há uma solução pronta para tudo. Às vezes você vai se encontrar tendo que se virar sozinho, e você ainda vai ter que entregar o software quando o deadline chegar. Não se agarre a uma regra só porque seu professor mandou.

Eu não estou sugerindo que desistamos de tudo que aprendemos sobre engenharia de software. Como eu falei, as regras de arquitetura se aplicam na vasta maioria dos casos. Elas existem e são largamente aceitas com motivo. Mas nós precisamos entender a razão por trás destas regras. Ou nós estaremos fazendo Cargo Cult Programming, ou talvez tomando decisões a partir de um vago senso de dever para com os fantasmas de Boyce-Codd.

Uma vez que as regras de engenharia de software se aplicam à grande maioria dos casos, provavelmente se você ver alguém quebrando estas regras é porque esta pessoa é realmente um hacker. Mas também pode ser porque esta pessoa é um projetista inteligente que está resolvendo um problema difícil de uma maneira que ninguém imaginou antes. Contudo, em geral é melhor se utilizar uma prjeto limpo e simples. Como Ted Dziuba diz, "Escalabilidade não é seu problema. Fazer com que as pessoas dêem a mínima é o seu problema.

Mas se você for julgar alguém, ou se algum dia você se encontrar na situação de ter que projetar software para lidar com volumes ridículos de transações ou dados, lembre-se de manter uma mente aberta.

Mais informações:

O blog High Availability é uma fonte de informações muito útil sobre a arquitetura de alguns dos sites de maior volume do mundo.

Martin Fowler fala sobre a Heresia Mor: ambiente sem transações no EBay. Além disso, as tabelas do EBay não têm chaves estrangeiras!

0 comentários: