Retour d’expérience sur la méthode « The Secret Weapon »

"The Secret Weapon" est une méthode de gestion de tâches expliquée sur son site: http://www.thesecretweapon.org/
Outre son nom très "à l'américaine", cette méthode peut s'avérer très efficace et surtout très structurante.
Elle est basée sur l'utilisation de ses mails, d'Evernote et de GTD (Getting Things Done)

TSW
Après quelques mois d'utilisation, je vais passer en revue ses principes, ainsi que les avantages et limitations que j'ai pu découvrir

L’interface fluide : vers un code orienté métier

Introduction

La maintenabilité d'une application dépend fortement de la lisibilité du code source sous-jacent. Cette lisibilité peut être améliorée par : 

  • l'introduction (mesurée) de commentaires dans le code
  • la présence sysématique de Javadoc
  • la vérification automatique à l'aide d'outils comme CheckStyle et PMD (règles de nommage, mesure de complexité...etc)
  • la revue de code effectuée par un développeur tiers

L'objectif de ce billet est de présenter une technique supplémentaire permettant d'améliorer la lisibilité du code : l'interface fluide

Exemple

public class Person {
    
    private String firstName;
    private String lastName;
    private Person father;
    private Person mother;
    public void setFirstName(String firstName){
        this.firstName = firstName
    }
    public void setLastName(String lastName){
        this.lastName = lastName
    }
    public void setFather(Person father){this.father = father}
    public void setMother(Person mother){this.mother = mother}
  
    //Getters volontairement omis pour plus de clarté
    ...
}

Ceci est une classe Person pouvant servir d'entité dans une application d'arbre généalogique. Créons un objet de ce type : 

//La personne
Person person = new Person();
person.setFirstName("Youri");
person.setLastName("Gagarine");
//Le papa
Person father= new Person();
father.setFirstName("Alexeï");
father.setLastName(" Ivanovitch");
//La maman
Person mother = new Person();
mother.setFirstName("Anna");
mother.setLastName("Timofeïevna");
//La famille
person.setFather(father);
person.setMother(mother);

Premier constat : ce code est verbeux. On aimerait qu'il ressemble à : 

//La personne
Person person = new Person().setFirstName("Youri").setLastName("Gagarine");
//Le papa
Person father= new Person().setFirstName("Alexeï").setLastName("Ivanovitch");
//La maman
Person mother = new Person().setFirstName("Anna").setLastName("Timofeïevna");
//La famille
person.setFather(father).setMother(mother);

Notre code est désormais à la fois moins verbeux et beaucoup plus lisible. Même une personne non-technique pourrait lire : 
  • Créer  une première personne dont le prénom et le nom....
  • Créer  une deuxième personne dont le prénom et le nom....
  • Créer  une troisième personne dont le prénom et le nom....
  • Lier la première personne au deux autres à l'aide des liens de paternité et de maternité.
Pour pouvoir bénéficier de cette "expressivité", il suffit de modifier les setters de la classe Person afin que chacun de ces setters renvoie l'objet this

public class Person {
    .....
    public Person setFirstName(String firstName){
        this.firstName = firstName; 
        return this;
    }
    public Person setLastName(String lastName){
        this.lastName = lastName;
        return this;
    }
    public Person setFather(Person father){
        this.father = father ;
        return this;
    }
    public Person setMother(Person mother){
        this.mother = mother ; 
        return this;
    }
    ...
}

Ici, on renvoie l'objet this mais rien n'empêche de renvoyer un objet d'un autre type. L'objectif de cette approche est de concevoir une API centrée sur le métier de l'application que l'on désire développer (Domain Specific Language). A titre d'exemple, L'API Criteria dans JPA 2.0 utilise cette technique pour construire les requêtes.

Conclusion

L'interface fluide aide à concevoir un code concis et orienté métier.

Références

Lean Management : les 7 principes

Dans notre étude sur les apports de la méthodologie Lean prodiguée par le couple Poppendieck et son influence sur la méthodologie Agile, nous nous trouvons face à sept principes à respecter afin d'améliorer la valeur ajoutée de la production logicielle :

  • l'élimination du gâchis (1)
  • la création de la connaissance
  • la construction de la qualité (5)
  • le report de l'engagement (2)
  • les livraisons rapides (3)
  • le respect des personnes (4)
  • l'amélioration du système

Reprenons quelques principes qui nous semblent avoir un lien de parenté avec les principes agiles.

Les Poppendieck : une source d’inspiration de la communauté Agile

C'est en lisant un billet récent sur le site de Martin Fowler répondant à la question "I'm thinking of using agile software development - but should I use Lean software development instead?", que je me suis mis à m'intéresser au Lean software development.

Ce papier super intéressant rappelle les influences des méthodes "Lean" issues du secteur automobile japonais sur les développements "Agile".

Un petit tour sur le site du couple Poppendieck offre au visiteur quelques principes "Lean" et invite à les comparer avec les principes derrière le Manifeste Agile.

Nous tenterons de cerner les points communs et les divergences.

A retenir, Martin Fowler et Jez Humble animeront un webinar le 28/07/08 sur la gestion des mises en production à la sauce 'Lean' autour du nouveau produit 'Cruise' de la société ThoughtWorks.

A suivre...