1) In most programs, the design doesn't actually matter; just make it work. This is why Java can actually be used successfully to build most programs.
2) In some programs (or parts of programs), the design really matters. If you screw it up, disaster ensues.
People accustomed to writing type-1 programs can be caught by surprise when a type-2 problem hits and they try to use a type-1 solution.
I think this model pretty much exactly explains my experience with delegating tasks to other people.