Gaspard POINTEAU@Gaspard_PO
100 projects : 94 restarts.
Principales causes des échecs :
Facteurs clefs du succès :
Le produit ne sera que ce l'équipe de dev a compris, a voulu faire et a déployé.
L'architecture est à l'image de l'organisation qui l'a crée.
"Organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations."
Melvin Conway
On peut arrêter le projet quand on a suffisamment de valeur.
Développement logiciel inspiré des chaines de production ou du batiment :
Des "intellectuels" réflechissent au produit à implémenter et des ouvriers interchangeables (voir des robots) produisent.
Et une fois un produit construit, impossible de le corriger. Coût de defect très cher.
Théorie X Y de Douglas McGregor
On sait qu'il va y avoir des problèmes, mais on essaie de les rendre inoffensifs
Se planter d'objectif et perdre 2 semaines de boulot, c'est moins grave que de perdre 2 ans de boulot
Et humainement, accepter d'abandonner 1 jour de préparation est plus facile que d'abandonner 3 semaines de recherches
En IT, on peut tester des trucs, on peut essayer.
Au pire on supprime le code.
Il n'y a pas d'objet physique à construire, ni d'outils ou de chaine de montage à acheter.
Facebook teste même en production, sur certains utilisateurs.
Le temps perdu à se planter, ce n'est pas du temps perdu, c'est de l'apprentissage
30% des projets n’aboutissent pas
30% des projets sont arrêté à temps
30% des projets dépassent le délai
30% des projets choisissent de décaler la date de fin
50% des projets dépassent leur budget initial
ils coûtent en moyenne 190% de leur budget initial
Le budget suffit à livrer les fonctionnalités les plus importantes
12% des projets réussissent dans les délais et les budgets
ils couvrent en moyenne 40% des fonctionnalités initialement prévues
Parmi les fonctionnalités, les 40% les plus prioritaires étaient suffisantes pour le client
Notre plus haute priorité est de satisfaire le client en livrant rapidement et régulièrement des fonctionnalités à grande valeur ajoutée.
Accueillez positivement les changements de besoins, même tard dans le projet. Les processus Agiles exploitent le changement pour donner un avantage compétitif au client.
Livrez fréquemment un logiciel opérationnel avec des cycles de quelques semaines à quelques mois et une préférence pour les plus courts.
Les utilisateurs ou leurs représentants et les développeurs doivent travailler ensemble quotidiennement tout au long du projet.
Réalisez les projets avec des personnes motivées. Fournissez-leur l’environnement et le soutien dont elles ont besoin et faites-leur confiance pour atteindre les objectifs fixés.
La méthode la plus simple et la plus efficace pour transmettre de l’information à l'équipe de développement et à l’intérieur de celle-ci est le dialogue en face à face.
Un logiciel opérationnel est la principale mesure d’avancement.
Les processus Agiles encouragent un rythme de développement soutenable. Ensemble, les commanditaires, les développeurs et les utilisateurs devraient être capables de maintenir indéfiniment un rythme constant.
Une attention continue à l'excellence technique et à une bonne conception renforce l’Agilité.
La simplicité – c’est-à-dire l’art de minimiser la quantité de travail inutile – est essentielle.
Les meilleures architectures, spécifications et conceptions émergent d'équipes auto-organisées.
À intervalles réguliers, l'équipe réfléchit aux moyens de devenir plus efficace, puis règle et modifie son comportement en conséquence.
Respect, Confiance, Collaboration, Transparence, Simplicité, Changement, Amélioration Continue, Courage
Agile without technic: deliver crap really fast!
arxta
Rédigez un cahier des charges pour écrire des nombres en lettres
pluriel de "vingt" et "cent".
"et-un" ou "-un" ?
Facile != Simple
Et la Belgique ? et la Suisse ?
Le besoin peut évoluer.
Le besoin va évoluer.
"Si votre besoin n'évolue plus, c'est que vos utilisateurs sont morts."
En tant que [rôle],
je veux [besoin]
pour [bénéfice]
User, utilisateur -> ça ne veut rien dire.
Petites US :
Ce qui est implementé n'est que ce que les devs ont compris
On fini par livrer un logiciel qui "marche" mais qui n'est pas utilisable.
Soit specs et tests sont redondant (donc inutiles)
Soit specs et tests sont incohérents (donc il faut recommencer)
Les "données" utilisées ne correspondent pas du tout à des cas d'utilisations
(type de données, volume, contenu, temps ...)
Le PO dit "là, par exemple, si je veux faire ... ça ne marche pas" avec un cas réel d'utilisations
autant utiliser les exemples dès le début !
et autant discuter avec le PO dès le début !
Calculatrice Lorsque je saisis 30, j’appuie sur le bouton +, je saisis 45, j’appuie sur le bouton égal, alors j’obtiens 75.
Orthodromie La distance orthodromique entre Paris (48°51’N – 2°21’E) et Montpellier (43°36’N – 3°53’E) est de 595 kms.
Calcul d’agios Sur le 4e trimestre 2012, un compte est débiteur de 451€ du 13/11 au 28/11 et de 342 € du 08/12 au 27/12, avec un taux d’intérêt de 20% annuel. Les intérêts sur la période sont de 7,27 €
Et si on utilisait ces exemples d'utilisations comme critères acceptances ?
ATDD : Acceptance Test Driven Development
Et si on les automatisait ?
Tests fonctionnels de non-regression
Bonus:
Si on a un cas bien décrit pour être automatisable, on a un exemple pour la démo et la doc
d'utilisation
Les Devs et le business parlent le même langage
Given [conditions initiales]
When [action]
Then [résultat attendu]
Pensez aux daltoniens, aux mal-voyants.
Gardez quelque chose de simple.
Procedez comme pour un client :
Ne faites que les fonctionnalités qui apportent vraiment de la valeur, faites du sur-mesure et recueillez du feedback
Préférer la simplicité à un outil clef-en-main d'un éditeur.
Des posts-its, un tableau blanc feront mieux que Jira
Pas la peine de payer une fortune, un document partagé, un chat, un partage d'écran ... peuvent suffire.
Rolling contract
Un contrat par itération, avec un scope différent.
Le client arrête le projet quand il veut
(ie : quand il a obtenu assez de valeur).
Par contre, il paie une indemnité "pour rien" au fournisseur.
x sprints d'avance,
20% du budget total prévu.
Si un projet de 2 millions s'arrête à la moitié, le client paie 1,2 millions.
Le client économise 800 000
Le fournisseur gagne 200 000 sans travailler (mais perd un contrat)
Un peu comme des frais de résiliations.
Avantage client : il ne paie pas très cher pour n'avoir que des fonctionnalités accessoires.
Avantage fournisseur : le contrat s'arrête, mais le fournisseur touche une partie du prix pour avoir le temps de trouver d'autres clients.
Le client peut à tout moment changer l'ordre des priorités dans le backlog, gratuitement, sans avenant.
Les n (3 ?) premiers sprint servent à évaluer la capacité de travail, le niveau de qualité de l'équipe.
Une période d'essai ?
L'implication du PO est dans le contrat.
Scrum n’adresse que l’organisation du développement
Scrum ne suggère pas de pratiques de développement
Pourtant la qualité doit être au centre de l’attention :
9ème principe du manifeste
La qualité d'aujourd'hui est la productivité de demain.
Les autres outils sont des indicateurs, mais en aucun cas des mesures fiables, et encore moins des objectifs.
La sur-qualité n'existe pas.
Over-engineering
C'est un emprunt qu'il faudra rembourser, avec des intérets.
C'est choisir de ne pas faire certaines choses (refactorer, relire le code) pour aller plus vite à un moment précis pour un but précis.
Ce n'est pas écrire du mauvais code, ce n'est pas de l'incompétence.
Valide pour certains projets "one shot" :
un petit script pour trier un tas de données, un spike pour essayer une techno ...
Mais la plupart du temps les one-shots sont maintenus pendant des années.
Tout le monde a un environnement de tests.
Certains sont assez chanceux pour qu'il soit séparé de l'environnement de prod.
Tout le monde a des testeurs.
Certains sont assez chanceux pour qu'ils soient différents des utilisateurs.
FIRST
Et si en plus d'avoir les tests "fonctionnels" à remplir, on poussait à l'extreme :
pour chaque tache de la user story ?
pour chaque méthode ?
d'abord écrire le besoin, puis le réaliser.
l'objectif n'est pas les tests, c'est le design !
la batterie de tests n'est qu'un effet de bord en cadeau
oblige à réfléchir à ce que je veux en sortie
ce dont j'ai besoin en entrée
avant de faire la prod
un seul concept métier par test
Calculatrice : division
un test pour la division
un test pour l'erreur de division par zéro
un seul assert ?
XUnit (Junit, NUnit, CppUnit ...)
d'autres frameworks
vous pouvez facilement créer le votre
Avec un peu de bonne volonté et d'imagination on peut faire un truc qui s'approche du TDD sur de l'embarqué, du front.
Les règles qui s'appliquent au code s'appliquent aux tests
qualité
clean-code
refactor => setup, teardown
git
relecture
le business écrit dans sa langue :
Feature: Is it Friday yet?
Everybody wants to know when it's Friday
Scenario Outline: Today is or is not Friday
Given today is "Monday"
When I ask whether it's Friday yet
Then I should be told "Nope"
l'équipe de dev fait le lien entre le langage business et le code.
les tests ne sont utiles que s'ils sont lancés
Principe : un serveur "récupère" les sources et lance un build et tous les tests
Ca permet d'éviter les soucis à base de "ça marche sur ma machine"
Et pourquoi ne pas automatiquement déployer une nouvelle version ?
Soit en prod, soit en pré-prod, ou béta pour test et démo.
Ne demandez pas l'autorisation, c'est trop long
installez un serveur Jenkins (et Gitlab) sur un vieux PC qui traine dans le coin.
Il est tout à fait possible de versionner ses jobs qui lancent les builds
La partie build / deploiement doit être gérée par l'équipe.
Ou en impliquant au maximum l'équipe
Valeur forte d'XP
Egoless programming
Pour passer du Cowboy coder associal à un vrai travail d'équipe.
De toutes façons vous en faites déjà !
Comme tout passage en remote :D
Pourquoi s'arrêter à 2 ?
l'apprentissage est dans les deux sens
Que l'on soit l'auteur·ice du code ou la personne qui relit.
On critique le code, pas la personne
Hard with code, soft with human
En asynchrone, sur un outil de gestion de conf.
En discutant au bureau de son/sa collègue.
l'écrit peut être ambigue, surtout dans une langue qu'on maitrise mal.
Attention aux tournures.
Préférer les questions plutôt que les affirmations.
500 lignes de code à relire ? Ok, on merge
15 lignes à relire ? 15 commentaires ou questions.
Du Scrum sans itération ?
Bien pour de la TMA
WIP
Lead-Time
Pull
Comment sortir un logiciel qui apporte de la valeur en une semaine avec 200 personnes ?
L'agilité, c'est faire des tout petits projets rapides.
Mais il faut que les équipes gardent une vision d'ensemble à long terme
Think global, act local
D'après l'antropologue / primatologue Robin Dunbar, la limite cognitive du nombre de personnes avec lesquelles un individu peut avoir des relations stables est 148.
Une équipe : 7 personnes (3 - 12)
département : 50 (7 * 7 personnes)
maximum : 150
Un membre de l'équipe participe au scrum de scrum.
Pas le scrum master (sauf s'il fait aussi du dev).
L'agilité va rendre visible les points bloquants.
L'agilité va rendre visible les services inutiles
(sous-traitants,
middle-management).
Risque de clashs avec d'autres services pas encore agiles.
Que faire des managers ?
Changement total de paradigme
Violence symbolique involontaire
Nécessite de travailler sur 3 fronts
Ne pas "forcer" l'agilité en top-down.
Faire confiance et laisser faires les équipes
Nécessite d'être transparent, de former et de donner les moyens.