The amount of software in the world increases in a rapid pace, so does the amount of legacy systems. If you are a developer with some years experience I’m sure that you at some point have had the pleasure of having to do a change, like fix a defect or add some functionality, in an old, messy codebase. Sometimes, the bug fix or adding of the new feature goes well, and you move happily on to a new task or a new project. Sometimes though, the pain of working with the system might just get unbearable. Each change takes forever and you are constantly afraid of breaking some important functionality (true legacy systems have no tests). You may have experienced this too. A little over 1 year ago, in May 2011, I found myself in such a situation.