Chapter 1: What is XP?

Excerpted from “Extreme Programming Explained” by Kent Beck. The author states that:

XP is focused on the excellent application of:

XP includes:

XP is a path to excellence for people coming together to develop SW. It is distinguished from other methodologies by:

The author describes XP this way:

The author claims that XP addresses risk at all levels of SW development:

The author then states a collection of assumptions that XP makes:

Finally, the author summarizes XP this way:

We will first discuss XP (as described above) in relation to the Waterfall Model example to be presented in the previous lecture, assuming that XP could be applied to that project.

The author makes a lot of claims about XP, as well as states many qualities that XP possesses, including addressing human factors. He makes it sound like a lifestyle. Discuss your reaction to what the author has to say in the first chapter about XP?

The author makes this statement about estimates and expectations, “If you have six weeks to get a project done, the only thing you control is your own behavior. Will you get six weeks’ worth of work done, or less? You can’t control others’ expectation. You can tell them what you know about the project so that their expectations have a chance of matching reality. My terror of deadlines vanished when I learned this lesson. It’s not my job to “manage” someone else’s expectations. It’s their job to manage their own expectations. It’s my job to do my best and to communicate clearly.”

Who determines how much work is “six weeks’ worth of work”? What if your manager (or your professor) imposes unreasonable/impossible deadlines on you (and/or your team)? How do you put the author’s statement into practice? There is an inherent conflict here, and imbalance of “power”, skewed far to side of the manager. What do you do to deal with it? How should a team that is responsible for setting its own estimates deal with the rejection of those estimates?

Chapter 2: Learning to Drive

Chapter 2 is all about accepting and adapting to change. The author states, “everything in SW changes. The requirements change. The design changes. The business changes. The technology changes. The team changes. The team members change. The problem isn’t change, because change is going to happen; the problem, rather, is our inability to cope with change.”

XP follows the premise that customers, internal or external, drive change, and that they should not only be “allowed” to drive change, but should be encouraged to drive change, and that they are an integral part of the XP team.

CHAPTER 3: Values, Principles, and Practices

The author treats programming as a social skill, at times. He discusses how principles are the bridge between values and practices.

What does he mean by “values”, “principles”, and “practices”?

CHAPTER 4: Values

The author states that XP embraces the following 5 values:

How do you portray those values in your SW development, or other coursework?

COMMUNICATION: I’ll give an example from my work experience.

How do you see communication being used in your group project development?

SIMPLICITY: I’ll give an example from my work experience.

How do you go about simplifying your code (your solution to the problem)?

FEEDBACK: The author states that XP strives to generate as much feedback as possible.

What constitutes feedback? How do you encourage/generate feedback?

COURAGE: The author states that “courage” is effective action in the face of fear.

Give some examples of courage that you have exhibited during you collegiate career - times when you have confronted and conquered your anxiety/fear.

RESPECT: I’ll give an example from my work experience.

Identify instances of respect and disrespect that you’ve encountered during your collegiate career. This could be from students, professors, or from a coop experience. Please don’t use real names.

OTHERS:

Are there any other values you think are essential to successful SW development in a team environment?

CHAPTER 5: PRINCIPLES

The author states that XP is guided by the following principles:

From a team-oriented SW development standpoint, order those from highest to lowest in terms of importance.

HUMANITY: The author states the following as being essential in order to be a good developer:

What has your developmental environment been like while you’ve been at York College - collaboration, socialization, friendships, partnerships? In what ways do you expect those areas to carry over into your career. What is essential to you for a happy, successful, and fulfilling career?

The author clearly states what he feels should and shouldn’t be discussed/shared with team members. He says that private matters should remain private and not revealed to the team. On the other hand, you will spend a lot of time working closely with the people on your team - many will become friends, and even close/lifelong friends. What is your reaction to what the author has to say about those types of discussions?

ECONOMICS: Essentially, all commercial SW development comes down to money - how much the ROI (return on investment) will be.

How do you perceive that statement will affect/drive your career decisions?

MUTUAL BENEFIT: The author implies that it is generally not worthwhile to invest time in documenting for the future - future team members, future features, future releases That the documentation should be implicit in the code, the tests, the comments, the names.

What is your reaction to that? Can you think of examples that would require more explicit documentation - for instance, how do you convey information to members of an XP team who aren’t developers? How do you keep record of team decisions - how do you pass on designs to new team members?

SELF-SIMILARITY: The author states that the team should always be on the lookout for code and processes that are similar - and can be used at different scales. If you can abstract functionality from different parts of your design into common code - then only one instance of the code must be maintained and tested.

IMPROVEMENT: The author states that the team should always be seeking ways to improve the code. It is not possible to come up with a perfect design, or perfect processes - but it is possible to continue to perfect the design, the code, and the process. XP calls for excellence through improvement.

If the team is constrained for time, but comes across an improvement, how does it decide whether to spend time refactoring the code, implementing the improvement? How do they justify that?

How do you feel about the phrase, “best is the enemy of good enough”? Under what circumstances is “good enough” sufficient - meaning that even an obvious improvement should not be implemented?

DIVERSITY: With a diversity of knowledge, skills, and experience, comes a diversity of opinion on approaches and solutions.

How can this diversity be utilized in a positive way? How do you propose to reach a common approach/solution?

REFLECTION: Honest reflection (review) of one’s individual work (successes and failures) as well as that of the team, leads to improvement - both by sharing what has worked, and by recognizing and sharing mistakes, rather than hiding them (learning from one’s own mistakes, as well as the mistakes of others).

FLOW: The author states that more smaller chunks of development are better than fewer large chunks of development. The team see a steady flow of progress towards success. Flow would be when you finally understand the assignment, have assembled it in your head, and can make steady, uninterrupted progress towards it - think Mandelbrot in CS201.

How do you feel at the beginning of an assignment, and how does that change over time as you finally understand the problem and know how to make progress? How have you felt when you have just completed a tough assignment, and then had to start on a new and completely different asignment right away? Would you prefer more smaller assignments, or fewer bigger assignments?

OPPORTUNITY: The author states that you should learn to see problems as opportunities for change - continue learning beyond just enough to get by with solving the problem. Problems should be used as opportunties for learning and improvement, rather than viewed only as “survival”.

How do you identify opportunity in a problem? Think about the upcoming group and individual projects.

REDUNDANCY: The author states that critical problems in SW development should be solved in multiple ways.

I also emphasized that approach in CS201. Why continue looking for solutions after one is identified?

FAILURE: We learn from our failures until we reach success.

How have you learned from failure in CS201, or some other engineering course?

QUALITY: The author states that projects don’t go faster by accepting lower quality - a poor design, more “acceptable” defects, less testing. This is also my experience - that lack of quality comes back to haunt you late in the project, or sucks time away from you after a release.

Define quality in terms of you own SW development experience. What does quality mean to you?

BABY STEPS: Take many small steps in development, rather than a few larger steps. Complete small chunks more quickly and integrate them into the code base.

Reflect on your SW development efforts in CS101 and CS201. Did you ever experience writing too much code, and then struggling to get it to work? When you worked on Klondike, it was a large, complex project, but was broken into small testable pieces. How did that development go for you?

ACCEPTED RESPONSIBILITY: The author states that no one can assign responsibility to you - it is up to you to accept responsibility. He gives an example that if a team member signs up for a task, they also accept for responsibility for estimating it.

The author’s premise is that you sign up for the work you are going to do. What if work is assigned to you? Does the author’s point still hold?