An interesting question is posed by Simon (in trackback).

It is also true for many other professions.
To design simple solutions requires you to think more. The final solution may be simple but be assured that for every simple solution the developer had to reject several more complex solutions along the way. It is easy to fall into the habit of not thinking and start implementing first (keyboard happy developers), then think later to fix bugs. And the developer should be always ready to reject outright his much cherished( and debugged till the sun grew cold) solution at a moments notice (time & cost permitting) when he finds a simpler alternative. Why? because simple is often more robust and easier to maintain.