If you haven’t already, go give this post from Jim Shore a read.
I’ve seen a lot of commenters on this post so far, and their thoughts generally mirror my own. You can’t take the “desserts” of Agile practices like working incrementally or the all important adaptive planning and scheduling without quite a bit of engineering practice vegetables. You wanna work adaptively instead of the ol’ fashioned plan driven method? Fine, but you’ve got to make that adaptability safe. You need rapid feedback cycles to know when you’re getting off the rails (customer demos, TDD, Continuous Integration, automated acceptance tests, static code analysis or some sort of equivalent). You need to take steps that make continuous design methods safe and effective (simple design, a constant attention to design fundamentals like the SOLID principles, and an intolerance for technical debt). And your team needs to be retrospective about its work to make adaptions as they become necessary.
In the early days, XP was roundly criticized because every practice only seemed to be safe due to the existence of the other practices. Take one out, and the others weren’t that great by themselves. I think that’s more or less a fair criticism, but my response is simply to adopt, and effectively apply, everything you need to make Agile development successful. You can’t just pick and choose the easy things. If you take something off the old XP practice recipe, you probably need to find an analogue solution to add something else back into your practices. Regardless of which practices and how you do those practices, there are project needs that have to be filled (planning, quality assurance of some sort, feedback cycles, etc.).
Of course, it’s always going to be easier to get it wrong than right, but that’s why we’re paid the big bucks.