Pages

mardi 22 décembre 2015

Une photocopie de votre diplôme ?

Récemment, j'ai eu lors d'un contact avec un recruteur, une demande un peu "amusante" : Pourrais-je avoir une photocopie de vos diplômes ?
 
J’ai quitté l’école en 1985.
 
La même année que la sortie de Windows 1.0 sur disquette, je programmais en C, Basic et DBase . Les VAX  et autre IBM 38 régnaient dans les entreprises. A cette époque, l'agilité et le Scrum n'étaient même pas des concepts, et le management était vraiment différent.

J'arrête là mon étalage nostalgique pour revenir sur le fond.

Dans mon poste actuel, j'ai recruté, pour mon équipe, une bonne dizaine de développeurs, et pour moi, voilà quels sont mes principaux critères :
  • Avez-vous un projet d'étude ou personnel open-source ?
Pourquoi ? Parce qu’il permet de voir le code écrit, l’architecture pensée, les méthodes utilisées par le développeur.

Un plus tout de même pour le projet open-source, parce qu’il démontre une autre qualité très recherchée : La passion. 

  • Avez-vous un blog sur les IT ? Avez-vous publié un article sur un site spécialisé ?
Pour avoir écrit moi-même quelques articles, je sais que cela prend du temps. Mais c’est un bon exercice de synthèse et de pédagogie, et comme pour le premier point, cela démontre une passion pour nos métiers.

En résumé, un projet ou un article en dit 1000 fois plus qu'une vague photocopie d'un diplôme hors d'âge (ou même d'hier). On peut facilement se faire une idée de la valeur du développeur que l'on va recruter.
Si j’ai un conseil à donner à tous les développeurs, c’est de montrer votre flamme en produisant du code ou des articles, et de les montrer au public. Peut-être seront-ils « moyens », mais ils seront le plus « passion » sur votre CV.
Et un second conseil, il faut mettre les liens vers vos productions dans votre CV, cela fait une vraie différence : vous êtes développeur, vous aimez çà et vous pouvez le prouver. 

Dans notre métier, ce qui compte vraiment, c'est l'auto-formation continue, l'ouverture à de nouvelles techniques, de nouveaux outils et de nouvelles pratiques, et pour se former continuellement, il faut être passionné par notre métier : "artisan codeur d'application".

C'est la première des qualités qu'un recruteur devrait essayer de détecter, parce que, tout bardé de diplômes qu'il soit, c'est au pied du mur que l'on voit le maçon !

mercredi 22 mai 2013

A simple .Net Wrapper of Yammer API

Introduction

In ScrumPilot, I plan to replace my native news feed by a Yammer news feed; additionally, I want to allow people who don't have Team Foundation Server accounts the possibility view this news feed.
I wrote this API wrapper to interact easily with Yammer.

Codes sources

@ CodePlex : Yammer.SimpleAPI
or just use it 
@nuget : Yammer.SimpleAPI package

First Step

In order to use Yammer API, you must setup your app in "My Apps" in Yammer.
Below is screen shot of my own app setup: ScrumPilot.
Note at the bottom of the form, the URL redirection to a local address, if you want to interact with your dev environment.

Example

In VS Solution, I added an MVC project for this example.

First Screen

First screen shot, when you run the MVC site, you will see a form where you should type your Yammer Client ID and Client Secret given to you by Yammer when you setup your app.

Yammer API first screen

Post in Controller

It's a very classic Post. it prepares an object with all of the information and it redirects to Yammer with some of the information (see source code below for details).
It retains connection information in Session in case of success (when it comes back from Yammer).

[HttpPost]
public ActionResult Index(IndexViewModel model)
{
    if (ModelState.IsValid)
    {
        // prepare info for Yammer
        var myConfig = new ClientConfigurationContainer
                     {
                        ClientCode = null,
                        ClientId = model.ClientId,
                        ClientSecret = model.ClientSecret,
                        // especially where it should return
                        // after auth 
                        RedirectUri = Request.Url.AbsoluteUri 
                                + Url.Action("AuthCode") 
                      };
        // Create a new Rest Client
        var myYammer = new YammerClient(myConfig);
        // Make the right Yammer Url
        var url = myYammer.GetLoginLinkUri();
        // Save data in Session
        this.TempData["YammerConfig"] = myConfig;
        // go to Yammer
        return Redirect(url);
    }
    return View(model);
}

