This book is long, but great at helping programmers see how to make their code more and more valuable for the business, as well as more and more flexible along axes of change that are likely in the particular domain.
This is a book I should've read a long, long time ago. I enjoyed it though!
My summary.