Entrevue pour le Canal Argent

J’ai eu l’opportunité de donner une entrevue à Georges Pothier du Canal Argent jeudi passé.  Ils voulait l’avis d’un expert sur les raisons du dépassement d’un projet comme le dossier de santé du Québec (DSQ). C’est un sujet qui m’intéresse beaucoup, j’ai écrit quelques fois là-dessus sur mon blogue (1, 2, 3, 4). J’ai été malheureusement incapable de trouver l’entrevue intégrale sur le web, je ne l’ai pas vu moi-même. J’ai vu un extrait au bulletin réseau de 22 heures du 13 janvier. Malgré tout, voici un extrait d’un article qui se retrouve sur leur site :

Questionné par Argent, Nicolas Roberge, président d’Ovologic, une compagnie spécialisée intégration de systèmes informatiques, indique pourtant que d’autres pays du monde ont déjà informatisé leurs dossiers.

«Le système de santé québécois est assez décentralisé, les hôpitaux ont beaucoup de contrôle sur leur manière de fonctionner, explique-t-il. Le dossier de santé informatique nécessite une certaine collaboration de tous les joueurs.»

«Chaque personne a une façon de faire qui est à elle, précise M. Roberge. Certains hôpitaux importants sont capables de décider du déroulement du projet et d’orienter des décisions. Il y a un peu une guerre de clochers et la conciliation prend du temps.»

Nicolas Roberge apporte un éclairage sur les méthodes du gouvernement. «On favorise les très gros appels d’offres. Il y a un problème avec l’entretien des systèmes informatiques. On attend l’état de désuétude et on est obligés de remplacer tout. Cela exclut les plus petits joueurs, qui ne sont pas en mesure de soumissionner.»

L’encadrement et les ressources fournies aux entreprises qui exécutent les contrats sont parfois insuffisants, ce qui n’aide pas la cause. «Le gouvernement n’est jamais blanc comme neige dans ces situations-là et c’est pour cela qu’il assume des dépassements de coûts.»

À l’opposé, les demandes techniques sont souvent trop pointues, ajoute-t-il. «Une chose qui est spéciale au gouvernement du Québec est que nous avons tendance à préciser beaucoup trop ce que l’on veut. C’est facile, lorsqu’un projet est amorcé, que des imprévus ouvrent des brèches au niveau du contrat.»

via 300 M$ pour brancher 8 pharmacies.

C’était ma deuxième expérience dans un studio de télévision. J’avais déjà donné une entrevue il y a longtemps pour l’émission Micro.info avec François Taddei diffusé à VOX.

Le manifeste de la refactorisation

Tha house is falling... a casa tá caíndo...

crédit Tony Protto

Le « refactoring », la refactorisation ou le réusinage (selon l’OQLF) est une tâche faite par des programmeurs dans un logiciel existant. C’est parfois fait à la fin d’un projet pour l’optimiser ou le standardiser ou c’est aussi fait lors que le logiciel doit être évolué. Voici une description provenant de Wikipédia :

La refactorisation (anglicisme venant de refactoring) est une opération de maintenance du code informatique. Elle consiste à retravailler le code source non pas pour ajouter une fonctionnalité supplémentaire au logiciel mais pour améliorer sa lisibilité, simplifier sa maintenance, ou changer sa généricité (on parle aussi de remaniement). Une traduction plus appropriée serait réusinage. C’est donc une technique qui s’approche de l’optimisation du code, même si les objectifs sont radicalement différents.

La refactorisation est essentielle si on veut assurer l’évolution d’un système informatique au fil des ans. C’est pour cette raison que Lasse Koskela et Bas Vodde ont créé un manifeste en ligne auquel vous pouvez ajouter votre nom si vous l’appuyez. Merci à Amélie Turgeon de me l’avoir fait découvert.

  1. Make your products live longer!
    Refactoring means taking the opportunity to keep your product alive. Don’t ditch it, stitch it! Don’t end it, mend it! Refactoring is not a needless cost. It is anti-needless complexity that prevents change.
  2. Design should be simple so that it is easy to refactor.
    Product designers: Make your products easy to change. Write clean, understandable code. Consumers: Buy products that are continuously refactored, or else find out why the developers didn’t do that. Be critical and inquisitive.
  3. Refactoring is not rewriting.
    Rewriting is throwing away the broken bit. This is NOT the kind of refactoring that we’re talking about.
  4. What doesn’t kill it makes it stronger.
    Every time we refactor code, we add to its potential, its history, its soul and its inherent beauty.
  5. Refactoring is a creative challenge.
    Refactoring is good for the imagination. Using new techniques, tools and materials ushers in possibility rather than dead ends.
  6. Refactoring survives fashion.
    Refactoring is not about styling or trends. There are no due-dates on continuously refactored code.
  7. To refactor is to discover.
    As you refactor objects, you’ll learn amazing things about how they actually work. Or don’t work.
  8. Refactor – even in bad times!
    If you think this manifesto is not relevant during recession, forget it. This isn’t about effort, it’s about mentality.
  9. Refactoring is about independence.
    Don’t be a slave to legacy code – be its master. If it’s broken, refactor it and make it better. And if you’re a master, empower others.
  10. You can refactor anything, even total crap.
    But we’d recommend avoiding total crap. Refactoring stops code from becoming crap.

