Resubmitting Projects
The cheating issue is real, and it caused me to rethink how I approached labs entirely. I think of them as learning laboratories now, and don't give them a tremendous weight in grades (though I do spend a huge amount of time grading them, as I grade during code interviews.)

If you want some context for my approach, I have previously outlined some of the ways that I think about lab work here, here, and here.

In general, though, I come to the grading with the expectation that there will be many rounds of refactoring.  

This year, I started a new procedure, and it has worked very well for me and my students. It utilizes my school's SMS (we use PowerSchool, though I imagine that any online grading system would have similar functionality.) 

At our first code interview for a lab, I walk through their code in depth with them, and ask them to explain their approach (big picture) to me verbally. If they start  walking through their code like by line, I stop them and ask for "just an overview". They are allowed to look at their code as they talk, but I don't want a play by play. (Students who have trouble with this raise some potential red flags for cheating.)

I also create a wish-list of comments as I go. "It would be better if you...", or "This code is not clearly written because...". I notate all of these in the comment field for the lab's grade.

As the interview gets to an end, I put on my best unforgiving professor hat, and award a rather punitive grade. So now, the student hasa 33% (or some other vileness.)

Then, in the comments section of the grade, I put on my kindest professor hat, and imagine what grade I would give if they came back in week with all of the problems fixed. Students with better initial labs might wind up with higher grades here, but everyone has rather high grades available.(*) I also leave in the list of problems that should be fixed.

Now, the students have to come back to me with the problems all fixed to receive the higher grade.  I can draw this proccess out as much as I want in order to ensure that my students produce beautiful, clean code. I don't change the grade to the higher one until the code is wonderful. (This may take several attempts.)

(*) - Not cheaters. If you work through my extremely forgiving system and still cheat, I will give you a zero for that section with no way to make it up.