Voici mon playbook de dĂ©veloppement dĂ©taillant point par point toutes les bonnes pratiques et technologies que jâutilise dans le dĂ©veloppement dâun projet web.
Jâaborde ce playbook par sections et mâĂ©tend parfois sur des sujets un peu techniques. NâhĂ©sitez pas Ă consulter la table des matiĂšres Ă gauche pour lire directement les sections qui vous intĂ©ressent.
Développement web moderne
Câest une Ă©vidence depuis une dizaine dâannĂ©e : tout projet de plateforme web utilise le paradigme Single Page Application et api REST
Avantages:
- Un front dynamique, rapide et intelligent (logique d’affichage et de gestion du state complexe, gestion granulaire des appels API),
- Aucun rechargement de page pour une expérience utilisateur rapide et rassurante
- Utilisation des derniÚres fonctionnalités des frameworks Javascript modernes (Vue.js , React ou Angular): réactivité, composants ui réutilisables, expérience de développement moderne (hot reload, typing avec typescript, devtools intégré, écosystÚme npm..)
đ Une interface mobile par dĂ©faut
MĂȘme si, en fonction des projets la navigation desktop peut encore ĂȘtre dominante (en particulier pour les sites dâentreprise) le mobile nâest plus une option depuis plusieurs annĂ©es et le design responsive mobile compatible est Ă la base de tous les frameworks CSS et de tous mes projets. Jâutilise en ce moment en prioritĂ© Vue.js avec Quasar , mais travaille aussi avec React / Next.js , des frameworks javascript professionnels et mobile first (design responsive, composants compatible mobile).
Les design que je propose sont tous responsives (navigation, layout, composants ou widgets).
Site mobile first vs app mobile
La hype autour des apps mobiles sâest dissipĂ©e il y a plusieurs annĂ©es et les entrepreneurs et clients ont conscience de la rĂ©alitĂ© : personne nâinstalle dâapp inconnues. Câest un choix qui est rĂ©servĂ© soit aux entreprises dĂ©jĂ bien connues de lâutilisateur soit Ă des projets pensĂ©s exclusivement pour le mobile (par exemple jeu mobile).
Pour un projet de plateforme web, la valeur ajoutée est souvent nulle par rapport à un site mobile ready.
Dans la mĂȘme veine, la tendance concernant les progressive web apps est aussi passĂ©e. Aujourdâhui lâĂ©tat de lâart est de proposer un site pensĂ© mobile en utilisant si nĂ©cessaire des features PWA (navigation offline, service workers).
Un backend performant et léger
Si les front prennent de plus en plus dâampleur, la gestion du backend suit une courbe inverse et aujourdâhui on privilĂ©gie (Ă raison) des backend plus sobres, ciblĂ©s et maintenables. Câest aussi ce que je prĂ©conise en utilisant des frameworks lĂ©gers et extrĂȘmement performants au lieu de frameworks batteries included (notamment MVC). Jâutilise aujourdâhui en prioritĂ© Python / FastAPI (en mâappuyant sur mes codebases prĂ©cĂ©dentes pour atteindre la maturitĂ© de frameworks plus poussĂ©s) et Node.js / NestJS (qui nâest pas un micro framework mais touche un sweet spot concernant les plateformes web utilisateurs classiques).
A noter que la trend vers les micro frameworks ne se dĂ©ment pas avec lâarrivĂ©e du dĂ©veloppement IA. Il nâa jamais Ă©tĂ© aussi facile de ârecoderâ des fonctionnalitĂ©s gĂ©nĂ©riques type authentification, autorisation ou emailing sur un micro framework grĂące aux LLM.
Un setup prĂȘt Ă scale
Lâautre gros avantage des micro framework orientĂ©s REST est la possibilitĂ© de scale facilement plus tard en allant notamment vers des micro services (une autre tendance qui commence Ă passer).
Si jamais votre entreprise dĂ©colle, ce paradigme permet dâĂ©tendre les fonctionnalitĂ©s dâun projet sans limite technique et est trĂšs apprĂ©ciĂ© des dĂ©veloppeurs. Par ailleurs, d’un point de vue souverainetĂ©, le backend devient beaucoup moins dĂ©pendant dâune technologie qui peut dĂ©cliner ou perdre en popularitĂ©.
REST, lâapproche pragmatique
MĂȘme si dâautres approches se dĂ©veloppent, tout le monde code en REST, un standard bien compris. Je mâengage Ă fournir une api REST pragmatique avec notamment :
- lâutilisation des verbes et statuts HTTP adaptĂ©s
- des routes toujours basées sur des ressources
- pagination et filtrage standards
Gestion de base de données
Pour la base de donnĂ©es il nây a plus quâun choix aujourdâhui: PostgreSQL qui est devenu le standard de facto. Câest une bdd mature, open source, avec de nombreuses fonctionnalitĂ©s avancĂ©es (JSON natif, recherche plein texte, nombreuses extensions, performances excellentes).
La base de donnĂ©es est gĂ©rĂ©e avec un ORM (sqlalchemy en python, typeorm en Node.js), une couche nĂ©cessaire pour la gestion des connexions, du cycle de vie des entitĂ©s et de la sĂ©curitĂ©. Il est parfois nĂ©cessaire de requĂȘter en SQL pur mais câest rarement le cas.
Par ailleurs je travaille exclusivement avec des migrations ce qui permet dâavoir un Ă©tat iso sur les diffĂ©rents environnements (local, preprod, prod) et de pouvoir facilement recrĂ©er des base de donnĂ©es en dĂ©veloppement. Les migrations sâintĂšgrent aussi dans un paradigme agile dâĂ©volution progressive de la bdd selon les besoins (on commence toujours petit pour limiter la dette technique).
Schéma de bdd
Je design mes bases de donnĂ©es avec les meilleures pratiques. LâidĂ©e est dâavoir dâune part un schĂ©ma clair avec un minimum de redondance sauf cas particuliers (cache, performance). Dâautre part de configurer la base pour soulager le backend (vĂ©rification dâunicitĂ© avec des contraintes, gestion des enums, accĂ©lĂ©ration des performances avec des index, voire des vues, soft delete, colonnes de timestamps).
Exploration
De mon cĂŽtĂ© jâutilise Datagrip qui est un excellent explorateur me permettant de gĂ©rer facilement lâĂ©tat de la base sur plusieurs environnements ainsi que mes requĂȘtes dâanalyse ou de debug. Câest un explorateur que je recommande aux clients orientĂ© tech : je pourrais vous partager mes requĂȘtes voire configurer des vues pour un contact trĂšs direct avec les donnĂ©es.
đđœ QualitĂ© du code
Garanties sur la qualité de code
Je prends la qualitĂ© du code trĂšs au sĂ©rieux, câest un des sujets les plus passionnants et la raison principale pour laquelle je fais du dĂ©veloppement. Jâaime respecter des principes gĂ©nĂ©raux de dĂ©veloppement comme SOLID ou DRY et ai une expĂ©rience significative sur diffĂ©rents paradigmes de programmation en particulier lâorientĂ© objet (mais aussi la programmation fonctionnelle ou lâorientĂ© Ă©vĂ©nement). Jâai aussi Ă©tĂ© influencĂ© par mes lectures sur le Domain Driven Design, une influence forte sur ma conception des backends.
La qualitĂ© du code est un vaste sujet dont j’aimerais Ă©voquer quelques points, de maniĂšre simpliste.
Limiter la dette technique
Jâessaye au maximum de limiter la duplication de la logique mĂ©tier, un point encore plus important aujourdâhui quâil ne lâĂ©tait avant lâarrivĂ©e des IA et du vibe coding. Il nâa jamais Ă©tĂ© aussi facile de gĂ©nĂ©rer de la dette technique, une dette qui sera payĂ©e des mois voire des annĂ©es plus tard et peut complĂštement tuer un projet.
Limiter les bugs en production
Un livre pourrait ĂȘtre Ă©crit lĂ dessus, mon approche consiste Ă :
- toujours relire mes commits entiĂšrement avant de merge
- mettre en place une CI sur mes projets mĂȘme simples (au minimum linting, type checking et formatting). Cela permet en plus dâĂȘtre plus sĂ»r de son historique git et de pouvoir revenir Ă des versions stables facilement.
- intégrer le linting au développement local via un commit hook
- mettre en place de tests unitaires dĂšs que le projet grossit, voire end to end (le test driven design nâest pas toujours un choix pragmatique pour tenir un budget compĂ©titif)
- écrire un code typé (checké par mypy ou typescript)
- déployer en continu sur la production
- limiter les conflits git au maximum graÄe Ă
- un bon git flow : jâutilise le github flow mais m’inspire aussi du trunk based development. Quelle que soit la taille de l’Ă©quipe, l’idĂ©e est de merge sur main le plus rapidement possible.
- des commits associés à des features spécifiques
- jamais de branches ouvertes trop longtemps (quelques jours voire quelques heures)
- générer un historique git cohérent pour pouvoir annuler une mise à jour et déboguer facilement. Je rebase et génÚre un historique git linéaire et documenté (avec des commit messages clairs comprenant un lien vers le ticket associé)
đ» Un dĂ©veloppement ouvert aux agents IA
Je dĂ©veloppe avec assistance d’un agent IA (en l’occurence Claude Code ) et vous propose de consulter ce billet rĂ©sumant mes rĂ©flexions principales sur l’utilisation de ces outils.
D’un point de vue technique je fais en sorte que la codebase soit toujours lisible et maintenable pour un dĂ©veloppeur humain que j’utilise un agent pour en dĂ©velopper des parties ou pas.
đ SĂ©curitĂ© shift left
La sécurité est un sujet transversal et complexe qui fait partie intégrante de mon travail dÚs le départ (ce que les développeurs appellent shift left websecurity).
Jây tiens dâune part car elle rejoint les bonnes pratiques dâun dĂ©veloppement web solide et professionnel et dâautre part car jâai travaillĂ© un an chez GitGuardian, une startup leader dans la cybersĂ©curitĂ© et qui mâa formĂ© Ă un certain nombre de bonnes pratiques websec.
Jâai conscience des failles principales du dĂ©veloppement web (en consultant par exemple OWASP ) et suit dans tous mes projets une roadmap sĂ©curitĂ© claire :
Authentification & autorisation - Throttling anti brute force, contrÎle des droits sur chaque route, mots de passe hachés (SHA-2+), JWT sécurisé
Protection des données sensibles - credentials stockés hors de la code base (.env, .gitignore), pas de données privées dans les logs/cookies/réponses API
PrĂ©vention des injections - Protection contre les injections SQL (avec lâORM), validation stricte des inputs (DTO), protection contre le XSS sur le contenu utilisateur
RGPD & données personnelles - Solution analytics minimale (sans nécessité de consentement cookies), minimisation des données exposées, anonymisation à la suppression de compte, page de politique claire
SĂ©curitĂ© infrastructure - AccĂšs au serveur par clĂ© SSH, accĂšs aux services par reverse proxy (Nginx), fichiers sensibles (.env, .git) non exposĂ©s, accĂšs prod restreint (crĂ©ation dâun utilisateur avec droit restreint pour lâaccĂšs SSH et le lancement de commandes sur le serveur)
Monitoring & résilience - plan de sauvegarde testé (dernier backup bdd testé, script de backup ajouté au crontab), backups bdd géographiquement distribués et chiffrés (Backblaze ). Historique des logs stockés et testés avec Loki et Grafana. Mise en place optionnelle de Sentry pour le monitoring des erreurs serveur et front.
Mises à jour réguliÚres - Paquets logiciels et OS à jour pour corriger les failles connues (bump régulier des paquets, Dockerfile configurés sur les versions latest des OS)
Ces sujets sont pris en compte dĂšs le dĂ©but du dĂ©veloppement et je rĂ©alise un point complet en mâappuyant sur un document de rĂ©fĂ©rence (google sheet partagĂ© au client) avant lâouverture de la plateforme au public.
đ DĂ©ploiement et infra
De la configuration du nom de domaine Ă la mise en production finale je mâoccupe de tout et vous propose une solution dâhĂ©bergement et de dĂ©ploiement continue clef en main.
Cette solution comporte les caractéristiques suivantes:
Conteneurisation
- DĂ©veloppement conteneurisĂ© (Docker) pour avoir des environnements local / preprod / prod ISO, minimiser les bugs en prod et accĂ©lĂ©rer lâonboarding et le dĂ©ploiement.
- Déploiement des conteneurs pragmatique avec Docker compose pour un MVP ou petite plateforme. Possibilité de passer sur Kubernetes pour scale.
Traffic web
- Le trafic passe par un reverse proxy (Nginx) avant dâatteindre lâorchestrateur (Docker compose en MVP) permettant notamment une gestion du HTTPS, une meilleure sĂ©curisation (protection DDOS notamment) et une flexibilitĂ© accrue dans la configuration des domaines et sous domaines.
- Le HTTPS est géré et renouvelé automatiquement avec Certbot / Lets encrypt (certificats gratuits).
Hébergement
La solution pragmatique que jâutilise le plus souvent est le dĂ©ploiement semi-automatique sur un serveur virtuel (OVH pour rester en France, sinon DigitalOcean par exemple). LâaccĂšs au serveur se fait par SSH, la mise en place dâune couche dâinfrastructure as code (IAAC) et dâun dĂ©ploiement cloud natif nâest pas nĂ©cessaire pour des MVP mais peut ĂȘtre ajoutĂ©e ensuite.
Concernant le provisionnement du serveur, jâutilise Ansible (installation des paquets, de Docker, configuration du reverse proxy, script de backup bdd etc..) avant de peaufiner les rĂ©glages manuellement au cours du projet (lancement de commande dâimport de donnĂ©es, configuration du .env..) sans perdre de temps de dĂ©veloppement sur des sujets cloud qui sont surtout intĂ©ressants sur des projets Ă fort traffic ou forte complexitĂ© (notamment avec les micro services).
Déploiement continu
Le déploiement continu (CI / CD) est intégré de base dans tous mes projets. Tous mes commits, une fois revus sont mergés, validés par la CI et déployés automatiquement en préprod ou en production limitant ainsi le risque de bugs et facilitant le débogage et le rollback le cas échéant.
- Il nây a pas de grandes mises en production (gĂ©nĂ©ratrice de friction et dâerreurs) et les utilisateurs bĂ©nĂ©ficient de mises Ă jour quotidiennes.
- couplé à Docker le downtime est proche de zéro.
Base de données
La base de données est intégrée à la configuration Docker. Le script de backup est géré par Ansible et testé dÚs le début des développements. Je propose au client un backup sur un service externe (Backblaze).
đ Monitoring et analytics: une approche pragmatique
Monitoring
Le monitoring dâune app mise en production est parfois laissĂ© de cĂŽtĂ© mais il est intĂ©grĂ© Ă mon template web nativement. Mon dĂ©ploiement minimal contient en effet la stack monitoring Prometheus (mĂ©triques), Loki (logs) et Grafana (dashboard des visualisation) permettant pour un MVP un suivi plus que satisfaisant et extensible Ă souhait.
Concernant le suivi des bugs je peux mettre en place si nécessaire Sentry (service payant) et je branche gratuitement Uptime Robot qui alerte en cas de défaillance du site (scans de certaines pages).
A noter que dans le cas dâun projet plus consĂ©quent (startup en train de scale) jâai une expĂ©rience sur Datadog , pour un monitoring et forensic exhaustif (mais cher et coĂ»teux Ă paramĂ©trer).
Analytics
Concernant les analytics jâopte gĂ©nĂ©ralement pour une solution analytics minimale (Goat Counter ) qui permet de suivre le traffic web de maniĂšre responsable sans ĂȘtre intrusif et compatible RGPD sans nĂ©cessitĂ© de banniĂšre cookie.
Google Analytics peut ĂȘtre installĂ© sur demande mais demande une banniĂšre cookie.
Je travaille de temps en temps avec Matomo pour un suivi plus précis des interactions sur le site.
SEO
Je ne suis pas expert SEO mais j’applique un ensemble de bonnes pratiques SEO.
Jâutilise notamment:
- un markup sémantique (headers, article..)
- des tags meta appropriés (title, description)
- une attention à la performance de chargement de la page (LCP réduit, taille des images)
- des urls claires
Je vérifie la performance des pages principales avec Lighthouse.
Server Side Rendering (SSR)
Pour les sites qui ont besoin dâun SEO particuliĂšrement performant je travaille en SSR. Cela demande un peu plus de travail cĂŽtĂ© dĂ©veloppement mais permet une indexation idĂ©ale par les moteurs de recherche et IA. Cela a Ă©tĂ© le cas dans ma mission chez Kessel , une startup dans l’Ă©dition numĂ©rique
UX / UI
Mon expĂ©rience de dĂ©veloppement web me permet aujourdâhui de proposer des interfaces intuitives : navigation claire, formulaires rĂ©actifs, gestion des erreurs transparentes, layouts responsifs, interfaces aĂ©rĂ©es, composants au look moderne (design material gĂ©nĂ©ralement) ou encore intĂ©gration dâune charte graphique (ou dâĂ©lĂ©ments graphiques).
Pour ce qui est du dĂ©veloppement dâinterface dâadministration, de dashboards ou de tunnels dâinscription, je fournis une solution clef en main responsive ou le client peut modifier les paramĂštres dâaffichage nĂ©cessaires.
Je rĂ©fĂ©rence de temps en temps des articles dâautoritĂ© sur ce sujet comme celui ci
En revanche je ne suis pas un expert en UX et pour des projets qui attendent un traffic consĂ©quent de la part dâutilisateurs extĂ©rieurs (et selon le budget) je prĂ©fĂšre travailler avec Elina Lapierre
Approche CSS
Lâapproche actuelle avec css et de garder le css au plus proche du markup html. Je suis dâaccord avec ces pratiques et jâutilise donc lâapproche utility-first (multiples classes utilitaires pour un contrĂŽle fin avec TailwindCSS ). Je les factorise le cas Ă©chĂ©ant avec des composants JS.
Site designers
Je travaille réguliÚrement avec des site designers comme Figma et Webflow.
đ€đœ Une gestion de projet agile et inclusive
Une gestion de projet agile et proche du client
Le dĂ©but de projet nĂ©cessite toujours un temps de rĂ©flexion et de questions pour interroger au maximum le besoin du client, en comprendre les certitudes et les limites. Câest le moment oĂč jâĂ©cris ou réécris des spĂ©cifications, plus ou moins techniques, que je partage au client. Ces documents permettent de dialoguer et de garder une trace utile mais sont gĂ©nĂ©ralement rapidement dĂ©synchronisĂ©s avec le dĂ©veloppement de la plateforme et câest un bon signe car ce qui compte est justement lâĂ©volution dynamique du besoin dans un contexte agile.
Inversement dĂšs le dĂ©but du dĂ©veloppement, le focus est centrĂ© sur le dialogue avec le client, des dĂ©ploiements frĂ©quents (dĂ©ploiement continu, gĂ©nĂ©ralement plusieurs fois par jour) avec Ă chaque fois un message de ma part, et des points frĂ©quents de feedbacks, de discussion du besoin et dâaffinage et priorisation du backlog.
Pour les projets plus consĂ©quents, des ateliers thĂ©matiques (fonctionnalitĂ©s, UX, retours utilisateurs) peuvent ĂȘtre intĂ©ressants pour structurer et prioriser lâeffort de dĂ©veloppement.
Dâun point de vue tooling, je travaille en ce moment avec Clickup mais je peux mâadapter aux outils du client le cas Ă©chĂ©ant. Je donne toujours au client un accĂšs admin Ă lâoutil de gestion de projet et je lâincite Ă participer activement Ă la spĂ©cification, priorisation et gestion des tickets (câest le cĆur de lâesprit agile).
đ La documentation : mon approche progressive
La documentation et la traçabilitĂ© des intentions sont un sujet important sur lequel il faut avoir une approche pragmatique et efficace. La documentation, comme la sĂ©curitĂ©, doit ĂȘtre une rĂ©flexion globale qui sâintĂšgre de maniĂšre granulaire Ă la gestion de projet comme au dĂ©veloppement.
Je ne suis pas partisan des documents longs et verbeux que personne ne lira. Ils peuvent en revanche ĂȘtre utiles pour les IA.
Ma maniÚre de procéder consiste à répartir la documentation sur 3 niveaux :
- des documents textes hors de la codebase et éditables librement pas le client
- des documents markdown intégrés à la codebase et adressés aux développeurs et agents IA
- le code lui mĂȘme (naming, commentaires)
Documentations au format texte
- partage dâun dossier drive avec le client qui regroupe les diffĂ©rentes itĂ©rations des documents de spĂ©cifications (en particulier ceux créés au dĂ©but du projet) ou des notes de rĂ©union. Ce dossier est plus une archive quâune documentation vivante.
- documents types que je partage au client:
- PRA (plan de reprise dâactivitĂ©): document centralisant les informations nĂ©cessaires au fonctionnement du projet (contacts, credentials, type dâinfra et de dĂ©ploiement utilisĂ©s, informations utiles Ă lâonboarding)
- checklist de mise en production finale Ă affiner avec le client: vĂ©rification des contenus, du fonctionnement du tooling de monitoring, des accĂšs Ă lâinfra, des backup etc..
- checklist de sécurité : voir point détaillés plus haut
- SpĂ©cifier un maximum les tickets. Les tickets (ou tĂąches) sont la source dâautoritĂ© principale sur lâintention produit juste aprĂšs le code. LâĂ©laboration dâun backlog bien spĂ©cifiĂ© et dĂ©coupĂ© est une partie importante du travail de dĂ©veloppement qui fait gagner du temps Ă tout le monde. Câest un travail qui est idĂ©alement fait Ă deux (le client / product owner et moi).
Documentation intégré à la codebase
- CrĂ©ation dâun README centralisant les informations nĂ©cessaires Ă lâonboarding, les technologies utilisĂ©es et les spĂ©cificitĂ©s Ă©ventuelles Ă connaĂźtre. Ce document sera en particulier utile aux dĂ©veloppeurs Ă qui le projet serait transmis (mĂȘme si je suis toujours joignable).
- CrĂ©ation de fichiers markdowns de documentation rĂ©sumant dâune part mes pratiques de dĂ©veloppement et la structure du projet et d’autre part des parties spĂ©cifiques de la codebase. Ces fichiers peuvent ĂȘtre aussi utiles aux dĂ©veloppeurs futurs quâaux IA.
- Un fichier CLAUDE.md est toujours prĂ©sent dans mes projets et est explicitement destinĂ© Ă Claude code (mais peut ĂȘtre exploitĂ© par dâautres modĂšles).
Code as documentation
Enfin, le plus important pour la fin: Ă©crire un code sĂ©mantique ou les intentions business sont claires. Utiliser la mĂȘme nomenclature que celle utilisĂ©e pour le produit et par le client (vocabulaire commun). Avoir un naming cohĂ©rent et explicite des fonctions, modules, classes, variables.. De maniĂšre gĂ©nĂ©rale, s’inspirer des bonnes pratiques du Domain Driven Development.
Concernant les commentaires on dit souvent quâun code clair et sĂ©mantique est un code qui ne nĂ©cessite pas Ă©normĂ©ment de commentaires.
Certains commentaires peuvent ĂȘtre utiles mais dâautres peuvent ĂȘtre superflus voire gĂȘnants car ils peuvent vite ĂȘtre obsolĂštes (Ă©volutions du code ou copier / coller) et participer Ă la crĂ©ation dâune dette technique.
Par ailleurs je fais usage de fichiers standards en développement web qui rassemblent un certain nombre de commandes que tout développeur comprendra facilement : package.json notamment mais surtout un Makefile présent dans chaque projet.
âïž Les fonctionnalitĂ©s que j’intĂšgre de base
Gestion des utilisateurs
Mon template de base inclut une gestion exhaustive des utilisateurs avec notamment
- le formulaire dâinscription (email / mdp sĂ©curisĂ©). PossibilitĂ© dâintĂ©grer un login social.
- la confirmation dâinscription par email
- la gestion du mot de passe oublié et changement du mot de passe
- un espace administrateur avec gestion des utilisateurs
- une gestion des rĂŽles (Admin et Utilisateur par dĂ©faut, extensible) et dâautorisations granulaires
Emailing
Mon template web comprend la gestion de lâenvoi dâemails (templates emails) envoyĂ©s par API avec Brevo .
SystĂšme de paiement
J’utilise frĂ©quemment Stripe pour gĂ©rer le paiement en ligne (gestion d’un paywall, gestion d’abonnements)
Barre de recherche
Une barre de recherche peut ĂȘtre utile Ă certains projets et dans ce cas je recommande gĂ©nĂ©ralement Algolia qui est un service trĂšs performant et configurable de recherche plein texte facetĂ©e.
Pour des projets demandeurs en termes de complexitĂ© ou de volume, on peut basculer sur Elasticsearch, que jâai utilisĂ© dans plusieurs projets.