You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _app/_posts/2025-12-29-extreme-programming-explained.md
+13-13Lines changed: 13 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -50,19 +50,19 @@ This layering matters. Practices without values are mechanical rituals. Values w
50
50
51
51
## The Five Values of XP
52
52
53
-
**Communication**
53
+
### Communication
54
54
55
55
Communication is the most important value in XP. Many problems in software development (missed expectations, defects, rework, etc.) can be traced back to insufficient or ineffective communication.
56
56
57
57
XP practitioners value frequent, direct interaction between developers, customers, and stakeholders to ensure shared understanding.
58
58
59
59
> “Given the choice between an extremely skilled loner and a competent-but-social programmer, XP teams consistently choose the more social candidate."
60
60
61
-
**Simplicity**
61
+
### Simplicity
62
62
63
63
XP asks teams to continually consider: what is the simplest thing that could possibly work? Simplicity enables faster delivery and clearer feedback. Importantly, Kent notes that simplicity is contextual: what is "simple" today may not be so "simple" tomorrow.
64
64
65
-
**Feedback**
65
+
### Feedback
66
66
67
67
Early in the book, Beck introduces a simple but powerful metaphor: software development is like driving.
68
68
@@ -72,11 +72,11 @@ In the same way, feedback helps ensure software teams hit their target. Feedback
72
72
73
73
> “The XP philosophy is to start where you are now and move towards the ideal. From where you are now, could you improve a little bit?”
74
74
75
-
**Courage**
75
+
### Courage
76
76
77
77
Software development is inherently uncertain and often uncomfortable. Courage is required to speak uncomfortable truths, discard failing solutions, and make changes when new information emerges.
78
78
79
-
**Respect**
79
+
### Respect
80
80
81
81
Respect means recognizing that no role is intrinsically more valuable than another and that software development is a collective effort. Without respect for people, ideas, and the system, no set of practices can succeed.
82
82
@@ -88,47 +88,47 @@ In contrast to the loftiness of values, practices are concrete. They are specifi
88
88
89
89
Kent supplies a a core set of practices that he recommends starting with. They've been carefully designed to fit together. Each reinforces the others, often in service of more than one value.
90
90
91
-
**Sit together**
91
+
### Sit together
92
92
93
93
Teams need a thoughfully designed collaborative space so that the barriers to interaction are minimized. In the early 2000s, this could easily be accomplished by having everyone sit together in the same room.
94
94
95
95
In an era of distributed teams, this is more difficult (though still possible). Use collaborative tools that broadcast availability, allow for interuption, and enable quick face to face contact.
96
96
97
-
**Whole team**
97
+
### Whole team
98
98
99
99
Stop thinking of the "development" team as a group of software developers. A successful product can only be built by a cross-functional team that includes all the skills and perspectives necessary for the project to succeed. This will likely include customers, business analysts, user experience specialists, software developers, and marketers.
100
100
101
101
> "Sharing power is pragmatic, not idealistic."
102
102
103
-
**Informative workspace**
103
+
### Informative workspace
104
104
105
105
Ensure your workspace makes important information visible. It should be immediately obvious who is working on what, what work has been prioritized, and how the team is doing with respect to their goals.
106
106
107
-
**Energized Work**
107
+
### Energized Work
108
108
109
109
Workers should work only as many hours as they can remain productive and at a pace that is sustainable.
110
110
111
111
> “Software development is a game of insight, and insight comes to the prepared, rested, relaxed mind.”
112
112
113
-
**Pair Programming**
113
+
### Pair Programming
114
114
115
115
Having two developers simultanouesly design, test, and implement new features affords numerous benefits. The collaborators keep each other on task, continuously review each other's work, improve each other's designs, and hold each other accountable to team practices.
116
116
117
117
Numerous studies have shown that (counterintuitively), pair programming ensures work is completed _faster_. This is because the resulting work is defect free, aligned to business goals, and requires less rework.
118
118
119
119
> “Pair programmers keep each other on task. Brainstorm refinements to the system. Clarify ideas. Take initiative when their partner is stuck, thus lowering frustration."
120
120
121
-
**Stories**
121
+
### Stories
122
122
123
123
Plan work using [user stories](https://nickarora.github.io/blog/user-stories-applied), minimal, natural language descriptions of features, written from a user’s perspective. Unlike rigid, detailed requirement documents, user stories force force business and technical professionals to interact. In doing so, the team aligns on what precisely what is required, why its valuable, and how long it will take.
124
124
125
-
**Continuous integration**
125
+
### Continuous integration
126
126
127
127
Programming complex applications is often a divide, conquer, and integrate problem. Beck recommends working in small increments and integrating changes into the whole application frequently (after no more than a couple of hours).
128
128
129
129
Continuous integration provides evidence that the system works and forces the team to remain coordinated.
130
130
131
-
**Test-First Programming**
131
+
### Test-First Programming
132
132
133
133
[Test-first programming](https://nickarora.github.io/blog/test-driven-development) is a technique for building software where the developer _begins_ by writing a failing test. He or she then should implement the bare minimum to get the software working. Finally, the code is refactored to improve the design. The technique is often summarized as "_Red_, _Green_, _Refactor_".
0 commit comments