Skip to content

Manutenção e suporte

Manter e Evoluir Sistemas Clojure Existentes

Para empresas com uma base Clojure que ainda sustenta o negócio, mas já não conta com os engenheiros que a construíram. O trabalho é cuidadoso, incremental e documentado.

transducta.core
(defn manter [sistema]
  (-> sistema
      entender
      estabilizar
      melhorar))

Highlights

  • Assumir com segurança

    A entrada começa por ler, rodar e documentar o sistema — não por refatorar.

  • Manter atualizado

    Atualizações de Clojure, JVM, bibliotecas e infraestrutura em passos pequenos e reversíveis.

  • Continuar entregando

    Correções e novas features seguem sendo entregues enquanto a estabilidade melhora.

A situação típica de um sistema Clojure legado

Código Clojure envelhece bem: dados imutáveis e funções pequenas não apodrecem como um grafo de objetos grande. O que envelhece mal é o contexto. Quando os engenheiros originais saem, sobra um sistema que ninguém quer tocar: funciona, é crítico e cada mudança parece arriscada.

Os sintomas se repetem: dependências anos atrasadas, uma versão de JVM que ninguém ousou atualizar, testes que já foram relevantes, um build que só funcionava na máquina de alguém e comportamentos que apenas duas pessoas realmente entendiam.

  • Serviço crítico sem mantenedor atual
  • Dependências e JVM defasadas
  • Build ou deploy em que ninguém confia totalmente
  • Comportamento não documentado descoberto em incidentes
  • Demandas paradas porque mudar parece inseguro

Como a transição acontece

As primeiras semanas são propositalmente sem glamour. O sistema é lido, executado em ambiente local ou de homologação e documentado: pontos de entrada, modelo de dados, dependências externas, jobs agendados e modos de falha.

Só então a mudança começa — e começa pela rede de proteção: build reproduzível, testes rodando em CI e observabilidade suficiente para enxergar o que a produção está fazendo. Depois disso, atualizações e refatorações avançam em pull requests pequenos, revisáveis e reversíveis individualmente.

  • Documentação do sistema e do fluxo de dados
  • Build reproduzível e auditoria de dependências
  • Testes onde a mudança é mais provável
  • Observabilidade antes da refatoração
  • Atualizações incrementais de dependências e JVM

Por que evitar a reescrita

Reescritas são atraentes porque o sistema atual é difícil de ler e o novo ainda é imaginário. Mas uma aplicação Clojure em produção codifica anos de regras de negócio e exceções que não existem em nenhum outro lugar — nem nos tickets, nem na memória de ninguém.

A recomendação honesta quase sempre é evoluir: extrair o que dói, substituir atrás de interfaces estáveis e deixar o sistema melhorar enquanto continua gerando receita.

Frequently asked questions

Nosso sistema Clojure está sem mantenedor. Vocês assumem?
Normalmente sim. O primeiro passo é um período curto de leitura, execução local e documentação do comportamento real antes de qualquer mudança.
Existe suporte contínuo?
Sim: um acordo mensal recorrente cobrindo atualizações de dependências, correções, pequenas features e disponibilidade quando algo quebra.

Tem um sistema Clojure sem mantenedor?

Conte o que ele faz e em que estado está. A primeira conversa é técnica e sem compromisso.