Celebrando os marcos e progressos da Transloadit em 2021
Na Transloadit, gostamos de focar no que precisa ser melhorado. Depois de treze anos em operação, continuamos encontrando essas coisas todos os dias. Embora isso traga muitos benefícios, essa mentalidade também pode facilmente nos fazer subestimar o que está indo bem. Temos a tendência de passar rapidamente para o próximo problema e esquecer o que acabamos de conquistar. Aquilo que trouxemos à existência à força, muitas vezes com muito trabalho e dedicação, rápido demais passa a ser confundido com o novo status quo.
Recentemente, me deparei com alguns projetos grandes já concluídos. Projetos que, pelo que me lembro, pareciam intransponíveis quando estávamos diante deles, mas que agora estavam marcados com um pequeno visto verde, escondidos sob uma aba discreta chamada “Concluído”. Esses projetos são usados hoje como se nunca tivesse sido diferente. Então, aqui vai uma tentativa de celebrar aquela aba “Concluído”, aquela coluna “Arquivado” do Kanban, o “Done” de Getting Things Done.
Alguns dos meus colegas de equipe enfrentaram a COVID e suas dificuldades diretas e indiretas, como depressão ou simplesmente uma sensação geral de frustração e desespero. Além de tudo isso, meu cofundador Tim teve que lidar com muita coisa depois que sua esposa, Cindy, foi diagnosticada com câncer no ano passado. Situações como essas podem nos fazer sentir impotentes, e o trabalho muitas vezes foi uma distração bem-vinda. Por isso, especialmente nestes tempos desafiadores, acho bom refletir sobre o progresso que fizemos e celebrá-lo.
Aqui estão os destaques da nossa empresa no último ano.

