Monday, October 22, 2012

Yes, I code in underwear @home

As requested by my foreign colleagues/friends, Here is a translation of this article in English with a bonus at the end.

I'm currently on a long mission to a foreign customer that I do at home. This is usually called the "home working".

To reassure the sensitive souls, I do not really code in underwear, it's a picture. I could code in underwear :-)

I had not necessarily planned to write an article about this way of working but whenever I talk about the subject with friends or acquaintances, they feel curious and full of questions. I think that if it so interested, it means that i have to share my experience.

Here are the questions that come up most often:
  • It's not hard work alone all the time at home?
  • Me, I'll probably distracted. You can stay focused and be effective?
  • How do you do with the family?
I will try to answer these questions by offering my thin feedback on the subject.

I said I'm working at home today because it is that the mission wants. It was not a desire on my part, it is an just an opportunity.

The beginning

It all began with an email, which read quickly can give something like :
mission, overseas customer, all in English, home working, scrum, team with experimented people, moving every 3 weeks.

I quickly wanted to know more because I was just available and then after some discussion : GO. There is a part of unknown to be accepted, it is like that, that's life. You have to trust.

It's Tuesday I was told that begins on Thursday through skype Thursday morning.

General warning: how I'm going to organize the house: -)

I do not need a lot of thing to work, a piece of chair, a piece table, a laptop, internet and a bit of calm. It is just on this point that I must organize myself a little because at home I'm not alone, there are wife and children. I did not want to disturb or to feel that i disturb and vice versa.

I need a "quiet corner". It is not possible for me to have a room dedicated to serve me office. So I created a corner in my bedroom in front of the window. Hop, the bedroom will be the day my office.

Wednesday will be devoted to me set up an office in my bedroom. And then I get an email with all the access client (vpn, mail, forge, ....). Default: it works, I have access to everything, I have the right to do everything ...No, no, this is not a dream, it is sometimes ;-).

Thursday morning, it's started : "Hello, good morning guys!"

Daily : "We are quite flexible"

I find that I'm part of a fairly large team including members of different nationalities which are working at home like me. Even the ScrumMaster is a freelance working like all others!

Shortly after starting, I talk with another team member. As I discovered how things work, I foolishly talked about the scheduling, "online", time everything. I find myself stupid asking questions starting with "what if" and all the answers were: "we are quite flexible" ... The idea is really to "do the job" and having to take time off to go or if it does not really matter. Everything is based on trust.

That it brings me daily: real flexibility. It is nice to occasionally pick up my first daughter at school, be able to go to an appointment in people / shops / institutions whose only opening hours are 9:00-12:00/14:00-18:00. (finally, it is the things that I enjoy rarely but it's nice to know that you can do).

It is also nice to be able to do some sport start at home and take it easy a real shower in my bathroom. I do not need to take portuguese shower (I never practiced but it exists ;-))

Even more rarely, there is the nice side to occasionally to have Rolland Garros or the London Olympics in a corner of the room.

I work alone at home like a bear?

So yes in the morning and in the afternoon I am physically alone in my office. 

In contrast: 
  • I am virtually overconnected with the team I work with. Skype is the tool I use to communicate in real time either through chat, audio or video.
  • 10:00AM is the hour of our daily scrum meeting. Screen sharing + conf call where I talk to the team.
  • There is a global chat in which each team puts his mood, says what he does in or out of work, this brief provides a sense of community and closeness.
  • We meet every every 3 weeks to complete the sprint (review ans restrospectrive) and restart a sprint (sprint planning, planning poker, ...). These are one or two working days pretty intense because it concentrates all the Scrum rituals but it also gives the opportunity to see, discuss, exchange, joking and to take a real coffee break with real colleagues; -).
This is, to justify the side "I'm not alone when I work at home" but it's true that I do not see real people "IRL" ;-). So why to avoid finishing as a bear coding in my bedroom :
  • I often see friends and colleagues to eat lunch with them.
  • I am part of Ch'ti JUG , which allows me to cross the world and interact with other fans in the region.
  • I go to conferences like Devoxx or Devoxx France to share with passion but also a little further.
  • I try to exile from home on Wednesday for not be shy interfere with wife and children are at home this day. I take this day to work with people who are willing to welcome me (Thanks also to Thibaud and Antoine of Onyme for welcoming me into their office, it was really nice, guys!) or in a friend who joined me in the same home working adventure.
I had to search long enough to find negative side but it was for my feedback to be more objective :
  • The coffee break is not really a coffee break. It is sometimes lacking and sometimes I look at the time, it's noon and I have not felt the need to take a coffee break. It depends.
  • My coffee machine has clearly not taken the load. I had to change :-)
  • I sometimes feel out of step with my friends and former colleagues who mostly work computer services company or with local software editor. Being freelance also participates this offset :-). It's not really a negative but I feel sometimes that I pass for an alien. The problems that we encounter everyday are no longer the same.

