In your example, do you want John and Mary to have completely different activities and resources - or do you want them to do similar things but just not be able to see each others' work?
For instance, is it that both students turn in proposals for their science fair projects but you don’t want them to be aware of each others’ work - or is it something like John will turn in a science fair proposal while Mary is watching a video on the laws of motion?
And is it possible that John will need to watch the same video as Mary, but at a later date?
I ask because Chris's proposal gives you great control and flexibility over how the students do or don’t see each other, while limiting your having to create duplicate content. If they are all doing the same activity (science fair proposal) but you want them to feel like they are in their own class - put each student in his own group and set that activity to separate groups). This keeps their work and the grading and feedback separate, and you only have to build the content once. It also gives you the flexibility to let the students "see" each other - as for a forum activity - when desired.
Like Chris said in his video - Moodle’s system of restrictions is an incredible feature. When you add in the activity completion settings, you can have many students working through the same collection of activities and resources, but with each on his own path.
But - if there is very little overlap in what the students will be doing, it might me easier to set up a separate course for each. You could build one course with the things that the individual courses would all have in common and then use it as a template to create the other courses.
https://docs.moodle.org/34/en/Upload_courses# - see the Course Process section
Welcome to Moodle!