Sunday, August 24, 2008

Friday - Last day at Agile

Friday morning was a bit emptier. A few people were leaving or had already left Toronto. Breakfast was calmer and everyone was interested in the sessions that were elected to be rerun after lunch. About 40 sessions were going to be rerun that were chosen by the attendees by voting on one session per day.
On the first slot in the morning, I attended a talk by Arnaud Bailly with Emmanuel Gaillot and Mariana. Arnaud presented us a small game about Haskell intended to teach young students how to solve problems in Haskell. The game is formed by tiles of lambdas, basic operations, color tiles to match variables, pi to describe the pattern matching and a few numbers. The first exercice we did was to write the factorial of a number. The recursive version came out pretty quickly and when we tried to expand it to get the solution, we noticed the huge amount of tiles needed. It was a great way to realize the amount of memory needed when stacking everything. We worked our way through the tail recursion version in which we could realize that the stack was never greater than 2. I found it a very nice way to show students the consequences of those details.

After the coffee break, everyone went to the Grand Ballroom to the last Keynote of the conference. This time, Alan Cooper, creator of Visual Studio (later sold to Microsoft) and author of several Human-Computer Iteraction books, presented his point of view about Agile and the way software is developed. It was a quite controversial talk. Alan presented his view point regarding the software development process. According to his speach, there four main stages in software development. The first one, "The Big Idea", is completly out of scope to any software development method. It is a creative process that is accomplished by the business experts and developpers should not be involved.
After that stage comes the Design stage followed by the Engineering stage and ending by the Construction stage. He states that Design and Engineering are stages based on iteration and increment, therefore, those are agile stages. And this is where Agile gets it right. However, construction is NOT an iterative stage. Purely incremental. Simplifying a lot, he says that all software should be built once, using agile methods, to be thrown away (since Brooks said, in The Mythical Man-Month, "Plan to throw one away, you will anyway"). After that first sketch, the software should be built from scratch without agile methods. His argument is that the first time, you will discover several new things while you walk ahead. Those things will impact on your software making it harder to understand and more complex. The second time, you already know those problems and can handle them previously working without surprises.
What I don't understand in this way of thinking is why rebuilding the software the first time? The only reason I can find to do that is because you want to change things in it. But if you do, you might encounter more problems and end up having to throw your second attempt away too! And you can go on like that over and over and over. The other question is why not refactor your first version to make it less complex and hard to understand? Maybe it is more expensive to refactor the whole software than starting it from scratch. But if this is true, then you obviously will have new decisions to make when you restart and you may just as well end up with the same problem at the end.
Anyway, the rest of the talk was about how interaction designer can improve the overall quality of the first software development. To this part, I have little to talk about. Alan's presentation can be found in his company's site. I totally agree that interaction designers are very usefull but I oppose to the idea that developers are not supposed to understand a little about their work and be able to perform a few of their tasks. I agree that in all field there should be experts that can help generalists. But I pretty much like the generalists that are able to do the whole thing decently even if it is not excelent. There is a nice article Danilo wrote about the Generalist/Specialist paradox. I believe nobody can be a specialist in all fields becoming therefore a generalist specialist. But I can understand having lots of generalists that have one specific area of expertise. To have a great agile team, all you need is that your generalists have different expertises and everyone knows about it.

Back to Agile. After the keynote, lunch was served in the corridors and I got ready to attend Kenji Hiratabe's double session. The first one was about the lessons he learned from the chief engineer at Toyota's development and the second one was a video about the migration of a traditional industrial chain to a "Yaigi" system. Those were a couple of amazing talks. I won't be able to summarize everything decently. I'll just say we have a LOT to learn from oriental cultures. Working in such environments where respect is a key is an experience I would like to have in my life.

That was the end of Agile 2008's reports. It took me three weeks to post my summaries of the five days I spent in the conference but it was worth it. My best advice is to search on the web for more reports and maybe even slides from the event. Also, stay tunned for next year's Agile to be realized in Chicago. If you want to attend Agile but don't think you can afford it, try getting in as a volunteer. You don't need to be a student to apply for it and it saves you the inscription fee which is considerable. In the next days, I will be returning to my usual posting subjects. Archimedes is the next one and I will try to go back to short posts. Hope you liked it. bye!

Thursday, August 21, 2008

Thurday at Agile - No lunch

