mercredi 29 septembre 2010

About craft in IT

Throughout my career and in particularly during my interviews, I met people who would consider IT like a craft activity. The difference between Craft and Industry is less in the quantity than how to make.

A craftsman makes masterpiece for each customer and a manufacturer produces consumer goods. This difference shows an important perspective on the way to work. A manufacturer produces objects which have to satisfy to the bigger number. A craftsman makes a particular object for a specific person.

In IT, a wrong idea is to think that the software is a masterpiece but it is a usual illusion for many reasons. First, the programmer thinks he is the first to solve the problem. Even if it is a new case, the elements of the problem already exist. It is enough to analyze and to factorize the problem to know the solution already known. The programmer’s work consists more in assembling permanent solutions to create quality software, than to rewrite algorithms that other validated before. Second, software is not for a specific use but it is an ordinary tool. Another illusion is for the customer. He often thinks his problem is specific, but his problem is mostly the same of his competitors at less. Finally, IT is an engineering work where the true difficulties are in the understanding the customer’s needs.

Another difference is about economical aspect. An IT firm must respect two principal constraints: cost and delay. Unlike a craftsman who realizes a masterpiece, the means are limited.

Quality also has a different meaning. For a craftsman, it is intrinsic because he works for a unique customer. For a manufacturer, it is a more complex idea because it works for customers and users which have different needs and targets. They all work towards the success of the company but the constraints of their works are not the same.

The IT as an industry must satisfy customers and users. An additional problem arise, the users don’t have the same needs. During the analysis of the needs of the users, the correct definition of the roles of each user is very important and to understand the need of each role. Indeed, in all company, it is necessary to forget people because they change quicker than the role. Each role defines precise duties. Some people can have some roles. A role expresses the job of the user and is shared by many companies. Some role exists in all company.

A classic problem for IT companies include Software Engineering Company, software editor is to focus to the technology. They must follow the technologic changes which are difficult because they are quick. But it is an illusion because it is often the updating of existing technology. Three real revolutions take place: Object programming, Agile Method and cloud computing because they change the level of abstraction of the job which they concern: programming, the organisation of job and the infrastructure which are fundamentals for IT.

The IT is an industry in its huge majority. Some specific cases exist with few programmers who are often the best. A programmer generally puts together validated components. The heavy analyst’s task is to understand the needs of customers and users. The Scrum Product Owner must obtain the realization of standard functions and in the same time managing the belief of the customer about the specificity of his company.

vendredi 24 septembre 2010

Des bases de l’agilité : L’objectif

La focalisation sur l’objectif est un élément principal de l’ingénierie. La question est de savoir s’il est possible de se focaliser sur l’objectif. Souvent cet objectif est trop grand ou trop flou pour que les membres de l’équipe puissent se focaliser dessus.

Dans le cycle en V, il n’existe aucune définition de la limite d’un objectif. Les bonnes équipes vont choisir des objectifs réalistes et les autres rarement. Les méthodes agiles définissent des objectifs réalistes.

Dans l’agilité, la dimension des stories ou des taches est limitée. Pour les stories, la taille de chaque story a une valeur choisie dans la suite de Finobacci. Seules les story dont la taille est inférieure à 7 sont analysées et peuvent avoir une priorité suffisante pour faire partie du sprint suivant. Pour toutes les autres, soit elles ne sont pas prioritaires, soit elles sont décomposées en sous-story suffisamment petites. Pour les taches, elles ne doivent pas durer plus d’une journée.

La focalisation sur l’objectif est plus facile avec l’agilité car ceux de chaque participant sont plus précis. En particulier avec SCRUM, les rôles de chacun sont parfaitement définis. Les membres des équipes réalisent ou testent le code. Ils connaissent la totalité du projet et peuvent intervenir sur toutes les parties de celui-ci. Le travail en pair programming leur permet de connaitre la manière de travailler des autres membres de l’équipe. La normalisation des règles de codage, de commentaires, et de documentation offre un socle commun de travail. Les membres peuvent se focaliser sur la production d’un code de qualité. Le Scrum Master se focalise sur le respect des règles de l’agilité mais aussi sur les règles qui ont été définies par l’entreprise et l’équipe. Le Product Owner se focalise sur le besoin et les priorités du client. Le client se focalise sur l’adéquation entre le produit et les besoins de ses utilisateurs. Il lui est d’ailleurs recommandé de décomposer ces besoins pour qu’ils soient facilement compréhensibles.

Il est toujours plus facile de se focaliser sur un objectif petit. La dimension fractale d’un projet informatique est souvent oubliée. Lorsque je regarde un projet, je commence par voir des algorithmes, puis à la dimension supérieure des objets qui organisent et exécutent ces algorithmes, puis des packages qui remplissent des contrats, puis des services qui remplissent des contrats plus complexes, puis des applications qui fournissent des services et interagissent avec l‘utilisateur. A chaque dimension, l’analyse, la description ou la réalisation doit demander un travail de moins d’une journée. Cette durée correspond aux temps maximum de focalisation sur un travail précis continu.

L’objectif est le but de chaque membre de l’équipe. Les méthodes agiles proposent une solution pour créer des objectifs dont la taille est réaliste.