"But beware also the under-engineering trap."
Sure - you have to find the sweet spot between the two extremes. Usually tech people have a tendency to over-engineer (but the truly lazy ones), while the customer and management to under-engineer to reduce costs or increase revenues. Good requirements and processes need to mediate, and pin-point the right solution taking into account the constraints, which could be also users and maintenance people skills, etc. etc.