Am i more or less productive?

I'm actually quite surprised when I talk about this type of work sometimes when the reaction is "uh, I'd be too tempted to be distracted and do something else." I do not know how to answer that question ... I say that in general, it's the opposite. It's probably because my job is a passion ... Rather it is my wife who set limits to stop me :-) 

I'm clearly more productive at home. I have my tools and calm. The important thing when working at home is that you can choose yourself the conditions that allow it to be productive. We add to that the fact of not having travel time to get to his workplace. We will say minium 1 hour per day back/forth. It is a real gain. 

"Anyway, I'm more productive."

Separating private life / professional life

Not knowing this way of working, I preferred default impose a few rules in the house to separate the things and put barriers: 
  • When I work at home, it's as if I was not at home. I'm not Tony Micelli able to take care of the house.
  • The door to the bedroom / office represents the separation private / professional. When it is closed, do not go without knocking at the door and wait until I say it's OK. It's not that I want to play Boss inaccessible but this is the only way to predict if I'm online, perhaps with the video and I can not answer.

So I applied these default rules within the family. It is rather funny to see how the children have experienced change and have integrated. "Dad, you're working in your office in your bedroom today?". It's also pretty funny to 04:30-05:00PM hear knock-knock and have his children come say hello after school. I began to relax the rules, but it comes from me. Finally let's be clear, I'll never compete with Tony Micelli! 

A short conclusion would be fine here

When people ask me if it's okay, I replied that:

That's terrific!

I think that says it all. I am clearly aware that this way of working may not suit everyone and every business. In my case, it's cool.

One more thing... 

Writing this article triggered a massive release of office pictures of team member. Here is a nice sample of what can be done to work at home (thanks to them to allow me to share that!). I think but i'm not sure that there are one or two fake. It's up to you to find them ;-) :

Tuesday, October 16, 2012

Scrum distribué : yes we can!

On parle beaucoup de Scrum, beaucoup en bien et beaucoup en mal. Scrum, ça fait parler les gens :-)

Du côté de ceux qui croient en Scrum, On (oui je me mets dedans évidemment) est tous a peu près d'accord sur le fait que Scrum, ça marche bien bien dans des contextes locaux où tout le monde est dans la même pièce. Les outils liés à Scrum sont d'ailleurs orienté pour fonctionner localement avec le fameux tableau blanc, des murs de post-its partout.

A chaque fois qu'on parle de Scrum distribué, tout le monde s'arrête de respirer. Ceux qui ne croient pas en Scrum se mettent à rire et même ceux qui croit en Scrum ont dû mal à croire que ça puisse marcher.
"Quoi ton PO n'est pas dans la même pièce que l'équipe!"

On pourrait d'ailleurs distinguer deux types de distributions :
  • distribution partielle : l'équipe est locale mais est distante du product owner

(scrummaster, team member, team member, ...) | (product owner)

Ce modèle fait penser à un modèle "offshore agile" (les extrémistes de Scrum sont déjà en train de s'étouffer car j'ai osé associer ces deux mots :-))

  • distribution totale : tout le monde est distribué
(scrummaster) | (team member) | (team member) | (...) | (product owner)

Comment ça, ça ne peut pas marcher?

Il se trouve que je travaille actuellement dans une équipe qui fait du Scrum totalement distribué et ça fonctionne plutôt pas mal...

Comme je suis sympa, je vais même vous dire quels sont les facteurs qui font que ça marche dans notre cas :

facteur n°1 : Des profils costauds

L'ensemble de l'équipe est constitué de "profils costauds". C'est à dire des gens intélligents, passionnés,  avec de l'expérience, autonomes, impliqués, communiquant et sachant prendre les bonnes décisions avec le minimum d'informations.

Ok, je pourrais presque arrêter l'article là. On pourrait peut être même faire du "waterfall" et peut être que ça marcherait :-). 

En tous cas, c'est un des facteurs de réussite de Scrum distribué : choisir et être exigent sur les profils qui feront partis de l'équipe. L'idée dans ce cas est de plutôt partir à la chasse, chercher des gens connus  plutôt que de publier des offres de missions sur Monster.

On dit souvent que le problème se trouve souvent entre la chaise et le clavier :-). Le développement logiciel est avant tout une histoire de personnes.

Tout découle donc de là. Si on a les bonnes personnes, on avance dans le bon sens... Ca parait évident mais il faut simplement parfois le dire (même si ça peut choquer un peu).

facteur n°2 : par défaut, on fait confiance

Une attitude qui n'est pas toujours facile à avoir dans les entreprises en france. Je ne sais pas à quoi c'est dû et je ne vais d'ailleurs pas essayer d'y répondre. En revanche, je constate que souvent "par défaut tu n'as le droit de rien faire, pour ne pas faire de bêtise".  Il apparait toujours dangereux de responsabiliser les gens alors que je trouve que c'est une des clé de la réussite. C'est vrai que c'est toujours dangereux quand les gens se responsabilisent, se mettent à réfléchir, prennent des initiatives ;-)

