Está acontecendo uma longa discussão na lista Zope-pt sobre as dores evolutivas da platforma Zope/Plone. Vários depoimentos na lista ralatam muita dor de cabeça na hora de migrar sites antigos para versões recentes do Plone, e alguns até já se resignam em dar manutenção para sites que nunca sairão da versão do Plone em que foram criados originalmente.
Tenho pensado muito sobre esta questão porque uma parte importante do nosso discurso para promover o Zope/Plone é dizer que servem para construir sites duradouros. Então o que se passa, e como melhorar a situação?
Sites podres
Antes de mais nada, quero deixar claro que eu realmente acredito que usar um framework para fazer um site vale a pena porque estou fazendo sites dinâmicos desde 1995, e a experiência mostra que quando construímos sites na base de milhares de scripts improvisados e bancos de dados idem, o custo de manutenção é muito alto, tanto em dinheiro quanto em pessoal. Os melhores programadores não aguentam muito tempo as tarefas repetitivas de manter um site podre rodando, e acabam indo embora, levando consigo as esperanças de um dia construir uma solução mais racional; no serviço público eles não vão embora, mas “se aposentam” sem deixar o cargo. Acho que todos já viram isso acontecer.
Mas o pior é que, mesmo pagando caro pela manutenção destes espaguetes lógicos a gente se vê obrigado, periodicamente, a jogar fora um monte de código e começar de novo porque chega um ponto que simplesmente não dá mais para consertar.
Porque usar um framework
O grande Fred Brooks já disse: não existe a bala de prata. Não adianta procurar uma solução mágica para os problemas intrinsecamente difíceis de desenvolvimento de software. Mas usar um framework é uma maneira de aumentar a vida útil dos sistemas. Como?
Através da transformação da vivência de desenvolvedores experientes em requisitos ou casos de uso, e depois em uma visão geral, uma arquitetura, e finalmente em componentes de software que outros desenvolvedores podem usar para resolver problemas de uma certa natureza.
Por exemplo, o Plone+CMF+Zope2 formam um framework que nos ajuda a resolver problemas de publicação e gerenciamento de conteúdos em sites. Se multiplicarmos o número de desenvolvedores que contribuiram para este framework com os anos de experiência em desenvolvimento web de cada um deles, teremos milhares de anos de experiência acumulada. E esta experiência, através de muita discussão, trabalho, testes, e mais experiência, foi consolidada em um framework que hoje pode não ser a coisa mais pura e consistente, mas funciona como um framework e não como um monte de peças desconexas.
Mas eu usei um framework e meu site apodreceu mesmo assim
Posso falar por experiência própria. Em 1999 a Hiperlógica desenvolveu a primeira versão do Página-1, um CMS para sites de notícias. Na época, o framework era Zope 2.1 e só. O Página-1 chegou a ser usado em mega-sites, como o BOL e a AOL Brasil, portais que chegavam a publicar mais de mil páginas novas diariamente, principalmente graças a coletores automáticos de notícias, mas no caso da AOL havia também uma equipe de 40 jornalistas só para alimentar o portal.
Fazíamos todo o desenvolvimento via ZMI. Nosso código era organizado em ZClasses, primeiro usando apenas DTML, depois Scripts (Python), porque inicialmente estes não existiam. Quando pintou o ZPT, arrastei toda a equipe para esta nova tecnologia, muitos resmungando e arrastando os pés. Outras mudanças mais profundas a gente não incorporou. Uma delas foi o CMF. Vivíamos falando que era preciso reescrever o Página-1 sobre o CMF, mas infelizmente a empresa fechou as portas antes que isso fosse feito.
Assim como o Página-1, existem outros produtos rodando por aí, baseados em versões antigas do Zope, do CMF ou até do Plone, e com as mudanças mais profundas causadas pela chegada do Zope 3, muitos destes produtos vão ter que ser refeitos, ou vão desaparecer. Como chegamos nisso?
A grande vantagem e o problema maior do software livre
O software livre avança mais rápido que o software proprietário, e de maneira mais constante. Para produtos considerados estáveis, versões novas a cada três meses são comuns. Quem quer usar o que há de mais moderno no CVS tem que se atualizar todo dia, ou no máximo semanalmente. Ao mesmo tempo, não existe no software livre todo aquele marketing alardeando a necessidade de ter sempre a versão mais nova. É fácil se acomodar numa versão que funciona, ficar com ela e dedicar seu tempo a aprofundar suas customizações e extensões, em vez de ficar atualizando a infra-estrutura o tempo todo.
Mas é um erro que custa caro. Porque se você mantém seu site sempre rodando na versão mais atual, as migrações são menos doloridas. É como cuidar de um jardim: se existe uma manutenção constante, o trabalho cotidiano não é tão grande, e o jardim está sempre bonito e as plantas saudáveis. Se a gente abandona, as ervas daninhas se multiplicam, as larvas tomam conta, e logo é preciso arrancar tudo para recomeçar.
No caso do Plone, o que é realmente difícil é migrar algo feito há dois ou três anos para uma versão que acabou de sair do forno. E quando mais tempo a gente adia uma migração como esta, mais difícil ela fica. Até que a gente se desespera e começa a questionar a própria plataforma. Nesta hora é tentador pensar “já que eu vou ter que refazer tudo, então vou refazer usando este outro framework que está na moda”. Mas eu garanto: se você não mudar a forma de se relacionar com o framework, seja ele qual for, daqui a três anos você vai estar administrando outro site podre, e talvez pensando em adotar o J9EEE, o Erlang-on-Rockets ou o Plone 7 sobre Zope 5.
Reveja suas prioridades, e seja mais feliz
Outro dia um cliente me consultou porque queria colocar uma sofisticada camada AJAX sobre o Plone 2.5 de sua intranet. Eu lhe disse para esperar pelo Plone 3, que está saindo com toda uma infra-estrutura avançada para integrar AJAX. E se a demanda de AJAX não puder esperar? Então quase todo o trabalho que for feito agora será perdido quando chegar o Plone 3. É melhor alocar o programador que estava pronto para fazer AJAX para começar já a migrar a intranet atual para o Plone 3 beta 3, para ver o que vai quebrar e resolver logo o que precisa ser resolvido.
Este pequeno exemplo ilustra um ponto muito importante. É claro que existe um custo de acompanhar de perto a evolução de um framework, fazendo atualizações sempre que muda a última casa decimal na versão. Mas existem também enormes benefícios. Um deles é evitar que o seu site apodreça. Outro é que, no caso do Plone, os aperfeiçoamentos costumam ser muito visíveis, atraentes e benéficos para os usuários finais.
Tempo emprestado a juros altos
Kent Beck, o guru de Extreme Programming, escreveu em algum de seus livros que quando a gente resolve um problema de maneira precária para ganhar tempo, estamos na verdade fazendo um empréstimo no Banco do Tempo. Mais tarde teremos que pagar por este tempo emprestado, e com juros. E quanto mais demorarmos para pagar, maior serão os juros. A visão dele não é moralista: ele aceita que fazer empréstimos às vezes é uma boa estratégia para aproveitar oportunidades. Mas se uma empresa faz empréstimos demais acaba quebrando. É preciso ter sempre consciência do seu grau de endividamento.
Na prática, muitas equipes que usam Plone hoje precisam rever a alocação dos desenvolvedores, para garantir que sempre tenha gente empenhada em fazer os produtos, customizações e extensões locais funcionar na versão mais nova do framework. “Mas na minha equipe ninguém tem mais tempo para nada”, já sei. Então explique a situação para o seu chefe. Mostre para ele que não tem alternativa melhor, que não é viável construir um site Web 2.0 sofisticado sem um framework, mas que para usar um framework é preciso acompanhar sua evolução, e que é melhor reduzir o ritmo de customizações para manter a infra-estrutura sincronizada do que customizar adoidado um sistema que vai apodrecer e ser jogado fora em três anos. E faça esta recomendação por escrito, num relatório. Porque se a decisão for continuar como está, vai ser bom para sua auto-estima encontrar este relatório na sua gaveta.
No caso da Hiperlógica, deixamos o Página-1 falir. Porque mesmo sabendo dos benefícios, não tivemos oportunidade de fazer as mudanças, algumas bem profundas, necessárias para acompanhar o framework. Talvez alguns sites fortemente customizados rodando Plone 2.0 ou 2.1 hoje se encontrem na mesma situação: sai mais barato recomeçar do que tentar refazer. Mas antes de jogar no lixo seu conhecimento acumulado em uma plataforma, assegure-se de aprender algo com esta triste experiência. E como consolo, considere isto: quem produz código costuma dar pouco valor à especificação, requisitos, casos de uso, arquitetura da informação, ícones, folhas de estilo etc. O seu software atual, mesmo podre, é um rico repositório destas coisas. E na hora de refazer você poderá aproveitar tudo isso que não é código-fonte.
Resumindo, o problema não está neste ou naquele framework, e sim em como a gente estima os custos de usar um framework e se manter atualizado nele, seja ele qual for. E se tem algo que a maioria dos desenvolvedores que eu conheço faz mal, e os adeptos do software livre fazem ainda pior, é estimar custos.
Dá para ter uma vinda longa, próspera e saudável usando um framework. Basta estar preparado para pagar os custos de usá-lo. No caso do Plone, continuo apostando que o custo é bem menor, e os benefícios para o usuário final muito maiores, do que qualquer amontoado de scripts, larvas, tabelas e ervas daninhas que alguns chamam de site.