Software Design for Flexibility, a book by Gerald Jay Sussman