Livrer plus vite. Des pistes issues des mathématiques.
La théorie des files d'attente est une branche des probabilités modélisant les temps d'arrivée, de traitement, les problèmes de congestion etc dans les files d'attente ou queues.
L'ingénierie réseaux et plus tard la gestion de production industrielle se sont rapidement emparées des principaux résultats de cette discipline pour améliorer leur efficacité. Plus récemment, des activités de services tels que la gestion des guichets de banques ou les urgences hospitalières ont elles aussi bénéficié d'une étude de ce domaine.
Une démarche scientiste consisterait à plaquer aveuglément des équations mathématiques sur l'univers organique et infiniment complexe du SI. Dans notre cas, on étudiera certains résultats de la théorie des files d'attente comme source d'inspiration dans notre démarche d'amélioration continue, en gardant à l'esprit les limites de ces modèles mathématiques.
<!-- /\* Font Definitions \*/ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:Cambria; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1073741899 0 0 159 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} /\* Style Definitions \*/ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-fareast-font-family:Calibri; mso-bidi-font-family:"Times New Roman"; mso-fareast-language:EN-US;} h2 {mso-style-priority:9; mso-style-qformat:yes; mso-style-link:"Titre 2 Car"; mso-style-next:Normal; margin-top:10.0pt; margin-right:0cm; margin-bottom:0cm; margin-left:0cm; margin-bottom:.0001pt; line-height:115%; mso-pagination:widow-orphan lines-together; page-break-after:avoid; mso-outline-level:2; font-size:13.0pt; font-family:"Cambria","serif"; mso-fareast-font-family:"Times New Roman"; color:#4F81BD; mso-fareast-language:EN-US;} h3 {mso-style-priority:9; mso-style-qformat:yes; mso-style-link:"Titre 3 Car"; mso-style-next:Normal; margin-top:10.0pt; margin-right:0cm; margin-bottom:0cm; margin-left:0cm; margin-bottom:.0001pt; line-height:115%; mso-pagination:widow-orphan lines-together; page-break-after:avoid; mso-outline-level:3; font-size:11.0pt; font-family:"Cambria","serif"; mso-fareast-font-family:"Times New Roman"; color:#4F81BD; mso-fareast-language:EN-US;} span.MsoEndnoteReference {mso-style-noshow:yes; mso-style-priority:99; vertical-align:super;} p.MsoEndnoteText, li.MsoEndnoteText, div.MsoEndnoteText {mso-style-noshow:yes; mso-style-priority:99; mso-style-link:"Note de fin Car"; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Calibri","sans-serif"; mso-fareast-font-family:Calibri; mso-bidi-font-family:"Times New Roman"; mso-fareast-language:EN-US;} p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph {mso-style-priority:34; mso-style-unhide:no; mso-style-qformat:yes; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:36.0pt; mso-add-space:auto; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-fareast-font-family:Calibri; mso-bidi-font-family:"Times New Roman"; mso-fareast-language:EN-US;} p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst {mso-style-priority:34; mso-style-unhide:no; mso-style-qformat:yes; mso-style-type:export-only; margin-top:0cm; margin-right:0cm; margin-bottom:0cm; margin-left:36.0pt; margin-bottom:.0001pt; mso-add-space:auto; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-fareast-font-family:Calibri; mso-bidi-font-family:"Times New Roman"; mso-fareast-language:EN-US;} p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle {mso-style-priority:34; mso-style-unhide:no; mso-style-qformat:yes; mso-style-type:export-only; margin-top:0cm; margin-right:0cm; margin-bottom:0cm; margin-left:36.0pt; margin-bottom:.0001pt; mso-add-space:auto; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-fareast-font-family:Calibri; mso-bidi-font-family:"Times New Roman"; mso-fareast-language:EN-US;} p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast {mso-style-priority:34; mso-style-unhide:no; mso-style-qformat:yes; mso-style-type:export-only; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:36.0pt; mso-add-space:auto; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-fareast-font-family:Calibri; mso-bidi-font-family:"Times New Roman"; mso-fareast-language:EN-US;} span.Titre2Car {mso-style-name:"Titre 2 Car"; mso-style-priority:9; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"Titre 2"; mso-ansi-font-size:13.0pt; mso-bidi-font-size:13.0pt; font-family:"Cambria","serif"; mso-ascii-font-family:Cambria; mso-fareast-font-family:"Times New Roman"; mso-hansi-font-family:Cambria; color:#4F81BD; mso-fareast-language:EN-US; font-weight:bold;} span.Titre3Car {mso-style-name:"Titre 3 Car"; mso-style-priority:9; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"Titre 3"; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:"Cambria","serif"; mso-ascii-font-family:Cambria; mso-fareast-font-family:"Times New Roman"; mso-hansi-font-family:Cambria; color:#4F81BD; mso-fareast-language:EN-US; font-weight:bold;} span.NotedefinCar {mso-style-name:"Note de fin Car"; mso-style-noshow:yes; mso-style-priority:99; mso-style-unhide:no; mso-style-locked:yes; mso-style-link:"Note de fin"; mso-fareast-language:EN-US;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt; mso-ascii-font-family:Calibri; mso-fareast-font-family:Calibri; mso-hansi-font-family:Calibri;} /\* Page Definitions \*/ @page {mso-footnote-separator:url("file:///C:/Users/ismael/AppData/Local/Temp/msohtmlclip1/01/clip\_header.htm") fs; mso-footnote-continuation-separator:url("file:///C:/Users/ismael/AppData/Local/Temp/msohtmlclip1/01/clip\_header.htm") fcs; mso-endnote-separator:url("file:///C:/Users/ismael/AppData/Local/Temp/msohtmlclip1/01/clip\_header.htm") es; mso-endnote-continuation-separator:url("file:///C:/Users/ismael/AppData/Local/Temp/msohtmlclip1/01/clip\_header.htm") ecs;} @page Section1 {size:595.3pt 841.9pt; margin:70.85pt 70.85pt 70.85pt 70.85pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} /\* List Definitions \*/ @list l0 {mso-list-id:1012804930; mso-list-type:hybrid; mso-list-template-ids:-519136934 -2127917424 67895299 67895301 67895297 67895299 67895301 67895297 67895299 67895301;} @list l0:level1 {mso-level-start-at:0; mso-level-number-format:bullet; mso-level-text:-; mso-level-tab-stop:none; mso-level-number-position:left; text-indent:-18.0pt; font-family:"Calibri","sans-serif"; mso-fareast-font-family:Calibri; mso-bidi-font-family:"Times New Roman";} @list l1 {mso-list-id:1057585669; mso-list-type:hybrid; mso-list-template-ids:1183338692 -2047429916 67895299 67895301 67895297 67895299 67895301 67895297 67895299 67895301;} @list l1:level1 {mso-level-start-at:0; mso-level-number-format:bullet; mso-level-text:-; mso-level-tab-stop:none; mso-level-number-position:left; text-indent:-18.0pt; font-family:"Calibri","sans-serif"; mso-fareast-font-family:Calibri; mso-bidi-font-family:"Times New Roman";} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->
La loi
Un des principaux résultats de la théorie des files d'attente est la loi de Little qu'on pourrait formuler ainsi : dans un système stable [1] le nombre moyen de " client " du système (N) est égal au taux moyen de traitement (λ) multiplié par le temps moyen passé par le client dans le système (T) [2].
N = <!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-fareast-font-family:Calibri; mso-bidi-font-family:"Times New Roman"; mso-fareast-language:EN-US;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt; mso-ascii-font-family:Calibri; mso-fareast-font-family:Calibri; mso-hansi-font-family:Calibri;} @page Section1 {size:612.0pt 792.0pt; margin:70.85pt 70.85pt 70.85pt 70.85pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> λxT
On parle de " loi " car Little a démontré mathématiquement le résultat dans le cas d'un temps d'observation du système tendant vers l'infini. Mais ce résultat est une tautologie dont nous pouvons avoir une compréhension intuitive avec le schéma suivant :
A l'état stable la loi de Little se vérifie : les " clients " (les colis du schéma) rentrent au rythme de 1 client par seconde (λ = 1c/s), le système contient 2 clients (N = 2 c) et le temps passé par un client dans le système est de 2 secondes (T = 2 s).
Des conséquences en développement logiciel
Une traduction en développement logiciel
Revenons au développement logiciel, en considérant que notre " système " est une équipe de développement et que notre " client " au sens des file d'attente est une fonctionnalité qui rentre sous forme de demande et sort une fois " servie " sous forme de logiciel. La loi s'exprimerait alors ainsi :
L'en cours de fonctionnalités dans l'équipe de développement (N) est égal au taux moyen de demande traitée (λ) multiplié par le temps de cycle [3] moyen.
Optimiser le temps de cycle
Les acheteurs du développement d'un logiciel ont deux motivations à la réduction du temps de cycle (T) :
- Un meilleur time-to-market [4].
- La concrétisation plus rapide de leurs demandes afin de décider sur la base du produit livré de modifier la demande initiale ou de rectifier des erreurs de production.
La loi de Little nous invite à creuser deux pistes pour diminuer le temps de cycle (T) : soit diminuer le nombre de fonctionnalités en cours de développement, soit augmenter le débit de demande de fonctionnalités.
Diminuer le nombre de fonctionnalités en cours de développement
Le lotissement projet ou la prise en compte d'un ensemble modeste de fonctionnalité par itération courte sont autant de moyen bien connus de diminuer le nombre de fonctionnalités en cours de développement.
Ces pistes restent de l'ordre du truisme puisque qu'on pourrait les reformuler ainsi : pour avoir moins d'en cours...je mets moins d'en cours. La vraie difficulté consiste alors à remplir son backlog d'itération en maintenant un encours limité, quantitativement stable. Une [priorisation](javascript:void(0);/1220085053771/) forcenée s'impose comme la solution privilégiée pour maintenir cet encours réduit.
Augmenter le débit de demande
La tentation d'augmenter le débit de demande pour réduire le temps de cycle est grande au regard de la loi de Little. Dans le cas du développement logiciel une première limite à cette augmentation est la limite de capacité de travail de l'équipe de développement ; limite qu'on est tenté de dépasser en augmentant les effectifs.
Malheureusement cette possibilité se heurte aux limites de la loi de Little puisque celle-ci ne traite que de valeurs moyennes pour un système stable. Dans le cas du développement logiciel, les problématiques de communication, d'alignement, d'attente et plus généralement de " mouvements " d'informations se traduisent en théorie des files d'attente par un temps de cycle (T) dépendant du débit de demande...et qui augmente dangereusement sous certaines conditions.
Nous reviendrons dans un autres post sur ces questions en nous basant sur d'autres résultats de la théorie des files d'attente. Disons pour l'instant qu'un débit élevé amplifiera des phénomènes dits de variations, de congestion et augmentera par là même T.
Conclusion
La loi de Little propose donc une voie possible d'amélioration du temps de cycle en diminuant le nombre d'éléments en cours de développement par la priorisation de l'en cours.
Un exercice intéressant consiste à analyser d'autres " systèmes " du SI avec la Loi de Little. Par exemple :
- Une équipe projet au sens large (MOA + MOE + exploitation) ;
- Une équipe d'infrastructure/exploitation ;
- Un développeur seul ;
- Une Direction des Systèmes d'Information ;
- Vous-même !
Attention, avant d'analyser ces systèmes à la lumière de la loi de Little, il faut identifier avec soin le " client " de ces systèmes ainsi que les entrées/sorties de ces systèmes. C'est à ce moment que la le défi de la difficulté d'application à nos métiers apparaît. A vous de jouer.
Comme évoqué dans ce post, la théorie des file d'attente permet d'envisager des problématiques dépassant l'échelle macroscopique de loi de Little, notamment la variabilité, la congestion, les taux d'utilisation des ressources... Nous y reviendrons plus tard.
[1] Stable au sens ou le temps de traitement d'un client est constant dans le temps et le débit d'entrée est constant.
[2] Une des forces de la loi de Little c'est qu'elle peut aussi s'appliquer à la file d'attente en amont du système. Dans ce cas ? est le taux d'arrivée dans la file d'attente, N le nombre de client dans la fil et T le temps passé dans la file.
[3] Si notre système est l'équipe de développement le temps de cycle correspond au temps entre la réception par l'équipe de développement d'une demande de fonctionnalité et la livraison par l'équipe de la fonctionnalité.
[4] Les acteurs d'un marché concurrentiel ont des offres de service comparables sur le long terme. Le vainqueur est celui qui innove en proposant le service avant les autres. En définitive la compétition ne porte plus sur le produit mais sur le temps.