ByBye Ghost 👻

⏱️ : 1h30 de conception


Le problème adressé ici : le flou dans lequel on se trouve en attente d'un feedback sur une production/livrable à envoyer au client et le coût émotionnel de l'attente (angoisse, stress, deadlines, etc.) :

Quote

Personne ne m'aime 😭
Le client va me tuer 🔪

Le problème vient du fait que tous les Datactivist sont surchargés, trop de messages. Ils doivent faire le tri dans les informations et certaines passent à la trappe.

Le problème se pose particulièrement sur les missions récupérées sur le tard. Par exemple, on récupère la mission d'un collègue surchargé. On ne dispose pas de moment pour poser toutes les bases du projet. On traite dans l'urgence, pas vraiment le temps de s'organiser, d'anticiper d'éventuels goulots d'étranglement. Manque de vision globale sur le projet et sur le plan de charge.

Phase 1 : de modélisation du problème

En jeu de données, on peut modéliser ce phénomène de la façon suivante :

Modélisation
ID Utilisateur_origine Utilisateur_cible Interaction1_temps Interaction2_temps Interaction3_temps
1 Arthur Tout_le_monde Boost Reponse_message
2 Diane Collègue1
3 Arthur Clients Rdv_gather
4 Diane Binome Reponse_message
5 Diane Collègue2 Rdv_gather Reponse_message Boost

Dans ce jeu de données non-tidy, chaque ligne représente une interaction spécifique effectuée par un utilisateur. Cependant, les interactions sont dispersées dans différentes colonnes, ce qui peut rendre l'analyse et la compréhension des données difficiles.

Le manque de feedback est causé par les valeurs manquantes dans les colonnes d'interaction. Par exemple, le premier utilisateur (ID=1) a effectué une interaction "Like" et une interaction "Comment", mais la troisième interaction est manquante.

Ce format non-tidy peut rendre difficile l'agrégation des interactions pour chaque utilisateur, car il nécessite des manipulations supplémentaires pour regrouper les interactions ensemble.

Nous avons généré un fichier .csv pour pouvoir le traiter ⬇️

import csv

data = [
    ["ID", "Utilisateur_origine", "Utilisateur_cible", "Interaction1_temps", "Interaction2_temps", "Interaction3_temps"],
    [1, "Arthur", "Tout_le_monde", "Boost", "Reponse_message", ""],
    [2, "Diane", "Collègue1" ,"", "", "Jojo"],
    [3, "Arthur", "Clients" ,"Rdv_gather", "", ""],
    [4, "Diane", "Binome" ,"", "Reponse_message", ""],
    [5, "Diane" , "Collègue2" , "Rdv_gather" ,  "Reponse_message"  ,  "Boost"]
]

filename = 'data.csv'

with open(filename, 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerows(data)

print(f"Fichier {filename} généré avec succès.")

Ce code utilise la bibliothèque csv pour écrire les données dans le fichier .csv spécifié (dans cet exemple, data.csv). Les données sont stockées dans une liste de listes appelée data, où chaque sous-liste représente une ligne du fichier .csv.

Phase 2 : explique le problème à ton 🦆

Diane parle à son canard pour solutionner le problème 🗣️ :

Quote

Une interaction est générée par un utilisateur, à destination d'un autre. La réponse à la demande peut durer un certain temps (=plusieurs périodes), ce qui se traduit en valeurs manquantes (NA) dans le jeu de données. Ce sont ces NA qui sont problématiques.

Phase 3 : Appel d'un Copilote pour solutionner

Le canard n'ayant pas suffi, Diane fait appel à un copilote. Arthur arrive.

Phase 4 : réduction de la complexité du problème

Nous partons du jeu de données et nous réduisons sa complexité jusqu'à atteindre un jeu de données de complexité nulle, à savoir une seule cellule l

Jeu de données de complexité 0 qui représente le problème

Collègue1 interaction nulle 😶‍🌫️

Utilisateur_cible Interaction1_temps
Collègue1 NA

Phase 5 : Ré-augmentation de la complexité

Pour arrive à la solution du problème, on réaugmente la complexité du jeu de données

Première tentative

Utilisateur_cible Interaction1_temps
Collègue NA

Si une valeur manquante ☝️, alors :

  • Soit changer d'utilisateur cible
  • Soit passer direct à l'interaction24 où le collègue répond, donc faire la demande en -23 pour avoir la réponse en 1 (qui correspond en réalité au 24). Oui, on essaye de remonter le temps.
Interaction -23 Utilisateur_cible Interaction1_temps
Collègue1 NA

Deuxième tentative

Espace Problème
Pas de réponse avant le temps 9

Utilisateur_origine Utilisateur_cible Temps Demande_emise Réponse
Diane Collègue1 0 TRUE NA
Diane Collègue1 1 FALSE NA
Diane Collègue1 2 FALSE NA
Diane Collègue1 3 FALSE NA
Diane Collègue1 4 FALSE NA
Diane Collègue1 5 FALSE NA
Diane Collègue1 6 FALSE NA
Diane Collègue1 7 FALSE NA
Diane Collègue1 8 FALSE NA
Diane Collègue1 9 FALSE Message_basecamp

Espace Solution
Demande émise en temps -8 donc réponse à temps, c'est à dire en 1.

Utilisateur_origine Utilisateur_cible Temps Demande_emise Réponse
Diane Collègue1 -8 TRUE NA
Diane Collègue1 -7 FALSE NA
Diane Collègue1 -6 FALSE NA
Diane Collègue1 -5 FALSE NA
Diane Collègue1 -4 FALSE NA
Diane Collègue1 -3 FALSE NA
Diane Collègue1 -2 FALSE NA
Diane Collègue1 -1 FALSE NA
Diane Collègue1 0 FALSE NA
Diane Collègue1 1 FALSE Message_basecamp

Phase 6 : Design/Conception

Maintenant que nous avons un jeu de données représentant la solution, nous pouvons aussi expliquer en une phrase cette solution :

Rationale

Si interaction1_temps = NA, alors priorisation 📈

C'est à dire que le message en attente devient plus prioritaire.

Solution finale

Sur chaque message, mettre des niveaux d'alerte. Exemple de fonctionnement

Quote

Vous mettez un message. Si pas de réponse et stress et deadline (et envie de dormir), ajouter au message un certain nombre d'emoji "🚨" (voir grille ci-dessous). Si pas de réponse malgré émojis, augmentez le nombre de "🚨". Si urgence traitée ou en cours de traitement, alors diminuer le nombre de 🚨.

Proposition d'une échelle d'urgence :

🚨🚨🚨🚨🚨 ==> Urgence absolue. A n'utiliser qu'en cas d'extrême nécessité 😱
🚨🚨🚨🚨 ==> Urgence très très forte.
🚨🚨🚨 ==> Urgence forte.
🚨🚨 ==> Urgence à traiter dans les meilleurs délais
🚨 ==> Urgence à traiter