Simyl
simylflow
·Par Simyl Team·13 min de lecture

Comment nous avons intégré la confidentialité dans l'architecture, pas dans les politiques

La plupart des promesses de confidentialité ne sont que des politiques qui peuvent être modifiées. Voici comment nous avons fait de la surveillance un problème de conception de fonctionnalité plutôt qu'un simple paramètre—et pourquoi c'est important pour la précision des données.

Partage
Table des matières

Le principe fondamental

Quand nous disons « les gestionnaires ne peuvent pas voir les scores individuels des développeurs », nous ne voulons pas dire que nous promettons de ne pas les leur montrer. Nous voulons dire que le système ne peut pas produire ces données sans construire de nouvelles fonctionnalités : aucun point de terminaison ne les retourne, aucun écran ne les affiche.

Le mensonge de la confidentialité

La plupart des outils de développement « axés sur la confidentialité » vous mentent.

Ils prétendent protéger les données individuelles, mais creusez dans l'architecture et vous trouverez :

  • Un bouton de paramètres pour « activer la visibilité pour les gestionnaires »
  • Un panneau d'administration qui peut interroger les données de n'importe quel utilisateur
  • Une fonctionnalité de classement qui est « désactivée par défaut »
  • Des requêtes de base de données qui pourraient facilement produire des classements individuels

La protection est une politique : « Nous promettons que les gestionnaires n'accéderont pas aux données individuelles. » Mais les politiques peuvent être modifiées. Les paramètres peuvent être activés. Les promesses peuvent être brisées.

Quand la pression monte (licenciements, coupes budgétaires, curiosité des dirigeants), la politique s'évapore. Les données sont là. Quelqu'un y accédera. Et une fois que c'est fait, la confiance meurt.

Nous avons construit quelque chose de différent.

La confidentialité comme architecture

Notre approche traite la confidentialité comme une architecture, pas comme une politique. Le système est conçu de sorte que produire des données de comparaison individuelles nécessite de construire de nouvelles fonctionnalités, pas d'activer un paramètre.

Voici ce que cela signifie en pratique :

Les profils individuels sont isolés

Il n'existe pas de point de terminaison « obtenir tous les scores des développeurs ». L'API ne le prend pas en charge. Aucun écran ne l'affiche. Le concept n'existe pas dans le produit.

Quand un développeur consulte son profil d'efficacité, il demande ses propres données — authentifiées par sa propre identité. Quand un gestionnaire consulte les agrégats d'équipe, il reçoit des statistiques au niveau de l'équipe qui ne contiennent pas de données au niveau individuel.

Ce n'est pas un contrôle d'accès ajouté à un modèle de données conçu pour les classements. Les classements n'ont jamais été modélisés.

Aucun classement n'existe

Les classements ne sont pas une fonctionnalité que nous avons désactivée. C'est une fonctionnalité qui n'a jamais été construite.

Pour créer un classement, il faudrait :

  1. Ajouter de nouvelles requêtes de base de données qui n'existent pas
  2. Créer de nouveaux points de terminaison d'API qui n'existent pas
  3. Construire de nouveaux composants d'interface qui n'existent pas
  4. Gérer de nouveaux cas limites que nous n'avons jamais envisagés

C'est un travail de produit délibéré — pas un paramètre que quelqu'un peut activer sous pression. Même notre propre équipe ne peut pas activer les classements ; nous devrions les construire.

Les scores d'équipe ne sont pas des agrégats de scores individuels

Quand un gestionnaire consulte « l'efficacité de l'équipe », il ne voit pas une moyenne de scores individuels. Les scores d'équipe sont calculés à partir de données d'équipe au niveau du sprint : story points complétés, PR fusionnées, bogues rencontrés, participation aux rétros.

La différence compte. Si les scores d'équipe étaient des moyennes de membres, les scores individuels devraient passer par le pipeline d'agrégation, où ils pourraient être enregistrés, exportés ou divulgués. Dans notre pipeline, ils n'ont jamais été une entrée.

