Some thoughts I had regarding effort. Too often I think that people spend more time on getting the implementation set in stone, rather than making sure that the higher order issues are well defined.
This is the order of emphasis on permanence and therefore effort in getting it right.
Design Pattern – correctly identifying the “shape”. The design pattern should only change when the function of the system changes.
Architecture/Design – correctly selecting the parts to fit the “shape”. Architectures should only change when advantage can be gained (or the design pattern changes)
Implementation – correctly building the parts. Should be reviewed and changed as required.