[đ ] Operations Automation #2: En voulant rĂ©unir deux automatisations, jâai de nouveau sĂ©parĂ© les ventes et lâadministration du personnel
⚠Résumé de GPT-5.6 Sol
Le rĂ©cit de ma recherche dâune structure dâautomatisation opĂ©rationnelle capable de prĂ©server les activitĂ©s de vente et de messagerie dĂ©jĂ en place, tout en sâĂ©tendant Ă lâinbound et Ă lâadministration du personnel.
Jâai essayĂ© de rĂ©unir deux programmes qui fonctionnaient dĂ©jĂ
Au sein de lâentreprise, il existait dĂ©jĂ deux programmes dâautomatisation qui avaient Ă©voluĂ© dans des directions diffĂ©rentes.
Le premier Ă©tait un programme de gestion des congĂ©s par SMS, initialement dĂ©veloppĂ© par mon prĂ©dĂ©cesseur. Ce service calculait les congĂ©s de chaque employĂ©, envoyait des SMS dâincitation Ă les prendre, puis interprĂ©tait les demandes reçues par SMS pour les faire suivre jusquâĂ leur approbation ou leur refus. Le Web, le backend, la DB et mĂȘme le tĂ©lĂ©phone Android professionnel formaient dĂ©jĂ un seul flux.
Le second Ă©tait le systĂšme de collecte de donnĂ©es publiques et dâautomatisation des ventes que je continuais Ă amĂ©liorer. Il recueillait des Ă©tablissements et leurs coordonnĂ©es, les reliait aux appels outbound de Vox, puis les transmettait Ă lâactivitĂ© commerciale rĂ©elle.
Au dĂ©but, je pensais quâil suffirait de dĂ©placer les deux projets dans un mĂȘme dĂ©pĂŽt pour les intĂ©grer. Mais, en rĂ©flĂ©chissant aux fonctionnalitĂ©s que je voulais ajouter, jâai compris que rĂ©unir les dossiers ne suffirait pas.
- la prise en charge inbound reliĂ©e Ă lâoutbound existant
- un flux qui reçoit les demandes des employés et les transmet aux tùches administratives
- la gĂ©nĂ©ration et la remise automatiques dâattestations dâemploi
- la rĂ©partition des droits selon les informations sur les employĂ©s, les contrats et les sites dâaffectation
- une interface opĂ©rationnelle qui regroupe les Ă©checs, les approbations, les retraitements et les journaux dâaudit
La question nâĂ©tait alors plus « comment rĂ©unir les deux codes ? », mais « oĂč placer les activitĂ©s qui vont se multiplier ? ».
Jâai dĂ©cidĂ© de ne pas jeter le programme existant
En regardant le programme de gestion des congĂ©s par SMS, jâavais trĂšs envie de repartir de zĂ©ro. Jây voyais une ancienne structure, des rĂ©glages provisoires et de nombreux Ă©lĂ©ments que jâaurais aimĂ© reconcevoir selon les standards actuels. Reprendre uniquement les exigences dans un nouveau code semblait pouvoir donner un rĂ©sultat plus propre.
Mais, Ă mesure que jâexaminais les documents, jâai dĂ©couvert dans ce programme des Ă©lĂ©ments plus importants que le code lui-mĂȘme.
- les résultats de congés réellement présentés aux employés
- la mĂ©thode de calcul des congĂ©s Ă partir de la date dâembauche
- les personnes concernées par les relances et le moment de leur envoi
- les rĂšgles dâinterprĂ©tation des demandes par SMS en dates et demi-journĂ©es
- lâordre entre demande, approbation, refus et SMS de rĂ©sultat
- la maniÚre dont le téléphone Android professionnel envoyait et recevait les SMS
- les écrans et la gestion des exceptions déjà utilisés par les opérateurs
Si je rĂ©sumais tout cela en quelques documents avant de repartir de zĂ©ro, le nouveau code pourrait ĂȘtre propre tout en produisant des rĂ©sultats diffĂ©rents pour les utilisateurs existants. Je ne pouvais pas supprimer, par simple prĂ©fĂ©rence de conception, un flux vertical que mon prĂ©dĂ©cesseur avait rĂ©ellement achevĂ©.
Jâai donc changĂ© de direction : reproduire dâabord le service existant Ă lâidentique, conserver ses Ă©crans et ses rĂ©sultats de calcul comme rĂ©fĂ©rences de rĂ©gression, puis remplacer ses parties problĂ©matiques fonctionnalitĂ© par fonctionnalitĂ©. Le nouveau systĂšme ne devait pas commencer par effacer lâancien programme. Celui-ci devait rejoindre une structure plus vaste sans perdre ce quâil savait dĂ©jĂ faire.
Les ventes et lâadministration du personnel ne relevaient pas de la mĂȘme application
RĂ©unir les projets et fusionner en mĂȘme temps leurs DB et leurs Runtime aurait créé un autre problĂšme.
Lâautomatisation des ventes traite des donnĂ©es publiques, des coordonnĂ©es, des cibles dâappel et des rĂ©sultats commerciaux. Lâadministration du personnel traite des informations sur les employĂ©s, de lâĂ©mission de documents, des congĂ©s, des approbations et des messages. Les deux domaines peuvent apparaĂźtre ensemble dans une interface opĂ©rationnelle, mais la nature des donnĂ©es, les droits et lâĂ©tendue des consĂ©quences dâune panne diffĂšrent.
Je ne voulais pas quâune migration de la DB des ventes bloque le dĂ©ploiement de lâadministration du personnel, ni quâune panne du service de congĂ©s arrĂȘte aussi la collecte commerciale. Les comptes et credentials, les queues, les backups et les rollbacks devaient eux aussi ĂȘtre sĂ©parĂ©s par activitĂ©.
Jâai finalement dĂ©cidĂ© de conserver un seul dĂ©pĂŽt, mais de sĂ©parer les ventes et lâadministration du personnel en apps indĂ©pendantes. Lâinterface opĂ©rationnelle permet de parcourir les deux au mĂȘme endroit, mais elle ne lit pas directement leurs DB : chaque backend reste responsable de ses propres donnĂ©es et de ses droits.
De lâoutbound Ă lâinbound et aux tĂąches administratives
Lâautomatisation commerciale existante ressemblait surtout Ă un flux outbound, destinĂ© Ă passer des appels vers lâextĂ©rieur. Le 15, jâai aussi longuement rĂ©flĂ©chi Ă la maniĂšre dây rattacher lâinbound.
Ce nâest pas parce quâun appel arrive que toutes les demandes doivent ĂȘtre traitĂ©es dans le systĂšme tĂ©lĂ©phonique. Lâappel peut servir de point dâentrĂ©e : il recueille la demande et la transmet au bon processus. Une demande dâattestation dâemploi doit ĂȘtre envoyĂ©e vers la vĂ©rification dâidentitĂ© et lâĂ©mission du document, puis le document produit doit suivre une procĂ©dure de remise distincte. MĂȘme si la mĂȘme demande arrive par le Web ou par mobile, elle doit finalement rejoindre la mĂȘme tĂąche administrative.
Câest aussi pour cela que jâai dĂ©cidĂ© de commencer par lâattestation dâemploi. Cette premiĂšre fonctionnalitĂ© permettait dâĂ©prouver en une seule fois tout le flux nĂ©cessaire Ă lâautomatisation opĂ©rationnelle : rĂ©ception de la demande, vĂ©rification des donnĂ©es de rĂ©fĂ©rence de lâemployĂ©, gĂ©nĂ©ration du document, approbation, remise, gestion des Ă©checs et audit.
Il ne suffisait pas de bien construire une seule fonctionnalitĂ©. Les mĂȘmes frontiĂšres devaient pouvoir ĂȘtre rĂ©utilisĂ©es pour les prochaines tĂąches dâadministration du personnel.
Il ne fallait pas recréer les données de référence
Lâentreprise gĂ©rait dĂ©jĂ les employĂ©s, les contrats et les affectations sur les sites dans un autre systĂšme. Lâautomatisation avait besoin de ces informations, mais crĂ©er de notre cĂŽtĂ© un deuxiĂšme registre maĂźtre des employĂ©s aurait rapidement entraĂźnĂ© une divergence entre les deux systĂšmes.
Le systÚme externe devait rester propriétaire des données de référence, tandis que nous ne ferions que lire les informations nécessaires et les conserver sous forme de snapshots validés. Il fallait séparer la fonction qui modifie le registre maßtre de celle qui utilise ces informations pour traiter des dossiers administratifs.
Le problĂšme Ă©tait que je nâavais encore confirmĂ© ni le format rĂ©el du fichier tĂ©lĂ©chargĂ© ni lâexistence dâun identifiant stable pour les employĂ©s. Appeler « matricule » un numĂ©ro affichĂ© Ă lâĂ©cran, ou Ă©crire que lâexport Ă©tait en Excel sans mĂȘme lâavoir vĂ©rifiĂ©, aurait placĂ© tout le reste de la conception sur de fausses prĂ©misses.
Jâai donc laissĂ© indĂ©terminĂ© ce que jâignorais.
Les frontiĂšres arrĂȘtĂ©es ce jour-lĂ
- Le dĂ©pĂŽt reste unique, mais les ventes et lâadministration du personnel deviennent des apps indĂ©pendantes.
- La DB, le Runtime, les credentials, les queues, les backups et les rollbacks sont séparés par activité.
- Lâinterface opĂ©rationnelle intĂ©grĂ©e utilise lâAPI de chaque backend et ne lit pas directement les DB.
- Le service de congés par SMS conserve ses résultats actuels comme références de régression avant un remplacement fonctionnalité par fonctionnalité.
- Le systĂšme existant reste propriĂ©taire des donnĂ©es de rĂ©fĂ©rence sur les employĂ©s, les contrats et les affectations ; lâautomatisation ne conserve que des snapshots validĂ©s.
- Le premier vertical slice couvre la demande dâattestation dâemploi, sa gĂ©nĂ©ration, son approbation, sa remise et la gestion des Ă©checs.
Le 15, je nâai presque pas Ă©crit de code : jâai surtout dĂ©fini ces frontiĂšres et lâordre de migration du service existant.
Laisser un commentaire