Je crois beaucoup à l’évolution de systèmes. Il ne faut pas abandonner rapidement nos investissements informatiques. Il y a toujours façon de moderniser progressivement notre solution et la rendre actuelle et performance. Il suffit d’y croire et y investir le temps et l’argent chaque année. Les refontes sont toujours très coûteuses et imprévisibles.

Un logiciel est comme une maison. Si on l’entretient constamment, elle restera belle toujours et augmentera en valeur. Si on n’y touche pas pendant des années, elle deviendra éventuellement complètement désuète et vous serez obligé de la démolir et reconstruire. On voit rarement ça dans l’immobilier, alors cessons de le faire en informatique.

Le cercle vicieux des projets éléphants

crédit photo Brian Snelson

Les projets gigantesques ont récemment eu très mauvaise presse dans les médias québécois. Comment en arrive-t-on là? Pourquoi de si gros projets? Pourquoi dépassent-ils les budgets prévus? Pourquoi certains échouent-ils? Je vais tenter de démystifier tout ça pour vous. Voici ma perception et mon opinion sur la chose, ayant moi-même participé à l’un d’eux, soit le projet RISE de la Commission administrative des régimes de retraite et d’assurances (CARRA)

La dette technique

Dans les grandes organisations, les systèmes informatiques ont souvent été gérés en mode projets. Une fois le projet terminé, il se retrouve en mode maintenance, et celle-ci répond à trois critères bien précis :

  • La maintenance d’un projet consiste à affecter une équipe dont le rôle est uniquement d’apporter des correctifs en cas de problème (« break & fix »).
  • Le programmeur assigné au soutien de l’application n’a pas pour mandat d’améliorer l’application. Il doit uniquement la remettre sur le droit chemin si elle déraille.
  • Le programmeur est également contraint à des délais d’intervention déterminés par la gestion et qu’il doit respecter. Il doit alors réaliser la correction avec empressement, ce qui la rend par le fait même quelque peu boiteuse.

Par exemple, alors que j’étais affecté à la maintenance d’un projet, j’ai déjà reçu la consigne de cesser d’éplucher les journaux d’erreurs (« logs ») des applications en production pour corriger les anomalies des utilisateurs. Sans un appel de soutien technique formel, on ne devait pas bouger. On fermait les yeux sur des anomalies techniques importantes.

Ce genre de décision d’affaires crée inévitablement une dette technique. L’application est conçue pour un besoin « X » et une certaine charge d’utilisation « Y » au moment de sa création. Toutefois, les temps changent. Puisque le programmeur ne fait que des corrections très succinctes (mieux connues sous le vocable de « patchs »), le projet devient alors de plus en plus complexe et difficile à maintenir.

À force de repousser nos problèmes, on frappe un mur

Le retard devient si important qu’on ne peut plus améliorer l’application. C’est moins coûteux et moins risqué de la refaire à neuf. Le projet deviendra alors éléphantesque et on commencera à utiliser abondamment le terme « refonte ». Dès que vous entendez ce mot, « refonte », vous savez d’hors et déjà que vous entrez dans un processus qui implique beaucoup de heures-personnes. Dans le monde de la construction, une refonte, un événement très rare, consiste à raser un immeuble et ses fondations pour le rebâtir à zéro. Malheureusement, c’est une approche trop fréquemment utilisée en technologies de l’information. De plus, on doit la refaire de toute urgence. La continuité des affaires de l’organisation en dépend. On risque de ne plus être en mesure de fonctionner si une panne survient. La cloche d’alarme sonne ! D’ailleurs un signal d’alarme similaire a retenti d’un rapport récent de la vérificatrice générale du Canada récemment.

Finalité de cette démarche ? Un énorme projet avec un délai très court. En somme, tous les ingrédients réunis pour un échec. Et par la suite et on se surprend de la chose.

Une tâche colossale pour peu de compétiteurs

Le système est si gros qu’il exige une équipe considérable. Bien évidemment, l’organisme ne peut pas mobiliser des ressources humaines normalement affectées aux opérations courantes. Il faut alors se tourner vers l’externe. La question qu’il faut maintenant se poser est celle-ci : « Qui peut bien mobiliser autant de travailleurs temporaires en si peu de temps ? » Et selon vous, quelle est la réponse ? La voici : Des firmes de consultants en informatique gigantesques.

