i don't want to be annoying or anything but in my oppinion there is no holy grail of programming. if you make software it is always more complex then you hoped/thought it would be. if you draw a picture with an arrow and some blocks you always loose detail (did the arrow mean an invocation? was it dynamic? or was it static?) if you try to catch it all (like uml) then the drawing goes as complex as the code is and the idea of making it understandable with an piture is lost somehwere in the hundreds of printouts of beautiful uml images.
sure it's not all bad, oop offers some extra ways to structure your code for instance. but don't be fooled, it wil never bring you the gold that was prommised to be at the end of the rainbow.
i think that it doesn't matter as much which design/way you choose to organize your code as it matters that you stick with the choice you made and keep everything consistent.
having said that i think that there are a few things that are great, one of them is your own mind (of course, lol) and the other would be refactoring tools. they can really help you keep your code from going in decay, and add structure to it later on.
so the moral is: there is no holy grail, just some handy tools maybe
i hope you can proof me wrong though!