Skip to main content

By clicking Submit, you agree to the developerWorks terms of use.

The first time you sign into developerWorks, a profile is created for you. Select information in your developerWorks profile is displayed to the public, but you may edit the information at any time. Your first name, last name (unless you choose to hide them), and display name will accompany the content that you post.

All information submitted is secure.

  • Close [x]

The first time you sign in to developerWorks, a profile is created for you, so you need to choose a display name. Your display name accompanies the content you post on developerworks.

Please choose a display name between 3-31 characters. Your display name must be unique in the developerWorks community and should not be your email address for privacy reasons.

By clicking Submit, you agree to the developerWorks terms of use.

All information submitted is secure.

  • Close [x]

IBM WebSphere Developer Technical Journal: An adventure in Extreme Programming

Why ten developers will never be the same

Sara Mitchell, Software Engineer, IBM
Sara Mitchell works as a Web Services Development Team Lead on WebSphere Application Server. She is based at IBM's Hursley Park Development Laboratory in the UK.
John Owen (johna_owen@uk.ibm.com), Software Engineer, IBM
John Owen is team leading the project to deliver a centralized Rational service to the IBM Hursley Park Software Development laboratory in the UK where he is based.
Katy Warr (katy_warr@uk.ibm.com), Software Engineer, IBM
Katy Warr works as a Technical Lead on WebSphere Application Server at IBM's Hursley Park development site in the UK.

Summary:  This article describes how a team of IBM developers used Extreme Programming (XP) to deliver a software component for a large middleware product as part of a larger, traditional development project. How XP impacted the success of the project, the deliverables, and the interaction between team members, colleagues, and the customer, are also candidly discussed.

Date:  04 Aug 2004
Level:  Introductory

Activity:  2476 views
Comments:  

Get the products and tools used in this article

If you are a developerWorks subscriber, you have a single user license to use WebSphere® Application Server, and other DB2®, Lotus®, Rational®, Tivoli®, and WebSphere products -- including the Eclipse-based WebSphere Studio IDE -- to develop, test, evaluate, and demonstrate your applications. If you are not a subscriber, you can subscribe today.

Introduction

In early 2003, our team of ten developers was assigned to deliver what would be an internal component for WebSphere Application Server, one of IBM's large middleware products. We all recognized that we would need to adapt to changing requirements, as well as pick up experience and learn new technologies along the way. We decided we would need a more flexible approach to our development process to measure our progress effectively, and to enable us to break large, seemingly unmanageable chunks of work into something more understandable. An analysis of different agile delivery methods was undertaken, and Extreme Programming (XP) seemed to fit our requirements most readily.

Going against the grain of the traditional software development methodologies that made up our collective background was both risky and exciting. Then, when our management team gave us the go-ahead to try this radical, new development approach, we made a conscious decision to embrace the XP mindset wholeheartedly.

The project lasted approximately one year, at the end of which we successfully -- and on time -- delivered the component we were tasked to complete. This article describes some of the high level project elements, experiences, and thoughts that came as a result of this, our first foray into Extreme Programming.

This article assumes familiarity with the XP Core Practices, defined at XProgramming.com.


Beginning the project

The team
To begin with, our development team was made up of individuals who were keen to give XP a try. Based on books, hearsay, and experience in other projects, we set about the task of defining the XP processes to which we would adhere. Many aspects of our discussions felt uncomfortable; for example, the notion of an iterative design without considering the longer term until required to do so. However, we agreed to stick with it. We defined a basic process, according to the XP principles, and then started work. Regular reviews of this process (every week or fortnight) resulted in process improvements throughout the project.

The project
Our project requirements and scope were very vague at the outset, and so we knew that they would change considerably. XP allowed us to ensure that the complete team was involved from the start, including building our working environment and delivering initial requirements. We knew that some of these work items would be superseded, but this mechanism brought the team up to speed effectively and encouraged a strong, upbeat, and cooperative atmosphere.

The customer
At the highest level, a middleware project is defined in terms of its architecture and how its components interact. We therefore viewed the component architecture as a customer requirement. We were lucky because what we were delivering was only directly used by one other component, and so we had just a single primary customer.

The environment
We had agreed on the fundamental principles and practices regarding how we would work; for example, no product code written before it is unit tested, all code to be pair programmed, daily stand-up status meetings, adherence to coding standards, and so on. We then set about creating a suitable development environment. This environment was Eclipse-based with JUnit as the unit test harness. A continuous integration machine was set up, and then we were ready to start.

Almost.

