Dernière mise à jour : 16 mai 2024

Qui suis-je ?

Stéphane Klein, artisan développeur de plus de 20 ans d'expérience, basé à Montrouge, au sud de Paris.

De 2019 à 2023, j'ai occupé le poste de CTO dans une startup parisienne, que j'ai rejointe juste après son financement initial. Avec mes collègues, nous avons élargi l'équipe tech de 1 à 16 personnes au cours de deux levées de fonds successives d'environ 5 et ensuite 20 millions d'euros.

Depuis septembre 2023, je travaille sur le développement d'une application du type "knowledge management" que j'ai lancée avec trois co-fondateurs.

Contact

Vous pouvez me contacter par mail à contact@stephane-klein.info ou au 06 61 48 76 04, il est préférable de m'envoyer un SMS avant de me téléphoner.

Mes objectifs professionnels

Depuis mai 2024, je suis à la recherche de missions freelance de 4 à 8 jours par mois.
À partir de septembre 2024, il est possible que je sois à la recherche de missions de 16 jours par mois, en freelance ou en tant que salarié.

Vous pouvez consulter la liste de mes prestations en freelance.

Projets susceptibles de m'intéresser

Je suis ouvert aux missions de Contributeur Individuel ou de management, au sein de toutes petites structures ou des ETI.

Types de projets qui ne m'intéressent pas

Actuellement, les secteurs tels que les DeFi, l'AdTech et les jeux vidéo ne m'intéressent pas.
Les projets d'applications mobiles natives ne sont pas non plus dans mes recherches actuelles, bien que ce soit un domaine qui m'intéresse, je n'ai pas encore développé de compétences spécifiques dans ce secteur.

Je ne souhaite pas manager une équipe non francophone. Le management demande de la finesse et de la subtilité en communication, en raison de mon niveau d'anglais oral, je ne me sens pas en mesure de gérer efficacement une équipe non francophone.

Domaines d'expertise

Frontend Development : JavaScript (front), ReactJS, Svelte, SvelteKit, HTML/CSS avancé, TailwindCSS, Yjs

Backend Development : Go, Python, JavaScript (back), GraphQL, REST, gRPC, Playwright, écriture basique de script Bash, Singer (ETL)

Database : SQL, PostgreSQL avancé, PL/pgSQL, SQLite, Redis, Clickhouse, Neo4j (Cypher), Metabase

DevOps : Docker, Vagrant, Postfix, Nginx, Ansible, Terraform, Grafana, Prometheus, Loki, Kubernetes, Debian/Ubuntu/RedHat, Baremetal, AWS, Scaleway, OVH, Vector (data pipeline)

Software Engineering : Git, Scrum, TDD, Lean, GitOps

Expériences professionnelles

Cofondateur — Value Props Depuis septembre 2024

Je travaille depuis septembre 2023, en mode « solo dev » sur une application du type « knowledge management » que nous avons lancée avec trois co-fondateurs.

L'objectif de cette solution est de permettre aux entreprises de présenter leur produit via tous types de supports — page web, discours, fiches produits… —, toujours à jour, qui ont été créés et mis à jour via une webapp qui organise et présente de manière dynamique toutes les données marketing ou autrement dit, « la proposition de valeur ».

Pour en savoir plus vous pouvez consulter mon article « Liste des choix technologiques du projet Value Props ».

CTO — Spacefill Avril 2019 - Juin 2023

J'ai rejoint Spacefill parmi les tout premiers employés. En tant que CTO, j'étais responsable des choix techniques, du recrutement et du management des développeurs, le tout en étroite collaboration avec le CPO — cofondateur.

J'ai commencé par développer une marketplace de stockage en entrepôt, ensuite une web application de type OMS (Order Management System) et une web API publique.

Cette web API publique permettait de communiquer avec des applications de l'univers logistique, du type WMS, OMS, TMS, ERP.

J'ai travaillé sur l'implémentation et de déploiement de nombreuses intégrations dites "EDI", concrètement des programmes (de type worker) de transfert d'information d'un système à un autre — lecture de données via Web API ou via des fichiers exposés par le protocole FTP, puis transformation de ces données et pour finir, écriture de ces données sur une Web API ou à nouveau dans des fichiers via le protocole FTP.

Quelques-unes de mes activités de manageur :

  • Recrutement : rédaction et publication des fiches de postes, définition des critères de rémunérations, sourcing de candidats, tenue d'entretiens de recrutement , suivi d'"onboarding" des nouvelles recrues…
  • Discussion 2 fois par mois en tête-à-tête avec chaque membre de l'équipe tech et produit — généralement sous la forme de walking meeting — afin de garder du lien, recevoir du feedback, comprendre le ressenti de chaque personne, partager ma vision, répondre aux questions, partager des conseils.
  • Proposer des mises à jour des process de développement ou de management produit… pour répondre aux besoins du produit, aux difficultés et aux idées des développeurs. Mon objectif était de créer une direction commune tout en essayant d'atteindre un certain niveau de consensus.

