In my daily life as a consultant, I work on solving problems for clients. That usually means one of two things: I develop new solutions from scratch (rare), or I wade through old code to try to fashion a durable, maintainable solution. Either way, I have to think about how I build software that not only...