vendredi 9 septembre 2011

Une piste innovante pour améliorer l'organisation d'une entreprise

L'un des principaux leviers d'une entreprise pour améliorer ses performances est l'amélioration de son organisation.
En effet, une mauvaise organisation peut faire perdre du temps, générer des erreurs, rendre l'entreprise moins réactive qu'elle pourrait l'être, et par conséquent diminuer ses marges et faire perdre des clients. Une organisation bien pensée ne garantit pas la pérennité de l'entreprise, mais une organisation déficiente est un boulet que seules des entreprises en quasi-monopôle peuvent se permettre.

Au-delà de l'optimisation des procédures

Les principales approches des consultants pour améliorer l'organisation d'une entreprise consistent à :
  • formaliser les diverses activités de l'entreprise sous forme de procédures,
  • mesurer les performances de ces procédures à l'aide d'indicateurs,
  • chercher à optimiser ces performances en éliminant les tâches superflues et les gaspillages,
  • et accélérer les procédures par l'automatisation des tâches qui peuvent l'être.
Citons quelques exemples de méthodes, plutôt spécifiques à la production, qui relèvent de ces approches :
On peut appeler ça, globalement, de l'optimisation de procédures : on fait comme avant, mais mieux.
Je ne nie pas l'intérêt de ces méthodes, ni l'apport des consultants qui permettent aux entreprises de les mettre en œuvre. Mais il est assez rare que les consultants aillent au-delà de cette optimisation, qu'ils repensent une procédure complètement.
Il est pourtant un domaine dont le rôle est précisément de trouver les procédures les plus efficaces pour effectuer une tâche donnée : l'algorithmique.

L'algorithmique et l'entreprise : même combat

L'informatique peut à mon sens apporter encore beaucoup à l'entreprise, et en particulier à son organisation.
L'entreprise moderne est déjà équipée copieusement en outils informatiques : PC de bureau, PC portables, réseaux, clusters, mainframes, mobiles, smartphones, bientôt tablettes ou cloud... Mais il ne s'agit pas de dire qu'il faut encore rajouter une couche d'outils informatiques. Non. Mon propos est tout autre.
Car je parle bien de médiation technique. Il s'agit ici de transposer des principes algorithmiques (la branche de l'informatique qui s'intéresse à la manière de réaliser des tâches) à l'organisation des entreprises.
L'algorithmique a développé un tas de solutions pour réaliser des tâches informatiques diverses : calcul, tri, optimisation, recherche... Ces tâches peuvent généralement être exécutées selon plusieurs méthodes (ou algorithmes) dont l'efficacité peut varier fortement.

De l'importance du choix d'un algorithme
Prenons l'exemple du tri, sans doute le problème d'algorithmique plus classique. Vous avez une grande quantité (N) de valeurs numériques et vous voulez les classer (pour faire une étude statistique sur votre production industrielle, par exemple). 
Si vous utilisez un algorithme de tri naïf comme le "tri bulle", le temps qu'il vous faudra pour accomplir le tri est proportionnel au carré du nombre de valeurs à trier (N2) ; si au contraire vous utilisez un algorithme plus malin, comme le "tri rapide", le temps n'est plus que proportionnel à Nlog(N). 
Ce n'est pas très important si N est petit, mais si vous avez un million de valeurs à trier, le premier sera grosso modo cent mille fois plus lent pour trier ces valeurs que le second.