Voici ce à quoi ressemblaient mes activités de développeur :

  • Coder en React et un peu en Node.JS
  • Écriture de query et mutation GraphQL
  • Faire évoluer la base de données PostgreSQL
    • modélisation des données (tables)
    • écriture de migration de données
    • écritures de triggers en pgSQL
    • ...
  • Écriture de fonctions PL/pgSQL pour implémenter des Queries ou Mutations GraphQL customs
  • Rédiger, améliorer et commenter des issues
  • Prendre soin de mes Merge Requests afin de les pousser le plus rapidement possible en production
  • Faire de la revue de code
  • Écrire des spécifications techniques et parfois participer aux specifications produits
  • Guider les nouveaux développeurs
  • Améliorer continuellement la documentation du projet
  • Écrire des tests UI
  • Des interventions ponctuelles DevOps (Terraform / Ansible)
  • Écrire, faire évoluer quelques scripts Python

Technologies utilisées :

Quelques informations supplémentaires concernant le fonctionnement du backend :

L'API GraphQL était auto générée par Postgraphile qui est un serveur OpenSource écrit en NodeJS qui se connecte "au dessus" de PostgreSQL.
Cela ressemble à Hasura, Supabase ou Firebase.
Les paramétrages, adaptations pouvaient se faire soit via des commentaires sur des ressources PostgreSQL (tables, champs), soit via la création de Views ou de functions PostgreSQL.
Les tâches qui ne pouvaient pas être effectuées par PostgreSQL, comme par exemple l'envoi de mails, la génération de PDF… sont effectuées par un "service worker", avec du code NodeJS "classique".

Méthode de travail

Nous essayions autant que possible de suivre la méthode Scrum.

Ce qui était mis en place :

Nous utilisions GitLab pour :

Tout changement dans le code ou la documentation passait par une Merge Request avec un process de review.

Devops Engineer, Product Owner — Scaleway Janvier 2018 - Avril 2019

J'ai été pendant 10 mois leader d'une petite équipe de trois personnes (Alexandre, Albert et moi) dont le but était de développer un nouveau produit IaaS de type baremetal-server as service".

Ce projet était assez technique, plutôt "bas niveau". Mon expérience en administration système du début des années 2000 chez LinBox, mes lectures des Linux Magazine et linuxfr m'ont été très utiles.

Concrètement, une application CLI permettait de gérer tout le cycle de vie — create, login, restart, debug, destroy… — de serveurs préalablement provisionnés et configurés en datacenter.
Cette application CLI communiquait avec un serveur central via le protocole gRPC/Protobuf.
Ces deux composants étaient développés en langage Go, avec des librairies du type gRPC, GenProto, SQLx, Cobra/Viper, Logrus, Migrate… (ce projet date de 2018, ces librairies ne sont peut-être plus pertinentes), la persistance était assurée par une base de données PostgreSQL et Minio pour le stockage des images disques.

Les technologies suivantes étaient utilisées pour piloter à distance les serveurs : DHCP server, iPXE, TFTP, IPMI.

Les différentes images des systèmes d'exploitation étaient préparées avec Packer pour fournir une expérience la plus proche de celle de l'utilisation des serveurs virtuels.

Le projet était testé presque entièrement avec Vagrant, Mock IPMI with Virtualbox et quelques conteneurs Docker. Le projet était entiérement déployé en infrastructure as code, avec Ansible et quelques scripts Bash.

L'enseignement majeur que j'ai pu tirer de cette expérience est la méthode de travail en équipe que nous avons réussie à mettre en place.
Au départ, l'inspiration m'est venu de mes observations du fonctionnement interne de chez GitLab, visible à travers leur Handbook.
Cette méthode s'est matérialisés par un environnement de développment de qualité, un concept que je nomme "Development Kit", et par des pratiques telles que le "Readme Driven Development", toute action de plus de 10 minutes commencent toujours par une issue ou une merge request, une étape de code review pour chaque Merge Request, effectuée par une personne ou plus quand le changement était impactant.

Cette méthode a eu entre autres les effets suivants : les contributions sur le projet étaient équilibrées — nous n'étions pas dans la situation où un développeur faisait 80% du travail —, très faible bus factor sur le projet, fort sentiment de possession du projet par tous les membres de l'équipe.

Je pense qu'encore maintenant, Albert et Alexandre gardent un agréable souvenir de travail sur ce projet.

Par la suite, j'ai essayé en tant que CTO chez Spacefill de construire une équipe en me basant sur cette expérience positive.


Les 6 mois suivants, j'ai rejoint l'équipe qui travaillait sur le produit "Kubernetes as a Service".

Kubernetes n'était pas nouveau pour moi, parce que j'avais travaillé sur cette technologie presque à plein temps pendant 2 ans, de 2016 à 2018 chez Tech-Angels.

Ce projet avait dépassé la phase de "prototypage", il fonctionnait et à mon arrivée, l'objectif était de finir toutes les tâches nécessaires pour le mettre en les mains des clients finaux.

Le déploiement de ce projet complexe — par nécessité — était entièrement automatisé via les outils Terraform et Ansible.

Ce projet était développé en Go et utilisait PostgreSQL.

Développeur fullstack — Gemnasium Juin 2017 - Décembre 2018

DevOps — Tech-Angels Janvier 2016 - Juin 2017

DevOps — Bearstech Août 2012 - Janvier 2016

DevOps — isWebdesign Janvier 2006 - Juin 2012

Développeur — Linbox FAS Septembre 2005 - Décembre 2005

Développeur — Freelance Janvier 2005 - Décembre 2005

Développeur — Linbox FAS Septembre 2004 - Décembre 2004

Développeur — KTP Concept Octobre 2001 - Août 2003