Retour d'expérience du travail en Kanban d'une équipe de 20 développeurs et l'impact sur les besoins d'organisation du code.
Quelques spoilers :
1/ De façon aussi logique chaque fonctionnalité est développée de façon totalement indépendante du reste (carte kanban)
2/ Vous avez dit tout sur des branches ? Mais vous êtes fous !! Cette organisation contre intuitive permet en fait de livrer à tout moment ce qui est prêt (Continuous Delivery)
3/ Mais comment vous évitez les conflits et risque de bloquage entre deux fonctionnalités ? Notre secret est un d'avoir un outillage pensé et adapté pour détecter les incompatibilités et nous aider à garder chaque travaux indépendants
Depuis bientôt 3 ans nous avons un rythme de mise en production d'environ 1000 branches par an en 250 releases (par an !), si notre aventure vous intéresse, venez nous poser des questions.
http://lanyrd.com/2017/agilefrance/sfrhrk/
4. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
La plateforme
• Des formulaires riches
• 40-200 questions (Expedia c’est 10 !)
• Orchestration de demande de tarifs
• 50+ webservices appelé par tarification
• 2 Milliards de questions échangées avec les assureurs
• Module de paiement en ligne
LesFurets
WebSite
Panel Partners
Data Partners
14. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Leçon #1 : Livrer tôt, livrer souvent
• L’intention de réduire le Time to Market :
• Pouvoir livrer quand c’est prêt
• Faire des petits lots
• Impacte l’organisation
• Gestion du code source
• Organisation de la qualité (autonomie des développeurs)
• Outillage au service du Time to market
• Fail fast : Un feedback c’est un cadeau
18. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Le vocabulaire minimum GIT (1/2)
•Commit:
• Une modification dans la base de code
• Résumé: différence de l’original (diff ou patch)
• Historique / Commit Log :
• Séquence de commits
• Branche:
• Une copie complète du code
• Géré comme un historique alternatif
• Merge:
• Fusion de 2 historiques / 2 histoires
branch 1
branch
commit 1
commit 2
commit 4
commit
merge
commit 3
19. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Le vocabulaire minimum GIT (2/2)
• Conflit:
• Lorsque deux commits sont incompatibles
• Lors du merge de 2 branches
• Conflict Résolution :
• Commit solution à un conflit
• Rebase :
• mettre 2 branches en séquence
• modifier le point de départ de l’histoire d’une branche
• flash back, voyage dans le temps
branch 1
branch 2 commit 2
commit a
conflict
commit 3
commit 2
commit a
commit 3
rebase
36. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
• Conservation du planning mensuel, mais release hebdo
•Evolution:
• Utilisation du processus de patch (cherry pick)
• Nouveau code plus vite en production
•Blocages:
• Toujours une branche de release à maintenir
• Livraison toujours coûteuse avec duplication de code
2013 : Livrer chaque semaine
37. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Leçon #2 : Release via le processus de patch
• En cas d’incident de prod
•Avez-vous un processus robuste de livraison des patches ?
• NON, c’est dangereux, fabriquez-en un !
• OUI, Pourquoi ne pas l’utiliser ?
•Avoir un processus robuste de livraison de patches n’est pas une option !
60. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Leçon #4 : Ne pas bloquer les autres
• Garder les fonctionnalités séparées jusqu’au dernier moment
• Alors que tout le monde les fusionne par défaut !!!
• Merge Continu (comme outil de test):
• Détecter les conflits (sans être bloqués — build incassable)
• Laisse le temps de gérer le conflit
• Autorise à jeter facilement, ou mettre de côté sans frais
•Bonus:
• Le code non terminé n’est pas accessible aux autres !
61. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Nos Stratégies d’évitement de conflit
1. Eviter d’avoir des zones de conflit (dette technique)
2. Modifier une des branches
3. Supprimer une des branches (mise en attente)
4. Fusionner les branches (date de sortie commune)
5. “Rebase” d’une branche sur l’autre (sortie en séquence)
6. Publier une résolution de conflit (git-octopus)
64. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Take away : Kanban as Code
Objectifs :
• # Les branches sont vos cartes Kanban (vers un flux tiré)
• # Flux de fonctionnel (Feature Branches ou Trunk based)
• # Livrez ce qui est prêt (Commencez par finir)
Pourquoi ça marche ?
• # Assure l’indépendance des taches (non adhérence)
• # Risques très faibles de conflits sur 500.000 lignes de code
• # Détection non bloquante des conflits