Refactoring: The Good, The Sad and The Ugly