This post originated from an RSS feed registered with .NET Buzz
by Darrell Norton.
Original Post: Extreme Programming Explained: 2nd ed - Part 1
Feed Title: Darrell Norton's Blog
Feed URL: /error.htm?aspxerrorpath=/blogs/darrell.norton/Rss.aspx
Feed Description: Agile Software Development: Scrum, XP, et al with .NET
The first edition of Extreme Programming Explained had too much emphasis on practices and none on principles. Values were mentioned, but it was like talking about the CEO and the assembly line workers in a company with no mention of middle management. Thankfully Kent Beck has rectified that situation in Extreme Programming Explained: Embrace Change 2nd ed.
First up are the values. Values are the root determinants of your behavior. There is always a root value underlying your actions when developing software. For example, say a developer decides that a UI bug is not important even though the customers clearly think it is and say so. His action may represent an underlying value that he doesn't respect non-technical people.
XP's values are communication, simplicity, feedback, courage, and respect. Astute readers will notice that this is one more than in the previous edition. These values are behind the commonly-known XP practices (pair programming, test-driven development, etc.). But values don't map directory to practices; there is an intermediary step called principles. Extensive software requirement documents are intended to communicate, but so are face-to-face meetings. They both represent the value of communication, but your domain-specific principles will determine which one you prefer.
The "new" XP has fourteen principles:
Humanity - software is written by people, XP takes it into account
Economics - "business" pays for software, so let's make sure to deliver business value
Mutual benefit - don't choose solutions that may work for you but really transfer the burden to someone else
Self-similarity - I don't know where Kent Beck was going with this one, but it sounds a lot like patterns (not just design patterns, all types of patterns)
Improvement - start now and constantly improve rather than trying to design the perfect solution "all at once"
Diversity - encouraging healthy conflict improves software development
Reflection - analyze why things work and don't work, do retrospectives frequently