...
That's an important distinction. Most developers I know have a built-in bias to think about implementation details when presented with a problem, and I'm no different. I immediately think about the code, and why shouldn't I? I'm a developer, right? But thinking about the code can get in the way of a good implementation.
Thinking about the box
To solve tricky class design problems, don't think inside or outside the box; think about the box. That is, the black box (or boxes).
...