Let’s not worry about my views on software engineering fads and frameworks because I’m nobody special. But I was pleased that I’m not the only one with the following opinion.

…almost everything I’ve ever heard associated with the term "extreme programming" sounds like exactly the wrong way to go…with one exception. The exception is the idea of working in teams and reading each other’s code. That idea is crucial, and it might even mask out all the terrible aspects of extreme programming that alarm me.

I also must confess to a strong bias against the fashion for reusable code. To me, "re-editable code" is much, much better than an untouchable black box or toolkit. I could go on and on about this. If you’re totally convinced that reusable code is wonderful, I probably won’t be able to sway you anyway, but you’ll never convince me that reusable code isn’t mostly a menace.

— Donald Knuth

I agree with that exactly, right down to the pair programming.

The topic of reusable code is brilliantly addressed in this great article. I definitely will waste time changing parameters over to a dict and iterating over their keys when just having a few parameters get the same (cut/paste) treatment would have been fine. But my sensitivity to that is nothing compared to my distrust of external dependencies. It’s not just that I have been burned so many times, but in so many different ways - code doesn’t quite work, error bombs, tiny feature quadruples the size of the project, requires its own exotic dependencies, takes longer to learn/understand than reimplementing, security issues, lack of flexibility, poor performance, license/owner changes, ad nauseum. Being lazy and using other people’s code can be a lot of work!