I've had the opportunity to lead and be part of a few coop programs over the years. These programs themselves are not hard to set up, but when done right they do take a substantial investment from you the company to help your coops grow, when done wrong, they leave a bad taste in everyone's mouths. Here are some tips to understand what you are doing and how to setup it up.
Coop students are not Junior Developers. Sure you can classify them as juniors if you wish, but they are a bit of a different breed, primarily because you only have them with you for four to six months at a time, so the learning tracts you apply to them are going to be vastly different than those for a junior developer. In addition, these are generally students who are just learning development frameworks and concepts whereas junior developers generally know a few things.
This is a big mistake I see people make that leads to confusion in learning paths.
Before you even start up a coop program, what are you hoping to get out of it? If it's more horsepower to finish that last release push, they will not give it to you and you will feel let down (and so will they). Generally, I try to keep projects that have value to the team but no one has time to work on. In addition to this, the time to complete the project is not of massive consequence. If they finish it great, if they don't, that's okay too because they have probably done some learning legwork to let someone else on the team take over.
For each coop I have had come in, I generally have 4 to 5 projects for them to tackle. I've had a few coops that have gone through all projects and asked for more and some that only got through the first two projects.
That's alright, the coop is for them, not for you.
After all the interviews have been done and we're sitting down for the first time. I always ask the coop what area of code they want to work on, what their goals are, and where they want to focus. From here, I try as hard as I can to get exposure to those areas so there is some good value for them. In the end, it's a mix between what we have for them (maybe grunt work to them) and what they want to do (shiny new cool stuff).
I like this balance so they realize it's a bit of helping everyone around the team.
Internally, when a new round of coop starts, I look to talk to the team for project ideas and generally to see who would be up for mentoring someone for the next few months. The work involved here is significant as it probably eats a day of their week in terms of helping them set things up, review code, give them feedback, sit down and talk to them - essentially be their best answer for everything they are working on. Depending on the projects, this might narrow the pool of mentors.
I like to keep to Intermediate/Senior developers here only because they are more established in their coding and it's a great opportunity to see how they would handle leading/mentoring individuals in the future. In this way, the coop program is helping us grow our internal leaders by seeing how they fare with new team members.
As a rule, I try not to have someone do back to back coop mentoring sessions only because it's a good break and lets them take a step back and think about how it went and what they would change for next time. And it lets other people jump in which is of huge value to the company.
Whether they like it or not. On their last day, I ask each coop to give us a presentation. Us being me, their pair mentor, and the other coops and pair mentors. It doesn't have to use PowerPoint (although it helps) and we encourage live, breaking demos. The point is, the software isn't all code and this is a great way for them to learn some additional skills that we think will them in life. The format is pretty simple - what did you do, what was the good, the bad and ugly of being here and what do you think we should change.
Every one of these presentations I have sat through has been completely different and everyone on the team looks forward to it. It's the final learning exercise where we take the feedback they have given us and think of what we should tweak next time.
I haven't run any coop sessions in the newly "everyone is remote" world and would think there are some challenges here, but I believe the framework would be similar before jumping into it - what are our goals, what are your goals, here is your mentor and what did you get out of this. We've had some great success with the above and have even had students reapplying for their second and third-round coops to come back which is always fun for the team to see how they've grown.