The structure of development shouldn't be on individual projects but on collaborative ones following the FOSS software development methodology.
Code review, working with issues, writing readmes and docs, all allow for deeper thinking about programming and allow for more responsibility for the learners.
Definitely trendy at the moment in the professional field, pair programming is where two people code together, one person "driving", typing and interacting with the code, and the other "navigating", thinking about what comes next, keeping an eye out for bugs.
The biggest difficulty is that it requires coincidence of projects and skill levels. It also requires a certain baseline of interpersonal skills.
A self directed programming retreat. There's lots to learn from them in facilitating a productive and healthy space for learning programming. In particular their social rules are very worthwhile.
A day long event/hackathon to get students (mainly high schoolers) to code. There's a tutorial + time to hack.