Il n'y a pas de table « team_member_rankings » qui attend d'être interrogée. Il y a un calcul qui produit des statistiques au niveau de l'équipe sans jamais matérialiser de comparaisons individuelles.

Analyse technique approfondie

Voici concrètement comment cela fonctionne.

Modèle de données : délimité par identité

Les instantanés d'efficacité des développeurs sont stockés dans DynamoDB avec l'historique d'un seul développeur comme partition :

// Developer effectiveness snapshot entity
{
  PK: "ORG#org_123#DEV#user_456",  // Partition: one developer's history
  SK: "SNAPSHOT#2026-06-30",        // Sort key: the snapshot date
  dimensions: {
    delivery: 78,
    flow: 82,
    quality: 85,
    // ...
  }
}

Pour interroger votre propre efficacité, la clé est construite à partir de votre identité authentifiée. Il n'existe aucun modèle de requête qui récupère « tous les instantanés d'efficacité pour l'équipe X ».

Les données existent, mais les chemins d'accès n'existent pas.

Couche API : points de terminaison délimités

Nos points de terminaison d'API sont conçus pour leurs cas d'utilisation prévus — pas pour une flexibilité qui permet la surveillance :

// This endpoint exists
GET /api/me/effectiveness
// Returns: your own effectiveness profile

// This endpoint exists
GET /api/teams/{teamId}/effectiveness
// Returns: aggregated team metrics (no individual data)

// This endpoint does NOT exist
GET /api/teams/{teamId}/effectiveness/members
// Would return: individual member scores
// We never built it.

Quand une nouvelle demande de fonctionnalité arrive, nous demandons : « Ce point de terminaison permet-il la comparaison individuelle ? » Si oui, nous le concevons différemment ou nous ne le construisons pas.

Métriques d'équipe : calculées à partir de données d'équipe

Le calcul d'efficacité de l'équipe ne lit jamais les profils individuels. Son entrée est constituée de données d'équipe au niveau du sprint extraites des instantanés de données de rétro :

// Team effectiveness is computed from sprint-level team data.
// Individual profiles are not read anywhere in this path.
const sprintData = extractTeamSprintDataFromSnapshots(snapshots, team);

const effectiveness = calculateTeamEffectiveness(
  team.id,
  team.name,
  orgId,
  deduplicate(sprintData),
);
// Result: team-level dimensions only. There are no per-member
// scores to strip out, because they were never part of the input.

Les entrées du calcul sont des éléments comme les story points complétés, les PR fusionnées et les bogues rencontrés par sprint. Ce que les gestionnaires voient ne peut pas divulguer les scores individuels, car les scores individuels n'ont jamais fait partie du calcul.

Pourquoi la conception des entrées surpasse le filtrage des sorties