Our final hurdle was the physical work environment; namely, obtaining an available, single room large enough to hold the team for the duration of the project. It took weeks and a great deal of management persuasion in order to acquire such a workspace, but as soon as we could finally see each other and talk to each other while working together -- in one room -- the XP process made more sense. A great team spirit developed and productivity noticeably improved. In addition, with developers and testers in the same physical proximity, a new working relationship was established, each offering their own expertise to advance the delivery of the solution.

The acquisition of the single team room was the point at which the project really began to benefit from XP.


In full swing

Project planning
Unlike more traditional development methods, where planning is performed independently by project planners and team leads, the XP team defined and owned the tasks and the associated delivery dates, making each team member feel personal responsibility for successfully meeting these targets.

We began the project with two user stories and worked, with our customer, to refine these. Next, we set about identifying the main dependencies with other teams and then looked at breaking the project down into separate releases, basing our releases on the major milestones associated with the product into which we were delivering. Initially, we had four releases, each between six and ten weeks in length, and each typically containing between 15 and 30 user stories. Later, a subsequent requirement and delivery date extension (both by the customer), meant a fifth release would be added.

At this point, a release plan was produced identifying the user stories scheduled for delivery in each iteration within each release. Based on customer input, highest priority user stories were scheduled at the beginning of the release so we could, therefore, focus our efforts on the most important functions first. This practice provided the greatest confidence that the most important functions would be delivered with success.

Delivery through iterations
We followed XP practices closely in order to deliver our code iteratively. We chose fortnightly iterations with a fifteen minute daily stand-up meeting. It took a few iterations for us to find the best day to begin an iteration and what time to make the stand-up meeting. We settled on Monday for iteration kick-off, and 1pm for our stand-up meeting. We also found that we needed a mid-iteration checkpoint meeting so we could ask the question, "How much more work have we got to do for this iteration and are we going to do it all?" Asking this question enabled us to identify potential problems early and establish appropriate remediations.

At the end of each iteration, our deliverables were packaged and delivered to the customer with supporting documentation in the form of release notes.

Tracking and monitoring status
To track and monitor our progress, we chose a low-tech, high visibility approach: we used the walls, handwritten index cards, and white boards of the XP room to record project progress and designs.

However, we still had to adhere to the standards imposed upon us by the parent project, which meant completing a number of documents that would provide status to the larger project community. Although this was extra overhead and duplication, we considered this a customer requirement; that is, our customer wanted us to track progress a certain way, and so we respectfully obliged.

Completion and delivery
The component we were building was just one part of a major product release. As the end of our project drew near, we had to begin considering what might be needed for the next product release. The decision was made to divide the team into smaller equally sized sub teams near the end of our penultimate release. As the final release progressed, we needed to transfer team members onto the next project, exactly the same as non-XP projects need to. Ever-dwindling team size made pair programming more difficult. Still, we persevered and delivered our project deliverable on time, freeing up the remaining team members to join their colleagues working on the next project release.


Impact on project administration

Practicing XP within a larger non-XP environment
Middleware products are complex ones, involving many teams and many components, all of which need to interact. Therefore, upfront planning of the high level design and architecture is essential. This contradicted the XP "just in time" design approach. However, since the high level architecture provided a better picture of how our component integrated with the rest of the product, we felt that this product architecture benefited our XP deliverable.

The team was required to adhere to all the non-XP processes used by our parent project. As mentioned, this meant some duplicate effort in documenting our progress. This also meant having to adhere to deadlines that were not compatible with the XP model. For example, although all our code was fully acceptance tested, we still had to deliver it by the parent project's DCUT (design, code, and unit test) milestone date, rather than its later FVT (functional verification test) milestone date. (Code which has been through FVT has an equivalent quality to the acceptance-tested code we delivered in each of our iterations.) It is difficult to determine how we could have influenced the project here, apart from delivering good quality code by the DCUT date and using this as a point of reference for the next deliverable.

Estimation, planning, and status
Estimation is always difficult. One benefit of XP is the refinement of estimates, beginning with high-level vague costs at the project scope phase, which are further refined during the release planning and iteration planning stages.

Getting each coding pair to provide an estimate for their work ensured buy-in by all involved, and also enabled other team members to remind the programming pair of all elements included in the cost, potentially increasing the accuracy of the estimate even further. What we did not do -- and we would likely have benefited from an XP coach here -- was accurately use project velocity to indicate how much we could deliver in future iterations. Project Velocity is a technique for measuring the team's performance, which bases the amount of effort available in the next iteration on the number of completed user stories in the previous iteration. If we had used project velocity more precisely, we would have been able to highlight estimation problems sooner, thereby improving not only the accuracy of our estimates, but our overall efficiency over time as well.

