Vous utilisez peut-être le feature flipping dans vos projets et vous considérez cette technique indispensable.
Mais les devs s'arrachent les cheveux à la moindre évolution avec toutes les combinaisons de feature flips à gérer. Tout ça combiné fait que le feature flipping devient dur à maintenir voire détesté par les devs.
On finit par avoir des if/else envahissants dans le code, sans prendre le temps de faire le ménage pour éliminer les feature flips devenus inutiles.
Je vous propose d'autres alternatives au feature flipping traditionnel, comme une priorisation différente, un design par l'injection ou un design pour un slicing plus malin.
3. Formation
Sessions intra
et inter-entreprise,
sur site ou à distance
Coaching
Mentoring et
accompagnement
sur le terrain
Projet
Engagement de moyens et
engagement de qualité
Conseil
Diagnostic et études
sur mesure
NOS FORMATS D’INTERVENTION
Nos domaines d’expertise
Attitudes et pratiques craft
29. • Flipper non supprimé
• Multitude de IF et conf
• Code moins lisible
• Coût supplémentaire
• Dépendances entre flippers
• Non-régression en on/off
Le bazar
37. La feature ne tient
pas sur une
itération
29%
On active les
fonctionnalités par
segment (zone,
contexte,
environnement…)
27%
On est plusieurs à
développer en
parallèle
14%
On teste en
production
10%
Autre
20%
Pourquoi choisir le feature flipping ?
43. • Livraison partielle
• Activation selon contexte
• Dépendance externe
• Deux versions en parallèle
• Demande explicite du client
• Aucun flipper supprimé
• Multitude de IF
• Code moins lisible
• Coût supplémentaire
• Non-régression en off
• Dépendances entre flippers
Cas d’utilisation
Inconvénients
62. Livraison partielle
• Besoin de rassurer
• Eviter l’effet tunnel
• Réduction du life cycle des branches
• Merge plus souvent
• Intégration continue
63. Livraison partielle
Sprint 1 Sprint 2 Sprint 3
Feature n
US n1 US n2 US n3
Feature m
US m1 US m2
Ce lot n’est pas
livrable en l’état ?
64. INVEST in user stories
• Independent: sufficiently self-contained
• Negotiable: collaboration around the
details of what and how
• Valuable: increment of visible value
• Estimable: estimate how big it is
• Small: able to fit 6 to 10 into a sprint
• Testable: way to know we’re done
https://www.humanizingwork.com/the-humanizing-work-guide-to-splitting-user-stories/
65. INVEST in user stories
• Independent: sufficiently self-contained
• Negotiable: collaboration around the
details of what and how
• Valuable: increment of visible value
• Estimable: estimate how big it is
• Small: able to fit 6 to 10 into a sprint
• Testable: way to know we’re done
https://www.humanizingwork.com/the-humanizing-work-guide-to-splitting-user-stories/
67. Hamburger technique - Gojko Adzic
• Top Bun: starting point –
main goal
• Meat: core functionality –
main tasks to achieve goal
• Lettuce, cheese, etc:
specific aspects and details
• Bottom Bun: end point
71. Activation selon contexte
• Exemples
• Activation par rapport à la période de Noël
• Activation pour la France et l’Espagne uniquement
• Activation pour l’environnement de développement uniquement
• Activation d’un AB testing pour un échantillon de users
72. Activation selon contexte
• Exemples
• Activation par rapport à la période de Noël
• Activation pour la France et l’Espagne uniquement
• Activation pour l’environnement de développement uniquement
• Activation d’un AB testing pour un échantillon
Besoin d’activation manuelle ?
73. Activation selon contexte
• Exemples
• Activation par rapport à la période de Noël
• Activation pour la France et l’Espagne uniquement
• Activation pour l’environnement de développement uniquement
• Activation d’un AB testing pour un échantillon
Critères métiers dynamiques ?
75. Activation selon contexte
Implémentation Interface
Implémentation
Condition non satisfaite
Implémentation
Condition satisfaite
Remplacer les flippers
par le pattern Strategy
76. Activation selon contexte
• Gestion de campagnes
• On active la même fonctionnalité ou des différentes
• A la période des soldes, aux dates des soldes flottants
• A la période de Noël, au quotidien…
• Payement via des cartes cadeaux et/ou sur plusieurs
fois
77. “If it is so important,
make it a feature, not
just a flag.”
Cyrille Martraire
85. Branch By Abstraction
“Technique for making a large-scale change to a software
system in gradual way that allows you to release the system
regularly while the change is still in-progress.”
Martin Fowler
97. Dépendance externe
• Un service dont on a besoin mais qui n’est pas dans
notre périmètre
• Exemples
• Activation d’un service de payement différé
• Activation d’un service de publication d’actualité
107. Feature flipping : solution de facilité
• Code pas facile à maintenir
• Coût supplémentaire d’analyse
• Non-régression plus longue
• Turn-over plus important