I read The Duct Tape Programmer from Joel Spolsky recently, and I thought he made some good points. Then I started to see negative comments, like this rebuttal from Jeffrey Palermo, and I had to go back and re-read the first article.
I still think that Joel makes good points, but the main point, one that's kind of buried near the end, is missed. I think that too often what Joel forgets is that when he starts out controversial, he can be funny, but he turns off so many people that they don't really finish off the article. That's fine if he wants eyeballs but not if he really wants to get people to think.
The main caveat, which is important if you want to believe in his point, is this: Duct tape programmers have to have a lot of talent to pull off this shtick. By definition, the average developer doesn't have a lot of talent. They're average. If they use duct tape and throw things together, then we wind up with a POS that can't easily be refactored, enhanced, etc.
The article, to me, is written for the superstars. The guys that do understand multiple inheritance, or can compute the results of a T-SQL statement with 2 CTEs, and 12 tables in their head. They shouldn't get so caught up in complexity; they should code and make things happen.
I'm a big believer in agile methods, making small changes rapidly, and moving forward. Get things done. Remember shipping is a feature, and don't be afraid to do something half-assed at times.
Just plan to fix it, fix things regularly, and work to improve your product. Not make it conform to any other measure by software engineering standards. Make it conform to your users' standards. It works well for them.