Le choix d'une procédure dans une organisation d'entreprise relève du même problème que le choix d'un algorithme : deux procédures différentes pour réaliser la même tâche peuvent avoir une efficacité considérablement différente.
Et il n'y a pas que la vitesse qui importe : il y a aussi les structures à mettre en jeu. Ainsi, certains algorithmes peuvent nécessiter beaucoup plus de mémoire que d'autres pour réaliser la même tâche.
Prenons un exemple simpliste mais concret : un entrepôt est conçu pour recevoir des colis de plusieurs fournisseurs de produits chimiques (disons, 1 000 fournisseurs) et les stocker dans des box avant de les livrer à plusieurs sites de production (disons, 30 sites). Pour des besoins de sécurité, il est hors de question de placer des produits de fournisseurs différents dans le même box, et pour éviter les erreurs d'adressage il est par ailleurs convenu de ne pas stocker les colis destinés à deux sites différents dans le même box.
On peut très bien imaginer que l'entrepôt soit conçu comme un tableau de 30 lignes par 1 000 colonnes, soit 30 000 box. Il est alors très facile d'avoir accès à un colis précis. Mais si l'entrepôt ne stocke au plus que 300 colis en permanence, on a une occupation des box de 1%. Gros gâchis.
A contrario, si l'on stocke au fur et à mesure les colis dans le premier box libre, on peut se contenter de 400 box, mais par contre la recherche d'un colis devient plus difficile puisqu'il faut parcourir successivement tous les box pour trouver un colis spécifique, soit au pire 400 ouvertures de box. La réactivité de l'entrepôt en est fortement affecté.
On le voit, le choix d'une procédure donnée peut avoir des conséquences importantes sur l'efficacité de l'organisation : on retiendra l'une ou l'autre en fonction de ce qui est prioritaire pour l'entreprise (dans l'exemple précédent, le coût des box ou la réactivité).

Des solutions toutes faites

Avec un peu de chance, l'algorithmique a peut-être une solution encore meilleure que les solutions envisagées jusqu'ici.
Ainsi, les structures de données ont parfois une importance cruciale dans l'efficacité d'un algorithme. Selon qu'on représente informatiquement une collection de données sous forme d'un tableau ou d'une liste, vous pourrez plus ou moins rapidement accéder à la énième donnée (le tableau est mieux dans ce cas-ci) et plus ou moins rapidement retirer une donnée (la liste est mieux dans ce cas-là).
Cela peut se traduire, dans notre entrepôt, par des box statiques numérotés dans le premier cas (c'est l'équivalent du tableau), et des box à roulettes déplaçables dans le second (c'est l'équivalent de la liste).
Cet exemple est élémentaire car on peut très bien imaginer les deux solutions sans passer par l'algorithmique. Mais il y a d'autres solutions, comme par exemple la table de hachage, qui réalise un compromis intéressant entre le tableau et la liste. L'idée est d'utiliser une fonction mathématique convertissant la clé d'identification d'un élément (ici, le couple fournisseur+site) en un entier. Un colis arrivant est placé dans le box correspondant à un entier s'il est vide, ou dans le premier box libre qui suit. On cherchera le colis de la même manière. Cet algorithme marche bien pourvu qu'on ait un nombre de box assez grand (disons, le double du minimum soit 800 box) et une fonction de hachage qui répartit bien les colis dans l'entrepôt.
J'ignore combien de responsables logistiques ont entendu parler de table de hachage...
Dans la même veine, les algorithmes inventés par les algorithmiciens recouvrent des tâches qui s'apparentent à certaines tâches réalisées par les humains, comme :
  • l'affectation de ressources : on peut citer l'algorithme hongrois pour rendre une répartition du travail plus efficace, l'algorithme des nœuds chapeaux pour répartir une ressource entre de nombreux utilisateurs, ou celui  des mariages stables pour associer au mieux des binômes par affinité ;
  • la recherche du chemin le plus court : l'algorithme de Dijkstra est typiquement utilisé par les GPS mais rien n'interdit de l'appliquer à l'optimisation du trajet d'un cariste dans une usine ;
  • ou la parallélisation des tâches : certains algorithmes comme celui de Naimi-Trehel permettent de réduire le nombre de messages à échanger entre les processeurs, ce qui peut donner des idées pour mieux manager une équipe.
C'est en particulier dans ce qu'on appelle la programmation concurrente (ou parallèle) que l'on pourra s'inspirer pour améliorer l'organisation globale d'une entreprise ou d'un département, en particulier la communication interne et la réduction des délais d'attentes dus à l'engorgement de certaines parties de l'organisation.

De l'algorithmique à la programmation

Enfin, en sortant quelque peu de l'algorithmique, on peut penser aussi à ce que les programmeurs professionnels appellent les patrons de conception (ou design patterns) : il s'agit de bonnes pratiques pour programmer informatiquement un certain nombre de tâches très courantes.
Ainsi, prenons un cas simple : le patron de conception Observateur. Il permet à un objet informatique d'informer un autre objet informatique d'un changement. Ce modèle peut inspirer aisément comment une procédure peut être mise en place dans une entreprise pour qu'un service (par exemple, la comptabilité) soit informé d'un changement survenant dans une autre service (la R&D). On pourrait imaginer deux procédures pour que l'information soit transmise :
  • la comptabilité appelle tous les jours (voire toutes les heures) la R&D pour savoir s'ils ont fait une opération intéressant la comptabilité (s'ils ont passé une commande ou réceptionné une prestation externe, typiquement) ;
  • ou bien la R&D envoie un message à la comptabilité à chaque fois qu'une telle opération est réalisée.
Il est assez clair que la première méthode est moins efficace que la seconde, et le patron de conception Observateur traduit simplement cette évidence dans le cadre du développement informatique. Devoir avertir la comptabilité va certainement embêter les ingénieurs R&D, mais c'est certainement plus agréable et efficace que de se faire harceler par un comptable.
Passer en revue tous les patrons de conception de la littérature informatique permettrait sans doute de proposer des procédures types pour améliorer l'efficacité de l'organisation de nombreuses entreprises. La tâche est vaste, mais je suis persuadé qu'elle pourrait apporter beaucoup à l'économie.