One interesting discussion thread about over-engineering in project:
"Whether I practice TDD is irrelevant. Over engineering existed in Java long before TDD came to the forefront. Every project I come onto (commercial/financial) it is the same story. Java 'architects' over-engineer their creations and that code stays the same for years. 90% of interfaces in these type of scenarios only have one implementation and only ever will.
My experience tells me to add interfaces to implementations as and when they are needed, not before. "
"Whether I practice TDD is irrelevant. Over engineering existed in Java long before TDD came to the forefront. Every project I come onto (commercial/financial) it is the same story. Java 'architects' over-engineer their creations and that code stays the same for years. 90% of interfaces in these type of scenarios only have one implementation and only ever will.
My experience tells me to add interfaces to implementations as and when they are needed, not before. "