Pour en revenir à notre Scrum distribué. Le premier jour où j'ai commencé cette mission, j'ai eu tout mes accès (même certains auxquels je n'avais pas besoin), par défaut je pouvais tout faire, par défaut "j'avais les droits", par défaut on m'a fait confiance. Quand on est tout seul dans son bureau à distance, sentir cette confiance est un facteur de réussite pour faire du Scrum totalement distribué. Evidemment, c'est plus facile grâce au facteur n°1.

facteur n°3 : Des outils fiables

Comme tous le monde est distribué, il faut de bons outils pour communiquer. Ils sont ultra présents pour donner l'impression de proximité.

Nous utilisons alors :

  • Skype pour faire du chat : plusieurs espaces de discussion sont à disposition (tout le monde, juste mon équipe,...), 
  • Skype aussi pour les communication audio et video.
  • Netviewer pour faire du partage d'écran.
  • les mails pour laisser des traces.
En terme de forge logiciel, nous utilisons :
  • une solution VPN plutôt stable (quand le VPN tombe, il est remonté dans la 1/2 heure).
  • une version de redmine modifiée à la sauce Scrum.
  • Subversion comme gestion de sources.
  • Hudson comme serveur d'intégration continue.
Bref, du très classique mais qui fonctionne avec une gestion des utilisateurs plutôt simples.

Le manifeste Agile dit : "Individuals and interactions over processes and tools". Dans le cas d'un scrum distribué, il faut justement des outils pour mettres en avant les individus et les interactions ;-).

facteur n°4: Un product owner super héros

D'habitude, je n'aime pas les super héros en informatique car en général ça se traduit par si le super héros n'est pas là, on ne peut rien faire. Comme c'est de toute façon le cas lorsqu'on fait du Scrum avec un product owner, ça ne me dérange pas ;-). 

Un des facteurs clé de succés est d'avoir un Product Owner qui sache clairement ce qu'il veut. Je ne dis pas qu'il ne peut pas se tromper car Scrum est fait pour ça. En revanche, c'est clairement lui qui doit donner les directions à chaque Sprint et être le guide de l'équipe sur ce qui est à produire.

Il faut qu'il ait totalement confiance en son équipe encore plus quand celle-ci est distribuée. Evidemment, c'est plus facile grâce au facteur n°1.

facteur n°5 : Des réunions incontournables tous ensemble

Un des facteurs clé de succès qui fait que notre Scrum totalement distribué fonctionne est qu'il y a malgré tout des éléments incontournables qui se font localement tous ensemble.

Nous avons des sprints de 3 semaines et nous nous rencontrons pendant 1 à 2 jours pour effectuer de manière intense :
- la fin d'un sprint : démo et retrospective
- le début d'un nouveau sprint : sprint planning, planning poker, ...

C'est assez dense et pour ne rien oublier, en général on "plan the plan" (on planifie le plan) :

Certes cela fait perdre du temps et donc de l'argent car tout le monde voyage pour se retrouver dans un même lieu. En revanche cela en fait ensuite gagner. Faire ce type d'échange de façon distribués prendrait plus de temps que le temps perdu à se regrouper et serait moins efficace.

Une fois de plus le développement logiciel est avant tout une histoire de personnes. Si les personnes se connaissent "IRL" tout devient plus facile.

Ces rencontres tous ensemble sont aussi l'occasion de construire et d'entretenir un esprit d'équipe, de parler d'autres choses que les projets et de pourquoi pas aller manger un bon fish&chips ;-)

Ce qui marche moins bien

Il y a évidemment des choses qui fonctionnent moins bien.

Daily Scrum trop long :

Nous effectuons tous les matins un daily scrum distribué via skype + partage d'écran netviewer du ScrumMaster pour que tout le monde ait le "focus" sur les mêmes choses. Une des problèmes assez récurrents est qu'il est vraiment difficile de le timeboxer. Le DailyScrum a tendance a durer longtemps.

Papier vs Logiciel de ticket

Nous travaillons de manière distribué avec un système de ticket "numérique" alors que nous nous rencontrons et travaillons sur des post-its localement durant les sprints planning.
La préparation du sprint planning prend alors un peu de temps de préparation pour passer de la version, numérique à la version papier. De la même manière la mise à jour du système de ticketing est juste long et ennuyant...

Sprint planning parfois un peu court

Nous avons parfois du mal à tout boucler lors de nos sprint planning, nous devons dans ce cas le terminer de façon distribuée.

 Pour conclure

Je vous propose une fois de plus mon humble retour d'expérience sur le sujet. Un simple retour d'expérience d'un Scrum distribué qui fonctionne.

Attention :  Ca ne veut surtout pas dire :

  • que si vous faites exactement la même chose, ça marchera
  • que si vous faites différemment ça ne marchera pas