Like others, I've not been able to get any organization
with which I'm involved to bite off on some of the
more eXtreme aspects of XP,
such as pairs programming.
The aspects, however, that I've adopted
for all my own projects are the testing+refactoring.
Amplifying on
dws's comments above,
once a project grows beyond a certain size,
it's the fact that I have all of the unit tests
as a regression test base
that
enables me to refactor effectively.
Before becoming converted to writing the unit tests first,
I'd always reach a point on a project where I knew
that certain internal subsystems needed to be completely
rewritten, but rewriting them was usually painful
because it would take a lot of by-hand
testing to try to make sure I hadn't broken anything.
And even then, I'd often not discover that my
laborious
ad hoc testing
still missed some end case until the code was in the field...
With a good set of tests created incrementally
during development,
I can refactor and
know that I
haven't broken an interface.
And if the tests are still missing an end-case
and a bug slips through the cracks,
well, another test gets created
when the code gets fixed,
and that's another situation that's guaranteed
never to cause a problem in the future.
This makes the whole development cycle more
productive than I had ever imagined.
Very powerful, and very addictive.