How to Avoid Over-Engineering in Software Development