We use an APEX form - uses API - that our developers created for instructors to create sandboxes themselves. The field for course name is editable in the form, but not once the course is created. We have these sandbox courses created in a sub-account (development) with the permissions set so that instructors can add/remove other instructors and TA's but no student enrollment is allowed. This prevents them from using these courses as a regular-for-credit course. They can copy the material to an SIS course when they are ready to go live. They can share content (without violating FERPA) with other instructors in development courses. If they need to share the content with students, like for an "advising corner" then Account Admin moves the course to yet another sub-account (Manually-created) that does have a second faculty role (we call it Teacher-Plus) that allows student enrollment.
It is important is that you "Allow teachers to create courses" in the account settings but use Javascript/CSS to hide the created course buttons in the UI.
Another tricky part of this is the self-enrollment feature. We discovered that if there was no SIS_ID when the courses were created in the development sub-account, then instructors could activate self-enrollment and by-pass our system. We modified the APEX to add a bogus SIS_ID based off (the user_id and a counter) to close that gap. When we move the course to Manually-created we remove the SIS_ID so that self-enrollment is active in those courses.
This discussion post is outdated and has been archived. Please use the Community question forums and official documentation for the most current and accurate information.