Célébrons les étapes clés et les progrès de Transloadit en 2021
Chez Transloadit, nous aimons nous concentrer sur ce qui doit être amélioré. Après treize ans d’activité, nous continuons à trouver chaque jour des points à améliorer. Cette approche porte ses fruits, mais elle peut aussi nous faire sous-estimer ce qui va bien. Nous avons tendance à passer rapidement au problème suivant et à oublier ce que nous venons d’accomplir. Ce que nous avons concrétisé, souvent à force de travail et de persévérance, devient trop vite la nouvelle normalité à nos yeux.
Je suis récemment tombé sur quelques grands projets achevés. Je me souviens qu’ils nous semblaient insurmontables avant de nous y attaquer. Ils étaient désormais marqués d’une petite coche verte — cachés sous un onglet discret intitulé « Terminé ». Ces projets sont utilisés aujourd’hui comme s’il en avait toujours été ainsi. Voici donc une tentative de célébrer cet onglet « Terminé », cette colonne Kanban « Archivé », ce qui est « fait » dans la méthode Getting Things Done.
Certains membres de mon équipe ont souffert de la COVID et des difficultés qu’elle a entraînées, directement ou indirectement, comme la dépression ou simplement un sentiment général de frustration et de désespoir. À tout cela s’ajoute ce qu’a dû affronter mon cofondateur Tim après le diagnostic de cancer de sa femme Cindy l’année dernière. De telles épreuves peuvent donner un sentiment d’impuissance, et le travail était souvent une distraction bienvenue. Je pense donc qu’il est bon, particulièrement en ces temps difficiles, de prendre du recul et de célébrer nos progrès.
Voici les faits marquants de l’année écoulée pour notre entreprise.