API
Novos recursos
- /azure/import — importa arquivos do Azure.
- /image/ocr (English) — reconhece texto em imagens.
- /script/run (English) — rode seu próprio código em nossos sistemas para criar coisas bem malucas; coisas que ainda não imaginamos, mas que você vai imaginar! Com tecnologia do Deno.
- /speech/transcribe (English) — transforma vozes em texto.
- /text/speak — transforma texto em vozes.
- /text/translate — traduz textos de e para muitos idiomas humanos diferentes.
- /vimeo/store — faz upload de vídeos para o Vimeo.
- Nosso Smart CDN (beta) está sendo usado em produção, e os primeiros clientes já foram cobrados.
Melhorias
- /audio/artwork — você pode optar por diferentes stacks do ExifTool.
- /document/convert (English) — também pode converter documentos do MS Office e Markdown em HTML.
- /image/facedetect — mais precisão com o uso de IA de grandes fornecedores de nuvem.
- /file/filter — as condições funcionam de forma mais intuitiva.
- /http/import — importa com mais facilidade URLs do Google Docs e do
Dropbox, e adicionamos a opção
fail_fast, que permite desativar novas tentativas após falhas. - /image/describe — agora você pode analisar imagens em busca de
conteúdo impróprio (NSFW) por meio do parâmetro
explicit_descriptions. - /s3/store agora verifica a integridade dos arquivos depois de salvá-los no S3.
Desempenho
- Reduzimos o overhead da Assembly, tornando Assemblies pequenas 5x mais rápidas.
- Reduzimos os tempos de fila reescrevendo grandes partes do nosso autoscaler e reduzindo em 5x o tempo entre a inicialização de uma máquina e o início da codificação.
- Reduzimos os tempos de transcodificação usando máquinas c6.
- Substituímos o ImageMagick pelo libvips sempre que possível, reduzindo em 10x o tempo de redimensionamento de imagens.
Empresa
Equipe e conhecimento técnico
- Firmamos parcerias com autores de softwares de importância vital para nós, como Nix, FFmpeg, Prometheus e Jekyll, além de consultores da AWS sempre disponíveis no nosso Slack.
- Estabelecemos níveis de senioridade em toda a equipe. Como fundadores, tivemos que nos afastar mais, e percebemos que outras pessoas estavam assumindo responsabilidades para nos cobrir. Nomeamos um líder oficial que toma as decisões na nossa ausência.
- Contratamos Yukesh, Joseph, Merlijn, Antoine e Florian. Isso significa que, no fim de 2021, contávamos com 21 Transloadians em nossas fileiras. Sejam bem-vindos!
- Melhoramos nosso chatbot para nos ajudar a criar novos hábitos, como reuniões semanais mais eficientes e meses temáticos em que focamos em um tema específico.
Contabilidade e finanças
- Automatizamos grande parte do trabalho contábil manual.
- Criamos uma filial holandesa.
- Dissolvemos a Transloadit Ltd e a incorporamos à Transloadit-II GmbH.
- Implementamos a folha de pagamento para os funcionários alemães.
- Substituímos a Worldpay pelo Stripe para cobrar os clientes e armazenar os dados dos cartões de crédito deles.
- Mudamos para um novo escritório de contabilidade, uma grande empresa com escritórios no mundo todo, para nos ajudar a navegar melhor em águas internacionais.
- Mudamos para um novo advogado, que revisou nossos contratos com freelancers e empresas.
Experiência do desenvolvedor
Como em qualquer ofício: uma oficina suja e insegura, com ferramentas cegas e meio quebradas, não inspira grandes resultados. É possível, sim, mas você verá muito menos deles. Com programação não é diferente. Além de a redução do atrito impulsionar a criatividade e a produtividade, isso também ajuda a atrair e reter talentos. Por isso, investimos muito em um espaço de trabalho limpo e seguro e em afiar nossas ferramentas.
CI
- Adicionamos prévias navegáveis do site a cada Pull Request.
- Passamos a criar Git Tags durante o deploy, para acompanhar com mais facilidade as mudanças entre versões da API.
- Reduzimos pela metade o tempo da suíte de testes da API.
- Reduzimos em três vezes o tempo de build das imagens de sistema operacional (AMIs).
- Substituímos o Jenkins pelo GitHub Actions, adicionando três runners da Hetzner, e criamos um script para adicioná-los facilmente. Também trocamos os números de build por URLs de build, o que facilita fazer deploy a partir de diferentes branches, ambientes de CI ou fontes.
- Migramos todos os SDKs do Travis para o GitHub Actions.
- Trocamos os deploys personalizados por CI/CD completo.
- A pontuação do Lighthouse do site agora aparece em cada Pull Request.
Qualidade de código
- Deixamos de oferecer suporte ao Internet Explorer.
- Adicionamos o Sentry para ter controle sobre qualquer erro no lado do cliente que nosso site possa estar gerando.
- Introduzimos React + Hooks, TypeScript, Jest, Playwright e Async/await em muitas bases de código.
- Lançamos nosso próprio linting e o aplicamos em todos os grandes projetos JS.
- Descontinuamos módulos sem manutenção, como knox e required-cache, e versões sem manutenção de async, aws-sdk, lodash etc.
- Atualizamos nossa API do Node 10 para o Node 14, para podermos usar encadeamento opcional e muito mais.
Tempos de iteração
- Fizemos nosso ambiente de desenvolvimento se inicializar sem intervenção manual e melhoramos a documentação dele.
- Tornamos a criação e a remoção de clusters de staging tão fáceis que virou diversão. Também separamos o tratamento de logs desses clusters, o que nos permite ver problemas sem precisar acordar a equipe de Ops.
- Removemos variáveis de todos os caminhos de require e import para ter um autocompletar de código melhor nos editores.
- Deixamos o build de conteúdo estático catorze vezes mais rápido.
- Atualizamos o Webpack da versão 2 para a 5 e migramos para Dart Sass e divisão de CSS e código, para uma experiência melhor de build e download de assets. Abandonamos o Jekyll baseado em Docker, pois ele é lento demais no macOS.
Gestão de projetos
- Substituímos o Asana pelo GitHub Projects e adicionamos automações para facilitar a gestão de projetos.
- Migramos para o GitHub gratuito, adicionando actions para compensar algumas limitações.
Crescimento
- Criamos camisetas com as quais você pode aparecer em uma festa.
- Quase dobramos nossa receita.
- Introduzimos o Slack Connect para nossos clientes mais valiosos.
- Enviamos a 50ª edição do nosso Dev Times (English).
- Assinamos nosso primeiro contrato de suporte OSS.
- Conquistamos WeTransfer, Blackboard e muitos outros como novos clientes.
Infraestrutura e stack
- Adicionamos suporte a reloads no HAProxy e no Nginx para que os deploys aconteçam sem interrupções.
- Passamos a usar perfis do nix por build, resolvendo grande parte, senão a totalidade, dos nossos problemas de stack em produção.
- Reforçamos a produção para que ela consiga suportar uma queda de 20 minutos do banco de dados.
- Melhoramos o tratamento de encerramentos de instâncias Spot para repassar Jobs a outras máquinas de forma mais elegante.
- Melhoramos a limitação de taxa e as respostas correspondentes, para que os clientes consigam lidar melhor com elas.
- Movemos toda a infraestrutura legada da AWS para uma VPC.
- Portamos o raidmaker de Bash para Python, para inicializar de forma mais robusta e correta quaisquer discos que conectamos a uma máquina ao iniciá-la na AWS.
- Atualizamos nosso sistema operacional base para o Ubuntu Focal, eliminamos os snaps e agendamos patches de segurança automáticos via apt. Também adicionamos ferramentas para inspecionar coredumps.
- Atualizamos o Terraform para
1.0, o FFmpeg para4.3, o Nix para2.3e o HAProxy para2.0.
Código aberto
Uppy
- Mais que dobramos a alocação de receita para o Uppy.
- Adicionamos ao Uppy a capacidade de captura de tela.
- Permitimos que o Uppy Companion faça streaming dos uploads, tornando-o muito mais rápido e eficiente no uso de recursos.
- Atacamos problemas de DX do Uppy (corepack, trocamos o Lerna pelo Yarn 3, GitHub Actions, Vite, ESBuild, Stale Bot, releases automáticos).
- Reduzimos o número de issues abertas do Uppy de 120 para 40.
- Fizemos o Uppy funcionar com fluidez com milhares de arquivos graças a uma lista virtual de arquivos.
- Reduzimos o tamanho do bundle do Uppy, em parte removendo polyfills para o IE.
- Lançamos o Uppy 2.0.
- Atualizamos o Preact para a versão mais recente no Uppy.
tus
- Aceleramos o
tusd, fizemos com que ele lidasse com RST e implementamos o sistema de plugins Go da HashiCorp. - Iniciamos o trabalho no tus-v2. O objetivo é a padronização no HTTP, com a ajuda da Apple, da Cloudflare e do Vimeo.
SDKs e Node.js
- Adicionamos uma integração com o Terraform.
- Fizemos todos os SDKs oficiais voltarem a passar na CI.
- Reescrevemos e modernizamos o SDK para Android, o SDK para Java, a integração com o Zapier e o SDK para Node.js (v3) (English).
- Patrocinamos um Transloadian no Technical Steering Committee do Node.js para dedicar 20% do tempo ao funcionamento interno do Node.js.
Operações
- Adicionamos observabilidade com Prometheus e Grafana. Incluímos snapshots de gráficos nos alertas de pager para diagnosticar problemas com mais eficiência.
- Adicionamos ferramentas de SSH que nos permitem abrir rapidamente sessões em máquinas em várias abas ou painéis diferentes.
- Criamos políticas de equipe para segurança e para o rodízio de plantão.
- Aumentamos o tamanho da equipe de plantão, aliviando a sobrecarga da equipe existente.
- Introduzimos o conceito de alertas de baixa severidade, que podemos ignorar com segurança durante o sono e verificar pela manhã.
Segurança
- Corrigimos mais de vinte relatórios de segurança enviados por hackers éticos.
- Introduzimos o nsjail para isolar ainda mais as ferramentas de codificação em sandbox.
- Reduzimos as permissões do IAM de diferentes papéis de máquina, analisando com precisão do que eles precisam e removendo todo o resto.
- Simplificamos a rotação de segredos e rotacionamos todos eles.
Web
- Alcançamos uma pontuação no Lighthouse de 100 pontos em acessibilidade na nossa página inicial e configuramos a CI para falhar se cairmos abaixo de 100, para nunca regredirmos nesse aspecto.
- Criamos mais de dez novas demonstrações (English).
- Criamos uma nova página de entrega de conteúdo com uma demonstração interativa que mostra os tempos de redimensionamento quase em tempo real do nosso Smart CDN.
- Criamos uma nova página de segurança e respondemos a muitas perguntas sobre o tema. Ela também inclui um Hall da Fama para hackers éticos que encontram e relatam vulnerabilidades.
- Melhoramos a UX do assistente de Template.
- Criamos páginas de recursos para todos os nossos Robots, com suas demonstrações e preços.
- Movemos grandes partes do nosso site para o S3 e o CloudFront, fazendo as páginas carregarem muito mais rápido (EUA: 2x, UE: 6x, AP: 100x).
- Migramos muitas partes do console para React (um processo gradual, mas já entregamos ~80%), oferecendo aos nossos clientes uma UI mais rápida e agradável, e aos nossos desenvolvedores uma experiência mais agradável ao trabalhar nela.
- Redesenhamos nossa página inicial.
- Reescrevemos e redesenhamos toda a documentação.
- Reescrevemos e redesenhamos a página de status e a tiramos completamente da AWS. Até o registrador de domínio, ela agora é totalmente separada da produção.
Conclusão
Além disso, fizemos mais de seiscentas correções e melhorias menores que, de modo geral, deixaram tudo funcionando com mais fluidez.
Como empresa remota e digital, tivemos sorte nesta pandemia. Vimos outras empresas enfrentarem crises existenciais, enquanto nós muitas vezes pudemos continuar trabalhando do jeito a que estávamos acostumados. Não consideramos isso garantido e também decidimos ativamente continuar gerando valor onde pudéssemos.
Posso levar pouquíssimo crédito pessoal por todo o trabalho feito desde então, por isso tenho ainda mais orgulho dos meus colegas de equipe e das incontáveis montanhas que eles moveram. Eles não apenas mantiveram nosso navio à tona, como conseguiram impulsioná-lo para águas desconhecidas. Nossa equipe perseverou quando foi preciso e aproveitou os bons momentos quando foi possível.
Meus queridos Transloadians, sou grato por todas as contribuições de vocês. Não sei bem como conseguimos encontrar um grupo tão talentoso de pessoas atenciosas, mas eu não gostaria de estar nesta aventura com nenhuma outra tripulação.
(embora haja espaço para aumentar a tripulação, então, se você tiver interesse em trabalhar na Transloadit, confira /jobs/ (English))
Você já fez uma lista das suas conquistas do ano passado? A pandemia e outras dificuldades às
vezes nos fizeram sentir impotentes, então é bom tirar um momento para refletir sobre o que você
conseguiu realizar. Pode ser mais do que você imagina.
— transloadit (🤖 Transloadit) 3 de fevereiro de 2022