design-an-interface

Par mkurman · zorai

Générez plusieurs designs d'interface radicalement différents pour un module en utilisant des sous-agents parallèles. À utiliser lorsque l'utilisateur souhaite concevoir une API, explorer des options d'interface, comparer des formes de module, ou mentionne « design it twice ».

npx skills add https://github.com/mkurman/zorai --skill design-an-interface

Concevoir une Interface

D'après « Design It Twice » de « A Philosophy of Software Design » : votre première idée n'est probablement pas la meilleure. Générez plusieurs designs radicalement différents, puis comparez.

Workflow

1. Recueillir les Exigences

Avant de concevoir, comprenez :

  • [ ] Quel problème ce module résout-il ?
  • [ ] Qui sont les appelants ? (autres modules, utilisateurs externes, tests)
  • [ ] Quelles sont les opérations clés ?
  • [ ] Y a-t-il des contraintes ? (performance, compatibilité, patterns existants)
  • [ ] Qu'est-ce qui doit rester caché vs exposé ?

Posez-vous : « Que doit faire ce module ? Qui l'utilisera ? »

2. Générer des Designs (Sous-Agents Parallèles)

Lancez 3+ sous-agents simultanément via l'outil Task. Chacun doit produire une approche radicalement différente.

Modèle de prompt pour chaque sous-agent :

Concevez une interface pour : [description du module]

Exigences : [exigences recueillies]

Contraintes pour ce design : [assignez une contrainte différente à chaque agent]
- Agent 1 : « Minimisez le nombre de méthodes - viser 1-3 méthodes max »
- Agent 2 : « Maximisez la flexibilité - support de nombreux cas d'usage »
- Agent 3 : « Optimisez pour le cas d'usage le plus courant »
- Agent 4 : « Inspirez-vous de [paradigme/bibliothèque spécifique] »

Format de sortie :
1. Signature de l'interface (types/méthodes)
2. Exemple d'utilisation (comment l'appelant l'utilise)
3. Ce que ce design cache en interne
4. Trade-offs de cette approche

3. Présenter les Designs

Montrez chaque design avec :

  1. Signature de l'interface - types, méthodes, paramètres
  2. Exemples d'utilisation - comment les appelants l'utilisent concrètement
  3. Ce qu'il cache - complexité restée interne

Présentez les designs séquentiellement pour que l'utilisateur assimile chaque approche avant la comparaison.

4. Comparer les Designs

Après avoir montré tous les designs, comparez-les sur :

  • Simplicité de l'interface : moins de méthodes, paramètres simples
  • Usage général vs spécialisé : flexibilité vs focus
  • Efficacité d'implémentation : la forme permet-elle une implémentation efficace ?
  • Profondeur : petite interface cachant une complexité importante (bon) vs large interface avec implémentation mince (mauvais)
  • Facilité d'utilisation correcte vs facilité de mésusage

Discutez des trade-offs en prose, pas en tableaux. Mettez en évidence où les designs divergent le plus.

5. Synthétiser

Souvent, le meilleur design combine des idées de plusieurs options. Demandez-vous :

  • « Quel design s'adapte le mieux à votre cas d'usage principal ? »
  • « Y a-t-il des éléments d'autres designs qui valent la peine d'être incorporés ? »

Critères d'Évaluation

D'après « A Philosophy of Software Design » :

Simplicité de l'interface : Moins de méthodes, paramètres simples = plus facile à apprendre et utiliser correctement.

Usage général : Peut gérer les cas d'usage futurs sans changements. Mais attention à la sur-généralisation.

Efficacité d'implémentation : La forme de l'interface permet-elle une implémentation efficace ? Ou force-t-elle des internals maladroits ?

Profondeur : Petite interface cachant une complexité importante = module profond (bon). Large interface avec implémentation mince = module peu profond (à éviter).

Anti-Patterns

  • Ne laissez pas les sous-agents produire des designs similaires - imposez une différence radicale
  • N'omettez pas la comparaison - la valeur est dans le contraste
  • N'implémentez pas - c'est purement une question de forme d'interface
  • N'évaluez pas en fonction de l'effort d'implémentation

Skills similaires