L'histoire derriere S42 - Stud42

L'histoire derriere S42 - Stud42
Logo de la version open source (en 3D grâce à l'AI)

Table des matières

Après 10 ans, je trouve ça intéressant de parler de l'histoire de ce projet, de comment il est né, comment il est devenu le numéro 1, et le seul de ce style, ce qui relève d'une success story. Mais aussi relativiser sur le fait que ça a été un bac à sable durant des années, où les itérations ont été nombreuses !

💬
Si vous avez des questions, envie d’échanger ou de partager, je suis dispo sur le Discord de S42 : https://discord.gg/ambgQdREXq

POC

En 2015, quelques mois après mon arrivée à 42, il y avait une vingtaine de sites de cluster maps, une dizaine de sites de listes d'amis, de statistiques, etc.

Mon idée à ce moment-là : je voudrais bien me faire un outil qui a tout, car changer de site pour chaque feature, ça me saoule !

Donc je me suis mis à écrire un petit site "stud42" qui était que pour moi, à l'époque en PHP ! Oui… du PHP 5.4 en plus, c'était dur, mais c'était comme ça à l'époque 🧓.

Vous voulez savoir un truc drôle ? Cette version 0.1 n’avait aucune gestion d’utilisateur ni de permissions, car ce n’était que pour moi de base ! Et quand je l’ai passée à mon coloc et à d’autres potes du campus, bah oui, on s’est retrouvés à jouer avec cette faille de sécurité, en ajoutant et supprimant des amis à nos potes, car l’API était basique et vraiment UNSECURE !

🤣
POST /api/friends/:me/add
Oui, on pouvait ajouter des amis à d’autres personnes en remplaçant le :me par un autre login étudiant.

Suite à ça, j’ai vite corrigé le problème, en ajoutant des règles basiques de sécurité et d’authz.

Les languages de la V0

Jusqu’un jour où une personne dans un cluster que je ne connaissais pas vient me voir et me montre mon propre site, en me disant :
"Tiens regarde ce qu’un pote m’a montré, c’est vraiment pas mal comme site."
À ce moment-là, je lui ai répondu : "Alors, c’est mon login qui est en bas à gauche, donc oui je le connais 😂"
Je lui ai demandé naïvement : "Mais qui t’a montré ça ?" et il m’a répondu par un login que je ne connaissais même pas !

C’est à ce moment-là que je me suis dit : "Mais combien de personnes utilisent mon site ?"
Et j’ai installé Google Analytics. Et là, SURPRISE : plus de 500 personnes, dans une école à l’époque composée d’environ 3000 étudiants, utilisaient ce POC en PHP 5.4.
Ça a été un choc, et à ce moment-là je me suis dit : "Je viens de créer quelque chose d’utile ? Peut-être que je vais pouvoir prendre plus de temps pour le rendre meilleur, un bac à sable qui a une prod qui marche !"

L'interface de la v0.17

La Version 1.0

À ce moment-là, j’étais dans une phase : "PHP ça me saoule, je veux changer d’air", donc j’ai cherché des alternatives pour faire un MVP rapidement, sans trop de maintenance, car j’avais un cursus à suivre !

À 42, je faisais partie de la bande des nocturnes : arrivée à 18h, départ à 8h du mat’ !

Et un soir, je ne me rappelle plus pourquoi, mais cette phrase est arrivée dans ma tête :
"Et si j’apprenais Ruby et Ruby on Rails 4.0 ?"
Sur un coup de tête, je me retrouve à apprendre RoR en une nuit, et je redéveloppe Stud42 en Ruby from scratch en une autre nuit.

Les languages de la V1.0

À ce moment-là, j’avais l’effet "wow", car ça avait été super rapide et simple à mettre en place.

Quelques jours après, en décembre 2015, avec un nouveau design, de nouvelles fonctionnalités et une grosse envie de me dépasser, je présente la version 1.0 aux étudiants.
Le 14 décembre 2015, la V1 en Ruby on Rails est en ligne !

En 2 mois, je passe de 500+ utilisateurs à 1800+, ce qui veut dire que maintenant, plus de la moitié des étudiants utilisaient Stud42 quotidiennement.

L'interface et le UI kit de la V1.0

Oui, à ce moment-là, on était 3 sur le projet et on avait fait une version native pour tous les supports. On était déterminés à faire un produit vraiment cool pour tous !

On avait un vrai monopole sur les applications étudiantes. Toutes les alternatives avaient fermé et redirigeaient vers stud42.fr.

On avait même bossé avec certains sites concurrents pour permettre un transfert simple entre leurs plateformes et la nôtre.

Leurs devs intégraient les fonctionnalités manquantes dans Stud42 avec nous : c’était gagnant-gagnant, et un vrai réseau peer-to-peer, avec une philosophie de partage "par les étudiants, pour les étudiants".

La Version 2.0

Le running gag de Stud42. En 2017, j’étais staff à 42, et je voulais que l’outil soit utilisé non seulement par les étudiants, mais aussi par les staffs pour leur travail quotidien.
Cette version a été refaite 6 fois ! Une fois en Ruby on Rails, une fois en Angular (je me suis perdu là), une fois en React. C’était la première fois que je touchais à React.
Le bac à sable était toujours là !

Mais à chaque fois, mes ambitions étaient trop grandes. La version 2.0 n’a jamais vu le jour.

J’avais l’accès et l’autorisation de l’équipe design de 42 pour intégrer le site dans l’écosystème. La charte graphique était proche des autres outils (comme cv.42.fr, que j’avais mené aussi en une nuit d’ailleurs 😂).

😮
Et oui ! en 2018, stud42.fr devait devenir stud.42.fr et remplacer une grosse partie de meta.intra.42.fr.
L'interface mis à jour de la version 2.0

Tout était au vert : nouvelles fonctionnalités, nouveau design, nouvelle archi.
Cette version a failli sortir fin 2018… mais la vie vous rattrape parfois, et des soucis persos sont venus ralentir la dernière ligne droite.

Début 2019, il fallait penser autrement. Je n’avais plus le temps de passer mes journées sur ce projet.
J’ai donc fait un choix : rendre l’application open-source lorsque je quitterais 42, pour que l’idée initiale "par les étudiants pour les étudiants" perdure !

La Verision 3.0 - OpenSource

8f4374e, c’est le commit initial de cette version. Le 24 février 2022.

🥚
Fun Fact : f4374e est du coup devenu le code couleur du rouge sur s42.app en easter egg !

Il s’en était passé du temps depuis la V2, et encore plus depuis la V1… qui tournait encore !
Sans bugs, sans reboot, sur un vieux VPS OVH… sans Kubernetes, sans Docker, sans systemctl… juste un start.sh à l’ancienne.
Aucune sécurité contre les crashs, ce script shell fait peur et pourtant, il a tenu la V1 pendant 6 ans !

Les languages de la V3.0

J’ai passé près de 6 mois à réfléchir à la structure, à une première version "clean", "simple", "easy to learn".
Tout en essayant de créer une app proche de ce qu’on voit en entreprise, pour que ce projet soit aussi un espace pédagogique.
Moi y compris !

J’ai énormément appris sur la maintenance d’un projet open-source, car Stud42 était mon premier projet open-source. Et vous savez pourquoi ?
Parce que j’avais honte de mon code. Je me disais que je n’avais pas la prétention de partager un code imparfait.
Mais si j’ai un truc à dire à ce sujet : allez-y, pour vous ! Vous allez apprendre. Des autres, et de vous-même.

Des personnes que je ne connaissais pas m’ont fait des issues, m’ont appris à mieux gérer mes workflows, à mieux écrire mon code pour l’open source, à mieux documenter. 💜

Juillet 2022 – Lancement de la bêta privée

Une bêta lancée sur une machine digne d’une potatoe de chez “Chut Chut Pas de marque”.
Accessible via GitHub Sponsorship, en mode sponsorware.
Je pensais avoir une ou deux personnes, j’en ai eu une dizaine. C’était inespéré.

On a commencé à expérimenter, à chercher les bugs, à stabiliser le tout.
Puis on a changé de format : accès à la bêta si tu mets une star au projet sur GitHub.

Ça a super bien marché, mais aussi créé des tensions. Certains n’aimaient pas ce modèle, se sentant "obligés".
Ce que je comprends totalement. Il y a eu des issues, j’ai été clair : c’est un choix. La bêta est temporaire, vous êtes libres d’attendre la version publique.

Le message affiché avant de lier le comtpe Github.

Lancement de la bêta publique

Ça y est, après presque un an à bosser avec les bêta-testeurs, on y est : une version entièrement opérationnelle !
Le 28 juin 2023 marque la fin de la bêta fermée.

Les restrictions sont donc retirées, et tout le monde est maintenant libre d’accéder à l’outil sans limite.
Et à partir de ce moment-là, l’infra du site se fait bombarder de DDoS.

Certaines personnes n’aimaient apparemment pas s42.app.
Pendant presque 4 mois, on a reçu des attaques DDoS par milliers, certaines atteignant des To de bande passante.
Je n’imagine pas le coût d’une telle opération, et je ne comprends pas vraiment l’intention derrière.

Mais, force est de constater que l’infra tient !
Même sous DDoS, les APIs et l’interface répondaient en moins de 250ms, ce qui est ma limite MAX perso.

Mes targets de temps de réponse (purement perso) :

  • <50ms 👏🟢
  • <250ms 👍🟠
  • 250ms 😡🔴

L’infra est d’ailleurs un point super important de cette version, car s42.app avait une vision : couvrir tous les campus du monde.

Challenge AGAIN !

Sunset de stud42.fr

Après 6 ans de loyaux services, il fallait dire adieu à cette version 1.0.
Maintenant que la bêta publique était dispo sans restrictions, j’ai pu fermer la V1 et rediriger tout le monde vers s42.app.

Sunset disponible sur stud42.fr

J’ai mis le code source en archive privée sur mon GitHub, pour garder une trace que j’étais passé par là.
Et je vous invite à faire pareil : de temps en temps, regardez derrière vous, et dites-vous que vous avez évolué, que vous avez appris des choses grâce à toutes ces lignes de code !
Et grâce aux échanges avec d’autres devs que ça a pu créer.
Vous verrez, ça fait du bien de prendre du recul parfois !

Vision de la 3.0

Maintenant que la V3.0 est sur les rails, il y avait enfin le potentiel de reprendre le taf initial que j'avais fait en tant que staff : remplacer meta.intra.42.fr par un outil open-source.

Car vous le savez peut-être pas, mais ce module de l'intra est un enfer sur Terre.
Pour y avoir mis les mains pendant des années, il aurait dû subir le même sort que forum.intra.42.fr
(Vous connaissez pas le forum ? Tant mieux 😂 Même si des pépites de l’histoire de 42 y étaient.)

J’ai donc commencé à réorienter mon apprentissage vers la communication, en contactant directement 42 Network.
En juillet 2023, j’envoie un mail au staff pour reparler du projet avec d’anciens collègues et les nouvelles personnes en place.
Bon… ça s’est pas passé comme prévu, j’ai jamais eu de réponse.
L’apprentissage aura été de courte durée 😂

De nombreux campus rejoignent l’aventure !

Aujourd’hui, près de 20 campus sont présents sur l’application, soit presque la moitié du réseau 42 Network. Un vrai succès !

Sachant que chaque ajout de campus demande une autorisation écrite de l’équipe d’administration du campus, ça ralentit beaucoup le développement.
Mais c’est le jeu !

L'interface de la version 3.0 (Existe aussi en Light mode)

Les stats !

On adore les stats ici, donc voilà quelques chiffres de la V3 et de son impact sur la vie étudiante :

  • ✅ Plus de 115 000 utilisateurs actifs
  • 🔄 Des centaines de millions de connexions
  • 💻 Une plateforme 100% open source depuis 2022
  • 💪 Un projet maintenu bénévolement avec passion
  • 🧑‍🤝‍🧑 Une communauté soudée autour de valeurs communes
  • ⏱️ Des milliers d’heures de développement
  • 💸 Le tout payé par mes soins (~20 000€ sur 10 ans)
  • 89ms de temps de réponse moyen depuis juillet 2023
  • 🔔 123 805 525 requêtes reçues par les webhooks
  • 🛑 0.01917% de downtime depuis juillet 2023
    → soit seulement 3h 21min 32s d’indisponibilité (principalement à cause d’un oubli de régularisation ADM 😂)

Les petits soucis

Oui, car tout n’est pas toujours tout rose !
En effet, cette version repose sur un système de webhooks de l’intra.

QUOI ? DES WEBHOOKS ?!
Oui, c’est bien ça.

En 2018, quand j’étais staff, j’ai maintenu l’API et développé les webhooks.
Et comme Stud42 était l’app étudiante qui consommait le plus l’API de 42, j’avais souvent une longueur d’avance pour voir les bugs et optimiser avant que ça n’impacte tout le monde.

L’idée était simple : développer les webhooks pour résoudre les spikes de l’API.
Parce qu’à chaque heure pile, on avait des pics de +1500% liés aux cron scripts : pour récupérer les updates des students, projets, locations, etc.

Donc j’ai créé les webhooks et proposé ça aux campus et aux "verified apps" (oui, le ✅ bleu qui disait que l’app avait été vérifiée par le staff 42).

Mais après mon départ du staff, les "verified apps" ont été dépréciées, car personne n’a voulu reprendre le sujet.
Et c’est la vie : votre code finira toujours à la poubelle, c’est une des règles du jeu, le prennez jamais personnellement !

En 2018, en remerciement pour le taf fait en bénévole, 42 m’a autorisé à garder l’accès aux webhooks pour s42.app.
Sauf que… avec tous les changements de staff/direction en 2018/2019, cet accord écrit a été "perdu" côté 42.
🤦‍♂️ LA TUILLE.

La CNIL, RGPD Gang

En 2018, j’étais staff. Et un beau jour… qui je vois débarquer au bocal ?
Un commissaire de la CNIL.
Bah je vous le dis : c’est pas très cool 😅

Une plainte avait été déposée contre 42, et c’est moi qui ai dû gérer ça.
J’ai pas mal appris ce jour-là sur l’importance de la protection des données.
(C’est d’ailleurs ce qui a signé la fin du fameux forum.intra.42.fr.)

En 2019, les infos perso des étudiants sont retirées de l’API (comme le numéro de téléphone).
Mais… elles n’ont pas été retirées des webhooks, car encore utilisées par les campus dans le monde.

Et vous voyez venir le problème…
Les données que je recevais sur s42.app contenaient encore ça, et je m’en suis rendu compte en discutant avec des utilisateurs.

J’ai donc réagi direct en supprimant les infos perso qui n’étaient plus dans l’API :
➡️ https://github.com/42atomys/stud42/issues/487

En même temps, j’ai fait un retour à 42 Network pour leur demander de mettre à jour la doc.
Spoiler : le changement n’a jamais été fait 🤡
(La doc de l’API officielle est toujours outdated.)

Mais maintenant qu’on est conforme, tout est rentré dans l’ordre. Crise bien gérée 🎉

Le "partenariat" avec 42

C’est là que le dernier défi en date arrive, et il est toujours en cours… Mais ceci est une autre histoire !

Et voilà.
On est à la fin de cet article et… de s42.app.

C’est avec beaucoup d’émotion qu’on annonce aujourd’hui la fermeture définitive de S42.
Après 10 ans de service ininterrompu et 6 mois de combat pour sauver le projet, l’aventure commune se termine.

Plus d’infos ici :

Après 10 ans au service de la communauté 42, S42 ferme ses portes
C’est avec une profonde émotion que nous annonçons aujourd’hui la fermeture définitive de S42. Après une décennie de service ininterrompu (...)
💜
Merci pour ces 10 ans.
J’ai énormément appris. Vraiment. 🙏

Abonnez-vous à la newsletter de Atomys et restez informé.

Ne manquez rien. Recevez tous les derniers articles directement dans votre boîte de réception. C'est gratuit !
Nice ! Vérifiez votre boîte de réception et cliquez sur le lien pour confirmer votre abonnement.
Erreur ! Veuillez entrer une adresse e-mail valide !