I would kill to get a brand-new project where I get to design everything from the ground up without worrying about refactoring legacy code. I have been working continuously on a horrible code base, most of which I wrote a couple of years ago. I suspect that nothing teaches about the horrors of bad design faster than being faced with your own. After all, you know why you made the "design" decisions you made back then and you're left wanting to go back and slap some sense into yourself (which means, of course, that then you wouldn't have made those mistakes and couldn't go back to slap yourself which means you would have made
Testing problem of the day: generally, writing tests first is great because you can nail API problems pretty quickly. In theory this means you can keep your pretty API and muck with the internals all you want and your code (and tests) still pass. Legacy code, on the other hand, often has rotten APIs. I bit the bullet and cleaned up many of them after writing the tests, but since my tests no longer match the code base, it's been tricky. grep -r is my friend.
All tests successful.
Files=5, Tests=458, 7 wallclock secs ( 0.00 cusr + 0.00 csys = 0.00 CPU)