Celebramos los hitos y avances de Transloadit en 2021
En Transloadit nos gusta centrarnos en las cosas que hay que mejorar. Después de trece años en funcionamiento, seguimos encontrándolas cada día. Aunque esto trae muchas cosas buenas, esta mentalidad también puede hacer que sea fácil no valorar lo suficiente lo que sí va bien. Solemos pasar rápidamente al siguiente problema y olvidar lo que acabamos de conseguir. Las cosas que forzamos a existir, a menudo con mucho trabajo y dedicación, se confunden demasiado pronto con el nuevo statu quo.
Hace poco me topé con algunos proyectos grandes ya terminados. Proyectos que recuerdo como insuperables cuando los teníamos delante, pero que ahora aparecían con una pequeña marca de verificación verde, escondidos bajo una pestaña discreta llamada «Completado». Hoy esos proyectos se usan como si nunca hubiera sido de otra manera. Así que aquí va un intento de celebrar esa pestaña de «Completado», esa columna «Archivado» del Kanban, el «Hecho» de Getting Things Done.
Algunos de mis compañeros de equipo han tenido dificultades con la COVID y sus penurias directas e indirectas, como la depresión o simplemente una sensación general de frustración y desesperanza. Además de todo eso, mi cofundador Tim tuvo que afrontar muchísimo después de que a su esposa Cindy le diagnosticaran cáncer el año pasado. Cosas como estas pueden hacerte sentir impotente, y el trabajo fue a menudo una distracción bienvenida. Por eso, y especialmente en estos tiempos difíciles, creo que es bueno reflexionar sobre los avances que hemos logrado y celebrarlos.
Estos son los momentos más destacados de nuestra empresa durante el año pasado.