Thursday morning started just like the other mornings: breakfast in the Grand Ballroom but with most people late. I guess Wednesday evening was quite exhaustive to many people.
I went straight to the Learning & Education stage where I could enjoy an amazing double session (went all the way through morning) of Game Design. This was NOT software game design. It was "hardware" game development. The idea was how to create games that could be used to teach concepts to people. Hubert Smits from Railly introduced shortly the work of Sivasailam Thiagarajan (aka Thiagi at www.thiagi.com).
After a short introduction, Hubert explained that we were going to build a game to teach Sprint (or Iteration, depending on your flavor of agile) planning.

We started by playing a game ourselves. Each os uf wrote down 4 cards with strong opinions he had about iteration planning. Hubert collected all of those and shuffled them redistributing 3 cards to each person. He asked us to sort the cards according to the importance we attributed to the sentence on the card. Meanwhile, he was laying down the rest of the cards on an empty table. Once we were done, he asked us to come to the table, now full of cards, and exchange the cards one by one on our hands with the ones on the table if we considered them more important. When he realised we were all happy with the cards we had, he asked us to trade cards among ourselves following the same idea to increase the value of the cards on our hands (according to our personal opinions). Finally, he ordered us to join with two or three other people and form a group. The group would have all the cards from its members and was to chose three cards that they would hold as theirs. The wrapping up was to have each group present their cards explaning why those cards were important to them.
I found this activity very interesting to align people's expectations about something. I could understand that it was a very good way to have people accepting other people's ideas. Hubert suggested it could also help building a team since the involved people would go from an individual perspective to a group perspective. To me, it looked like a very good ice breaker to get people thinking together.

The next part was the most important one and the goal of the session: to develop our very own game about iteration planning. It was a pretty simple board game. Each player had a character that was in a path leaving from start and aiming to reach the end. The initial rules that Hubert gave us were simple. All players receive about 10 cards at start and those are given back after shuffled when they are over. A player can only go forward if he presents a card that fits the stage in which he is. A player can challenge the presented card if he believes it does not fit that stage. Upon a challenge, all the players in the game should discuss the matter and reach a concensus. If they decide the challenger was right, the challenged player cannot go forward. On the other hand, if the challenged player was right, the challenger goes back one move and the challenged goes forward regularly. The first player to reach the end wins.
Based on those simple rules, we were supposed to define the stages of our game and then write the cards that the players would hold. That was a very interesting activity. It made us think a lot about what were the steps we considered essential in the planning and generated lots of discussion. We then had to gather all the cards we wrote individually and have them classified into the stages we defined. After that, we could change a few rules that we believed would improve the game. Finally, we played our own game to make a few changes with the game experience. We discovered the whole stage stuff was very boring since it took a long time to change stages. The idea that solved it was to have the game being iterative itself. Meaning each move would bring you to another stage and once you were done with the iteration, you would start another until you reach the end.
I loved that experience. It was a great way to have people think about their working system and how to teach it to others. Keeping a coach around as a game driver can be very useful to correct mistakes that the team can make. Finally, playing the game sounded a bit exhaustive but creating it is very revealing. The best part is that such game can be created to teach almost any process or complex non deterministic flow.

