Flexible, Reliable Software: Using Patterns and Agile Development (Chapman & Hall/CRC Textbooks in Computing)