Tout le monde connaît des applications qui sont désespérément
lentes, des sites Web tellement touffus que le visiteur finit par s’y
perdre, des traitements fonctionnant normalement et qui soudain, sans
prévenir, sortent des résultats aberrants, … Tous ces incidents
sont des signes qui ne trompent pas. Tout professionnel vous le
dira : « Il y a un problème de conception ».
Il est même possible qu’il n’y ait pas eu de conception (1)
et cela se voit.
Normalement tout projet informatique comprend avant la réalisation
(2)
une phase de conception plus ou moins importante. Le nom de cette
étape varie mais on la retrouve dans toutes les démarches :
approche classique, prototypage, démarche en spirale, méthode
agile, …. Cette étape est très importante car elle permet de
s’assurer que rien d’important n’a été oublié, que
l’application envisagée est techniquement réalisable et qu’elle
fonctionnera convenablement.
L’expérience montre que sans une étape conception le projet
dérive et fini par se « planter ». Plus de 65 ans de
développement de logiciels montrent son importance. Jadis elle était
assez succincte. En quelques jours on rédigeait un court document
illustré par quelques schémas. Aujourd’hui on n’hésite pas à
passer du temps à définir ce qu’il est souhaitable de faire faire
à l’application et la manière de procéder pour y arriver. Mais
jusqu’où faut-il aller ? Les méthodes agiles suppriment
l’étape consacrée à l’élaboration du cahier des charges.
Est-ce la bonne approche ?
Mais qu’est-ce qu’au juste la conception ?
Fausses conceptions sur la conception.
Avant d’aller plus loin il faut commencer par faire un sort à
certaines vieilles lunes concernant la conception. En effet, il
existe en ce domaine un certain nombre d’idées assez inexactes,
voir franchement inexactes :
-
La conception est du temps perdu. Les tenants de cette approche pensent qu’il est préférable de commencer très vite par programmer puis ensuite d’ajuster le code en fonction des retours des premiers utilisateurs (3). Ce type d’approche amène à réaliser une 2ème puis une 3ème version, … C’est du « quick and dirty » et plutôt du « dirty-dirty ».
-
L’analyse fonctionnelle consiste à recueillir les besoins de tous les intéressés pour définir les spécifications de la future application. On va pour cela multiplier les entretiens, les groupes de travail et les travaux de synthèse. Cela correspondant au souhait d’être sûr de ne rien oublier. Il faut être claire : la conception n’est pas la collecte de toutes les doléances de tous les utilisateurs potentiels. C’est un préalable mais ce n’est pas la conception proprement dite.
-
On conçoit l’application indépendamment des choix techniques et organisationnels qui sont ensuite effectués. Or la dimension fonctionnelle n’est qu’une partie des spécifications de la future application. Les performances, la sécurité, les contraintes qui s’imposent dans le domaine technique, la maintenabilité, la fiabilité des traitements, … sont des éléments importants à prendre en compte dans la conception de l’application.
La conception s’est autre chose. C’est une
vision globale de la future application et la manière de la
développer de façon à arriver à une solution efficace et
élégante.
Le secret des projets à succès
Heureusement un grand nombre d’applications sont bien conçues.
L’observation montre qu’il existe aussi un certain nombre
d’autres applications mal foutues. Ce sont celles dont les
utilisateurs se plaignent fréquemment. Et très souvent on constate
que ceci est dû à des faiblesses de conception. L’expérience
montre que l’absence de conception se traduit par le développement
« d’usines à gaz » ou par des « plats de
nouilles ». Ceci se traduit par un grand nombre de « bugs »
qui, finalement, produisent de nombreux « plantages »
d’exploitation (4).
A l’inverse une application efficace repose généralement sur une
conception de qualité. Cela se manifeste par des temps de réponses
excellents, une succession d’opérations simple, les traitements
sont sûrs, les bases de données sont de qualité et fiables, la
maintenance se fait sans peine, …. Lorsque la conception est de
qualité cela se voit.
Ceci ne veut pas pour autant dire qu’il est nécessaire de rédiger
un cahier des charges de 500 pages touffues et difficiles à
comprendre. La qualité de la conception ne se mesure pas au nombre
de pages produites mais à la quantité et la qualité du « jus
de cervelle » qui sont investies dans le projet.
L’observation montre que la qualité de la conception se manifeste
de deux manières :
-
une économie de moyen. Peu de ressources sont nécessaires pour développer le projet. Celui-ci se déroule rapidement et arrive aux résultats attendus dans les délais prévus. Autre point significatif, l’application bien conçue a besoin pour fonctionner d’un volume de ressources informatiques raisonnables.
-
une grande souplesse du système. Il est apparemment simple d’emploi et a une capacité d’évolution satisfaisante de sorte qu’il s’adapte sans trop d’effort à un changement du contexte.
Mais ces deux caractéristiques, économie de moyen et grande
souplesse, ne sont pas propres à l’informatique. Elles concernent
aussi d’autres domaines comme la conception et la réalisation
d’ouvrages d’art comme les ponts, mais aussi le développement
d’avions, de moteurs, … C’est le résultat de la mise en œuvre
d’un savoir-faire particulier, c’est presque un tour de main.
Ceci montre que la conception n’est pas une
science mais plutôt un art.
L’expérience montre que certaines personnes sont de bons
concepteurs et que d’autres ne le sont pas. Ce n’est pas un
problème de formation. Il arrive que des personnes bardés de
diplômes s’avèrent être des concepteurs médiocres alors qu’à
l’inverse des personnes nettement moins diplômés sont excellents
en ce domaine. Des formations aux techniques de gestion de projet
améliorent leur efficacité mais elle ne permet pas d’acquérir la
capacité à faire de bonnes conception. C’est, à la base, une
affaire de talent et de créativité.
Le rôle du concepteur
Dans le processus de développement le concepteur joue un rôle
particulièrement important. Mais les termes usuellement employés
pour décrire la fonction de concepteur sont ambigus. Ce sont soit
des analystes soit des chefs de projet :
-
L’analyste. On précise souvent que c’est un « analyste fonctionnel ». En fait ce n’est pas analyste, car il n’analyse pas mais au contraire conçoit, et il ne limite pas son intervention au seul domaine fonctionnel. Il n’a pour mission de décomposer le futur système en unités élémentaires mais au contraire d’imaginer une solution globale cohérente. Le titre d’ «analyste» devrait être évité. Celui de «concepteur» serait préférable.
-
Le chef de projet. Très souvent le concepteur est désigné par le terme de chef de projet mais au moment de la conception de l’application il n’y a pas encore de projet. De plus il travaille seul ou avec un ou deux collaborateurs. Le terme de chef de projet est en avance par rapport à la suite des événements. Par contre en phase de réalisation il peut devenir chef d’équipe mais il est difficile d’être à la fois concepteur et chef de l’équipe de réalisation car cela ne fait pas appel aux mêmes compétences.
En fait le rôle du concepteur ressemble assez à celui d’un
architecte (5).
Le concepteur informatique commence faire une étude généralement
appelée expression des besoins ou étude de faisabilité. Ce premier
travail ressemble beaucoup à l’étude faite par les architectes
appelée «esquisse» ou «plan masse». Ensuite le concepteur va
effectuer une analyse fonctionnelle qui se traduit par cahier des
charges. Ce travail est assez voisin de celui de l’architecte
appelé «avant-projet définitif» ou «dossier d’appel d’offre»
(dossier d’APO).
On notera que la conception en informatique comme en architecture se
fait en deux étapes : une conception
globale (ou conception d’ensemble) suivie ensuite une
conception détaillée. Un jour un
stagiaire qui suivait un cours de gestion de projet m’a demandé
pour quelle raison il y avait deux étapes. J’ai été perplexe et
j’ai fini par lui répondre : «c’est l’habitude car on
évite de mettre tous les œufs dans le même panier». On retrouve
cela dans toutes les démarches d’ingénieries.
Certaines méthodes agiles comme Scrum ou Extreme Programming ont
cherchés à ramener la conception à une seule étape
d’initialisation ou de cadrage, souvent basée sur des scénarios
d’utilisation. Ce sont en fait des études de faisabilité. Par
contre toutes les méthodes agiles bannissent l’étape d’analyse
fonctionnelle. Malheureusement cette étape a un double rôle
fondamental : s’assurer que rien d’essentiel n’a été
oublié et évaluer l’effort de programmation et de tests
nécessaire pour arriver à une application opérationnelle.
Résultat : la probabilité de dérive augmente.
Comme on le voit le rôle de la conception est fondamental. Qu’elle
se fasse en une ou deux étapes, elle est indispensable et le
concepteur est l’acteur principal de cette étape. Son rôle est de
construire un système simple et efficace à partir d’un ensemble
hétéroclite : des idées plus ou moins bien formulées, des
demandes hétérogènes faites par les utilisateurs, de nombreux
documents, différentes études techniques, des entretiens, les
travaux de groupes de travail, des spécifications, …. En fait un
bon concepteur est un homme de synthèse. C’est un véritable
«artiste» : un homme de l’art connaissant tous les aspects
de la réalisation de système d’information et capable d’effectuer
les choix des solutions les plus efficaces.
Tentative de définition de la conception
Comme on le voit il n’est pas facile de définir ce qu’est la
conception. C’est un peu comme la définition de l’escalier en
colimaçon. Si vous demandez à quel qu’un ce que c’est-il hésite
puis fini par faire un geste de la main pour montrer que cela monte
en tournant. Bien sûr il existe dans le dictionnaire une définition
: « c’est un escalier qui s’enroule sur lui-même ».
C’est beau mais ce n’est pas d’une grande clarté. Une approche
empirique est préférable.
Pour mieux cerner la définition du travail concepteur deux points
clés se dégagent. Il doit d’abord avoir la
capacité à intégrer toutes les contraintes et définir de manière
claire le périmètre fonctionnel de l’application. Il va
notamment définir ce qui fait partie de la future application et ce
qui n’en fait pas partie. Il doit ensuite être capable de fixer
un budget et un délai pour réaliser le
projet. Il va pour cela effectuer des arbitrages budgétaires
tout en tenant compte des contraintes de ressources et de délais.
Un de mes amis, qui est un excellent concepteur, à l’habitude de
dire que : «la conception consiste à fermer des portes en
disant : «ça je ne le ferais pas» ». Au-delà de la
boutade il y a une réalité. Face à chaque demande et à chaque
spécification il doit s’interroger sur l’effort nécessaire pour
le réaliser et son utilité. Pour cela il suit une démarche qui
n’est pas sans rappeler celle de l’analyse de la valeur. Souvent
le concepteur dit : «ce sera dans la version 2». C’est la
manière polie de «fermer les portes».
Il est plus facile de reconnaître une mauvaise conception
Mais comment définir une bonne conception ? En fait, il est
plus facile de constater qu’une application a été mal conçue
alors qu’il est plus difficile de définir pour quelle raison une
autre application est bien conçue. En effet les systèmes mal conçus
ont quelques caractéristiques communes :
-
Lenteur. Les saisies sont lentes et les traitements poussifs. Les utilisateurs se plaignent souvent de devoir attendre devant les écrans qu’ils se déverrouillent. De même les contrôles sont fastidieux et peu efficaces.
-
Touffue. Très vite l’utilisateur se plaint d’être perdu dans la succession des opérations et ne plus savoir ce qu’il doit faire. Les fonctions sont confuses, les libellés ne sont pas clairs, … Ceci fait que les utilisateurs commettent fréquemment des erreurs de navigation ou de sélection des traitements.
-
Peu efficace. L’application informatique mise en œuvre n’a pas permis de dégager des gains significatifs (gains de productivité, augmentation du chiffre d’affaires et du bénéfice de l’entreprise).
-
Sécurité insuffisante. Le système est jugé peu fiable par ses utilisateurs. Les données sont mal sécurisées. Les redémarrages sont longs et laborieux et il arrive que des données soient perdues. Pire, on s‘en aperçoit au bout de quelques semaines, voir de plusieurs mois après l’incident qu’il est très difficile voir impossible de reconstituer les données perdues.
Ces symptômes sont en grande partie liés à des faiblesses de
conception ou à la médiocrité de la réalisation. On le sait :
une conception médiocre ne peut qu’entraîner une réalisation
médiocre. Malheureusement ces défauts ne peuvent qu’être
constaté qu’a posteriori lorsque l’application est mise en
production et il est alors généralement trop tard pour corriger la
faiblesse de la conception.
Autre signe qui ne trompe pas : lorsque l’application mal
conçue devient opérationnelle on constate, que la maintenance
nécessaire est anormalement élevée, difficile à effectuer et
coûteuse. Malheureusement, à ce moment il est trop tard pour
corriger ces défauts (6).
Il est préférable de détecter ce type de fragilité dès la phase
amont. Malheureusement, l’expérience montre qu’il est difficile
de constater à ce moment la faiblesse de la conception. Cependant il
existe des signes annonciateurs. Ainsi si l’étude de faisabilité
ne fixe pas de manière claire et non-ambigu le périmètre
fonctionnel on risque de constater par la suite une dérive
significative. Ensuite, lors de la phase fonctionnelle on constate
que le document final type cahier des charges est verbeux, par clair
et assez filandreux. C’est un critère simple : « si
vous ne le comprenez pas ce n’est pas de votre faute. C’est dû
au fait que la conception est faible, voire mauvaise ». Deux
autres critères permettent d’évaluer ce document :
-
Il part dans tous les sens.
Comme les fragilités de la conception peuvent avoir de graves
conséquences il est important de veiller à avoir de bons
concepteurs.
Trouver un bon concepteur
Malheureusement il est très difficile d’arriver à détecter a
priori quelles sont les personnes qui ont de bonnes capacités de
conception. Rien ne permet de présumer ces compétences. Tant qu’on
n’a pas mis les personnes en situation on ne saura pas si elles
ont des compétences de conception. Comme le dit le proverbe :
«C’est au pied du mur qu’on voit le maçon».
Un minimum de connaissances est nécessaire : une bonne culture
informatique, une solide pratique de la gestion et une connaissance
approfondie du domaine à informatiser. C’est une base nécessaire
mais ce n’est pas suffisant.
Il est pour cela nécessaire de tester un certain nombre de personnes
pour découvrir celles qui ont de réelles compétences de
conception. On a souvent d’heureuses surprises mais fréquemment de
nombreuses déceptions.
Pour ces raisons il est nécessaire de cultiver dans l’entreprise
ces compétences et surtout de les conserver. Pour choisir les
personnes deux orientations sont envisageables :
-
une solide culture technique du type ingénieur ou équivalant. Ce sont fréquemment des informaticiens mais ce peuvent aussi être des ingénieurs mécaniques, électriques, chimiques, travaux publics, … Souvent de simples techniciens ont des capacités insoupçonnées.
-
une forte culture d’entreprise notamment dans les domaines de la gestion et de management. Pour être efficaces il est indispensable que ces personnes aient aussi une bonne connaissance de l’informatique.
On constate qu’actuellement les entreprises recherchent plutôt des
personnes du deuxième type capable de comprendre les préoccupations
du management et les demandes des futurs utilisateurs tout en étant
capable de dialoguer avec les informaticiens.
Souvent, n’ayant pas en interne ces concepteurs, les entreprises
font appel à des SSII (7)
et à des cabinets de conseils car elles ont souvent des concepteurs
de bonne qualité car ils ont vu de nombreuses entreprises et
effectuer une grande variété de missions. Mais il y a aussi parmi
leurs collaborateurs des personnes nettement moins efficaces, à
éviter.
L’absence de concepteur peut être fatale
Dans les entreprises qui se développent rapidement, notamment celles
qui se sont résolument engagées dans leur transformation numérique,
on constate que le nombre de projets est supérieur aux nombres de
concepteurs disponibles. C’est une grave contrainte. Des demandes
importantes sont bloquées ou, pire, des projets sont lancés sans
conception où avec une conception réduite au strict minimum. Les
résultats ne sont pas à la hauteur des espérances même pour des
réalisations de taille limitées.
Face à cette situation deux solutions sont envisageables selon
l’importance du projet :
-
Dans le cas d’un petit projet la solution consiste à faire du « versionning » en développant des versions successives. C’est la démarche proposée par le mode agile. On sort une nouvelle version tous les 2 mois. Cela peut être des versions offrant de nouvelles fonctions ou des réécritures successives de versions antérieures (on parle dans ce cas de «ravaudage»).
Cette démarche à l’avantage de permettre de limiter les risques
de dérives fonctionnelles des projets. Par contre elle risque de se
traduire par des coûts supérieurs à ce qui étaient prévus à
l’origine. A cela s’ajoute le coût élevé de la maintenance
nécessaire demandée par une application développée de cette
manière. Il peut devenir si élevé qu’il est souvent préférable
de réécrire entièrement l’application à «iso-fonctionnalités».
-
Dans le cas de grands projets, si on n’a pas en interne de concepteur ayant le savoir-faire nécessaire, il faut commencer par voir s’il n’est pas possible de dégager un concepteur faisant fonction de chef de projet en le remplaçant par un chef d’équipe de développement capable de contrôler les équipes sans toucher au contenu des fonctions à développer.Si ce n’est pas possible il faut alors envisager de sous-traiter la conception de la future application. Dans ce cas une attention particulière doit être portées aux personnes déléguées par les sociétés de service ou de conseil. Il faut étudier avec soins les CV des personnes proposées et leurs références et avoir un long entretien préalable avec elles.
Si on ne dispose pas de la personne ayant les compétences
nécessaires il est préférable de ne pas lancer le projet et
d’attendre de trouver la personne compétente.
Il est aussi possible de découper en plusieurs petits projets plus
facile à maîtriser par des personnes moins expérimentées. On
parle dans ce cas de «saucissonnage». Faut-il encore que
l’application s’y prête ?
Contrairement à ce qui est souvent dit, la qualité de la conception
n’est pas une affaire d’outils ou de méthodes. Ils sont utiles
mais ils ne font pas le travail de conception. Celle-ci est d’abord
une affaire de compétences. Les entreprises doivent cultiver ce type
de savoir-faire. Si ce n’est pas le cas, leurs projets risquent de
dériver, voire d’échouer. L’expérience montre que des
applications développées dans ces conditions risquent d’être
lourdes et peu efficaces. A l’inverse les systèmes d’information
efficaces reposent toujours sur une conception de qualité faite par
un concepteur compétent. Cette constatation ne souffre pas
d’exception.
1
- Le terme conception utilisé en France n’est pas parfait. Le
terme anglais de « design » est plus juste même s’il
est un peu trop restrictif.
2
- Parfois on fait l’inverse : on commence par programmer puis au
bout d’un certain temps les programmeurs s’interrogent et se
demandent comment « raccrocher les morceaux ». On
cherche alors à dégager une sorte de conception. Généralement le
résultat est assez décevant. Il est de loin préférable de
commencer par la conception pour ensuite effectuer la programmation.
3
- C’est le fameux « Fixe and Code » des débuts de
l’informatique. Cette démarche a en règle générale donnée des
résultats décevants et elle a été progressivement abandonnée au
profit de démarches plus structurées commençant par une phase de
conception. Mais aujourd’hui encore on constate que cette démarche
est encore pratiquée avec des résultats toujours aussi décevants.
Si l’application se limite à développer 2 ou 3 programmes, il
est vrai que le risque est limité. Au-delà on entre dans la
« terra incognita ».
4
- La terminologie des professionnels est sur ce sujet
particulièrement riche. « L’usine à gaz » est une
application lourde et peu efficace. L’utilisateur doit faire
beaucoup d’efforts pour finalement constater un résultat
décevant. « Les plats de nouilles » sont des programmes
mal bâtis. Ils sont foisonnants, avec de nombreux renvois en tout
sens ce qui les rendent peu lisibles. Le terme « bug »
est rentré dans le langage courant. C’est une erreur dans une
instruction qui se traduit finalement par un « plantage ».
Le terme est charmant mais la réalité est mal vécue par les
utilisateurs qui, lorsqu’ils tombent sur un « bug »,
perdent une partie des données qu’ils viennent de saisir.
5
- Dans quelques entreprises on les appellent «architecte
fonctionnel». Mais ce titre est, en fait, assez peu utilisé.
6
- On peut effectuer une analogie avec le bâtiment. Lorsqu’une
maison est terminée, si on s’aperçoit au bout de quelques mois
que d’importantes fissures apparaissent et si on estime qu’elles
sont dues à des fondations insuffisantes (ou à une absence de
fondations) il est alors difficile de corriger ces défauts. On peut
faire des injections de béton mais il n’est pas sûr que ce soit
suffisant.
7
- On les appelle de plus en plus souvent les entreprises de services
du numérique (ESN).
Aucun commentaire:
Enregistrer un commentaire