Deux façons de coder avec l'IA : SDD vs Vibe Coding

Équipe Byrnu
Deux façons de coder avec l'IA : SDD vs Vibe Coding

Deux façons de coder avec l'IA : SDD vs Vibe Coding

L'arrivée des outils d'IA générative comme GitHub Copilot, ChatGPT et Claude a fait émerger deux approches distinctes du développement logiciel. D'un côté, le "Vibe Coding" : une façon intuitive et spontanée de coder en laissant l'IA guider le processus. De l'autre, le Specification Driven Development (SDD) : une approche structurée qui utilise l'IA comme outil dans un cadre défini.

Explorons ces deux méthodes de travail, leurs différences, et comment elles influencent le développement au quotidien.

Le Vibe Coding : Une approche intuitive

Le Vibe Coding représente une façon de travailler qui privilégie la spontanéité et l'exploration :

Comment on travaille en Vibe Coding

La démarche typique :

  1. On a une idée ou un besoin
  2. On demande à l'IA de générer du code avec des prompts généraux
  3. On teste ce qui sort
  4. On ajuste selon ce qui "semble bien fonctionner"
  5. On itère jusqu'à obtenir un résultat satisfaisant

Caractéristiques de cette approche :

  • Pas de documentation préalable détaillée
  • L'architecture émerge au fil du développement
  • Les décisions se prennent au moment du codage
  • L'IA génère à la fois la structure et l'implémentation
  • La validation se fait principalement par tests manuels

Quand cette approche fonctionne

Le Vibe Coding peut être pertinent dans certains contextes :

  • Prototypage rapide : Tester une idée ou un concept rapidement
  • Exploration technique : Découvrir de nouvelles bibliothèques ou frameworks
  • Scripts jetables : Code à usage unique ou temporaire
  • Apprentissage : Explorer et expérimenter avec de nouvelles technologies

Les limites qu'on rencontre

Avec le temps, cette approche révèle des contraintes :

  • Le code devient difficile à comprendre pour les autres (et pour soi-même après quelques semaines)
  • Chaque modification risque de casser des choses inattendues
  • L'ajout de fonctionnalités nécessite de plus en plus de temps
  • Les bugs deviennent difficiles à tracer et corriger
  • Le passage en production nécessite souvent une réécriture partielle

Le Specification Driven Development (SDD) : Une approche structurée

Le SDD représente une façon de travailler qui privilégie la planification et la structure :

Comment on travaille en SDD

La démarche typique :

  1. On analyse le besoin et définit les objectifs
  2. On conçoit l'architecture et les interfaces
  3. On rédige des spécifications détaillées
  4. On utilise l'IA pour implémenter selon ces spécifications
  5. On valide chaque étape avant de passer à la suivante

Caractéristiques de cette approche :

  • Documentation créée avant le code
  • Architecture définie par des experts humains
  • Décisions prises en amont du développement
  • L'IA implémente selon des directives précises
  • Validation systématique à plusieurs niveaux

La fondation comme point de départ

La différence clé : l'architecture n'est pas générée par l'IA, elle a déjà été établie, révisée et stabilisée.

Une fondation solide est :

  • Conçue par des architectes et développeurs expérimentés
  • Basée sur des patterns éprouvés
  • Documentée de façon exhaustive
  • Pensée pour évoluer dans le temps

Cette fondation (comme notre Fondation CSS) sert de référence commune pour toute l'équipe et guide l'utilisation de l'IA.

Des spécifications avant l'implémentation

Avant de coder, on documente précisément ce qu'on veut construire :

## Spécification : Module de gestion des tâches

### Objectif
Gérer les tâches utilisateur avec support de catégories et priorités

### Architecture
- Pattern : Repository + Service Layer
- Dépendances : Foundation CSS Data Module
- Interfaces : ITodoService, ITodoRepository

### Comportements requis
1. Créer/modifier/supprimer une tâche
2. Marquer une tâche comme complétée
3. Filtrer par catégorie et priorité
4. Recherche par texte

### Contraintes
- Validation des données obligatoire
- Limite de 1000 tâches par utilisateur
- Soft delete pour l'historique

### Critères d'acceptation
- [ ] Tests unitaires > 90%
- [ ] Tests d'intégration complets
- [ ] Validation des performances
- [ ] Documentation API complète

Un processus de validation rigoureux

Chaque code passe par plusieurs étapes de vérification :

  1. Validation architecturale : Vérification de la cohérence avec la fondation
  2. Revue de code : Examen de la qualité et des bonnes pratiques
  3. Tests obligatoires : Couverture minimale et tests d'intégration
  4. Revue de sécurité : Identification des vulnérabilités potentielles
  5. Approbation finale : Validation avant mise en production

Comparer les deux approches au quotidien

Démarrage d'un projet

Vibe Coding :

  • On commence à coder immédiatement
  • L'architecture émerge progressivement
  • Temps de démarrage : quelques heures

SDD :

  • On commence par l'architecture et les spécifications
  • L'implémentation suit la structure définie
  • Temps de démarrage : quelques jours

Ajout d'une nouvelle fonctionnalité

Vibe Coding :

  • On demande à l'IA de générer la fonctionnalité
  • On l'intègre où ça semble logique
  • On teste manuellement
  • Temps : 1-2 heures

SDD :

  • On spécifie la fonctionnalité et son intégration
  • On utilise l'IA pour implémenter selon la spec
  • On valide avec tests automatisés
  • Temps initial : 3-4 heures

Résolution de bugs

Vibe Coding :

  • On cherche dans le code sans structure claire
  • Difficile de comprendre l'origine du problème
  • Risque d'en créer d'autres en corrigeant
  • Temps variable : 2-8 heures