If everything is correct, you should see the screen shot below; it asks you to authorize Yammer to share information with your app (in my case: ScrumPilot).


When you have clicked on "Allow", Yammer returns to your app, and provides it an authorization code.
To better understand this workflow, read the oauth2 website.


Result and Interactions

// Call back by Yammer when you allow your app
// interact with it
public ActionResult AuthCode(String code)
{
    // I receive auth code from Yammer
    if (!String.IsNullOrWhiteSpace(code))
    {
       var myConfig = this.TempData["YammerConfig"]
                          as ClientConfigurationContainer;
        myConfig.ClientCode = code;
        var myYammer = new YammerClient(myConfig);

        // Some examples
        // var yammerToken = myYammer.GetToken();
        // var l = myYammer .GetUsers();
        // var t = myYammer .GetImpersonateTokens();
        // var i = myYammer .SendInvitation("test@test.fr");
        // var m = myYammer .PostMessage("A test from here", 
        //                                    0, "Event" topic);
        return View(myYammer.GetUserInfo());
     }
     return null;
}

Once your app has the authorization code, it can interact with Yammer (read, write...).
A result example: 




mardi 14 mai 2013

Un "Wrapper" .NET de L'API Yammer

Introduction

Dans le but de remplacer le feed natif de ScrumPilot par le feed de Yammer, et aussi d’informer des gens affiliés à Yammer, mais qui n'ont pas de compte ScrumPilot ou Team Foundation Server, j'ai fabriqué une librairie pour accéder facilement à Yammer et interagir avec lui.

Codes sources

sur CodePlex : Yammer.SimpleAPI

Préalable

Pour dialoguer avec Yammer au travers de son API, il faut préalablement configurer une "Apps" dans Yammer.
Le didacticiel est bien fait, et ci-dessous, des copies d'écran de ma propre inscription.
Notez l'adresse de redirection en bas du formulaire qui pointe vers une adresse locale.

Exemple d'utilisation

Dans ma solution, j'ai ajouté une application MVC qui illustre l'utilisation de la librairie.

Connexion

Le but de l'écran ci-dessous est de saisir les renseignements fournis par l'inscription, le Client ID et de Client Secret fourni par Yammer.

Yammer API first screen

Post dans le Controller

Le post dans le Controller est des plus classiques, il prépare les informations à envoyer, il redirige vers Yammer qui demande si l'application est autorisée. Je stocke les informations de connections pour les sauvegarder au retour.

[HttpPost]
public ActionResult Index(IndexViewModel model)
{
    if (ModelState.IsValid)
    {
        // prepare info for Yammer
        var myConfig = new ClientConfigurationContainer
                     {
                        ClientCode = null,
                        ClientId = model.ClientId,
                        ClientSecret = model.ClientSecret,
                        // especially where it should return
                        // after auth 
                        RedirectUri = Request.Url.AbsoluteUri 
                                + Url.Action("AuthCode") 
                      };
        // Create a new Rest Client
        var myYammer = new YammerClient(myConfig);
        // Make the right Yammer Url
        var url = myYammer.GetLoginLinkUri();
        // Save data in Session
        this.TempData["YammerConfig"] = myConfig;
        // go to Yammer
        return Redirect(url);
    }
    return View(model);
}

Si tout se passe bien, vous devriez arriver sur un écran comme celui-ci, il vous demande l'autorisation de partager vos informations avec votre application (celle que vous avez déclarée dans le préambule, pour ma part ScrumPilot)


En cliquant sur "Allow", Yammer retourne vers votre application en lui fournissant un code d’authentification.
Pour une meilleure compréhension de la mécanique générale de cette authentification, je vous renvoie vers
OAuth 2.

Résultat et interactions

public ActionResult AuthCode(String code)
{
    if (!String.IsNullOrWhiteSpace(code))
    {
        var myConfig = this.TempData["YammerConfig"]
                          as ClientConfigurationContainer;
        myConfig.ClientCode = code;
        var myYammer = new YammerClient(myConfig);

        // Some examples
        // var yammerToken = myYammer.GetToken();
        // var l = myYammer .GetUsers();
        // var t = myYammer .GetImpersonateTokens();
        // var i = myYammer .SendInvitation("test@test.fr");
        // var m = myYammer .PostMessage("A test from here", 
        //                                    0, "Event" topic);
        return View(myYammer.GetUserInfo());
     }
     return null;
}