Vous comprendrez qu’il y a peu très d’élus qui peuvent répondre à cette demande. Un aspect qui empêche bien entendu une véritable concurrence, à ce niveau, dans le domaine des TIC. Conséquemment, les petites entreprises ne pourront répondre aux critères du futur appel d’offre.

Le système des appels d’offres et le plus bas soumissionnaire

Les soumissions sont bien évidemment examinées selon différents critères, mais le coût est le principal critère de sélection. Immanquablement, les candidatures se ressembleront beaucoup. Les critères de l’appel d’offres exigent des paragraphes au contenu spécifique, et les documents obtenus auront tous les mêmes sections avec des arguments de vente très convenus.

Sachant que la soumission ayant le prix le plus bas est souvent gagnante, cela ne peut que favoriser des manoeuvres discutables de fixation des prix comme le rapporte un reportage de Radio-Canada.

Le piège de la surprécision

Le porteur du dossier n’est pas dupe : il se protège en ajoutant encore plus d’exigences dans les futurs appels d’offres. Il ne veut pas se faire dire qu’une fonctionnalité n’était pas demandée au départ et se faire facturer une demande de changement (DDC).

Toutefois, le piège d’être trop précis a un effet pervers : le client met l’emphase sur la validation du produit final, et il doit alors vérifier si tout fonctionne comme demandé à la virgule près.

De plus, cette survalidation va forcément empêcher le fournisseur d’être créatif en simplifiant ou en améliorant intelligemment le produit livrable, car il créerait alors un écart trop important au regard de l’exigence initiale. On se retrouve donc avec un processus et une contrainte qui met le gros bon sens et l’imagination de côté. Des idées qui auraient pu rattraper des retards et ainsi faire sauver de l’argent au projet sans modifier les exigences deviennent alors impossibles.

Sortir de ce vicieux cercle sans fin

L’agilité, vous connaissez?

La nature même de l’agilité en entreprise est justement d’être à l’écoute des utilisateurs. On répond à leurs besoins en leur livrant une solution rapidement, laquelle sera à préciser et à bonifier à travers un échange continu avec les utilisateurs. On doit alors financer le développement des applications informatiques pour assurer leur évolution vis-à-vis les besoins changeants des utilisateurs.

Poursuivre l’évolution des systèmes

Concrètement, l’évolution d’un système consiste en une équipe permanente de programmeurs qui fait des déploiements réguliers vers les utilisateurs. Les programmeurs ont ainsi la possibilité de réusiner (« refactor ») l’application en réécrivant des portions de code entièrement pour améliorer sa lisibilité, sa rapidité et sa robustesse. L’évolution comprend aussi la conversion de certaines portions de l’application vers des plateformes et des langages plus modernes.

En procédant ainsi, l’application sera toujours au goût du jour et n’accumulera pas de dette technique. Elle se modernisera alors d’année en année et n’aura pas tendance à devenir désuète.

Toutefois, dans la fonction publique et dans les grandes entreprises, on ne maintient que les systèmes informatiques. Ce sont des postes budgétaires très faciles à réduire voir même couper. La terre n’arrêtera pas de tourner si on ne fait plus évoluer les applications. La conséquence est dans le futur, et peu d’organisations planifient longtemps à l’avance.

Tout le monde pourrait être gagnant

En évitant des projets de refonte de grande envergure, on peut confier l’évolution à sa propre équipe. Cette équipe interne devient alors maître d’oeuvre de la solution. Elle peut donc s’en remettre à des équipes externes pour des conseils ponctuels, mais elle doit essentiellement conserver le contrôle sur le développement de l’application. Nos employés demeurent motivés, car ils travaillent sur quelque chose d’utile qui se modernise constamment. Une réelle relation de complicité se développe alors entre les artisans du code et leurs utilisateurs.

Le bailleur de fonds y trouve forcément son compte, car il n’a qu’à procéder à des investissements réguliers tous les ans, ce qui est beaucoup plus facile à budgéter. Il ne se lance donc pas dans des projets trop importants souvent impossibles à contrôler adéquatement et qui comportent, bien entendu, de très grands risques.

Le site d'Ovologic fait peau neuve

C’est avec grand plaisir que je vous offre la deuxième mouture du site de ma compagnie Ovologic. J’ai voulu offrir un visuel plus aéré et actuel. La lecture des textes se voit grandement améliorée.

Désormais, le site est géré entièrement par l’outil de publication WordPress. La portion blogue prendra ainsi plus de place. Les pages décrivant mes services sont rendues possibles avec la fonction Pages de cet outil.

J’aimerais avoir vos commentaires!