Ensemble, nous avons profitĂ© de lâoccasion pour tirer des enseignements des cinq derniĂšres annĂ©es. Lâoccasion Ă©galement pour Freitag de promouvoir la durabilitĂ© au travers dâinvestissements digitaux. Et pour nos deux sociĂ©tĂ©s dâentretenir des relations pĂ©rennes. Focus sur la gestion des commandes, qui Ă©tait lâun des Ă©lĂ©ments essentiels de la refonte.
Freitag vend des sacs en bĂąches de camion usagĂ©es. Tous les produits sont donc pour ainsi dire des piĂšces uniques. Celles-ci nĂ©cessitent une unitĂ© de gestion des stocks (SKU ou « stock keeping unit ») individuelle et qui ne soit disponible quâen un seul exemplaire dans les stocks de Freitag. Une fois un produit vendu, il ne peut plus ĂȘtre produit Ă nouveau. Un vrai dĂ©fi pour la boutique en ligne ! Cette particularitĂ© exige non seulement des solutions qui s'Ă©cartent des meilleures pratiques UX ou technologiques, mais aussi un taux d'erreur extrĂȘmement bas dans la gestion des commandes. En cas de dĂ©faillance au moment du check-out, de lâexĂ©cution de la commande ou de lâexpĂ©dition, un seul et mĂȘme produit a toutes les chances dâĂȘtre commandĂ© par deux personnes diffĂ©rentes, ce qui serait fĂącheux.
En arriĂšre-plan : les systĂšmes
A part quelques micro-services, deux systĂšmes sont essentiellement Ă la base du workflow :
- Drupal (panier, check-out, passation de commande, modification de commande, annulation, communication avec les clientâeâs, communication entre magasins, gestion des promotions et bons dâachat)
- LâERP de Freitag (gestion des stocks, exĂ©cution des commandes, expĂ©dition, contrĂŽle, retours).
Freitag souhaite que ses clientâeâs aient toujours la possibilitĂ© dâacheter, mĂȘme quand lâERP nâest pas disponible (en raison dâune maintenance par exemple). Drupal gĂšre par ailleurs dâautres systĂšmes et use cases, et a donc besoin dâune base de donnĂ©es Ă©largie en matiĂšre de commandes. Lors du lancement du site en 2016 comme lors de sa refonte en 2021, câest une solution duale avec diffĂ©rents systĂšmes qui a promis le meilleur retour sur investissement (ROI). Du fait des exigences spĂ©cifiques de Freitag, une rĂ©partition plus ciblĂ©e en micro-services aurait impliquĂ© des frais nettement supĂ©rieurs pour des avantages en dĂ©finitive minimes.
Premier enseignement : répartition claire des tùches
Le mode opĂ©ratoire indĂ©pendant souhaitĂ© et les nombreuses fonctions originales des deux systĂšmes ont donnĂ© lieu Ă des doublons qui risquaient dâentraĂźner des dysfonctionnements. Les deux systĂšmes pouvaient par exemple attribuer certains statuts de commande. De mĂȘme, les calculs de rabais et les clĂ©s de rĂ©partition pour les remboursements via plusieurs moyens de paiement Ă©taient en partie gĂ©rĂ©s par les deux systĂšmes. Une mise Ă jour de lâinterface ERP permet Ă prĂ©sent une communication bidirectionnelle. Au lieu des innombrables requĂȘtes Ă©mises auparavant, lâERP communique dĂ©sormais directement avec Drupal. Câest lâun des aspects qui ont permis de mieux rĂ©partir les tĂąches.
Prenons lâexemple du statut des commandes : il existe toujours deux reprĂ©sentations dâune commande, lâune dans lâERP, lâautre dans Drupal. Dans Drupal, le processus dĂ©bute plus tĂŽt (panier et check-out) et finit plus tard (omni-channel, retrait en magasin, etc.). DorĂ©navant, , lâERP dĂ©tient le contrĂŽle exclusif du statut de la commande pendant toute sa phase de traitement (exĂ©cution et expĂ©dition). NĂ©anmoins, comme les commandes peuvent ĂȘtre modifiĂ©es ou annulĂ©es pendant cette phase, Drupal peut envoyer des demandes de modification et dâannulation. Mais câest toujours lâERP qui dĂ©clenche le changement de statut auprĂšs de Drupal.
Prenons lâexemple des remboursements : pour les paiements par carte de crĂ©dit, bons dâachat et codes promotionnels, Drupal se connecte aux systĂšmes concernĂ©s. En cas de remboursement par le biais de plusieurs moyens de paiement, Drupal dĂ©cidait des montants qui devaient ĂȘtre crĂ©ditĂ©s sur chacun de ces modes de paiement. Mais la base comptable de ce calcul Ă©tait toujours lâERP. MĂȘme si a priori, les deux systĂšmes utilisaient les mĂȘmes rĂšgles, il pouvait y avoir certains Ă©carts. DĂ©sormais, seul lâERP fait foi et il communique Ă Drupal via une interface les montants Ă rembourser sur les diffĂ©rents moyens de paiement.
Partout oĂč cela a Ă©tĂ© possible sans frais dĂ©mesurĂ©s, nous avons attribuĂ© une souverainetĂ© claire Ă lâun ou lâautre des systĂšmes dans le cadre de processus intermĂ©diaires. Au terme de quelques mois, nous ne disposons pas encore de suffisamment de recul pour Ă©valuer la stabilitĂ© Ă long terme du workflow. JusquâĂ prĂ©sent, les premiĂšres expĂ©riences sont nĂ©anmoins positives.
DeuxiÚme enseignement : détermination automatique des stocks disponibles
Le niveau de stock de la quasi-totalitĂ© des produits est systĂ©matiquement de 1 ou 0, et les systĂšmes doivent fonctionner de maniĂšre autonome : deux contraintes qui ne vont pas sans quelques difficultĂ©s. Lorsque des commandes sont modifiĂ©es en dehors du cadre de la procĂ©dure standard, ou lorsquâelles passent Ă un traitement manuel, il ne faut pas quâun produit commandĂ© se retrouve Ă nouveau disponible en ligne. De la mĂȘme maniĂšre, la « remise en ligne » du produit le cas Ă©chĂ©ant ne doit pas non plus faire lâobjet dâune intervention manuelle. Car cela impliquerait trop de personnel.
Nous avions jusquâĂ prĂ©sent un niveau de stock physique (celui de lâERP) et un autre, virtuel. Ce dernier servait Ă sâaffranchir de phases pendant lesquelles lâERP Ă©tait indisponible ou indiquait un niveau qui nâĂ©tait plus dâactualitĂ©. Cette solution fonctionnait dans bien plus de 99 % des cas. Dans de rares cas, mais nĂ©anmoins rĂ©currents, elle donnait en revanche lieu Ă un niveau de stock de « -1 » ou « +2 ». En raison de la complexitĂ© de la configuration, lâorigine de ces quelques incohĂ©rences Ă©tait difficile Ă identifier.
Dans le cadre de la refonte, nous avons conservĂ© cette double gestion des stocks. Mais nous avons aussi introduit un principe important pour simplifier le tout : « lâERP a toujours raison ». Principe qui sâaccompagne nĂ©anmoins dâune architecture plus complexe avec un autre layer, pour les rĂ©servations. Parce que lâERP nâa en rĂ©alitĂ© pas toujours raison, les rĂ©servations sont un rempart supplĂ©mentaire Ă la double vente involontaire dâun mĂȘme produit. GrĂące Ă la simplification de la logique de stock et au principe de rĂ©servations via Drupal exclusivement, il est dĂ©sormais beaucoup plus facile, en cas de problĂšme, dâidentifier ce qui sâest passĂ© dans chacun des systĂšmes. Un avantage trĂšs utile notamment pendant ces premiers mois.
 TroisiÚme enseignement : numéro de suivi
