I usually end up making three versions of even a simple widget.
Version 1.0 is because that's the obvious way it needs to work.
Version 2.0 is a redesign because something cropped up that didn't seem to be important in the original idea.
Version 3.0 is to redesign the whole thing because what seemed to be obvious in Version 1.0 never actually addressed the crux of the problem and, in hindsight, neither did Version 2.0.