SDD :

  • Les spécifications aident à localiser le problème
  • L'architecture facilite la compréhension
  • Les tests préviennent les régressions
  • Temps plus prévisible : 1-3 heures

Onboarding d'un nouveau développeur

Vibe Coding :

  • Il faut explorer le code pour comprendre
  • Pas de documentation de référence
  • Risque élevé de casser des choses
  • Productivité après : 4-6 semaines

SDD :

  • Documentation et fondation servent de guide
  • Architecture claire facilite la compréhension
  • Framework réduit les erreurs possibles
  • Productivité après : 1-2 semaines

L'IA dans les deux approches

Rôle de l'IA en Vibe Coding

L'IA est le moteur principal du développement :

  • Génère l'architecture au fur et à mesure
  • Propose des solutions techniques
  • Crée la structure et l'implémentation
  • Guide les décisions architecturales
  • Adapte le code selon les retours

Rôle de l'IA en SDD

L'IA est un outil d'exécution dans un cadre défini :

Ce que l'IA fait :

  • Génère du code boilerplate selon des templates
  • Implémente des fonctionnalités selon des spécifications précises
  • Crée des tests unitaires complets
  • Génère de la documentation technique
  • Suggère des optimisations dans le cadre existant

Ce que l'IA ne fait pas :

  • Concevoir l'architecture globale
  • Définir les patterns et structures
  • Prendre des décisions architecturales
  • Valider la sécurité
  • Approuver le code final

Exemple concret : Un système de panier d'achat

Approche Vibe Coding

Développeur → IA : "Crée-moi un système de panier d'achat"

→ L'IA génère une structure complète
→ On teste et ajuste au fil de l'eau
→ On ajoute des fonctionnalités selon les besoins
→ Structure finale : organique et unique à ce projet

Approche SDD

1. Spécification (équipe + architecte) :
   - Architecture : Clean Architecture avec Foundation CSS
   - Patterns : Repository, Command/Query Separation
   - Contraintes : ACID, Event Sourcing pour l'historique
   - Interfaces : ICartService, ICartRepository, ICartItem

2. Prompt structuré à l'IA :
   "Implémente ICartRepository selon la spécification CartSpec.md :
   - Interface définie dans Foundation.Commerce.Abstractions
   - Utilise CartEntity avec validation définie
   - Respecte les patterns Foundation CSS
   - Ajoute les tests selon CartSpecification.md"

3. Validation :
   - Vérification de conformité architecturale
   - Validation des tests
   - Revue de code
   - Approbation pour intégration

Évolution dans le temps

Après 3 mois

Vibe Coding :

  • Code fonctionnel mais structure complexe
  • Ajout de fonctionnalités de plus en plus lent
  • Documentation minimale ou absente
  • Compréhension limitée aux développeurs originaux

SDD :

  • Code structuré et maintenable
  • Vélocité constante pour les nouvelles fonctionnalités
  • Documentation à jour
  • N'importe quel développeur peut contribuer efficacement

Après 1 an

Vibe Coding :

  • Dette technique importante
  • Modifications majeures très risquées
  • Souvent besoin de refactoring complet
  • Coût de maintenance élevé

SDD :

  • Architecture robuste qui a fait ses preuves
  • Évolutions continues sans refactoring majeur
  • Fondation qui s'enrichit avec l'expérience
  • Coût de maintenance prévisible

Choisir son approche

Le Vibe Coding convient quand :

  • On fait du prototypage rapide
  • Le projet est temporaire ou exploratoire
  • On travaille seul sur un petit projet
  • On expérimente avec de nouvelles technologies
  • Le code ne sera pas maintenu long terme

Le SDD convient quand :

  • On construit un système de production
  • Plusieurs développeurs travaillent ensemble
  • Le projet doit évoluer sur le long terme
  • La maintenabilité est importante
  • La qualité et la fiabilité sont critiques

Principes du SDD moderne

Architecture d'abord

La structure est définie avant l'implémentation, par des humains expérimentés qui comprennent les enjeux techniques et business.

Spécifications claires

Chaque élément est documenté précisément avant d'être implémenté, créant une référence commune pour l'équipe et l'IA.

IA comme accélérateur

L'IA est utilisée de façon ciblée pour augmenter la productivité, dans le respect du cadre architectural établi.

Validation systématique

Chaque élément passe par une revue humaine avant intégration, garantissant la qualité et la cohérence.

Qualité non négociable

Tests, sécurité et maintenabilité sont intégrés dès le départ, pas ajoutés après coup.

Conclusion : Deux philosophies différentes

Le Vibe Coding et le SDD représentent deux philosophies distinctes du développement assisté par IA :

Vibe Coding : L'exploration rapide

  • Privilégie la vitesse initiale
  • Adapté aux contextes exploratoires
  • L'IA guide le développement
  • Idéal pour du court terme

SDD : La construction durable

  • Privilégie la solidité long terme
  • Adapté aux systèmes de production
  • L'IA accélère l'exécution
  • Idéal pour du moyen/long terme

Le choix entre ces approches dépend du contexte, des objectifs et de la durée de vie prévue du projet. Comprendre les différences permet de choisir consciemment l'approche la plus adaptée à chaque situation.

Une réalité incontournable : L'IA est un changement inévitable pour notre profession. Le Vibe Coding l'accepte pleinement et l'embrasse sans réserve, tandis que le SDD reconnaît cette transformation tout en la canalisant dans un cadre structuré. Les deux approches accueillent l'IA, mais seule l'une d'elles assure la pérennité et la qualité à long terme des systèmes que nous construisons.


Pour en savoir plus sur l'approche SDD, consultez notre Fondation CSS qui structurent les interactions avec l'IA.

L'IA est l'avenir du développement, mais seulement si nous gardons une architecture humaine solide comme fondation.