Escolhendo quando lançar: superando desafios na Transloadit
Algumas semanas atrás, a equipe se reuniu em uma daquelas janelinhas de conferência do Skype para discutir uma questão importante: devemos lançar a Transloadit na versão atual?
Em ordem de importância, os problemas que enfrentávamos naquele momento eram os seguintes:
- Estávamos presos no Node
v0.1.28 - Tínhamos pouquíssimos testes unitários
- O sistema tinha alguns pontos fracos no design
Ao mesmo tempo, porém, sabíamos que o sistema era capaz de coisas incríveis. Alguns dos nossos testadores alfa o usam para fazer upload de vídeos grandes e gerar até 32 arquivos de resultado a partir deles (marcas-d’água e miniaturas de tamanhos diferentes), que depois são enviados ao S3. São mais de 100 Jobs internos que criamos e gerenciamos em harmonia, tudo graças à maravilha que é o Node.
Com isso em mente, decidimos seguir em frente e lançar na próxima JSConf. Até a semana passada, trabalhamos freneticamente para cumprir essa meta. Integramos pagamentos com cartão de crédito ao site, criamos um ótimo plano e modelo de preços e dedicamos muitas horas a eliminar os últimos bugs do sistema.
E então… a casa caiu.
Tínhamos notado que nosso servidor Node morria a cada 1 ou 2 semanas, mas atribuímos isso a alguma bobagem que nós mesmos tínhamos feito e certamente não achamos que isso se tornaria um grande problema. Bem, acabou se tornando. Ao testar algumas das Assemblies mais intensas mencionadas antes, percebemos que o servidor morria com mais frequência. Acontece que a versão antiga que usamos tem alguns problemas sérios no código de rede. Quando um desses problemas ocorre, a última coisa que você vê é:
(evcom) recv() Success
E então o servidor morre. Sem segfaults nem detalhes.
Ai! Um ano de trabalho duro fora do expediente virou fumaça de repente. Poderíamos investir um esforço enorme para rastrear esse bug e talvez até corrigi-lo. O fato, porém, é que estaríamos corrigindo o problema errado.
O verdadeiro problema é que estamos em uma versão antiga do Node. E o motivo disso é que não seguimos as palavras do Uncle Bob:
“Profissionalismo: o médico lavou as mãos? Você escreveu seus testes?”
Se tivéssemos uma boa cobertura de testes no nosso código, atualizar o Node não seria um grande problema. Refatorar alguns dos problemas de design da aplicação também não seria um grande problema.
Então agora estamos fazendo o que deveríamos ter feito desde o início: reescrevendo nossa versão
antiga como uma nova, totalmente testada e desenvolvida para o próximo Node 0.2.0. Isso vai
levar algum tempo, mas, felizmente, podemos reaproveitar muito do árduo trabalho de tentativa e erro
que aprendemos com a versão 1.
Queremos agradecer a todos que testaram a versão 1, e estamos ansiosos para manter você atualizado sobre a versão 2.
P.S. No fim das contas, não consegui ir à JSConf por causa do vulcão. Vamos encarar isso como um sinal. 😄
