FrankGerhardt and ChrisWege held a 4-day ExtremeProgramming workshop at the University of Tübingen. This is a short report about the experiences gained from this XpWorkshop.
We "taught" this workshop because right now we can't try XP at work but wanted to learn more about it by practicing it. With 12 motivated students this was just the right playground for us and the students. Now we feel more competent to promote XP also at work.
The Students
The students were mainly computer science students close to graduation. Most of them had some knowledge of Java and Emacs. Some of the students were at an expert programmer level, whereas others didn't have much practical experience in programming with Java. To help the less advanced students ComingUpToSpeed, we gave some of them a quick intro into OO, Java and the tool environment.
The students were very motivated. About half of the students participated just for fun. They didn't need the workshops credit points. Most of them worked very long.
Agenda
We tried to have a good mix of theory and practice. Our idea was to present one or a few concepts and then try them out immediately, e.g. CrcCards, PlanningGame, PairProgramming.
The outline of the workshop was a diagram on a whiteboard (a bit like MindMapping). It showed the values, principles, and practices of XP in one big picture. We used this diagram to reflect on the relationships between the ideas and on how they balance each other. At the end we had covered nearly all topics.
Environment
The workshop was held at a university in a pool of Sun workstations. We decided to use Java as the programming language because Java offered us the biggest chance to find knowledgeable students. We thought seriously about Smalltalk but we feared not to find enough students because it is hardly known at our faculty. It would have been nice to use one of the Smalltalk implementations with team support (VA or VW) but spending money on tools for just one workshop was out of question. We used only FreeSoftware and the JDK.
The whole tool environment was set up around Emacs. First of all we used the JavaDevelopmentEnvironment (JDE), which is a great elisp extension for Emacs. It comes with the OO-Browser, a tree view for the package hierarchy and much more. For version control, we used CyclicCvs and interfaced it with the basic Emacs VC package. Some of us used the more convenient pcl-cvs package. The Java version we used was 1.2.
The only big drawback of this environment was that we had only the JDK debugger available. Although JDE provides good support for using the command line debugger, we didn't use the debugger at all. Most errors were found when the JavaUnit test cases failed.
We used a Wiki to prepare the workshop and also to provide information about the tools and links to XP resources. Wiki was also the teams' communication tool.
The Project and the Customer
We wanted the students to develop one single real-world application. At first we planned to use a toy application, but the students complained about that ;-) So we took a problem from our work where we wanted to build a prototype anyway.
The goal was to write a web application which allows users all over the world to work with the system. The type of the application was a typical data entry system with browsing features. The information would be stored in a central database with fine-grained authorization control. We started talking about a 3-tier architecture with a thin graphical client, business logic and database but had in mind to change the customer requirements to a simple HMTL client later on. Just to simulate the real world behavior of customers. ;-)
In order to simulate a real situation, Chris played the role of the customer. A customer is absolutely necessary in order to have a fruitful PlanningGame. A challenge is to distinguish between the customer and the coach role if both parts are played by one person. Maybe a "customer hat" would have helped.
Pragmatics
To keep things simple we reduced the problem to a single user application but with a clear architectural layering. We didn't use a database but stored the data through the serialization facility of Java.
We changed the pairs once during the workshop in order to show the principle of CollectiveCodeOwnership. At first some people had difficulties with this approach. That they wanted to stick to their code - but this changed for the better. On the other hand, the pairs gained by mixing different skills. We had expected more problems with changing pairs. Next time we would change the pairs more often.
What we left out
Due to the short timeframe, we couldn't exercise everything that would be needed for a full-blown XP project. For example, we didn't do any kind of tracking. This wouldn't have worked in the timeframe anyway. Also, we didn't do StandupMeeting-s. Instead, every morning we started with a short flashback of the things that we had learned the day before and discussed what would be done that day.
Conclusion / Problems / Successes
The workshop was successful measured by our own goals and the feedback we got from the students. We all made our first experiences with doing XP in a team. The students saw a new way of programming and as their coaches we gained confidence in XP. We finished the prototype application despite the fact that some students didn't have too much experience with practical programming. It was a surprise to see how far we could develop the prototype. In the beginning of the workshop many of us felt, that we would never get anything going.
Most of these experiences were gathered in a one hour feedback session at the end of the workshop.