En fonction de la configuration, mĂȘme la mise en place dâun numĂ©ro de suivi peut se rĂ©vĂ©ler dĂ©licate. Freitag livre ses produits Ă lâinternational et fait appel Ă diffĂ©rents prestataires. Ceux-ci nâont pas tous les mĂȘmes mĂ©thodes de fonctionnement. Des des numĂ©ros de suivi ne sont pas toujours gĂ©nĂ©rĂ©s, ou pas toujours au mĂȘme moment, et ils ne sont pas non plus consultables Ă partir du mĂȘme moment. Or la possibilitĂ© de consulter un numĂ©ro de suivi est prĂ©cisĂ©ment lâĂ©tat souhaitĂ© lors de lâenvoi dâune confirmation dâexpĂ©dition. Jusque-lĂ , la logique en place essayait tant bien que mal de prendre en compte ces diffĂ©rents scĂ©narios pour Ă©tablir la date dâenvoi du mail de confirmation dâexpĂ©dition. Cela Ă©tait fait en interrogeant lâERP et en fonction du type de commande, du mode de livraison, des champs renseignĂ©s et du dĂ©lai dâattente. Mais il arrivait malgrĂ© tout trop souvent que des confirmations dâexpĂ©dition soient envoyĂ©es trop tĂŽt ou trop tard. Et les tentatives dâamĂ©lioration des rĂšgles de calcul se sont souvent soldĂ©es par des problĂšmes. Il fallait donc trouver une solution.
Lors de la refonte, nous avons introduit dans la gestion des commandes un nouveau statut : « emballĂ© ». Dans cet Ă©tat, la commande est bel et bien emballĂ©e, peut-ĂȘtre mĂȘme en cours dâacheminement, mais le numĂ©ro de suivi nâest pas encore connu ou consultable. Lorsquâil est gĂ©nĂ©rĂ©, lâERP dĂ©clenche le statut « envoyĂ© ». DĂšs que ce statut est activĂ©, Drupal gĂ©nĂšre la confirmation dâexpĂ©dition, avec ou sans numĂ©ro de suivi. Les tĂąches sont ainsi clairement rĂ©parties et en cas de problĂšme, il est bien plus facile dâidentifier lâorigine de lâerreur et de la rĂ©soudre. LâERP peut Ă©valuer plus simplement lâĂ©tat du numĂ©ro de suivi et Drupal sâaffranchit de quelques rĂšgles. Cette Ă©volution a dĂ©jĂ fait ses preuves : elle est manifestement trĂšs efficace.
Bilan : simplifier grùce à la complexité
Chez Liip, notre instinct nous guide toujours vers la simplicitĂ©. Car nous savons par expĂ©rience quâelle permet de minimiser les difficultĂ©s, tant lors du dĂ©veloppement que de lâexploitation. Les prĂ©cĂ©dents exemples montrent cependant que la simplification peut aussi conduire en apparence Ă davantage de complexitĂ©. Car en dĂ©finitive, nous avons installĂ© de nouvelles interfaces, des layers supplĂ©mentaires et un nouveau statut de commande. Mais ces trois mesures rendent le systĂšme nettement plus solide. En cas de dysfonctionnement, elles permettent aussi de trouver lâerreur plus rapidement. Dans le cadre de lâactivitĂ© courante, cela est essentiel pour les investissements dans les dĂ©veloppements ultĂ©rieurs. . Et telle est prĂ©cisĂ©ment notre ambition : aider nos clientâeâs Ă dĂ©velopper leurs produits et solutions, sans nous contenter dâentretenir leur systĂšme.