API
Nouvelles fonctionnalités
- /azure/import — importer des fichiers depuis Azure.
- /image/ocr (English) — reconnaître du texte dans des images.
- /script/run (English) — exécuter votre propre code sur nos systèmes pour créer des choses vraiment folles, auxquelles nous n’avons pas encore pensé, mais que vous imaginerez ! Le tout repose sur Deno.
- /speech/transcribe (English) — transformer la parole en texte.
- /text/speak — transformer du texte en parole.
- /text/translate — traduire du texte depuis et vers de nombreuses langues naturelles.
- /vimeo/store — téléverser des vidéos sur Vimeo.
- Notre Smart CDN (bêta) est utilisé en production, et les premiers clients ont été facturés.
Améliorations
- /audio/artwork — vous pouvez choisir entre différentes piles ExifTool.
- /document/convert (English) — peut aussi convertir des documents MS Office et du Markdown en HTML.
- /image/facedetect — offre une meilleure précision grâce à l’IA des grands fournisseurs de cloud.
- /file/filter — les conditions fonctionnent de façon plus intuitive.
- /http/import — facilite l’importation depuis des URL Google Docs et
Dropbox, et propose une option
fail_fastpour désactiver les nouvelles tentatives en cas d’échec. - /image/describe — vous pouvez désormais analyser les images pour
détecter du contenu inapproprié (NSFW) via le paramètre
explicit_descriptions. - /s3/store (English) vérifie désormais l’intégrité des fichiers après leur enregistrement dans S3.
Performances
- Nous avons réduit le surcoût lié à une Assembly, rendant les petites Assemblies 5x plus rapides.
- Nous avons réduit les temps d’attente en réécrivant de grandes parties de notre système de mise à l’échelle automatique et en divisant par 5 le délai entre le lancement d’une machine et le début de l’encodage.
- Nous avons réduit les temps de transcodage en utilisant des machines c6.
- Nous avons remplacé ImageMagick par libvips lorsque c’était possible, divisant par 10 les temps de redimensionnement des images.
Entreprise
Équipe et expertise
- Nous avons noué des partenariats avec les auteurs de logiciels essentiels pour nous, comme Nix, FFmpeg, Prometheus et Jekyll — ainsi qu’avec des consultants AWS facilement joignables sur notre Slack.
- Nous avons renforcé l’expérience et les responsabilités au sein de l’équipe. En tant que fondateurs, nous avons dû nous absenter davantage et avons constaté que d’autres prenaient le relais. Nous avons officiellement désigné un responsable qui prend les décisions en notre absence.
- Nous avons recruté Yukesh, Joseph, Merlijn, Antoine et Florian. Ainsi, à la fin de 2021, nous comptions 21 Transloadians dans nos rangs. Bienvenue à tous !
- Nous avons amélioré notre chatbot pour nous aider à adopter de nouvelles habitudes, comme des réunions hebdomadaires plus efficaces et des mois thématiques consacrés à un sujet précis.
Comptabilité et finances
- Nous avons automatisé une grande partie du travail comptable manuel.
- Nous avons créé une succursale aux Pays-Bas.
- Nous avons dissous Transloadit Ltd et l’avons intégrée à Transloadit-II GmbH (English).
- Nous avons mis en place la gestion de la paie pour les salariés en Allemagne.
- Nous avons remplacé Worldpay par Stripe pour facturer nos clients et conserver les données de leurs cartes de crédit.
- Nous avons changé de cabinet comptable pour une grande société disposant de bureaux dans le monde entier, afin de mieux nous orienter à l’international.
- Nous avons fait appel à un nouvel avocat, qui a révisé nos contrats avec les indépendants et les entreprises.
Expérience des développeurs
Comme dans tout métier, un atelier sale et dangereux, avec des outils émoussés et à moitié cassés, n’incite pas à produire d’excellents résultats. C’est possible, certes, mais ils seront bien moins nombreux. La programmation n’échappe pas à cette règle. Réduire les obstacles stimule la créativité et la productivité, tout en aidant à attirer et à retenir les talents. Nous investissons donc beaucoup dans un environnement de travail propre et sûr, ainsi que dans l’amélioration de nos outils.
CI
- Nous avons ajouté des aperçus navigables du site web à chaque pull request.
- Nous avons créé des tags Git lors du déploiement pour suivre plus facilement les changements entre les versions de l’API.
- Nous avons divisé par deux la durée d’exécution de la suite de tests de l’API.
- Nous avons divisé par trois le temps de création des images de système d’exploitation (AMI).
- Nous avons remplacé Jenkins par GitHub Actions, ajouté trois exécuteurs Hetzner et créé un script pour en ajouter facilement. Nous sommes également passés des numéros de build aux URL de build, ce qui facilite les déploiements depuis différentes branches, différents environnements de CI ou différentes sources.
- Nous avons migré tous les SDK de Travis vers GitHub Actions.
- Nous sommes passés de déploiements personnalisés à une chaîne CI/CD complète.
- Le score Lighthouse du site web apparaît désormais dans chaque pull request.
Qualité du code
- Nous avons abandonné la prise en charge d’Internet Explorer.
- Nous avons ajouté Sentry pour mieux suivre les erreurs côté client que notre site web pourrait générer.
- Nous avons introduit React + Hooks, TypeScript, Jest, Playwright et Async/await dans de nombreuses bases de code.
- Nous avons déployé nos propres règles de lint et les avons appliquées à tous nos grands projets JS.
- Nous avons abandonné les modules non maintenus comme knox et required-cache, ainsi que les versions non maintenues d’async, aws-sdk, lodash, etc.
- Nous avons fait passer notre API de Node 10 à Node 14 pour pouvoir utiliser le chaînage optionnel et d’autres fonctionnalités.
Durée des cycles d’itération
- Nous avons rendu l’initialisation de notre environnement de développement autonome, sans intervention manuelle, et amélioré sa documentation.
- Nous avons rendu le lancement et la suppression des clusters de préproduction si simples que cela en est devenu amusant. Nous avons également séparé la gestion de leurs journaux, ce qui nous permet de repérer les problèmes sans réveiller l’équipe d’exploitation.
- Nous avons supprimé les variables de tous les chemins utilisés par require ou import afin d’améliorer l’autocomplétion du code dans les éditeurs.
- Nous avons accéléré la génération du contenu statique d’un facteur quatorze.
- Nous avons fait passer Webpack de 2 à 5 et adopté Dart Sass ainsi que le découpage du CSS et du code pour améliorer la génération et le téléchargement des ressources. Nous avons abandonné Jekyll sous Docker, trop lent sur macOS.
Gestion de projet
- Nous avons remplacé Asana par GitHub Projects et ajouté des automatisations pour faciliter la gestion de projet.
- Nous sommes passés à GitHub gratuit et avons ajouté des actions pour compenser certaines lacunes.
Croissance
- Nous avons conçu des T-shirts que vous pouvez porter en soirée.
- Nous avons presque doublé notre chiffre d’affaires.
- Nous avons mis en place Slack Connect pour nos clients les plus précieux.
- Nous avons envoyé notre 50e numéro de Dev Times (English).
- Nous avons signé notre premier contrat de support OSS.
- Nous avons accueilli WeTransfer, Blackboard et bien d’autres parmi nos nouveaux clients.
Infrastructure et pile technique
- Nous avons ajouté la prise en charge des rechargements pour HAProxy et Nginx afin que les déploiements se fassent sans interruption.
- Nous sommes passés à des profils nix propres à chaque build, ce qui a résolu une grande partie — voire la totalité — de nos problèmes de pile technique en production.
- Nous avons renforcé notre environnement de production pour qu’il puisse supporter une panne de base de données de 20 minutes.
- Nous avons amélioré la gestion des interruptions d’instances Spot pour transférer les tâches vers d’autres machines de façon plus fluide.
- Nous avons amélioré la limitation du débit et les réponses associées pour que les clients puissent mieux les gérer.
- Nous avons déplacé toute notre ancienne infrastructure AWS dans un VPC.
- Nous avons porté raidmaker de Bash vers Python pour initialiser de façon plus robuste et correcte tous les disques que nous attachons à une machine lors de son lancement sur AWS.
- Nous avons mis à niveau notre système d’exploitation de base vers Ubuntu Focal, supprimé les snaps et programmé l’application automatique des correctifs de sécurité apt. Nous avons aussi ajouté des outils pour examiner les fichiers coredump.
- Nous avons mis à niveau Terraform vers
1.0, FFmpeg vers4.3, Nix vers2.3et HAProxy vers2.0.
Open source
Uppy
- Nous avons plus que doublé la part du chiffre d’affaires allouée à Uppy.
- Nous avons ajouté la capture d’écran à Uppy.
- Nous avons permis à Uppy Companion de transmettre les téléversements en flux continu, ce qui le rend beaucoup plus rapide et moins gourmand en ressources.
- Nous nous sommes attaqués aux problèmes d’expérience des développeurs dans Uppy (corepack, remplacement de Lerna par Yarn 3, GitHub Actions, Vite, ESBuild, Stale Bot, publications automatiques).
- Nous avons fait passer le nombre d’issues ouvertes d’Uppy de 120 à 40.
- Nous avons rendu Uppy fluide avec des milliers de fichiers grâce à une liste de fichiers virtualisée.
- Nous avons réduit la taille du bundle d’Uppy, notamment en supprimant les polyfills pour IE.
- Nous avons publié Uppy 2.0.
- Nous avons mis à niveau Preact vers sa dernière version dans Uppy.
tus
- Nous avons accéléré
tusd, ajouté la prise en charge de RST et implémenté le système de plugins Go de HashiCorp. - Nous avons commencé à travailler sur tus-v2. L’objectif est sa normalisation au sein de HTTP, avec l’aide d’Apple, de Cloudflare et de Vimeo.
SDK et Node.js
- Nous avons ajouté une intégration Terraform.
- Nous avons fait en sorte que tous les SDK officiels réussissent à nouveau les tests de CI.
- Nous avons réécrit et modernisé le SDK Android, le SDK Java, l’intégration Zapier et le SDK Node.js (v3) (English).
- Nous avons financé un Transloadian membre du comité de pilotage technique de Node.js pour qu’il consacre 20 % de son temps au fonctionnement interne de Node.js.
Exploitation
- Nous avons ajouté de l’observabilité avec Prometheus et Grafana. Nous avons inclus des captures des graphiques dans les alertes d’astreinte pour faciliter le diagnostic.
- Nous avons ajouté des outils SSH pour ouvrir rapidement des sessions sur les machines dans de nombreux onglets ou volets.
- Nous avons créé des politiques d’équipe pour la sécurité et la rotation des astreintes.
- Nous avons agrandi l’équipe d’astreinte pour alléger la charge des membres déjà présents.
- Nous avons introduit le concept d’alertes d’astreinte de faible gravité, que nous pouvons laisser passer pendant la nuit sans risque et examiner le matin.
Sécurité
- Nous avons corrigé les problèmes signalés dans plus de vingt rapports de sécurité de hackers éthiques.
- Nous avons introduit nsjail pour renforcer l’isolation des outils d’encodage dans des bacs à sable.
- Nous avons réduit les autorisations IAM de différents rôles de machines en analysant précisément leurs besoins et en supprimant tout le reste.
- Nous avons simplifié la rotation des secrets et renouvelé tous les secrets.
Site web
- Nous avons atteint un score Lighthouse de 100 points pour l’accessibilité sur notre page d’accueil et configuré la CI pour qu’elle échoue si ce score passe sous 100, afin d’éviter toute régression dans ce domaine.
- Nous avons créé plus de dix nouvelles démonstrations (English).
- Nous avons créé une toute nouvelle page Diffusion de contenu avec une démonstration interactive des temps de redimensionnement quasi instantanés de notre Smart CDN.
- Nous avons créé une toute nouvelle page Sécurité et répondu à de nombreuses questions sur ce sujet. Elle comprend aussi un tableau d’honneur des hackers éthiques qui découvrent et signalent des vulnérabilités.
- Nous avons amélioré l’expérience utilisateur de l’assistant de création de Template.
- Nous avons ajouté des pages présentant les fonctionnalités de tous nos Robots, leurs démonstrations et leurs tarifs.
- Nous avons déplacé de grandes parties de notre site web vers S3 et CloudFront, ce qui accélère nettement le chargement des pages (US : 2x, EU : 6x, AP : 100x).
- Nous avons migré de nombreuses parties de la console vers React (progressivement, avec déjà ~80 % en production), offrant à nos clients une interface plus rapide et agréable, et à nos développeurs une meilleure expérience pour y travailler.
- Nous avons repensé notre page d’accueil.
- Nous avons réécrit et repensé toute la documentation.
- Nous avons réécrit et repensé la page d’état et l’avons entièrement sortie d’AWS. Jusqu’au bureau d’enregistrement du domaine, elle est désormais complètement indépendante de la production.
Conclusion
À cela s’ajoutent plus de six cents petites corrections et améliorations qui ont globalement rendu le fonctionnement plus fluide.
En tant qu’entreprise numérique travaillant à distance, nous avons eu de la chance pendant cette pandémie. Nous avons vu d’autres entreprises affronter des crises menaçant leur existence, alors que nous pouvions souvent continuer à travailler comme nous en avions l’habitude. Nous n’avons pas considéré cela comme acquis et avons aussi délibérément décidé (English) de continuer à créer de la valeur là où nous le pouvions.
Le mérite personnel que je peux revendiquer pour tout le travail accompli ensuite est très limité. Cela renforce d’autant ma fierté envers mon équipe et les innombrables montagnes qu’elle a déplacées. Ses membres ont non seulement maintenu notre navire à flot, mais l’ont aussi propulsé vers des eaux inconnues. Notre équipe a persévéré quand il le fallait et profité des bons moments quand c’était possible.
Mes chers Transloadians, je vous remercie pour toutes vos contributions. Je ne sais pas vraiment comment nous avons réussi à réunir autant de personnes talentueuses et attentionnées, mais je ne voudrais vivre cette aventure avec aucun autre équipage.
(Il reste toutefois de la place pour agrandir l’équipage. Si vous souhaitez travailler pour Transloadit, consultez /jobs/ (English).)
Avez-vous dressé la liste de vos réalisations de l’année dernière ? La pandémie et d’autres
épreuves nous ont parfois donné un sentiment d’impuissance. Il est donc bon de prendre un moment
pour réfléchir à ce que vous avez bel et bien accompli. C’est peut-être plus que vous ne le pensez.
— transloadit (🤖 Transloadit) 3 février 2022