It implements something, and then subagent reviews it (the main one waits or does something else in the meantime, so yes it's serial, subagent is for having fresh context and evaluating changes as they stand not being biased by existing thinking and discussion), and then the main one implements fixes that are worth doing (because you will inevitably end up with some nitpicks).