API
Nuevas funciones
- /azure/import: importar archivos desde Azure.
- /image/ocr: reconocer texto en imágenes.
- /script/run: tu propio código en nuestros sistemas para crear cosas muy locas; cosas que aún no hemos imaginado, ¡pero tú sí! Con la tecnología de Deno.
- /speech/transcribe: convertir voces en texto.
- /text/speak: convertir texto en voces.
- /text/translate: traducir texto desde y hacia muchos idiomas humanos distintos.
- /vimeo/store: subir videos a Vimeo.
- Nuestro Smart CDN (beta) se está usando en producción y ya se ha cobrado a los primeros clientes.
Mejoras
- /audio/artwork: puedes optar por distintos stacks de ExifTool.
- /document/convert: también puede convertir documentos de MS Office y Markdown a HTML.
- /image/facedetect: mayor precisión gracias a la IA de los grandes proveedores de nube.
- /file/filter: las condiciones funcionan de forma más intuitiva.
- /http/import: ahora es más fácil importar URL de Google Docs y de
Dropbox, y se añade una opción
fail_fastque te permite desactivar los reintentos tras un fallo. - /image/describe: ahora puedes analizar imágenes en busca de
contenido inapropiado (NSFW) mediante el parámetro
explicit_descriptions. - /s3/store ahora comprueba la integridad de los archivos después de guardarlos en S3.
Rendimiento
- Redujimos la sobrecarga de las Assemblies, lo que hace que las Assemblies pequeñas sean 5x más rápidas.
- Redujimos los tiempos de cola gracias a reescribir gran parte de nuestro autoescalador, y redujimos 5x los tiempos entre el arranque de una máquina y el inicio del encoding.
- Redujimos los tiempos de transcodificación aprovechando las máquinas c6.
- Reemplazamos ImageMagick por libvips siempre que fue posible, lo que redujo 10x los tiempos de redimensionado de imágenes.
Empresa
Equipo y experiencia
- Nos asociamos con autores de software de importancia vital para nosotros, como Nix, FFmpeg, Prometheus o Jekyll, además de consultores de AWS disponibles al momento en nuestro Slack.
- Consolidamos la seniority en todo el equipo. Como fundadores, hemos tenido que ausentarnos más, y notamos que otras personas daban un paso al frente para cubrirnos. Nombramos un líder oficial que toma las decisiones en nuestra ausencia.
- Contratamos a Yukesh, Joseph, Merlijn, Antoine y Florian. Eso significa que, a finales de 2021, contábamos con 21 Transloadians entre nuestras filas. ¡Bienvenidos!
- Mejoramos nuestro chatbot para ayudarnos a adoptar nuevos hábitos, como llamadas semanales más eficientes y meses temáticos durante los cuales nos centramos en un tema concreto.
Contabilidad y finanzas
- Automatizamos gran parte del trabajo contable manual.
- Creamos una sucursal neerlandesa.
- Disolvimos Transloadit Ltd para integrarla en Transloadit-II GmbH.
- Establecimos la gestión de nóminas para los empleados alemanes.
- Reemplazamos Worldpay por Stripe para cobrar a los clientes y almacenar los datos de sus tarjetas de crédito.
- Cambiamos a un nuevo contador, una gran firma con oficinas en todo el mundo, para ayudarnos a navegar mejor por aguas internacionales.
- Cambiamos a un nuevo abogado, que revisó nuestros contratos para freelancers y empresas.
Experiencia de desarrollo
Como en cualquier oficio: un taller sucio e inseguro, con herramientas desafiladas y medio rotas, no inspira grandes resultados. Es posible, sí, pero verás muchos menos. La programación no es diferente. Además de que reducir la fricción impulsa la creatividad y la productividad, también ayuda a atraer y retener talento. Por eso invertimos mucho en un espacio de trabajo limpio y seguro, y en afilar nuestras herramientas.
CI
- Añadimos vistas previas navegables del sitio web a cada Pull Request.
- Creamos Git Tags durante el despliegue, para poder seguir más fácilmente los cambios entre versiones de la API.
- Redujimos a la mitad el tiempo de la suite de pruebas de la API.
- Redujimos en un factor de tres el tiempo que se tarda en construir las imágenes del sistema operativo (AMI).
- Reemplazamos Jenkins por GitHub Actions, añadimos tres Runners de Hetzner y creamos un script para agregarlos con facilidad. También pasamos de los Build Numbers a las Build URL, lo que facilita desplegar desde distintas ramas, entornos de CI u orígenes.
- Migramos todos los SDK de Travis a GitHub Actions.
- Pasamos de despliegues personalizados a CI/CD completo.
- La puntuación de Lighthouse del sitio web ahora se muestra en cada Pull Request.
Calidad del código
- Dejamos de dar soporte a Internet Explorer.
- Añadimos Sentry para tener controlado cualquier error del lado del cliente que pudiera lanzar nuestro sitio web.
- Introdujimos React + Hooks, TypeScript, Jest, Playwright y Async/await en muchas bases de código.
- Implementamos nuestro propio linting y lo aplicamos en todos los proyectos grandes de JS.
- Retiramos módulos sin mantenimiento como knox y required-cache, y versiones sin mantenimiento de async, aws-sdk, lodash, etc.
- Actualizamos nuestra API de Node 10 a Node 14, para poder usar encadenamiento opcional y más.
Tiempos de iteración
- Conseguimos que nuestro entorno de desarrollo se inicialice sin intervención manual, y mejoramos su documentación.
- Hicimos que levantar y desmontar clústeres de staging fuera tan fácil que resultó divertido. También separamos la gestión de logs para ello, lo que nos permite ver problemas sin tener que despertar al equipo de Ops.
- Eliminamos las variables de cualquier ruta de require o import para tener mejor autocompletado de código en los editores.
- Aceleramos catorce veces la compilación de contenido estático.
- Actualizamos Webpack de 2 a 5, y pasamos a Dart Sass y a CSS+code splitting para una mejor experiencia de construcción y descarga de recursos. Abandonamos Jekyll basado en Docker porque es demasiado lento en macOS.
Gestión de proyectos
- Reemplazamos Asana por GitHub Projects y añadimos automatizaciones para facilitar la gestión de proyectos.
- Cambiamos a GitHub gratuito, y añadimos acciones para compensar algunas carencias.
Crecimiento
- Diseñamos camisetas con las que puedes dejarte ver en una fiesta.
- Casi duplicamos nuestros ingresos.
- Introdujimos Slack Connect para nuestros clientes más valiosos.
- Enviamos nuestro Dev Times (English) número 50.
- Firmamos nuestro primer contrato de soporte para código abierto.
- Dimos la bienvenida a WeTransfer, Blackboard y muchos más como nuevos clientes.
Infraestructura y stack
- Añadimos soporte para recargas en HAProxy y Nginx para que los despliegues no provoquen cortes.
- Cambiamos a perfiles de nix por build, lo que resolvió gran parte (si no todos) de nuestros problemas de stack en producción.
- Reforzamos producción para que pueda soportar una caída de la base de datos de 20 minutos.
- Mejoramos la gestión de la terminación de instancias Spot para pasar los Jobs a otras máquinas con mayor elegancia.
- Mejoramos la limitación de tasa y las respuestas para que a los clientes les resulte más fácil gestionarlas.
- Trasladamos toda la infraestructura heredada de AWS a una VPC.
- Portamos raidmaker de Bash a Python para inicializar de forma más robusta y correcta cualquier disco que conectemos a una máquina al lanzarla en AWS.
- Actualizamos nuestro sistema operativo base a Ubuntu Focal, nos deshicimos de los snaps y programamos parches de seguridad automáticos de apt. También añadimos herramientas para inspeccionar coredumps.
- Actualizamos Terraform a
1.0, FFmpeg a4.3, Nix a2.3y HAProxy a2.0.
Código abierto
Uppy
- Más que duplicamos la asignación de ingresos para Uppy.
- Añadimos a Uppy la capacidad de captura de pantalla.
- Permitimos que Uppy Companion transmita las subidas en streaming, lo que lo hace mucho más rápido y eficiente en el uso de recursos.
- Atacamos los problemas de DX de Uppy (corepack, abandonamos Lerna por Yarn 3, GitHub Actions, Vite, ESBuild, Stale Bot, publicaciones automáticas).
- Bajamos el número de issues abiertas de Uppy de 120 a 40.
- Hicimos que Uppy funcione con fluidez con miles de archivos gracias a una lista de archivos virtual.
- Redujimos el tamaño del bundle de Uppy, en parte eliminando los polyfills de IE.
- Publicamos Uppy 2.0.
- Actualizamos Preact a la última versión en Uppy.
tus
- Aceleramos
tusd, hicimos que gestione RST e implementamos el sistema de plugin de Go de HashiCorp. - Empezamos a trabajar en tus-v2. El objetivo es su estandarización en HTTP, con la ayuda de Apple, Cloudflare y Vimeo.
SDK y Node.js
- Añadimos una integración con Terraform.
- Hicimos que todos los SDK oficiales vuelvan a pasar CI.
- Reescribimos y modernizamos el SDK de Android, el SDK de Java, la integración con Zapier y el SDK de Node.js (v3).
- Patrocinamos a un Transloadian en el Comité Técnico de Dirección de Node.js para que trabaje un 20 % en las interioridades de Node.js.
Ops
- Añadimos observabilidad con Prometheus y Grafana. Incluimos capturas de las gráficas en los pagers para solucionar problemas de forma más eficiente.
- Añadimos herramientas de SSH que nos permiten abrir rápidamente sesiones a máquinas en muchas pestañas o paneles distintos.
- Creamos políticas de equipo para la seguridad y la rotación de guardias.
- Aumentamos el tamaño del equipo de guardia, lo que alivió la carga del equipo existente.
- Introdujimos el concepto de pagers de baja severidad, que podemos dejar sonar mientras dormimos tranquilos y revisar por la mañana.
Seguridad
- Corregimos más de veinte informes de seguridad de hackers éticos.
- Introdujimos nsjail para aislar aún más en un sandbox las herramientas de encoding.
- Redujimos los permisos de IAM de distintos roles de máquina analizando con precisión qué necesitan y eliminando todo lo demás.
- Simplificamos la rotación de secretos y rotamos todos los secretos.
Web
- Conseguimos una puntuación de Lighthouse de 100 puntos en accesibilidad en nuestra página de inicio, e indicamos a CI que falle si bajamos de 100 para no retroceder nunca en esto.
- Creamos más de diez demos (English) nuevas.
- Creamos una página de Entrega de contenido totalmente nueva, con una demo interactiva que muestra los tiempos de redimensionado casi en tiempo real de nuestro Smart CDN.
- Creamos una página de Seguridad totalmente nueva y respondimos muchas preguntas al respecto. También incluye un Salón de la Fama para los hackers éticos que encuentran y reportan vulnerabilidades.
- Mejoramos la UX del asistente de Template.
- Introdujimos páginas de funciones para todos nuestros Robots, sus demos y precios.
- Trasladamos gran parte de nuestro sitio web a S3 y CloudFront, lo que hace que las páginas carguen mucho más rápido (US: 2x, EU: 6x, AP: 100x).
- Trasladamos muchas partes de la consola a React (un proceso gradual, pero ya hemos lanzado ~80 %), lo que ofrece a nuestros clientes una interfaz más rápida y agradable, y a nuestros desarrolladores una experiencia más agradable al trabajar en ella.
- Rediseñamos nuestra página de inicio.
- Reescribimos y rediseñamos toda la documentación.
- Reescribimos y rediseñamos la página de estado y la sacamos por completo de AWS. Hasta el registrador del dominio incluido, ahora está completamente separada de producción.
Para concluir
Además de esto, añadimos más de seiscientas correcciones y mejoras menores que, en general, hicieron que todo funcionara con más suavidad.
Como empresa remota y digital, tuvimos suerte en esta pandemia. Vimos a otras empresas enfrentarse a crisis existenciales, mientras que nosotros pudimos seguir trabajando, muchas veces, como estábamos acostumbrados. No lo dimos por sentado y también decidimos activamente seguir creando valor donde pudiéramos.
Puedo atribuirme muy poco mérito personal por todo el trabajo que se hizo después, así que estoy aún más orgulloso de mis compañeros de equipo y de las incontables montañas que han movido. No solo mantuvieron nuestro barco a flote, sino que lograron impulsarlo hacia aguas desconocidas. Nuestro equipo perseveró cuando fue necesario y disfrutó de los buenos momentos cuando fue posible.
Mis queridos Transloadians, agradezco todas sus contribuciones. No estoy seguro de cómo logramos encontrar a un grupo tan talentoso de personas atentas, pero no querría vivir esta aventura con ninguna otra tripulación.
(aunque hay sitio para ampliar la tripulación, así que si te interesa trabajar en Transloadit, echa un vistazo a /jobs/ (English))
¿Has hecho una lista de tus logros del año pasado? La pandemia y otras dificultades nos han hecho
sentir impotentes a veces, así que es bueno tomarse un momento para reflexionar sobre lo que sí
lograste. Puede que sea más de lo que crees.
— transloadit (🤖 Transloadit) 3 de febrero de 2022