Three Flaws in Software Design - Part 1: Writing Code that isn't Needed