During the game session, Danilo, Mariana, Arnaud, Dan and Liz were working on the Block Problem with a Haskell solution. The most innovative idea was to set up a mercurial server (version control) and commit each step so that people could work on their environment and keyboard (Dan had a dvorak keyboard while Arnaud has an azerty one). Once I managed to take them off the, Mariana and me went have lunch with Danilo, Kiko and Bonnie Aumann (which we met at Kiko's presentation on Tuesday) at the CN Tower (CN stands for Canada National). It was a really good lunch with a great view and the chat was very pleasant. Kiko insisting that I was the french one so I should choose the wine and saying that being old (around 35) was way better than being young (around 25).

We came back from lunch about 30 minutes late and I went to my work on the Mezzanine floor. I used the half first slot I had left to relax a bit and review the things I want to ask for reruns. The second slot of sessions in the afternoon was filled with a Panel about open source and agile. The session was organized by Dennis Byrne and had Dirk Riehle, Mary Poppendieck, Naresh Jain and Christian Reis (Kiko). The discussion turned around what are the advantages of open source development that agility disregards or lost. Mary was very sharp as always which made the audience defended itself and attack a few points. I would not be capable of summarizing all we discussed there. The two main points that open source have were setting the user's expectation low and having volunteer work (and therefore committed workers).

After that, we all went to the Banquet where we could enjoy Uncle Bob's talk about Clean Code. Many blogs have already reported what happend but I would like to focus a bit more about his (re-phrased) point: "Craftmanship over Execution". I understand this as a consequence of all the refactoring value we have today. Nobody can sistematically say that refactoring is done. It can always improve. I have to admit I face frequently the question about when should I refactor some piece of code. Should I do it after I've written it and I master it? If I do so, I might be waisting time on something that will never be used (this code won't be extended). On the other hand, if I wait to refactor only when I need to, my code can look really crappy and it might take me some time until I remember how the code was supposed to work. Most of the time, I find myself refactoring things until I just have the feeling that it is enough. I don't know what makes me feel good enough with the code but, at some point, I accept it can be left the way it is even if more refactoring can be done. This sounds obviously as a support to the craftmanship theory since this "intuition" can only come from learning and experience. But shouldn't such motivations be triggered by some regular facts that could be documented? How do we create our craftmanship book? I have no idea but would surely like some tips.

Finally to close the night, Kenji Hiratabe presented himself with 10 other Japanese people by singing the well-know "Dear ecuspi (XP)". For those of you who lost that moment, check it here.
Believe me, around 800 people stood up and sang and danced hearing that. It was really fun!

Well, I am almost over for my reports. I hope I will post Friday by the start of next week. Then I should get back to my regular activities (Archimedes and Squeakasts). Bye bye everyone.

Friday, August 15, 2008

Wednesday - a free night at Agile 2008

Wednesday was the day without receptions. The day started as usual: breakfast at the conference. Donnuts, fruits, cakes but no croissant or pain au chocolat this time. Sessions started at 8:30 as usual and I was doing my volunteer work on the room where I was going to present the Coding Dojo with Danilo and Mari. We were a bit late for the beginning of the stage because Microsoft's reception was a bit too open on the drinks (this is obviously NOT a complaint).
It was on the Learning and Education stage. It started with a nice presentation from Laurie Williams about the work she has been doing with other teachers/researchers regarding pair programming. They made up a nice funny video to stimulate teachers to adopt the pair programming practice in their laboratories explaining the advantages it presents as well as evaluation modes that could be used to assign grades to each student. The video was a bit exagerated in the way it presented the facts which gave it a humorous profile. Although I believe there is more work to be done on that presentation, it is a very nice start. As far as I know, the video is not yet available but should be once they consider it ready. If you want to help, please email her at williams - at - csc.ncsu.edu.
After that, Garry Berteig talked about the Learning Circle. He stated that there are four entry points into a learning circle. Action, Reflection, Learning and Planning are stages through which we pass through when learning something new. He established those four points as quarters of a circle in which the center is guidance. Guidance is what helps keeping someone in that circle efficiently. He then elaborated how to support each activity and how to lead one to another. He got short on time by the end just when he presented how this can and should affect the way agility is taught.
On the third slot of this 1h30 was the presentation of our Coding Dojo in Sao Paulo experience report. Danilo posted some infos about our presentation here. I would like to highlight the map we built on google maps to show where are the dojos around the world.


This is a reproduction of the image but I would really appreciate it if, in a few years from now, this map counted more dojos in north and central America, in Asia and Australia and in the west coast of south America. Europe has a few dojos but I would also expect to find more options since there are so many countries close to each other and ideas should pass around more quickly.

During the second half of the morning, I stayed in the room to fulfill my volunteer work but could not stay focused since I had to take care of another 3 rooms so I used my time to post the Tuesday report. Danilo and Mari went to the OpenJam where they met with Emmanuel Gaillot, Arnaud Bailly and some other people to have a Coding Dojo session. They presented the Block Problem and started to solve it in Ruby. I showed up a couple times but could not help them. They could not finish the problem but liked it so much that Arnaud and Emmanuel worked on it later on (I'll explain more on the post about Thursday). We then had lunch at the conference and attended the Programming with the Stars event. It was quite cool again (I attended on Tuesdays too) with some pretty good demonstration since they now had more time to code (6 minutes).

After the lunch, I went to a session with Esther Derby where she was going to talk about Crossing Cultures. It was going to happen in the French stage (although it was going to be in English) and she had planned a nice game to show how mixing cultures might be hard to endure. Unfortunately, she needed at least 8 people to run the game well enough and we were 7. So she had to cancel it and I was orphan for the rest of the afternoon. Later on that night, we went have dinner with Danilo and the Toughtworks' fellows which was a very pleasant night.

I'll continue on later with more about Agile and after that series, I'll try to get back to my regular activities. Hope you enjoyed it and bye bye.

Wednesday, August 6, 2008

Agile sessions on Tuesday

The agile conference is insane!
There are over 30 concurrent presentations going on plus a couple talk/chill out areas and several booths for the companies involved in agile development. Tuesday was the real opening of the conference.
There was breakfast from 7am to 8:30am when the opening Keynote took place. The last post was written during that talk. After that, I ran out to a talk from Dirk Riehle about open source business opportunities. It was a bit empty and Dirk covered mainly only the advantages for companies to use or develop open source. I felt there was more to said about the relationship between agile and open source and how it can help improving your approaches to clients and give you more possible solutions to use.
Lunch followed at the conference where food was pretty like the one from the ice breaker. Nice but could have been better to have some variety. After lunch, I managed to swap work with another volunteer to spend the whole afternoon attending a session with Mary Poppendieck and Christian Reis (Kiko). The first part was a presentation about the way Kiko sees open source development to work and how he works at Cannonical to develop open source. I got a few insights and learned a couple things really interesting. Mostly the very rigid hierarchy that most open source project use to filter contributions in order to maintain a good code base. The second part was just amazing. Mary drove a discussion that should point us to things agilists should learn from open source developers and vice versa. I won't be able to give you a good summary but Mary promissed she would post the results in about 10 days. I've offered myself to help her but I don't really know how I will do it.
Finally, Microsoft hosted a reception from 7pm to 10pm with loads of drinks to everyone and some very funny rock band contest which volunteers proudly won. :) I had a great time chatting with Danilo, Mariana, Kiko, Hernan (an Argentinian volunteer I met here), Elizabeth Keogh, Dan North, Tom Poppendieck as well as many more people. We left around 10:30 pm after about 4 or 5 red wine glasses and having evaluated the Archimedes code with Danilo and Szczepan Faber (one of Mockito's maintainer) to find out why I was having problems mocking a couple stuff.
So far my evaluation for Agile is great. It is even more extreme than OOPSLA since you have more things going on at the same time and there are more events trying to put everyone in contact to each other. It is very intense (and expensive) but it is really worth it.

Today's summary should come up tomorrow so stay on.

Tuesday, August 5, 2008

Monday at Agile 2008 and past news

Hello everyone,
The end of the holidays was very good. I found my supervisor (absolutely NO problem to do it) and we managed to organize a Coding Dojo in Grenoble with some researchers and some industry workers. We worked with ruby (http://www.ruby-lang.org) and rspec (http://rspec.info/) on the block problem (http://acm.uva.es/p/v1/101.html). It was very interesting and I felt they liked the idea. Even promissed me that they would start their own dojo.
The last week was in Paris where I joined the Paris Coding Dojo (http://xp-france.net/cgi-bin/wiki.pl?DojoDeveloppement - in French) where I met Emmanuel Gaillot (http://emmanuelgaillot.blogspot.com/) and a few other regular Paris Dojo attendees. It was an amazing experience and will probably have future great consequences regarding collaboration between the group in Sao Paulo and the one in Paris.
Finally, I should leave France on Saturday morning. Obvisouly, as always near holidays, my flight was overbooked. So I was offered some money and a full paied day to stay one more day in Paris. I accepted it so it would pay off my accomodation expenses in Toronto. Therefore, I arrived in Toronto on Sunday afternoon. Found out that the student accomodations at the University of Toronto is pretty amazing! The room is quite big and nice in a very nice campus and pretty well geared and very well located.
I then went the Agile 2008 volunteers meeting in the Sheraton Hotel Center. It was a pretty good overview of the size of the conference: 1600 attendees. 400 speakers and around 100 staff (70 volunteers, 20 stage directors and about 10 major organizers). Sunday was really smooth since the conference only sort of started in Monday. Monday only had registration and bag deliveries as well as the research talks. The lines were little, everything was flowing pretty smoothly and people were talking quite a lot. Loads of famous agilists were walking around, meeting each other and talking to other people. It ended up with the Ice breaker evening which was a huge meeting with all attendees with 4 food spots that were representing Toronto's main social origins. There were also several weird pass times you could go into: massage, hand reading, handwrite analysis, henna tatoos, taro players and other stuff.
It was on from 7 pm to 10 pm when those services as well as food and drinking stopped sending people out ot bars or the Musik Maztik which is a special stage in the conference for attendees to play music instruments. Since the timezone difference is about 6 hours between Paris and Toronto, 10 pm was 4 am for me so I went to bed.
Today (Tuesday) is the official sessions start of the conference. Things are going very well so far, the breakfast was amazing and everyone is watching a very good talk from James Surowiecki, author of The Wisdom of Crowds (http://www.randomhouse.com/features/wisdomofcrowds/). He is talking about how wisdom can come out of the crowds and why in some cases, it just gets people dumbers. After this, the first sessions will come up and people should spread over. I will try to keep this blog updated about the conference but I am not sure I will manage it.

That's all for now people. Bye bye!