It was important to the project that status of all deliverables was tracked regularly by the Big Boss to ensure things were not forgotten. (Big Boss is an XP term to represent the person to whom status is reported; the role is similar to a delivery manager.) Coding and delivery standards helped to reduce the risk here. Additionally, ensuring that all problems, issues, and tasks (such as, writing the release notes at the end of the iteration) had an owner, meant that things would not be overlooked. The daily stand-up meetings allowed us to track progress and deal with issues, concerns, and questions in a timely manner. This compared very favourably to the more traditional periodic status meeting approach. The stand-up meetings did not require formal minutes; anything that could not be answered at the meeting were written on notes that were stuck onto the wall.


Impact on our deliverable

Productivity
In some areas, we found that our XP project might have been less productive than other iterative non-XP projects in IBM of similar size and complexity. A key factor to productivity may have been the involvement of the whole team in decision making and planning. Although this involvement was beneficial in many respects, it clearly required more resources than a non-XP project where the same job might be done by a smaller subset of team members. The breaking down of tasks into smaller, manageable subtasks might be done traditionally by an individual tackling a problem, but in our XP project this was performed by the whole team.

The voluntary nature of XP can result in a slowdown in pace and urgency. We noticed that the less glamorous tasks would take longer to complete than expected. Perhaps a more authoritative stance from the Big Boss would have helped here. Also, common ownership hindered turnaround when trying to solve complex and wide reaching problems. Splitting the challenge into smaller tasks distributed between pairs did not allow a holistic approach to problem resolution. We found that complex problems benefited from being allocated a single owner in the team, even if others in the team were involved.

It may also be worth noting that a fair percentage of our team (compared to other teams around us) was made up of relatively inexperienced developers. This factor would likely impact productivity regardless of methodologies adopted.

Toward the end of the project, we noticed a decrease in work load. We attributed this to the fact that iterative acceptance testing of the code throughout the project highlighted problems so we could fix them much earlier than we would have had we been following a traditional project plan.

Quality
The combination of test-driven development, continuous integration with fully automated regression testing, pair programming, and team design certainly improved our code quality. Additionally, refactoring was actively encouraged and allowed code to be refined and improved over time. An agreed-upon common set of coding standards ensured consistency. Lack of code ownership, inexperience, and our (correct) reliance on the unit tests, did sometimes result in inelegant code, but refactoring later in the project cycle rectified this.


Impact on the team and the customer

Educational value
Many aspects of XP are processes from which non-XP environments can benefit -- and that many experienced professionals practice intuitively. For example, our less experienced team members are now far more competent in analyzing complex problems because XP formalizes this process, and the extensive unit test suite gave people the confidence to refactor code.

Some people love working in an XP environment, others hate it. Perhaps this is due to personalities, working styles, or several other factors. Reflective thinkers can find an XP team inhibiting because it is difficult to find quiet time to sit and consider a problem; their quiet state could also be perceived as a lack of interest or capability. On the other hand, people who think out loud can thrive on an XP team, although this can result in them gaining an disproportionate level of influence.

Pair programming can be difficult due to conflicting working styles; a very methodical worker will find it frustrating to work with someone who has a less ordered approach, and so on. We also noticed that some people were consistently left with the less glamorous tasks. In most cases, this was due to an individual's tendency to contribute to the team's overall achievement, rather than choosing tasks based on personal preferences. In a more traditional environment, work might be allocated more fairly.

Those who liked XP enjoyed the open, collaborative environment, enabling team members to be involved with all aspects of the project lifecycle, including design and project management.

Impact on the customer
The most important role in all of this: the customer. In XP, the customer is the driving force. The customer needed to be coached in XP and understand what XP means to them. This was occassionally a challenge, since the customer usually specified requirements up front with no further interaction until the start of functional testing. These conflicting expectations required additional effort, primarily because we had to gather requirements using both XP and non-XP methods, and then map between the two models. Ultimately, the customer was satisfied with the result of our extreme experiment.


Conclusion

In the end, we achieved our goal: the delivery of a new component into a complex middleware product, in the required timeframe, using a new delivery methodology.

So what did we learn from this?

