In anticipation of a relatively large project, assign smaller projects that include the programming concepts necessary for the large project.
Provide multiple equivalent project options, but keep the number of choices limited to ensure that students have enough time to complete an assignment.