Construisez la chose la plus simple qui fonctionne. Résistez à l'envie de sur-ingénierie.
XP a un mantra : Faites la chose la plus simple qui pourrait possiblement fonctionner.
Il ne s'agit pas d'être paresseux ou d'écrire du code bâclé. Le code simple est souvent plus difficile à écrire que le code complexe. Cela nécessite :
Le code simple est :
Le code complexe est :
Le simple est difficile
« J'aurais écrit une lettre plus courte, mais je n'ai pas eu le temps. » —Blaise Pascal. Le code simple nécessite plus de réflexion, pas moins.
YAGNI est le principe selon lequel vous ne devriez construire que ce dont vous avez besoin maintenant.
N'ajoutez pas :
Pourquoi ? Parce que :
Le pari XP : Si vous avez besoin de quelque chose plus tard, vous pouvez l'ajouter plus tard. Avec TDD, le refactoring et l'IC, le changement est peu coûteux. Alors ne payez pas pour l'avenir avant d'y être obligé.
C'est une idée radicale. Le génie logiciel traditionnel dit d'anticiper le changement et de concevoir pour la flexibilité. XP dit d'attendre d'en avoir réellement besoin.
L'équipe doit envoyer des courriels. Elle implémente l'envoi via SMTP. Plus tard, elle doit envoyer via SendGrid. Elle refactorise. Coût total : moins que de construire une abstraction de courriel modulaire dès le départ.
L'équipe doit envoyer des courriels. Elle construit une interface générique 'MessageProvider' avec des abstractions 'MessageTransport' et 'MessageFormatter' modulaires. Elle n'utilise jamais que SMTP avec un seul format. Les abstractions ralentissent chaque changement.
Kent Beck a défini la conception simple comme du code qui :
1. Passe tous les tests Le code fonctionne. C'est non négociable. Une belle conception qui ne fonctionne pas ne vaut rien.
2. Révèle l'intention Le code est facile à comprendre. Bons noms, structure claire, organisation lisible. Quelqu'un de nouveau peut le prendre et comprendre ce qu'il fait.
3. N'a pas de duplication (DRY) Chaque élément de connaissance est exprimé une fois et une seule fois. La duplication crée un fardeau de maintenance et un risque de bogues.
4. A le moins d'éléments Pas de classes, méthodes, variables ou abstractions supplémentaires. Tout ce qui existe a une raison d'exister.
Les règles sont dans l'ordre de priorité. Passer les tests l'emporte sur tout. Mais une fois les tests passés, favorisez la clarté plutôt que le DRY. Et n'ajoutez que des éléments qui servent les trois premières règles.
La conception simple ne signifie pas l'absence de conception. Elle signifie conception incrémentale—faire évoluer la conception au fur et à mesure que vous apprenez.
Le processus :
C'est pourquoi XP met tellement l'accent sur le refactoring. Si vous ne pouvez pas changer le code en toute sécurité, vous ne pouvez pas faire de conception incrémentale. Vous êtes coincé avec ce que vous avez construit en premier.
La conception initiale exhaustive (BUFD) échoue parce que :
La conception incrémentale réussit parce que :
Lorsque vous ressentez l'envie d'ajouter une abstraction, demandez-vous : « En ai-je besoin maintenant, ou est-ce que je devine ? » Si vous devinez, attendez.
La conception simple ne signifie pas éviter toute complexité. Parfois, la complexité est nécessaire.
Ajoutez de la complexité quand :
N'ajoutez pas de complexité pour :
La différence est entre la complexité essentielle (inhérente au problème) et la complexité accidentelle (introduite par votre solution). XP minimise la complexité accidentelle en refusant de construire pour des exigences imaginaires.
Lorsque vous avez besoin d'une abstraction, laissez-la émerger de l'élimination de la duplication. La « règle de trois » est utile : n'abstraisez pas avant d'avoir vu le même motif trois fois. À ce moment-là, vous comprenez les variations réelles, pas celles imaginées.