Une fois que vous êtes autorisés à interagir avec Yammer, vous pouvez lire et écrire depuis et dans Yammer.
Un petit exemple : 




lundi 18 février 2013

Faites utiliser Yammer par votre organisation

Traduction de l'image originale de post du blog de Yammer 
En espérant qu'elle vous aide dans votre démarche d'utilisation de Yammer 
Comme il est dit : un image et quelques phrases peuvent avoir un fort impact


mercredi 23 mai 2012

Qu'est que la transparence peut vous apporter ?


Préambule : Ce post est la traduction d’un autre post de Chris DeVore Investisseur dans le Web et la mobilité à Seattle.
Merci à Chris de m'avoir autorisé à traduire et publier cet article

Article original : [What does transparency buy you?]


J'ai eu une intense conversation avec un patron de Startup sur les avantages et les coûts d’une communication régulière et transparente avec ses investisseurs et ses proches conseillers.

Mon point de vue - que j’ai exprimé avec force, à défaut d’être très efficace - était que la transparence dans un cercle limité d'initiés est extrêmement précieuse et créé bien plus d’avantage qu’elle ne coûte en efforts et en temps.

Le point de vue du dirigeant – qu’il a défendu calmement et rationnellement - c'est que son travail consistait à maximiser la valeur de l’entreprise, et que communiquer est très coûteux - et pas seulement en elle-même, mais plus encore dans la gestion des réactions parfois vindicative de investisseurs vis-à-vis de celle-ci.
Après ne pas avoir réussi à bien expliquer mon point de vue, j'ai pensé que pourrait essayer de l'écrire...

Premièrement, la transparence, c’est quoi ?
 
Ce n’est peut ne pas être un échantillon très complet, mais aussi parmi nos plus de 30 investisseurs, les entreprises qui ont prisent de la valeur le plus rapidement, et qui ont attirés les meilleurs investisseurs, clients et collaborateurs, sont tous dirigés par des patrons qui ont une certaine façon de faire :

