Product managers face difficult choices. Which additional features do we need? Should we put more time into improving performance or reliability? How can we deliver the new product or feature in a reasonable timescale? As a developer, I want to build applications that have a full feature set, high performance and reliability and deliver these on time. Skilled developers, good tools and agile practises including test driven development and refactoring are all part of the answer. But it also needs architecture decisions that treat productivity as a high priority. Many projects see productivity reducing over time as the software becomes more complex. In this situation, refactoring can help by making it easier to integrate new features with the growing number of existing features and infrastructure.