Since working at Indiana University in 2012, I have mentored interns and graduate assistants in user experience design, and I have taught backend developers to program in front-end development. Each of these types of relationships are treated differently.
For programmers, teaching is handled mostly through paired programming. We solve problems as they emerge from team projects. Staff developers already have a technical foundation, so they need to learn how to translate syntax to another language and how to work with different toolsets.
Graduate assistants tend to have an academic foundation in their field. Work projects put into practice what they’ve learned in the classroom. Critique and exposure to other full-time staff in their field help them refine their craft.
Interns need more ongoing support, as they may not have much prior experience in the field. Establish goals for both the intern and the organization at the beginning of an internship. Impact maps can define successful outcomes, who can contribute toward those outcomes (the intern, the mentor, other staff, stakeholders), and what those people can do to lead to those outcomes. As the internship progresses, the impact map can be updated to reflect what has been done and what still needs to be done. This approach allows the internship to be a guided, evolving, and well-documented collaboration. It results in skills that can be learned and put into practice, at a pace that is agreeable to everyone involved.