The sterophonics have got it spot on, and this applies equally to software development when it comes to architecture. I went to the last DNUG meeting where Ian Cooper gave a great one hour presentation on Monorail one of the points he emphasised during the talk is to employ “Just enough architecture” is all you need. Over architehcting will usually lead to uneccessary complexity in your application.
The question that logically follows the above is, how much is enough? Well if you find yourself writing a lot of code to do something that is fairly trivial and the consumers of your application are not deriving any gain then the chances are you have over engineered the solution. As a developer it is easy to be lured by fancy patterns and advanced architectures, as you are probably fueled by a desire to improve your own understanding of them. A good developer’s first loyalty should always be to employ the most elegant and efficient means to complete the task.
So what are the consequences of a needlessly complicated design? For starters you will be less agile, decisions to implement changes will have to be more considered due to the possible impact they could have. New team members will take longer to get up to speed and will need more guideance. The amount of resources needed for maintaining the application and the quality of that resource may also be greater.
In the end it comes down to this, you wouldn’t use a sledge hammer to open your boiled egg at breakfast, so don’t use a polymorphic, OO, MVC solution when a batch file will do.