1. Fréquent rapport de situations aux investisseurs (hebdomadaire ou mensuel) 
La plupart des fondateurs utilisent « Thinkfuse »  (un service de communication partagée) pour gérer le reporting investisseur (Quelques-uns sont devenus des évangélistes passionnés par ce produit qu'ils ont propagés dans d’autres portefeuilles de fonds de capital-risque).
Quoi qu’il en soit, le contenu compte plus que l'outil, utiliser le courriel ou un pigeon voyageur si vous cela vous chante.

Certains de ces rapports hebdomadaires sont très bref, certain rivalise avec Moby Dick pour la longueur et l'exhaustivité, mais tous inclus ces éléments:

  • Les chiffres : Où en sommes-nous sur les chiffres clefs et sur leurs progressions ?
  • Faits : Que s’est-il passé d’important, bon, mauvais ou autre, depuis le dernier rapport ?
  • En cours : Quels sont les points importants sur lesquels l’équipe travaille actuellement ?
  • Besoin d’aide : Où pourrions-nous utiliser les compétences de nos investisseurs et conseillers (ex Recrutement, levée de fond, développement du business et de l’entreprise, stratégie) ?

En développant cette règle d’un rapport régulier et léger, le dirigeant peut garder informé ses plus importantes partenaires non-salariées sur les besoins et les priorités de l'entreprise.
Non seulement, cela lui permettra de maintenir une attention soutenue au sein d'un groupe important d’influenceur (qui conduit souvent à des contacts fortuits et des connexions pour le business), mais aussi, cela ouvre une voie de communication naturelle pour  des demandes spécifiques, ce qui complètent et soutient les efforts de l'équipe en  interne.

2. Tableaux de bords automatisés et accessibles depuis le web 
Comme notre portefeuille est composée d’entrepreneur très « geek », ils ont tous fait des trucs d’enfer concernant les processus d'affaires les plus importantes.

Grâce à un petit effort supplémentaire, la plupart ont également construit des tableaux de bord privés, mais accessible à distance, qui donnent à des « initiés », d’un coup d'œil, comment la société se comportent au travers de ses indicateurs de performance clés.
Les meilleurs élèves de la classe ont été jusqu'à automatisés  l’envoi d’e-mails quotidiens qui fournissent un instantané des dernières 24 heures sur les éléments-clés financiers et les mesures du client.

Le plus « confortable » pour un PDG est de partager des tableaux de bord internes, plus les employés et les partenaires sont informés sur les éléments clef de l'entreprise et ses tendances, mieux c’est.
Cela peut être difficile quand les choses ne vont pas si bien, mais c'est extrêmement motivant lorsque l'entreprise est en progrès, et (peu importe comment les choses vont) cela sert aussi de rappel quotidien sur l'engagement de la direction dans une  culture de la confiance et la prise de responsabilités.

3. Point régulier en “face-to-face” ou téléphonique avec les “parties prenantes” 
Les e-mails et les tableaux de bord sont très bien, mais rien ne remplace pas les rencontres régulières, en face-à-face, pour maintenir la dynamique émotionnelle et relationnelle complexe qui existent entre les équipes fondatrices, employés, investisseurs et conseillers.

Lorsque vous dirigez une entreprise en pleine croissance avec des ressources limitées, que votre cerveau est en ébullition toute la journée et que vous veillez tard dans la nuit sur des trucs dont vous avez besoin pour faire face maintenant, il peut être difficile de prendre le temps nécessaires pour les conversations imprévues et spontanées avec quelqu'un qui ne fait partie du chemin critique de la journée.

Mais les fondateurs qui prennent le temps d’approfondir ces relations – qui s'efforcent d'atteindre [les personnes] de manière proactifs, même quand ils n'ont pas besoin de rien, qui sont présent à des dîners et des événements, et qui tente de connaître toutes les personnes qui touchent et influencent leur activité humainement - ce sont ceux-là qui ont tendance à tenir la barre dans les moments vraiment difficiles dans leurs affaires (et vies personnelles)  avec le plus de succès.

4. Une promotion active de ce que font les membres clefs de l’équipe
Tous les traits de caractère et les habitudes énumérés ci-dessus sont la mise de table minimum  pour un PDG de startup compétents – si vous ne les avez pas, mon conseil serait de commencer à réfléchir à la manière, et dans quelle mesure, vous voulez les ajouter à votre routine de management.

Mais la plus grande marche à franchir pour le fondateur/PDG - en particulier ceux qui n'ont jamais été dans une position de leader dans le passé - est la transformation pour le devenir.
Une première indication de cette capacité, c'est quand les fondateurs commencent à embaucher des gens qui sont nettement meilleur qu’eux dans un domaine d’importance critique de l'entreprise, en leurs faisant confiance et en leurs donnant une bonne part de responsabilité.

Un signal encore plus fort : c'est quand le fondateur prend soin d'attirer l'attention sur la performance ou les contributions des autres membres de l'équipe dans des zones qu’ils contrôlaient par le passé. C'est une chose d'avoir la confiance nécessaire pour engager meilleur que vous - c'est une autre d’attirer l'attention de vos investisseurs sur ce point, et savoir qu'ils vous apprécient d'autant plus de construire une équipe qui peut mener l'entreprise encore plus loin.

Quel est le coût de la transparence ?
Les startups sont d’avantage conscientes du « coût d'opportunité » que n'importe quel autre type d'organisation - il n'y a jamais assez de temps, d'argent ou de main-d’œuvre pour faire tous ce qui doit être fait, et chaque choix nécessite un compromis douloureux entre les myriades d’autres choses qui reste à faire.

Dans ce contexte d’arbitrage brutal et quotidien, Les activités imprévues, non-structurées - incluant la plupart de ce que j'ai décrit ci-dessus - sont les premiers à disparaitre.

L'argument que j’essaye de faire passer de mes conversations d'aujourd'hui - et je suis maintenant en de me relire et de corriger soir - est que les petits, mais constants investissements en matière de transparence, sur le développement des relations et dans l'équipe de développement sont les fondations de la création de valeurs dans votre organisation.


Rien de tout cela ne semble évident sur le moment, mais au fil du temps, une connaissance approfondie, une meilleure compréhension et une intensité dans les relations que cette transparence, dépassera largement la valeur des chèques que vos investisseurs ont faits pour financer votre entreprise.

Cela ne signifie pas les choses n'iront pas mal - je peux pratiquement garantir qu’elles iront mal - mais lorsque cela arrivera, les fondateurs qui ont fait ces investissements auront une armée qui les épaulera  au lieu de leur mettre le couteau sous la gorge.

vendredi 17 février 2012

Test Manager : Trucs et actuces

Après notre session des TechDays 2012 : MS TechDays 2012 - Mise en place d'une usine logicielle avec TFS et Test Manager 2010, et suite aux questions de fin de séance, nous avons eu l’idée de collecter les différentes « bonnes » pratiques ainsi que les trucs et astuces au sein de notre équipe de test.

Merci à Jean Dieu (QA Manager) et Marc Huhardeaux qui sont les auteurs des conseils ci-dessous

Recommandations générales
Stratégie des tests
Dans le Test Manager, séparez les tests de bases des tests fonctionnels.
Tests de base
Les tests de base regroupent :
  • Tous les ‘clics’ possible sur un écran de l’application 
  • Chasser toutes les erreurs de type « erreur 404, 403, … »
Ce qui revient à parcourir l’ensemble des écrans de l’application. Ainsi nous sommes sur que l’utilisateur final n’aura pas d’écran non désiré (écran d’erreurs, mauvais écran,…)
Tests fonctionnels
Les tests fonctionnels regroupent
  • Tous les points fonctionnels décris par la maitrise d’ouvrage
  • Valider le comportement  correct de chaque point
Conclusion
Ce qui revient à valider l’ensemble des comportements et le résultat obtenu.
Cette stratégie possède un avantage certain, les tests de base peuvent être intégrés dans le Build, car nous considérons que l’apparition d’un écran d’erreur ou d’un écran non désiré est inacceptable pour le client/utilisateur final.
Alors il restera ensuite que les tests fonctionnels à passer.

Pratiques 
  1. Faire un découpage au maximum des actions. Ainsi les méthodes générées sont réutilisable par la suite.
  2. Construire une base de données pour les jeux de test
  3. Exiger de la part des développeurs des Identifiant Unique à chaque élément cliquable de l’application
    1. Si l’application change de forme -> Pas de codage à refaire
    2. On est sûr de tester le bon élément
    3. Déclarer comme Bug, tout élément cliquable sans identifiant
  4. RIEN NE DOIT LAISSER INDIFFÉRENT ! Une faute d’orthographe, un mauvais alignement ou un comportement erratique…
  5. Avant de commencer les phases de tests il est préférable d’installer Visual Studio 2010 feature pack 2, ce qui permettra d’apporter plus d’options pour les phases de test.
    1. Ce pack permettra de pouvoir modifier avec facilité les noms des méthodes déjà enregistré.
    2. De pouvoir les supprimer
    3. De pouvoir déplacer les méthodes vers le fichier Uimap.cs afin de pouvoir coder à l’intérieur de ses méthodes, car dans certains le codage et obligatoire lorsque l’on veut effectuer certains cas de test.
Us et coutumes
Le piège est donc de rester enfermé dans ses habitudes d’internautes et de se contenter du rendu d’un seul navigateur. Avec 2 moniteurs différents il est possible d’ouvrir sur chacun une session avec un navigateur différent, et de tester alternativement sur l’un puis sur l’autre ce qui permet en plus de rester bien mieux conscient de ce que l’on fait
Découverte d’un BUG
Le piège est de ne pas anticiper sur la correction d’un bug même mineur et de ne pas être assez explicite sur ce que j’attendais dans la correction.
Exemple : on repère un indicateur oublié et on le signale. Se contenter de signaler une erreur sans donner une ébauche de solution ou de comportement complet attendu n’est pas suffisant, car la correction du BUG peut très bien (fréquent) ne pas répondre à 100% à ce qu’on désire, ainsi cela induit une perte de temps
Spécifications
Le piège est de traiter à la légère les éventuelles spécifications de développement. S’il est écrit que tel ou tel chose doit être faite, même en dépit du bon sens, il faut s’assurer ensuite que cela a été fait.
Nous ne sommes pas les utilisateurs finaux du produit, et peut-être que cette fonctionnalité inutile pour nous ne l’est pas pour l’utilisateur. Et en cas de doute, il ne faut jamais hésiter à déranger ceux qui ont la réponse : c’est pour eux que l’on travaille.

Tips
Astuce pour le calendrier javascript FullCalendar
Pour automatiser un test sur le calendrier
  1. Enregistrer l’ensemble des actions nécessaires sur le JQuery dans une seule capture.
  2. Copier cet enregistrement dans le fichier de classe partiel UIMap.cs
  3. Modifier la méthode pour qu’elle fasse ce que vous souhaitez.
  4. Appeler cette nouvelle méthode pour effectuer les actions.
Gestion des décalages d’une semaine (en positif et négatif).  
  1. Mis en arguments de « ma fonction » 
    1. un élément date (sous forme de string)
    2. un booléen disant si j’effectue un décalage ou un retour en arrière
    3. un entier indiquant le nombre de jours (valeur par défaut fixée à 7).
  2. Dans les modifications  de la fonction,
    1. Vérifier s’il s’agit d’un changement
    2. Ensuite Vérifie qu’il n’y a pas eu de changement de mois (Important).
    3. De la nouvelle date, on récupère le numéro du jour qui nous servira pour déclencher l’action correspondante.
En affinant la partie gestion de la date, il est possible d’affiner encore plus le changement de date.

Astuce pour les éléments JQuery
L’enregistrement d’actions sur des éléments JQuery peut se faire de deux manières
  1. d’un seul tenant
  2. action par action indépendante
Préférez la solution 2 car en choisissant d’enregistrer chaque action de manière  indépendante dans un enregistrement voici les avantages :
  1. La forte ré-utilisabilité
  2. Le déroulement de l’ensemble des actions concernées est plus rapide que pour l’enregistrement d’un seul tenant.

Convention de nommage

Cet aspect représente un point central pour le bon déroulement lors de la phase de création de test. Pensez avant même de commencer à votre convention de nommage, car le découpage va vite générer beaucoup de méthode
Il est préférable d’avoir un nom à rallonge qu’un nom peu explicite, il est plus aisé de comprendre « une phrase ». Car au moment de passer dans le Test Manager, lors de la création du plan, on s’y retrouve facilement.
Exemple : on a 2 pages web : Accueil et Login.
Nous avons codé l’action « transition » entre la page « Accueil » et « Login ». Cette méthode (généré par Visual Studio) est nommée : TransitionPageAccueilVersPageLogin

Nous mettrons cette rubrique Tips à jour régulièrement

mardi 7 février 2012

« On arrive bientôt ? » ou la maitrise du temps et agilité


Préambule : Ce post est la traduction d’un autre post d'Aaron Bjork Principal PM chez Microsoft.
Merci à Visual Studio Magazine et Aaron de m'avoir autorisé à traduire et publier cet article

Article original : Remaining Work is Key for Agile



Aaron Bjork nous explique pourquoi le travail restant à faire est la mesure la plus importante sur nos projets agiles.

L'été dernier, avec ma famille, sur la route des monts Cascade, dans l'État de Washington, nous avions six heures de route devant nous.
Pour ceux d'entre vous qui ont une famille, vous savez que six heures, c'est long en voiture, notamment avec des enfants âgés de 6, 7 et 9. Nous étions sur la route depuis environ 30 minutes quand ma fille de 6 ans, Lily, me pose la question, que tous les parents ne connaissent que trop bien : « on arrive bientôt ? »

Calmement, Je lui réponds  «Non, nous n’y sommes pas encore », Lily me rétorque  «Combien de temps encore ?"
Cette conversation, je suis sûr que tous les  parents l’ont eu.

Après ce voyage, j'ai réfléchi sur l'interaction avec ma fille et j’ai réalisé qu’il y avait un vrai parallèle avec le suivi des projets logiciels. Ma réponse à Lily était assez simple. Quand elle a demandée combien de route il restait, je lui ai donné ma meilleure estimation de la quantité en temps de route restant : cinq heures.

Sans surprise, elle n'était pas particulièrement heureuses de cette réponse, cinq heures, c’est un temps long quand on a 6 ans.
Dans le même temps, la réponse était satisfaisante car elle définissait correctement ce qui nous attendait. Elle peut ne pas aimer le fait que nous avons encore cinq heures de route, mais au moins elle est informée et peut anticiper le reste de l'après-midi.

A partir de là, notre conversation aurait été complètement différente si j'avais répondu par : «Nous voyageons depuis 30 minutes".
Elle m’aurait probablement regardé  d’un air curieux. Elle n'était pas particulièrement intéressée par la distance parcourue. Cela ne répond pas à sa question. Elle veut juste savoir quand nous arriverons à notre destination. Elle voulait savoir combien de temps encore elle devrait rester dans la voiture.

La réponse « 30 minutes de conduite » est de nature à souligner notre effort, mais ne lui donne aucune réel appréhension de « quand arriverons-nous ? », « en avons-nous encore pour 1 heure ? », « pour 10 heures ? »

Les équipes de développement ont ce genre de conversations lors de la discussion autour des tâches restant à faire et du travail que cela représente.

Je sais que l’estimation des temps fait partie du quotidien de des équipes de développement.
C'est même une partie importante et essentielle du processus.
L'estimation fournit un point de départ qui peut être utilisée pour commencer à avoir des indicateurs de progression. Sans l'estimation, l'équipe avance à l'aveuglette.
Toutefois, Je vois beaucoup d'équipes accorder trop d'importance estimations, tout en oubliant le point le plus important : le travail restant.
La plupart des équipes sont conditionnés à suivre trois indicateurs:
  • Les estimations originales
  • La somme des travaux réalisés
  • La somme des travaux restant
Je crois qu'il y a une place pour chacun de ces trois points dans un projet, mais je dirais qu’un seul compte vraiment : le travail restant.
Pourquoi ? Le travail restant est le seul indicateur qui aide l'équipe à mesurer la distance qui les sépare de la ligne d’arrivée.

Les estimations
Démarrons avec le suivi des estimations. L'argument commun pour le suivi des estimations initiales, c'est qu'il permet à l'équipe au fil du temps à améliorer leur capacité à estimer.
Il est assez commun de vouloir revenir sur l’estimation des tâches et de les comparer avec le temps passé à réaliser ces tâches. Le problème avec cette approche est qu'elle met l'accent sur la précision de l'estimation, au lieu de se concentrer sur l'accomplissement de la tâche.

« Agile » nous dit que les choses vont changer en cours de développement. C'est une partie normale du processus. A cause de cela, les estimations ne devraient pas être parfaites.

Rappelez-vous: l'objectif est de terminer le projet et offrir de la valeur aux clients.

Le but n'est pas de produire des estimations parfaites. 

Je ne prétends pas rejeter les estimations ou de mal faire le travail d’estimation. Je dis plutôt qu'une fois une estimation créée, l'équipe devrait focaliser son attention sur le travail restant. L'estimation est juste le point de départ pour savoir combien de travail il reste.

Travail Terminé
La plupart des équipes réagissent mal la première fois qu'on leur demande de laisser tomber l'indicateur "travail achevé".
Ils l'ont suivi de près pendant des années et sont formatés pour y faire attention. En réalité, suivre le temps de travail terminé n’apporte rien à la réussite du projet. Qu’importe si l’équipe a terminé en 100 heures de travail, sur 150 heures nécessaires au respect de son engagement. Ce qui est important, ce sont les 50 heures restantes.

Se focaliser sur le travail accompli peut conduire à un jeu dangereux, où l'équipe commence à plus se concentrer sur ses efforts, plutôt que sur son résultat.
Encore une fois, je ne dis pas que suivre ce qui se fait n'est pas important. Les équipes doivent absolument suivre ce qu'ils ont fait et se réjouir de l'achèvement de chaque élément du Backlog.

Mais ne laissez pas ce suivi détourner l'équipe de son but.

Revenons à mon voyage en famille l'été dernier.
Finalement, il nous a fallu près de sept heures pour arriver à destination. Et quand nous sommes arrivés, nous étions tous ravis et prêts à profiter de nos vacances.
Personne ne se souciait plus que mon estimation de cinq heures était un peu sous-évaluée. Nous avions décidé, à mi trajet, de nous s'arrêter pour prendre un repas et aussi de voir quelques curiosités le long du chemin.
Après notre départ, Il y a eu des changements, et nous nous sommes adaptés à ces changements.

Nous étions arrivés, voilà ce qui était important.