Edge cases are often the bane of a developer's existence. Even good unit tests often will not save you—because edge cases will identify inflexible design, or insufficient configurability, leading to painful refactoring. On the flip side, however, solving edge cases can be one of the most rewarding accomplishments we can achieve.