Les problèmes qui présentent l'existant, comment les confronter et les contourner et éventuellement s'en débarrasser
Présentation présente à l'Agile Tour Paris 2014
Travailler avec l'existant : ou comment s'en débarrasser - Agile Tour Paris 2014
1. Agile Tour Paris 2014
Travailler avec l'existant :
ou comment s'en débarrasser
www.agileparis.org
www.twitter.com/AgileTourParis
www.facebook.com/AgileParis
team@agileparis.org
Meetup.com/AgileParis
2. Travailler avec l'existant : ou
comment s'en débarrasser
Les problèmes qui présentent l'existant,
comment les confronter et les contourner et
éventuellement s'en débarrasser
Sam Cranford – Upwiser
@nostradamnit
me@nostradamnit.com
delicious.com/nostradamnit
3. Qui suis-je ?
● Développeur entreprise depuis 15 ans
● Agiliste depuis plus de 10 ans
● Très (trop) expérimenté en travaillant avec
l'existant
● noter: presentation en fr_US
5. Bon, c'est qui?
● Dramaturge Français
● Créateur accidentel du Théâtre de l'absurde
6. Amédée ou comment s'en
débarrasser
● Pièce absurde en 3 actes
● Quelque chose encombre l'avancement
● La crise causé par l'encombrant
● La libération de l'encombrant
7. Ok, c'est quoi le rapport ?
● L'absurde – un décalage entre l'attente de
l'homme et l'expérience qu'il fait du monde
● L'existant – un projet en cours, en
production qui gagne de l'argent
un décalage entre le but d'un projet et son
déroulement actuel
9. Présentation en 3 actes
Le cycle de vie d'un projet informatique
● On commence avec des bonnes idées et
les bonne intentions
● On prend des décisions douteux et s'y
accroche
● On décide finalement de corriger ses
erreurs
10. Acte 1
Pourquoi on n'avance plus / pas assez vite?
● L'existant dans ces diverses incarnations
– Le code
– L’équipe
– L’état d'esprit
– Les connaissances
11. On existe
● Un produit existant
● Une équipe existante
● Des clients existants
● Des problèmes
existants
● L'existant, quoi ?!?
13. Le code (coté serveur)
public class BlahFormatter : ICanHaz
{
public string BlahFromUrl()
{
var context = Config.GetGlobalConfig("blahContext");
String url = HttpContext.Current.Request.Url;
var mehConverter = new MehConvertor(context);
var blah = BlahFactory.getFreshBlah(url);
var meh = mehConvertor.convert(blah);
return meh.toString();
}
}
14. Le code (cote client)
e = ""
function toggleElm(cls) {
for (i = 0; i < document.all.length; i++) {
if (document.all[i].className == cls) {
e = document.all[i]
}
}
}
15. Le code (build)
HAI 1.2
CAN HAZ STDIO?
I HAZ A FILE_NAME ITZ 'build.environment'
I HAZ A SERVR ITS noob
PLZ OPEN FILE FILE_NAME?
AWSUM THX
SERVR R FILE
O NOES
INVISIBLE "WFT ERRER?"
SERVR, WTF?
OMG "PROD"
I IZ BUILD_PROD
GTFO
OMG "TEST"
I IZ BUILD_TEST
GTFO
OMGWTF
I IZ BUILD_DEV
OIC
KTHXBYE
22. Les problèmes existants
● Le produit n'est pas stable
● Il manque des fonctionnalités
● Le temps d’évolution est trop long
● L’équipe n'est pas stable / formée / motivée
● La direction met la pression, sans direction
● Le code n'est pas très structuré
26. Comment est-on arrivé là ?
Cercle vicieux des manques :
– De temps
– De connaissances
– D'organisation
– D’évolution
– De tests
– De passion
27. Temps
● Comme on n'est pas
nombreux, on a
beaucoup à faire et
beaucoup de retard
● Et donc on travaille à
l'arrache !
28. Connaissances
● Comme on est en retard, on n'a pas le temps
de faire de la veille technologique
● Comme le travail actuel nous frustre, on n'a
pas envie de continuer
32. Passion
● Travailler dans des
conditions pareilles est
très fatigant, ça sape le
moral
● Une équipe démotivée
crée des produits sans
passion
● Ce manque de passion se
voit dans le résultat
34. Comment évaluer l'existant ?
● La structure
● La technique
● L'humain
● L'attitude
● La possibilité de changer
35. Structure
● Postulat : vous n’êtes pas là
pour changer l’équipe
● Donc il faut trouver les
moyens d'injecter des
bonnes pratiques sans trop
déranger
36. Technique
● Vous êtes là pour faire
avancer le projet
● Vous êtes expert dans votre
domaine
● Exigez du professionnalisme,
soyez l’ingénieur que vous
êtes
38. SOLID
● Principe de Separation de
responsabiltés
● Principe d'Ouvert / Fermé
● Principe de substitution
de Liskov
● Principe de ségrégation
d'Interface
● L'inversion de
Dépendance
39. Humain
● Est-ce que les collègues veulent
changer ?
● Est-ce que les devs sont traités
avec respect ?
● Les collègues sont-ils honnêtes
dans leurs interactions ?
● Les chefs s'imposent-ils des
échéances irréalisables ?
40. Attitude
● L'ambiance est-elle bonne ?
● Est-ce que les problèmes sont la faute des
autres ?
41. Le test de Joël
1.Utilisez-vous un système de
gestion de version ?
2.Pouvez-vous effectuer une
compilation en une seule
étape ?
3.Faites-vous des compilations
journalières?
4.Avez-vous un logiciel de suivi de
problèmes ?
… ( il y a 12 questions )
42. Comment s'en sortir ?
● Tests
● Restructuration
● Organisation
● Réduction de dette
technique
● Maîtrise de l'environnement
● Formation
● Méthodologie
44. Restructuration du code
● Ajouter et/ou réorganiser le projet pour qu'il
soit compréhensible et cohérent
● Enlever le code mort, les fonctionnalités
non-nécessaires, tout ce qui encombre le
code
Credits - http://www.qwan.eu/en
47. Dette technique
● Ne pas la cacher, partager la douleur
● L'isoler
● Préparer pour l'injection de dépendances
● Rendre le code testable → découplage
49. Le code (côté serveur)
public class BlahFormatter : ICanHaz
{
public string BlahFromUrl()
{
var context = Config.GetGlobalConfig("blahContext");
String url = HttpContext.Current.Request.Url;
var mehConverter = new MehConvertor(context);
var blah = BlahFactory.getFreshBlah(url);
var meh = mehConvertor.convert(blah);
return meh.toString();
}
}
50. Le code (côté serveur)
public class BlahFormatter : ICanHaz
{
public string BlahFromUrl(string Url, IConvertor convertor)
{
var blah = BlahFactory.getFreshBlah(url);
var meh = mehConvertor.convert(blah);
return meh;
}
}
51. Le code (côté client)
e = ""
function toggleElm(cls) {
for (i = 0; i < document.all.length; i++) {
if (document.all[i].className == cls) {
e = document.all[i]
}
}
}
52. Le code (côté client)
var selectedElements;
function toggleElm(cls) {
selectedElements = document.getElementsByClassname(cls);
}
53. Environnement
● Insister sur les outils
suffisants, au minimum
● Machines performantes
● Environnement de
développement isolé
● Automatisation des builds
et des tests
● Éviter les espaces ouverts
généralisés
54. Formation
● Créer / inculquer une culture
d’apprentissage
● Proposer des ateliers aux pauses déjeuner
(dojos, découvertes techniques,
discussions)
● Discuter avec l’équipe de la technique
● Jeux sérieux –> tastycupcakes.org
56. Focaliser sur l'important
● Un logiciel stable et maintenable
● Des clients contents et collaboratifs
● Un quotidien épanouissant
● De l'excellence technique
● Du bonheur, quoi ?
57. Honnête
● Exposer les fraudes
● Insister sur des
échéances justes
● Ne pas vous laisser
écraser
58. Humilité
● Savoir reconnaître ses fautes, ses erreurs
“L'humilité n'est pas de penser moins à soi-même,
mais penser moins de soi-même” C. S.
Lewis
59. Résumé
● Cliquez ici pour ajouter un résumé
Les 16 C s
● Courage
● Compassion
● Collaboration
● Capacité
● Communauté
● Cohérence
● Compréhension
● Conclusif
● Coordination
● Correct
● Confort
● Composé
● Créatif
● Convaincant
● Convivial
● Clair
60. C’est pas la taille de
l’épée qui compte, c’est
l’agilité du mousquetaire
63. Merci !
● Aux organisateurs de l'Agile Tour Paris
● Aux participants !
● A Upwiser et tous mes anciens et futurs
collaborateurs
● A tous les agilistes
● A Okiwi.org et les agilistes de Bordeaux
Il raconte qu&apos;il a eu une experience apres lequel tout lui semblait terne, … pourri, corrompu, unes series de taches repetitive sans interet
Dev a l&apos;arache
Big design upfront
Brassage del&apos;equipe
Tell a story here
Probablement pas le v1, mais le v2 ou v3
Parce qu&apos;on l&apos;a déjà réécrit
Il y a toujours pas de tests, du moins comprehensive et automatise
Complexe, jamais simple
Il y a neamoins des clients qui l&apos;utisent
Tous les jours
Et qui en dependent
Des brave gens, pas assez nombreux
Souvent quelques membres de l’équipe d’origine
D’expérience variable, certains n&apos;ayant travaille que sur ce projet
Structure hiérarchique – au moins un meneur ou héro
Jim McCarthy
Dynamics of Software Development 1995
Software for Your Head 2002 – intro to Core Protocols
Vous etes qu&apos;un seul des ses problemes
Il a a peine le temps pour exprimer ses besoins
Ses clients lui mettent beaucoup de pression,il vous le partage
C&apos;est le cumule du produit bancale, l’équipe mal-organise et surmenée, les clients frustres et demandeur, la direction frustre et confuse sur comment faire avancer
C&apos;est le manque de structure et bons pratiques
Le manque de l’agilité !
Find image of encombrement
Question ouverte : qui a déjà travaille avec un dev qui ouvertement s&apos;en foutait de son travail.
« mec, je fais ça parce que c&apos;est le diplôme que j&apos;ai. »
« je code pas après le boulot »
Vu l’état des lieux, on a à peine assez de temps pour corriger des bugs, on n&apos;a surtout pas de temps pour s&apos;organiser mieux
La direction veut ajouter plus de contrôle, qui nous prend d&apos;autant plus de temps
L’équipe aussi
Personne sait comment changer
Ou au moins, prend les choses en mains pour les faire changer
Comme on code toujours dans l&apos;urgence, on n&apos;a pas de temps pour faire des tests
Donc on augmente la liste de bugs
35 heures, c&apos;est deja trop
Corrigez-vous les bugs avant d&apos;écrire de nouvelles fonctionnalités ?
Avez-vous un planning de développement à jour ?
Avez-vous des spécifications fonctionnelles ? (« spec »)
Les programmeurs ont-ils un environnement de travail calme (facilités à la concentration, etc.) ?
Utilisez-vous les meilleurs outils qu&apos;on puisse acheter ? (le matériel, notamment)
Avez-vous des testeurs ?
Les candidats doivent-ils écrire du code pendant leur entretien d&apos;embauche ?
Faites-vous des tests utilisateur complet ?
Joel Spolsky compare son test au processus d&apos;évaluation SEMA créé par l&apos;unversité Carnegie Mellon et affirme que là où SEMA a besoin de plusieurs mois d&apos;implémentation, le Joel Test permet une évaluation immédiate de la qualité d&apos;une équipe de développement. Toutefois, il précise que son test n&apos;a qu&apos;une valeur indicative et qu&apos;il ne devrait pas être utilisé pour évaluer les équipes de développement produisant les logiciels utilisés pour piloter une centrale nucléaire.
Ifnd an image of a tunnel
Or a compass
Validation de l&apos;existant
« Je ne crois que ce que je vois »
Du vert en occurance !
Si on sait pas ce qu&apos;on a cassé, comment on peut être sur ?
Quand on voit pas la sortie, on peut oublier cet aspet
Chacun travaille dans son domaine d&apos;expertise
2 definitions :
1. recourcis fait expres
Gros switch case deguelasee au lieu de sous-classes
2. incompetance – code degeu parce qu&apos;on s&apos;en fout, sait pas faire mieux
(stagiares)
Le meilleur moyon de s&apos;assurer d&apos;un code de qualite
Attaque le code pas la personne
Nul n&apos;est parfait
Passer les dependances
Eviter les classes statiques
Eviter les globaux (var)
Eviter les globaux tres commun (e)
Eviter les boucles couteux
Story about long compiles
Insister sur des formations (si on demande pas, on nous les propose pas)
Agile bien sur !
XP, parfait pour petites equipes
Scrum, pour une ou plusieurs equipes
Kanban, peut-etre mieux adapter à l&apos;existant
Quelque chose qui suit les principes agile