These are my notes on the first days of this year’s European Summer School on Agile Programming (Essap.) It is a week-long school on XP and Agile, organized by myself and Federico Gobbo, with the Università dell’Insubria. It’s an event run entirely by volunteers. This is the second edition. Last year was a very successful event for me. I learned a lot, and gained a lot of confidence in my ability to teach and apply XP.
Monday 25 June: Essap starts, finally!!!
One of the things I was afraid of was that the Italian participants would keep speaking Italian, and leave our foreign students and speakers out of their conversations. This did not really happen; ever since the Welcome Pizza on Sunday, English was spoken all around. I’m proud of you!
Monday I arrived at the hotel De Filippi and picked up people. We arrived at the Villa in time for the opening session from prof. Aurelio Lanzarone, the head of the C.S. Dept. of the Insubria University. His speech lasted one pomodoro (that is, 25 minutes. The “pomodoro technique” is a time-management technique invented by Francesco Cirillo, that is fully described in the paper. “Pomodoro” is Italian for “tomato”. The name comes from the use of a tomato-shaped kitchen timer to mark 25 minutes periods. By the way, plural is “pomodori”). After that I gave a talk about values and practices in XP and Agile. I hope my love and enthusiasm for this topic came through; I had many positive comments in the standup meeting the next day. My talk lasted three pomodori, then there was a long pause for coffee.
After the pause, it was the turn of Rick Mugridge and David Hussman. Their talk was about “From Personas to Stories to Story tests.” It was a modified version of their talk about “Executable Documents” which they gave at XP 2007. I can’t express how grateful I am to Rick and David that spent more days away from their families to help our school. Thanks a million, guys! Now I read (most of) Rick’s book about Fitnesse, and I thought I knew a good deal about stories and acceptance tests; was I wrong! For one thing, I learned that a much better word for “acceptance test” is “story test”, which they tell me is an invention of Joshua Kerievsky. It sounds much better, and it’s much easier to pronounce for me. (Now please someone invent a new word for “fixture”, that Italians find almost impossible to pronounce! But i digress.)
Then David and Rick taught us about “personas,” which is a way to invent personalities that are like “characters” in user stories. To define a persona, invent a name and a title. For instance, “Mary the Hopeful” is a user of a job-finding application. Then sketch her face; just don’t draw the usual UML stick figure. Then describe her; what’s her personality? What does she look like? Finally, define what is important for her. This will help you define what stories will be most important for this persona.
The personas technique is very natural once you learn about it. Also the persona are very useful when it’s time to define story tests. It’s much more concise and precise to say “mary does this…” than to say “the job-seeking user does this…”. The personas then will become elements of test fixtures. It all fits very nicely. An example of personas in story tests is in Jamis Buck’s post on integration testing in Rails.
Rick and David used a lot the trick of “pairing” people. I know that managers all around the world take a dim view of “pair programming” (and they’re wrong!) One way to let pair programming in is to take away the word “programming.” In fact, pairing is a very useful thing to do in many activities (ahem.) What David and Rick did was to let us do simple exercises, of no more than 5 minutes, such as “define a persona”; every exercise was to be done in pair, and we were to always look for a different person to pair with. This is very effective in engaging the audience, in having them actually do the exercise well, and in getting to know other participants. One of the exercises was about writing story tests, and then turning them into Fitnesse tests by simply drawing boxes around words.
Writing story tests is one thing I never did. I knew about it in theory, but never got round to actually do it. Now that I saw people who do it well, I’m inspired to do it for real. It’s been the same for me with unit testing, with agile planning, and other things: I knew about them, but didn’t “grok” them. Kent Beck also describes this, when he pairs program with people who say “so you *really* never write code without a failing test?!?” :-)
Another thing I got from their session was how interactive they could make it. They made me feel like my style of making speeches is that of a penguin robot, never engaging the audience in doing anything. They got beyond the usual “how many of you have heard about X”. They actively encouraged people to interrupt with questions, saying that they would regard it a bad smell if noone interrupted :-)
Finally, I got the real sense of a community. These two persons are highly successful consultants and they did volunteer for this school. They did what they did with passion, and they looked like they were having fun. They said they appreciated our work at the school and they meant it. There is something about the XP and Agile community!
I got home very tired and happy. Kudos to Federico and Fabio who stayed up late with me sorting out the pieces of the XP Game! And to the people of the Varese XP User Group. They spent a lot of time preparing the basic application for the school project. This is a real gift economy.
Tuesday 26 June; second day at Essap.
Fabio and Federico were with me again today. I needed them to coach the XP Game, so I could not let them sleep in the car… I gave them a copy each of the XP Game manual :) We arrived at the Villa on time, and I asked Fabio to lead the morning stand-up meeting. We had agreed that instead of the canonical questions “what did you work on yesterday, what will you work on today, what problems do you have”, which do not really apply for the “work” at the school, we would ask “what did you learn yesterday, what do you expect to learn today, what problems do you have.” Fabio had this brilliant idea of not leading the meeting in the predictable circular order. Instead, he threw a colored pen to a random person in the circle, selecting him as the first person to speak. This way you stop people from thinking “three more people then it’s my turn” instead of listening to others speak.
The first standup was longer than one pomodoro, so the XP game started at 10:00 instead of 9:30. This is not a big problem, since we had allocated all morning to it. I spent one pomodoro explaning how the game works. Then we moved in the room with the big table and broke the audience in four teams. We had a great fun! The coaches were me, Fabio, Federico and Piero. Piero’s team won… This is the fourth time I present this game. I was careful to keep the participants’ attention on the meaning of the game. I think it’s a great vehicle to teach about planning and velocity. Yet someone mentioned, in the standup on Wednesday, that they got too wrapped up in the playing and the competition and winning! It’s all right folks, if you’re not engaged you don’t learn.
After lunch, we had Federico introduce Mind Maps. His presentation last year focused on the history of mind mapping, and the use of mind maps for personal use. This year he talked more about the use of maps in team, for brainstorming, and as an aid in the development of ubiquitous language for domain-driven design. More power to him! We realized how effective David and Rick were in using dialogue in their presentation. They keep the attention up, and get their point across more easily. I did not prepare anything of the kind with Federico, yet we improvised a bit of dialogue in the second part of his talk. I think it was a good idea.
The last work period was the first session for “JooB“, the school project. It’s a Job-finding web app, with a nice web-2.0-ish flavour. We split the participants in three teams; I lead the A team through brainstorming the user stories. Matteo F. wore the hat of the “customer” and got to answer the questions from the rest of the team. I think we did a good job; we used what Rick and David taught us about “personas” and identified a number of stories that related to them. It really is more effective to define “Rick the headhunter” and say “Rick posts a job offer” rather than “As a Head of Human Resources I want to post a job offer”. Jacek was very precise and coded every story with a progressive number, and the initial letter of its persona.
Note for next year: the first work period after lunch should *not* be a presentation; let us do something practical, or we’ll all fall asleep in the wonderfully crisp and perfumed air of June.
Wednesday 27 June; third day at Essap.
The day started well with the standup meeting. Today it was much faster than yesterday; we’re getting better at it. It took about 20 minutes, and the number of people is about 30. It’s very informative; unfortunately I keep forgetting to have my notebook handy. Some remarks are precious, and if you don’t write them down they’re lost. It took less than one pomodoro.
At 9:30, Carlo Bottiglieri led the session on Test-Driven Development. The first part of his talk was a very concise and to-the-point explanation of what TDD is. I think he got the idea across very well; my only suggestion is to use *way* more examples. Another thing that I really appreciated is the focus on design and refactoring. All too often TDD is explained in terms of “testing”, when it’s really about design. Carlo went through a very simple example of TDD in an object-oriented domain model class. He showed a test, and then the simplest code that could make the test pass. Then he started refactoring. The code he started with was *very* simple; it was amazing to see how much it could be further improved!
In the second part of his session, Carlo showed us a real world example. He took a Java web app he’s currently working on, and showed us how to add functionality to it with TDD. I’m afraid that the code was too complex though; it clearly was very simple to him, but it took him a long time to explain what he was doing, so that in the end he could only do one red-green-refactor cycle. Overall the example was too technical, and no meaningful suggestions could come from the audience. I think this presentation would have been excellent for a Java User Group, but a bit too advanced for the Essap audience. For instance, mock objects are an advanced topic. But one thing is clear: developing web apps in Java is painful, *expecially* if you use frameworks. On the other hand, developing tests for a Rails application is a snap!
Thank you Carlo for helping us! The participants asked a lot of questions, were engaged, learned about TDD *and* simple design. I’m very happy we had your session.
Today lunch took longer than usual, so we were ready to start again at about quarter to three. The first session in the afternoon was about planning the release for the school project. Yesterday we did brainstorm to find the stories, today the teams had to estimate them (on a 1-to-6 scale, much like the XP Game) and then have the “customer” prioritize them. I explained to the teams the value of time-boxing their activities, and asked them to arrive at a plan in no more than three pomodori. Which they did :)
In the second work period of the afternoon we were left with little more than two pomodori, which were spent on implementing the stories. I must commend the hard work of the Essap tutors, who spent two and a half days installing and checking the participant’s laptops. Last year we had plenty of technical problems with software installation; this year when coding started, it went really smooth.
I went around the rooms checking what the participants were doing, answering questions. I found that not everyone had understood what a “story test” is. I also helped people with Rails; but I saw too many puzzled faces.
At 18:00 the Villa closes down and we’re out. In the garden outside the villa I led a very short (10 minutes) retrospective. This was really thrilling to me: it was the first time I led one. I liked very much the brevity of it all. I followed the schema that David and Rick taught us the first day: I asked what worked today (and we should do more.) I had positive feelings about pairing. I agree with that. Then I asked what didn’t work. The main point that came out was that people knew too little of Rails. Then came the “actions” part. I proposed that I do some more Rails teaching, and distribute a few notes for people to copy. It was approved by many people. Not bad for ten minutes’ work.
Today we were not rigorous in our use of the pomodoro in the morning, and we came from lunch late, so that we worked only 6 pomodori in the morning and 5 in the afternoon. My feelings coming home: I’m totally exhausted, and I’m missing my buddies Federico and Fabio.