At work, we design Java applications using "UML as a blueprint", having separate people designing and coding the applications. Although this is a tedious and long-winded process (mainly due to the synchronisation of the UML classes and the developed classes), generally the objects designed reflect the developed classes that go-live.
During coding at home, I've always tended to jump straight into coding applications - almost always meaning a complete overhaul of the objects halfway through the development process due to them becoming "just a load of barely-related subroutines".
Does anyone do any up-front design on their applications when working on an application where they are the sole developer? Or, does the whole "re-architect half-way through development" always happen and it just gets better with experience?