C6 Bank
Magic Media
Ingénieur en tests de charge
À propos du poste
Cyrex, une entreprise Magic Media, est une start-up média et tech portée par la créativité et l'innovation. Nous travaillons avec des développeurs et éditeurs de premier plan dans l'industrie du jeu vidéo, en fournissant un support et des solutions conçus autour des besoins individuels et réalisés par des experts mondiaux.
Depuis plus d'une décennie, Cyrex sécurise et teste la résistance des produits de certaines des entreprises technologiques les plus exigeantes au monde, des plateformes de divertissement mondiales aux infrastructures financières et de santé réglementées. Nous sommes une petite équipe, mais nous avons bâti une liste de clients et un historique qui dépassent largement notre taille.
Les tests de charge sont l'une de nos spécialités les plus reconnues.
Les studios et les équipes de plateforme nous contactent avant un lancement, une sortie majeure ou une campagne marketing, le moment où des années de travail rencontrent soudainement un très grand nombre d'utilisateurs simultanés, sans possibilité de seconde tentative. Notre travail consiste à simuler ce moment avant qu'il ne se produise, à identifier ce qui casse, à comprendre pourquoi, et à travailler aux côtés du client pour le réparer.
La plateforme s'étend sur un Go backend, deux React frontends, et une infrastructure AWS capable de générer suffisamment de charge pour mettre les systèmes sérieux sous une véritable contrainte.
Cette combinaison explique pourquoi nous recherchons quelqu'un avec une large palette de compétences plutôt qu'un spécialiste étroit. Ce rôle se situe quelque part entre l'ingénierie logicielle, l'ingénierie de performance, l'analyse des systèmes et la livraison technique, et vous devez être à l'aise pour passer de l'un à l'autre.
Nos clients sont techniques. Ils comptent sur notre jugement autant que sur nos outils.
Nous le faisons en utilisant une plateforme de tests de charge que nous avons construite nous-mêmes. Elle est mature, éprouvée et déjà en production. Une partie de votre rôle consistera à la maintenir : maintenance, corrections de bugs, mises à jour des dépendances et de l'infrastructure, et améliorations ciblées lorsque les missions l'exigent.
La maintenance de la plateforme n'est cependant pas un travail à temps plein, et nous ne prétendrons pas le contraire. La plus grande partie de ce rôle concerne les tests de charge eux-mêmes.
Cela commence par l'ingénierie des tests : la conception de scénarios qui modélisent fidèlement le comportement des utilisateurs réels et leur implémentation en Python contre les protocoles utilisés par le système du client.
Cela implique également de travailler directement avec les clients. Nos tests de charge sont dirigés par des experts ; nous ne livrons pas un tableau de bord et disparaissons. Nous travaillons par itérations avec l'équipe d'ingénierie du client : nous convenons de ce que nous essayons de prouver, nous construisons le scénario, nous exécutons le test, nous analysons les résultats ensemble, nous identifions le goulot d'étranglement, nous apportons des modifications, et nous recommençons.
Vous participerez à ces sessions et, à mesure que vous progresserez dans le rôle, vous serez amené à les diriger.
Qui nous recherchons
Nous recherchons un ingénieur qui est véritablement à l'aise pour naviguer sur toute la pile technologique et qui est également à l'aise pour travailler directement avec un client.
Vous écrivez du Python solide. C'est le langage de nos scénarios de test et d'une grande partie des outils qui les entourent, c'est donc là que vous passerez la majeure partie de votre temps de développement. Mais vous n'êtes pas attaché à rester dans un seul langage : maintenir la plateforme en bonne santé signifie être prêt à travailler en Go, TypeScript, Terraform, et avec AWS selon la situation.
Vous êtes à l'aise pour travailler dans des bases de code que vous n'avez pas écrites. Une plateforme mature bénéficie de changements soignés et bien définis plutôt que de réécritures inutiles. Vous pouvez intervenir dans un code inconnu, comprendre son fonctionnement, diagnostiquer le problème réel, le corriger correctement, et idéalement laisser les choses un peu mieux qu'en les trouvant.
Les systèmes sous stress vous intéressent. Quand quelque chose commence à tomber en panne à haute concurrence, votre instinct est de comprendre exactement pourquoi. Vous êtes à l'aise pour fouiller dans les métriques, les traces, les logs et le comportement de l'application jusqu'à ce que vous puissiez expliquer ce qui se passe réellement, et vous savez que la première explication n'est pas toujours la bonne.
Vous pouvez également communiquer clairement ce raisonnement aux clients. Pas dans un sens commercial, mais en tant qu'ingénieur : expliquer ce qu'une courbe de latence dit à leur équipe, remettre en question un scénario de test qui ne répondra pas à la question qu'ils pensent, et rester calme et méthodique lorsqu'un test en direct produit un résultat inattendu.
Enfin, vous êtes pragmatique quant aux aspects moins glamour de l'ingénierie de performance. Les données de test, les pools de comptes, les clients de protocoles instables, les environnements difficiles et la reproduction de comportements qui n'apparaissent que sous charge ne sont pas des distractions du travail, ils sont le travail. Les ingénieurs qui réussissent ici apprécient également de résoudre ces problèmes.
La pile technologique
- Ingénierie des tests : Python, utilisation d'outils open-source de tests de charge que nous étendons considérablement
- backend de la plateforme : Go, PostgreSQL
- Frontend: React, TypeScript
- Infrastructure : AWS, infrastructure as code, conteneurs
- Protocoles : HTTP, WebSockets, gRPC, protobuf, et occasionnellement des protocoles binaires propriétaires
- 4+ années d'expérience en ingénierie logicielle, avec une propriété significative de ce que vous avez livré.
- Solides compétences en Python. C'est le langage principal pour ce rôle.
- Expérience pratique du cloud, idéalement avec AWS, y compris l'infrastructure as code et les conteneurs, et une compréhension de ce qui se passe techniquement et financièrement lorsque l'infrastructure est mise à l'échelle de manière agressive.
- Assez de largeur de compétences pour maintenir avec confiance un backend typé et un React frontend que vous n'avez pas construit à l'origine, même si aucun des deux n'est votre spécialité principale.
- Une compréhension pratique des systèmes distribués et de leurs modes de défaillance, y compris les timeouts, le back-pressure, les limites de connexion, la contention de ressources, et la différence entre un système lent et un système qui est réellement en panne.
- Les compétences en communication nécessaires pour diriger une session technique avec un client, expliquer clairement ce que vous observez et faire des recommandations d'ingénierie solides.
- Excellent anglais parlé et écrit.
- L'expérience avec des outils de performance ou de tests de charge tels que Locust, k6, JMeter, Gatling, ou des outils que vous avez construits vous-même est un avantage considérable.
- L'expérience avec les jeux, les systèmes en temps réel ou les plateformes grand public à fort trafic est également utile, mais pas obligatoire.
Une note pratique sur le rôle
Certaines fenêtres de test se déroulent en dehors des heures de bureau normales.
C'est la nature du travail : les tests doivent parfois être exécutés lorsque l'environnement d'un client est disponible, ou lorsque les équipes d'ingénierie de différents fuseaux horaires peuvent participer.
Ce n'est pas constant, et nous nous organisons en conséquence lorsque cela se produit, mais c'est une partie réelle du rôle et nous préférons être clairs à ce sujet dès le départ.
- L'opportunité de travailler sur des systèmes derrière des produits utilisés par un très grand nombre de personnes, aux moments où la fiabilité est la plus importante.
- Un rôle qui combine l'ingénierie pratique, la résolution de problèmes techniques approfondis et la livraison client, plutôt que d'être purement une file d'attente de tickets ou purement du conseil.
- Une réelle appropriation d'une plateforme de tests de charge mature qui est déjà construite, éprouvée et fonctionnelle, avec la liberté de l'améliorer au fur et à mesure de l'évolution de nos besoins.
- De l'espace pour grandir avec Cyrex. À mesure que vous développez votre expertise et assumez plus de responsabilités, il existe des opportunités de diriger des missions plus importantes et plus complexes, d'approfondir votre responsabilité technique, de contribuer à façonner notre approche de l'ingénierie de performance, et d'évoluer vers des rôles de leadership technique ou d'équipe plus larges.
- Contact direct avec les équipes d'ingénierie que vous aidez, avec l'opportunité de devenir un interlocuteur technique de confiance pour certaines des entreprises technologiques les plus exigeantes au monde.
- Accès direct aux fondateurs et à la direction, avec des décisions prises en quelques jours plutôt qu'en trimestres.
- Une rémunération compétitive avec des évaluations simples et régulières.
- Une petite équipe multiculturelle où votre contribution est visible et où il y a de la place pour façonner votre rôle à mesure que l'entreprise évolue.
