|Think about Loose Coupling|
Related to the learning effect, but not entirely the same:
Sometimes you need to reinvent the wheel (and recognize how poorly you did it) to recognize the value of the existing wheels.
It has happened a few times to me and others close to me that I thought all the existing solutions to some problems where too complicated, overdesigned and/or overkill. Then somebody set out to reinvent the whole thing in simpler, learned more about the problem domain, and the end result looked not much simpler (if at all) than the existing solutions, and far less powerful.
And that's not so surprising if you think a bit more about it, because most good pieces of software (or other engineering results) are iterations of previous, worse products, and the people who made them gathered lots of experience in the process.
When you enter a new problem domain, you're overwhelmed by its complexity, and can't distinguish essential complexity from accidental complexity.