Résoudre des problèmes intuitivement
Résoudre des problèmes, nous le faisons tous tout le temps. Mais dès que le problème devient compliqué ou complexe il nous arrive d’être démuni. Peut-on s’améliorer en résolution de problème ? Est-ce une compétence en soi, ou juste une conséquence de notre niveau, de nos compétences dans le domaine du problème ? Cette question m’interpelle, car dans ma vie de développeur (c’est le cas bien sûr dans de nombreux autres métiers) je ne fais que passer mon temps à résoudre des problèmes. Et parfois je me sens démuni face à eux. J’ai donc décidé de creuser cette question à travers la lecture de deux livres. Le premier, How to solve almost any problem, m’a donné quelques pistes intéressantes mais m’a laissé sur ma faim. Le second, Bulletproof Problem Solving, est celui qui m’a le plus aidé pour avancer dans ma compréhension du sujet. Je l’ai trouvé plus concret, applicable. Et si je n’ai fait que gratter la surface de ce sujet, je vous partage ce que j’en ai perçu à ce jour à travers un article en 2 parties.
Aujourd’hui je commence par évoquer avant tout la résolution de problèmes intuitive.
Le développement est une activité au moins compliquée, et souvent complexe (Cynefin). Nous avons beaucoup d’inconnues, et nous n’avons souvent pas conscience de ces inconnues. Cependant, nous avons à résoudre des problèmes plus ou moins complexes quotidiennement. Et pour certains d’entre eux nous appliquons des solutions intuitivement. On le fait quand on peut utiliser un modèle mental qui correspond à la problématique que l’on a identifiée. Si cela nous est possible, c’est que nous avons déjà résolu des problèmes similaires dans le passé. Et il nous arrive fréquemment de traiter comme des problèmes simples, des problèmes qui comportent une compléxité que nous ne voyons pas. Une résolution intuitive n’est alors pas sans danger.
Notre cerveau est une machine à se faire piéger. Je parle bien sûr des biais cognitifs. Dans notre cerveau, la partie que D. Kahneman a nommé le système 1 va viser la rapidité, la simplicité, et non la qualité. Il tire des conclusions hâtives, à partir d’informations partielles. Et si cela peut nous être utile dans certaines situations pour réagir vite, le même mécanisme nous sera souvent préjudiciable dans la résolution de problème. Par définition, il occulte quantité de solutions possibles pour — au mieux — nous en souffler une bonne. Mais il peut aussi bien nous aiguiller vers une mauvaise solution, en nous laissant inconscient des pistes écartées. C’est grâce à notre système 2, rationnel et beaucoup plus énergivore, que nous pourrons nous approcher d’une meilleure solution. Or, si celui-ci se mettra automatiquement en marche pour les problèmes perçus comme complexes, il faudra forcer la démarche sur un problème pour lequel une solution connue paraît correspondre parfaitement. Car le cerveau minimise toujours la dépense énergétique et ne mettra pas en marche un système qu’il ne juge pas nécessaire.
Comment faire ?
Mondrian, simple ou complexe ?
Une solution est de travailler à plusieurs. Par exemple en pair ou en mob/ensemble programming. L’échange, la discussion va naturellement nous faire raisonner.
Si on est seul, il faut essayer de ralentir la prise de décision : chercher des alternatives, les lister, les écrire. On cherche dans sa mémoire, mais aussi on va à la découverte d’autres possibilités, en cherchant sur Internet, ou en échangeant dessus avec ses collègues. Je m’aide aussi parfois maintenant d’une IA générative pour cela. Non pas pour avoir sa solution, mais pour générer des alternatives dont je me réserve le jugement de la pertinence. On ralentit ainsi le temps de la décision. Par ailleurs, la technique du pomodoro peut aider à ralentir et ne pas foncer droit vers une unique solution. La technique en bref : on alterne des phases de concentration (25min par exemple) avec des phases de pause (5min par exemple). Les temps de pauses nous seront utiles pour nous détendre, mais pour aussi prendre du recul sur notre travail en cours. Si je ne ralentis pas, je me prends plein de panneaux. Au mieux ce sera vu en revue, au pire je laisse de la dette qu’il faudra traiter plus tard.
Aussi, il m’arrive souvent de ressentir de la confusion quand je traite une tâche, de dev ou autre. Mais ces signes se rencontrent dans de nombreuses situations. C’est facile — et si tentant — de les mettre sous le tapis. Pourtant ce sont des opportunités, pas des gênes. Vous venez de résoudre un problème mais vous avez un doute sur la validité de votre solution ? Posez le crayon. Puis essayez de mettre le doigt sur ce qui vous donne ce sentiment. Challengez-le. Soyez critique. Changez de posture. Faites vous l’avocat du diable. Plus globalement il est intéressant de faire ce changement de posture, même sans signe de confusion. Soyez critique envers vous comme vous l’êtes envers les autres.
Aussi trivial que puisse nous paraître un problème, il nous est souvent utile de le résoudre rationnellement. Sinon on prend le risque de créer d’autres problèmes pour le futur. Et c’est peut-être là une des sources qui alimente la fameuse dette technique. Cette vigilance que nous avons intérêt à développer pour la résolution de problèmes qui nous paraissent simples nous sera très utile aussi dans la résolution de problèmes clairement identifiés comme complexes, car à tout moment notre cerveau peut être victime de biais.
Je vous donne donc rendez-vous pour un deuxième article sur la résolution rationnelle de problèmes.