Code != Design
Methinks I hear a cry of "clues for the clueless!"
Code NEVER equals design, not in any way, shape, or form! I have never seen any implementation that is so bleedingly obvious that the design just leaps out. If the code is that simple, then it was a trivial problem. I have spent many hours working with code that was never designed, and had no or piss-poor documentation. The difference between spaghetti-code and a purposeful design is immense.
A design (and its resulting documentation) makes the data obvious, what actions can be done to the data, and what actions will constitute the complete program. Read a book on Warnier-Orr design, or the Jackson methodology. Seriously! I have solved the "impossible" using design techniques.
Designs are tested by verification. That means that somebody else takes a look over it. After that the design is implemented, and the implementation is tested. If there are errors, then you go back and look at both the design and the implementation.
No, there isn't a big solid wall between design and coding. But if you don't know how to design well, your code is going to be crap. A design document is both for you and other people. It is an abstraction of the idea that is implemented in the code. "Just read the code" is an arrogant statement, and is usually uttered by posturing amateurs.