Struggling for Competence

XP Engineering Practices

I've read several times that the methodology people use is Scrum plus the engineering practices from XP. In fact were loosely following this approach in our current project.

methodology equals scrum plus xp engineering practices

But exactly what are the engineering practices from XP? According to Extreme Programming Explained they are:

Sounds easy?

The thing I've always liked about XP, is the specificness of the advice it gives. There's a balls out attempt to identify what best practice actually means. Most other methodologies are rather vague when defining what you should actually do - "it's context specific" they say. They're just not extreme enough I guess.

Of all the practices, the hardest one to pin down is incremental design. Fowler calls it evolutionary design and Ron Jeffries calls it simple design. Jeffries wrote down the simple design rules:

Back on c2.com, the originating point of XP, they put it something like this:

Do The Simplest Thing That Could Possibly WorkBig Design Up Front is avoided because You Aren't Gonna Need It (YAGNI). Once the simplest thing is done, you Refactor Mercilessly, so that things are expressed Once And Only Once.

I think there's something incomplete about incremental design, as expressed here. For sure, most of the big design up front I've been involved with was overkill, and took nearly as much time as writing the code anyway. YAGNI speaks a definite truth. But, but. Sometimes you do need a bit of big design, for example the repository pattern for data access, and when you do you need to know which way your going.