Contexts where XP practices face real challenges or need significant adaptation.
Many software projects have contracts that fix scope, date, and price. XP's iterative approach conflicts with this.
The XP position: You can't fix all three (scope, date, resources). Something must flex. XP prefers flexible scope with fixed quality.
The contract reality: Clients want to know exactly what they'll get, when, for how much. Traditional contracts promise this.
Tensions:
Options:
XP in contract environments isn't impossible, but it requires client education and contract negotiation.
The Contract Trap
Traditional contracts assume you can know everything up front. You can't. Someone bears the risk of that uncertainty—either the client (change orders) or the vendor (overruns). XP tries to share it through collaboration.
XP was designed for co-located teams. It can work remotely, but only with good communication tools and culture.
Challenges:
If your distributed team has:
...XP practices will struggle.
Making it work requires:
Some distributed teams do XP very well. Others can't make it work. The difference is usually communication culture, not geography.
Industries like healthcare, finance, and aviation have regulatory requirements that can conflict with XP practices.
Tensions:
However: XP isn't impossible in regulated environments. Many regulated teams use XP successfully.
Adaptations:
The key insight: XP's quality practices often exceed regulatory minimums. Comprehensive tests, code review (pairing), and traceability are things regulators want.
What XP resists is waste: documentation for its own sake, long approval cycles, ceremony that doesn't improve quality.
A medical device team uses TDD (tests are validation evidence), pair programming (two-person review), and CI (traceability). They deploy less frequently but still work iteratively. Audits go smoothly because evidence is built-in.
A team produces volumes of design documents before coding (never updated), runs manual testing at the end (finding bugs late), and avoids change (because change requires re-documentation). Quality is poor; compliance is nominal.
XP's engineering practices are non-negotiable. If the team refuses to adopt them, XP doesn't work.
Common resistance:
If resistance is from developers:
If resistance is from management:
XP requires buy-in. You can introduce practices gradually, but if the team or organization refuses to engage with technical excellence, XP won't take hold.
Resistance often comes from fear. Fear of being exposed as not knowing something. Fear of slowing down. Fear of change. Address the fear, not just the objection.
Some domains make TDD significantly harder:
UI-heavy applications: Testing visual appearance and interaction can be tricky. (Though modern tools like React Testing Library have improved this.)
Machine learning models: Testing probabilistic outcomes doesn't fit the assert-equals model.
Hardware-dependent systems: Physical device behavior is hard to simulate.
Highly concurrent systems: Timing-dependent behavior is hard to test deterministically.
For these domains:
Don't use these as excuses to skip testing entirely. Every system has testable parts. Push TDD as far as it can go; adapt where you must.