Writing for reusability also tends to make software testable from my experience. If you make excessively involved units of code, you can't test, but you also can't re-use.
And I'm big on reusability because I'm lazy. If requirements change, I rather tweak than rebuild.