Books by Chris Hanson
Software Design for Flexibility
Strategies for building large systems that can be easily adapted for new situations with only minor programming modifications.