Le planning d'un club : le problème le plus sous-estimé
Ayoub
Tech Lead

En bref
Pourquoi la gestion des créneaux d'un club sportif est-elle si difficile à informatiser ?
Parce qu'un planning de club n'est pas un agenda mais une allocation sous contraintes : des créneaux, des installations, des encadrants et des groupes, dont la disponibilité change en permanence. L'erreur habituelle est de partir d'un calendrier ; il faut partir des contraintes, et concevoir l'outil autour de l'exception plutôt qu'autour du cas nominal.
Quand on liste les fonctionnalités attendues d’un outil de gestion de club — adhésions, paiements, billetterie, boutique, planning — le planning paraît le sujet le plus simple. C’est celui sur lequel nous avons le plus appris, et le seul dont le modèle se paie longtemps après.
La raison est qu’un planning de club ressemble à un agenda et n’en est pas un. Un agenda enregistre des événements décidés ailleurs. Un planning de club, lui, doit satisfaire des contraintes qui se contredisent, et il change presque toutes les semaines.
Ce qu’il faut faire tenir ensemble
Un créneau d’entraînement mobilise simultanément quatre ressources :
- une installation — un gymnase, un terrain, un bassin, souvent partagés avec d’autres clubs et attribués par une collectivité ;
- un encadrant — diplômé, parfois pour une discipline ou un niveau précis, souvent bénévole et disponible sur des plages étroites ;
- un groupe — une catégorie d’âge, un niveau, un effectif qui doit tenir dans l’installation ;
- un horaire — compatible avec l’école, le travail des parents, et l’ouverture du site.
Chacune de ces ressources a ses propres indisponibilités, et elles ne sont pas synchronisées : la collectivité ferme le gymnase pour des travaux, un entraîneur part en formation, une catégorie fusionne parce qu’il manque des inscrits.
Le nombre de combinaisons possibles est grand, mais ce n’est pas le vrai problème. Le vrai problème est que la solution retenue est rarement optimale : elle est acceptée. Elle résulte d’arbitrages humains, de contreparties entre entraîneurs, d’un historique. Un outil qui propose une solution mathématiquement meilleure mais qui ignore ces arbitrages sera contourné.
L’erreur de départ : modéliser la répétition
Le réflexe naturel est de modéliser un créneau récurrent : « mardi 18h-19h30, gymnase A, groupe U13, tous les mardis de septembre à juin ». Le modèle est propre, il tient en trois champs, et il décrit fidèlement la situation nominale.
Puis arrive la réalité : ce mardi-là, le gymnase est pris pour un tournoi. La semaine suivante, l’entraîneur est absent et remplacé. En mars, l’horaire change pour toute la fin de saison. Pendant les vacances, rien n’a lieu — sauf pour le groupe compétition.
On se met alors à empiler les exceptions sur la récurrence, et c’est là que le modèle se dégrade. Les questions qui suivent n’ont pas de réponse évidente : que se passe-t-il quand on modifie la série après avoir créé des exceptions ? Une séance déplacée puis annulée, est-ce une ou deux exceptions ? L’entraîneur remplaçant remplace-t-il pour cette date ou pour la série ?
Ce sont ces questions, pas la récurrence, qui font la complexité. Et elles arrivent toujours après la mise en production, quand le modèle est figé et les données déjà là.
Photo : domaine public (CC0).
L’inversion que nous recommandons
La conclusion que nous en tirons, et que nous appliquons quand le planning devient le cœur du besoin : faire de la séance l’entité de référence, et de la récurrence un simple moyen de la produire.
Précision utile, parce qu’elle évite un malentendu : ce n’est pas la forme la plus répandue, ni celle que nous retenons partout. Sur les périmètres où le planning reste secondaire devant les adhésions et la billetterie, un catalogue de cours avec des inscriptions rattachées suffit — et c’est ce que font nos propres plateformes de gestion de club. Le jour où la question « qu’est-ce qui a réellement eu lieu tel mardi » se pose — pour compter des présences, justifier une subvention, facturer à la séance — le modèle par catalogue ne sait pas répondre, et le passage se fait alors avec des données déjà en production.
Dans ce modèle, une règle de récurrence génère des séances concrètes sur un horizon donné. Une fois générée, chaque séance existe pour elle-même, avec son installation, son encadrant, son groupe et son horaire. La modifier ne touche à rien d’autre. La règle sert à la création initiale et aux régénérations volontaires, pas à définir en permanence ce qui doit avoir lieu.
Trois conséquences :
- Les exceptions ne sont plus des exceptions. Une séance déplacée est une séance dont l’horaire diffère de celui qui l’a produite. Il n’y a pas de mécanisme dédié, donc pas d’interaction subtile à documenter.
- L’historique est exact. On sait ce qui a réellement eu lieu, pas ce qui aurait dû avoir lieu selon une règle rejouée après coup. C’est nécessaire dès qu’on veut compter les présences ou justifier une subvention.
- La modification de masse redevient un acte explicite. « Décaler tous les mardis à partir de mars » est une opération qui affecte des séances identifiées, avec un aperçu avant application. C’est plus verbeux à implémenter, et beaucoup plus prévisible à l’usage.
Le coût est un volume de données plus important, et une opération de génération à surveiller. C’est un prix modeste comparé à celui des règles de récurrence avec exceptions, dont on paie la complexité chaque fois qu’on touche au code.
Photo : Riley McCullough — licence CC0.
La détection des conflits, et sa limite
L’outil vérifie les conflits durs : deux séances sur la même installation au même moment, un encadrant sur deux créneaux simultanés, un effectif au-delà de la capacité. Ces contrôles sont indispensables et faciles.
En revanche, nous nous gardons de bloquer. Un club a des raisons légitimes de créer ce qui ressemble à un conflit — deux groupes qui partagent un gymnase sur deux demi-terrains, un entraîneur qui passe de l’un à l’autre. Un outil qui interdit ces situations est un outil qu’on abandonne pour revenir au tableur.
Nous signalons donc, sans empêcher. C’est une décision produit avant d’être technique, et elle mérite d’être prise consciemment : dans un contexte associatif, la contrainte molle vaut mieux que la règle rigide.
Ce qui casse en production, et qu’aucun test ne trouve
Trois situations que nous n’avions pas anticipées, et qui viennent toutes du terrain.
Le créneau qui déborde sur minuit. Un cours de 23 h à 0 h 30 appartient à deux journées. Toute requête écrite en pensant « un créneau tient dans un jour » se trompe une fois par semaine, sur un seul club, et le signalement met des mois à remonter.
Le changement d’heure. Deux fois par an, une nuit compte 23 ou 25 heures. Un planning stocké en heure locale se décale ; stocké en heure universelle, il s’affiche décalé. La seule règle qui tienne : conserver l’instant en heure universelle et le fuseau de référence du club, jamais l’un sans l’autre.
Les vacances scolaires. Elles ne suivent pas le calendrier civil, changent selon la zone, et suspendent une partie seulement des créneaux. C’est une donnée métier à saisir, pas une règle à coder.
Ce que nous mesurons une fois en service
Deux indicateurs suffisent à savoir si le planning est réellement utilisé.
La part des inscriptions faites depuis l’application, plutôt qu’au téléphone ou sur place. Si elle stagne sous la moitié, l’outil n’a pas remplacé l’habitude — il s’est ajouté à elle, et le secrétariat fait désormais deux fois le travail.
Le délai entre l’annulation d’un créneau et sa notification aux adhérents. C’est le seul service que le papier ne rendait pas, et donc l’argument qui fait accepter le changement.
Ce qu’il faut regarder si vous équipez un club
Trois questions révèlent en cinq minutes si un outil a traité le sujet ou seulement affiché un calendrier :
- que se passe-t-il quand on modifie une séance issue d’une série, puis la série entière ?
- l’historique reflète-t-il ce qui a eu lieu, ou ce que la règle prévoyait ?
- peut-on créer un chevauchement volontaire, et est-il signalé sans être interdit ?
Un outil qui répond correctement aux trois a affronté le problème. Les autres ont modélisé l’agenda, et laisseront le planning là où il était : dans un tableur partagé.