The XP experience was highly valuable, and dramatically changed our view of how to deliver software, particularly with regard to scenario-driven development and testing. It is easy to think that XP is just a collection of tools and techniques. In fact, it is more of a philosophy that envelops every aspect of the project. That said, XP should not be seen as a panacea for all software development. We remember well a great deal of frustration over a lack of arbitration leading to endless discussions and, occasionally, inappropriate decisions, both on the technical and project level. Also, we feel it is very important to consider the personality balance within the team since, as mentioned earlier, some people find it an uncomfortable environment in which to work.

If you want to try XP, we strongly recommend that you get an XP Coach, which is something we realize we missed out on. A coach will get the project off to a quick start and be an excellent guiding light, particularly through the essential learning process at the beginning.

Finally, it is very likely that your current project is already benefiting from practices that XP endorses. In fact, development teams in IBM already embrace iterative delivery, test driven development, refactoring, code reviews, continuous integration, automated regression testing, and common coding standards. All of these result in improved customer satisfaction through the timely delivery of high quality software. XP is not the answer to all software development projects or problems, but it does provide an alternative approach to delivery that you may want to consider.

Perhaps these insights can help you decide whether Extreme Programming is right for you and, if so, help give you an idea of what to expect before you take the plunge.


Resources

About the authors

Sara Mitchell works as a Web Services Development Team Lead on WebSphere Application Server. She is based at IBM's Hursley Park Development Laboratory in the UK.

John Owen is team leading the project to deliver a centralized Rational service to the IBM Hursley Park Software Development laboratory in the UK where he is based.

Katy Warr works as a Technical Lead on WebSphere Application Server at IBM's Hursley Park development site in the UK.

Report abuse help

Report abuse

Thank you. This entry has been flagged for moderator attention.


Report abuse help

Report abuse

Report abuse submission failed. Please try again later.


developerWorks: Sign in


Need an IBM ID?
Forgot your IBM ID?


Forgot your password?
Change your password

By clicking Submit, you agree to the developerWorks terms of use.

 


The first time you sign into developerWorks, a profile is created for you. Select information in your developerWorks profile is displayed to the public, but you may edit the information at any time. Your first name, last name (unless you choose to hide them), and display name will accompany the content that you post.

Choose your display name

The first time you sign in to developerWorks, a profile is created for you, so you need to choose a display name. Your display name accompanies the content you post on developerWorks.

Please choose a display name between 3-31 characters. Your display name must be unique in the developerWorks community and should not be your email address for privacy reasons.

(Must be between 3 – 31 characters.)

By clicking Submit, you agree to the developerWorks terms of use.

 


Rate this article

Comments

Help: Update or add to My dW interests

What's this?

This little timesaver lets you update your My developerWorks profile with just one click! The general subject of this content (AIX and UNIX, Information Management, Lotus, Rational, Tivoli, WebSphere, Java, Linux, Open source, SOA and Web services, Web development, or XML) will be added to the interests section of your profile, if it's not there already. You only need to be logged in to My developerWorks.

And what's the point of adding your interests to your profile? That's how you find other users with the same interests as yours, and see what they're reading and contributing to the community. Your interests also help us recommend relevant developerWorks content to you.

View your My developerWorks profile

Return from help

Help: Remove from My dW interests

What's this?

Removing this interest does not alter your profile, but rather removes this piece of content from a list of all content for which you've indicated interest. In a future enhancement to My developerWorks, you'll be able to see a record of that content.

View your My developerWorks profile

Return from help

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=1
Zone=WebSphere
ArticleID=13686
ArticleTitle=IBM WebSphere Developer Technical Journal: An adventure in Extreme Programming
publish-date=08042004
author1-email=sara_mitchell@uk.ibm.com
author1-email-cc=
author2-email=johna_owen@uk.ibm.com
author2-email-cc=
author3-email=katy_warr@uk.ibm.com
author3-email-cc=

Tags

Help
Use the search field to find all types of content in My developerWorks with that tag.

Use the slider bar to see more or fewer tags.

For articles in technology zones (such as Java technology, Linux, Open source, XML), Popular tags shows the top tags for all technology zones. For articles in product zones (such as Info Mgmt, Rational, WebSphere), Popular tags shows the top tags for just that product zone.

For articles in technology zones (such as Java technology, Linux, Open source, XML), My tags shows your tags for all technology zones. For articles in product zones (such as Info Mgmt, Rational, WebSphere), My tags shows your tags for just that product zone.

Use the search field to find all types of content in My developerWorks with that tag. Popular tags shows the top tags for this particular content zone (for example, Java technology, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere).

Try IBM PureSystems. No charge.

Special offers