How do you go about introducing the codebase, which may be rather complex and tangled with a lot of "gotchas," to a new member of your team?

I think the easiest way would be to have the overall architecture laid out with diagrams, and take a couple weeks (or months) giving the new person well defined (and well scoped) tasks as he becomes more accustomed to the code.

However, as a consultant (and junior employee, at that,) I can't always have that either due to time constraints or team role designations. (I have been on this particular project twice as long as anybody else, so "junior" is in no way "knows less about the code/project.")

I've been tasked quite a few times now to introduce a new member to the project and code, and sadly each time I find I'm not much better at it than the one before. I love diagrams and pictures, but often feel that they don't adequately account for the complexity in a system. (What about all the little's "gotchas"?) 

The project is getting to a point where we will be handing it off to the client, and to make things more challenging, the person I'll be doing a knowledge transfer with is essentially just out of college. (Not that I'm much better when doing knowledge transfers with senior developers.)

I attend a user group once a month and other opportunities as they arise, so I'm not unused to be being introduced to new topics, but feel my ability to replicate effective knowledge sharing woefully inadequate.

Any advice would be greatly appreciated. I am looking mostly for a guideline I can follow. For example: Where do you start? How do you proceed? How do you cover unfamiliar technologies or patterns on the listener's part without taking all day? Where do you tie in business logic vs. code-structure?

Thank you!

(As always, please feel free to edit the question as you see fit.)