We require students to have a written "spec" by the end of week one, a working "prototype" by the end of week two, and then the final program at the end of week three. Each of the intermediate milestones are checked off by a T.A. It's annoying to need to require it, but it makes sure that they actually are working all the way along. We also require pair programming. While it's entirely possible to work more efficiently when working separately, once we started requiring pair programming, the "oh my gawd, my partner flaked on me and I'm so screwed" incidents virtually disappeared. That's worth something.