Les filtres de confidentialité appliqués à la couche de sortie (« retirer les noms avant l'affichage ») échouent dès que quelqu'un ajoute un nouveau chemin de sortie. La confidentialité appliquée à la couche d'entrée ne peut pas échouer de cette façon : vous ne pouvez pas divulguer ce qui n'a jamais été fourni.

Pourquoi la confidentialité permet la précision

Ce n'est pas seulement une question de respect des développeurs — même si c'en est une. C'est une question d'obtenir des données précises.

La loi de Goodhart en action

Dès que les développeurs savent qu'ils sont classés, leur comportement change. Ils optimisent pour la métrique plutôt que pour le résultat. Ils manipulent ce qui peut être manipulé. Ils cachent ce qui les fait mal paraître.

Si votre score de révision de PR affecte votre position, vous approuverez les PR à la chaîne pour augmenter votre volume. Si votre score de livraison est visible par la direction, vous livrerez vite et corrigerez plus tard. Les données deviennent peu fiables parce qu'elles mesurent la performance, pas le travail.

La confiance permet l'honnêteté

Quand les développeurs ont confiance que leurs données individuelles sont privées, ils s'engagent honnêtement avec le système.

Dans un système de surveillance, un développeur avec des scores de qualité en baisse cache le problème, manipule la métrique ou cesse de s'engager. Dans un système de confiance, le même développeur enquête réellement sur la raison, essaie des améliorations et utilise les retours.

Les mêmes données, traitées différemment, produisent des résultats opposés.

La recherche soutient cela

Les études montrent systématiquement que la surveillance réduit la productivité, la créativité et la qualité. Les travailleurs sous surveillance :

  • Prennent moins de risques (évitant les échecs visibles qui précèdent souvent l'innovation)
  • Se concentrent sur les apparences plutôt que sur le fond
  • Subissent un stress plus élevé et une satisfaction moindre
  • Partent vers des environnements moins surveillés quand c'est possible

La confidentialité n'est pas seulement éthique — elle est pragmatique. Vous obtenez de meilleures données de systèmes de confiance que de systèmes surveillés.

Modèles que vous pouvez adopter

Que vous construisiez des outils internes ou un produit, ces modèles s'appliquent :

Modèle 1 : Concevez d'abord les chemins d'accès

Avant de construire votre modèle de données, décidez : « Qui devrait pouvoir accéder à quoi ? » Ensuite, concevez le modèle de sorte que ce soient les seuls chemins d'accès.

Si les gestionnaires ne devraient pas voir les métriques individuelles, ne construisez pas de requête qui pourrait les produire. Il est plus facile de ne pas construire quelque chose que de le construire et de le verrouiller.

Modèle 2 : Ne matérialisez jamais les comparaisons

Stockez uniquement le niveau d'agrégation que vous avez l'intention de montrer. Cela signifie :

  • Pas de table « classements » qui pourrait être vidée ou exportée
  • Pas d'agrégats par personne qu'un futur rapport pourrait joindre
  • Des agrégats calculés à partir de données qui n'ont jamais contenu de scores individuels

Oui, cela limite ce que vous pouvez construire plus tard. Ça en vaut la peine.

Modèle 3 : Rendez la confidentialité observable

Les utilisateurs devraient pouvoir vérifier ce qui est visible pour qui. Dans notre interface, le profil du développeur indique clairement ce qu'il est et ce qu'il n'est pas : privé pour vous, pas une évaluation de performance, pas utilisé pour les décisions de rémunération, pas visible par les gestionnaires sauf si vous le partagez.

La confidentialité qui nécessite la confiance dans la documentation est faible. La confidentialité qui est visible dans le produit est forte.

Modèle 4 : Auditez les changements impactant la confidentialité

Lors de l'évaluation des demandes de fonctionnalités, demandez explicitement : « Ce changement modifie-t-il ce qui est visible pour qui ? »

Nouveau tableau de bord pour les gestionnaires ? Quelles données affiche-t-il ? Nouvelle fonctionnalité d'export ? Qu'exporte-t-elle ? Nouveau rapport ? Qui le voit ?

Faites de la révision de confidentialité une partie de votre processus de fonctionnalités, pas une réflexion après coup.

Ce que les gestionnaires peuvent réellement voir

Les gestionnaires ne voient que des agrégats au niveau de l'équipe : un score de santé de l'équipe de 0 à 100, des moyennes par dimension, des tendances et des anomalies. Les scores individuels, les classements et les tendances par personne n'existent dans aucune vue.

Les gestionnaires PEUVENT voir :

MétriqueCe qu'elle montre
Score de santé de l'équipeUn seul nombre de 0 à 100 pour toute l'équipe
Moyennes des dimensions de l'équipeLivraison agrégée, flux, qualité, etc.
Tendances de l'équipe« La santé s'est améliorée de 68 à 75 sur 3 mois »
Anomalies de l'équipe« Le temps de cycle a grimpé lors du dernier sprint »

Les gestionnaires NE PEUVENT PAS voir :

MétriquePourquoi pas
Scores individuelsAucun point de terminaison ou vue ne les expose
Comparaisons individuellesLes classements ne sont pas construits
Qui s'améliore ou déclineLes tendances sont agrégées seulement
Qui a contribué aux anomaliesL'identité individuelle ne fait pas partie du calcul

Cela crée une contrainte utile : les gestionnaires doivent se concentrer sur les améliorations systémiques, et non sur le ciblage individuel.

Lorsque le score de qualité de l'équipe baisse, le gestionnaire ne peut pas identifier qui est responsable — il est donc forcé d'examiner les processus, l'environnement et les facteurs au niveau de l'équipe. C'est généralement là que se trouve le véritable problème de toute façon.

Partage optionnel : contrôlé par le développeur

Nous avons mentionné que les profils individuels sont privés par défaut. Mais les développeurs peuvent optionnellement partager leurs données avec leur gestionnaire pour du coaching en tête-à-tête.

Deux propriétés comptent ici. Le partage est une adhésion explicite que le développeur initie, et non un défaut ou un paramètre que le gestionnaire peut activer. Et c'est révocable : le développeur peut retirer la visibilité à tout moment.

L'asymétrie est intentionnelle. Le développeur contrôle ses données. Le gestionnaire y accède uniquement sur invitation.

Cela permet du coaching sans surveillance. Un développeur qui a du mal avec les métriques de flux pourrait partager ses données pour obtenir de l'aide — sachant qu'il peut annuler le partage si la relation change.

L'asymétrie du pouvoir

Même avec un partage sur adhésion, la dynamique de pouvoir compte. Un développeur pourrait se sentir obligé de partager même s'il ne le souhaite pas. Nous atténuons cela en ne donnant aux gestionnaires aucun indicateur de qui a partagé ou non.

L'argument commercial pour la confidentialité

La confidentialité comme architecture n'est pas seulement éthique. C'est bon pour les affaires.

Meilleure rétention

Les meilleurs ingénieurs ont des options. Ils quittent les environnements qui les surveillent pour des environnements qui leur font confiance. En intégrant la confidentialité dans l'architecture, nous aidons les entreprises à retenir les talents.

Meilleures données

La surveillance corrompt les données. La confidentialité permet un engagement honnête. Les métriques que vous obtenez d'un système de confiance sont plus fiables que celles d'un système surveillé.

Position défendable

Lorsque les régulateurs, les journalistes ou les employés posent des questions sur la surveillance, il y a une grande différence entre « nous avons des politiques » et « nous ne pouvons architecturalement pas surveiller ».

Le RGPD, le CCPA et des réglementations similaires augmentent la pression sur la surveillance des employés. La confidentialité comme architecture devance la direction que prend la réglementation.

Préservation de la confiance

Les cultures d'ingénierie bâties sur la confiance surpassent celles bâties sur le contrôle. La confidentialité est la façon de signaler la confiance — et l'intégrer dans l'architecture signale l'engagement.

La voie à suivre

Si vous construisez des outils qui traitent des données individuelles (métriques de développeurs, données de performance, tout ce qui est sensible), considérez ceci :

  1. Les politiques ne suffisent pas. Si le système peut produire de la surveillance, quelqu'un finira par l'utiliser de cette façon.

  2. Concevez pour les modèles d'accès que vous voulez. Ne construisez pas de flexibilité que vous devrez verrouiller.

  3. Rendez la confidentialité visible. Les utilisateurs devraient pouvoir voir exactement ce qui est partagé avec qui.

  4. Acceptez les contraintes. La confidentialité comme architecture signifie que certaines fonctionnalités sont difficiles à construire. C'est une caractéristique, pas un bogue.

Nous avons construit Simyl Flow de cette façon parce que nous croyons que la confiance permet l'amélioration. La surveillance détruit les deux.

Mesure ce qui est livré et qui dure

Simyl Flow est la plateforme de résultats qui relie l'estimation, les mêlées, les rétros et le coaching — avec des scores de santé qui montrent si tes changements fonctionnent.

Partage

Continuer la lecture