Rapide sondage autour de moi. Pratiquement tous les développeurs ont un jour été confronté à cette situation.
Le client exprime, ou fait exprimer par un tiers, son besoin dans un document qu'il est convenu d'appeler un cahier des charges. Un prestataire s'engage à réaliser l'application selon le contenu du document. Un accord est trouvé entre le prestataire et le client sur les modalités de fonctionnement (livrables, coût et délais). Cette démarche est aujourd'*** la plus générale, que le prestataire soit interne ou externe n'y change rien d'ailleurs.
Nous nous étonnions de la similitude avec le métier du bâtiment où Maîtrise d'oeuvre et Maîtrise d'ouvrage sont les mêmes termes utilisés pour désigner les 2 parties. Comment font d'ailleurs les professionnels de l'immobilier pour exprimer le besoin ? Ils font des plans, des dessins et des maquettes. Il est facile pour un client final de visualiser, d'imaginer ce que sera son appartement à partir d'un plan. La taille de la salle de bain, le couloir, l'emplacement de la fenêtre sont des éléments à sa disposition très tôt, et qui ne bougeront plus. Là s'arrête l'analogie avec le Système d'Informations. Car, si l'usage de maquettes permet à l'utilisateur de visualiser son application, celle-ci a des limites. D'abord, il est rare de faire une maquette exhaustive selon les besoins. Quand elle est faite - elle a un coût de réalisation non négligeable dont les prestataires essaient souvent de faire l'économie - elle est superficielle. D'autre part, le besoin sera de toute façon complété par l'usage. L'utilisateur est pragmatique, rien ne vaut l'expérience utilisateur pour améliorer et enrichir une application.
Et quand arrive le moment où les premiers éléments sont entre les mains du client, c'est assez systématique. Il y a toujours un truc, plus ou moins important, une fonctionnalité qui ne correspond pas exactement aux attentes du client. Et si le besoin mal ou pas exprimé est structurant, la correction est probablement douloureuse pour celui qui réalise.
L'approche que nous proposons avec Aspectize permet de réaliser les applications au fur et à mesure des besoins. Dès le premier jour, le client peut avoir une application qui est dans un état fini. Elle n'est pas terminée, mais elle fonctionne, et il peut tout de suite savoir si ce qui a été fait correspond à son besoin. D'abord, les développements sont vite faits, mais les modifications sont faciles, parce que les pièces sont découplées. Ajouter ou enlever un champ à une entité, ne casse pas l'existant. Modifier l'organisation d'un arbre se fait en quelques clics de souris. Sauvegarder des données en base, s'écrit en une ligne de code. Le besoin peut donc être implémenté au fur et à mesure de son évolution. Et l'architecture suit, parce que les éléments sont complètement indépendants les uns des autres. Le couplage quasi nul entre les différentes briques permet leur réorganisation et leur réutilisation. Il est facile de réorganiser un chargement de données, de déplacer un traitement sur un serveur, d'ajouter de la sécurité à une application.
C'est ce que nous tenterons de montrer lors de nos démonstrations. Soyons pragmatique.