title: Should checkins be small steps or complete features?
body: <p>Two uses of version control seem to dictate different checkin styles.</p>
  
  <ul>
  <li><p><strong>distribution centric</strong>: changesets will generally reflect a complete feature.  In general these checkins will be larger.  This style is more user/maintainer friendly.</p></li>
  <li><p><strong>rollback centric</strong>: changesets will be individual small steps so the history can function like an incredibly powerful undo.  In general these checkins will be smaller.  This style is more developer friendly.</p></li>
  </ul>
  
  <p>I like to use my version control as really powerful undo while while I banging away at some stubborn code/bug.  In this way I'm not afraid to make drastic changes just to try out a possible solution.  However, this seems to give me a fragmented file history with lots of "well that didn't work" checkins.</p>
  
  <p>If instead I try to have my changeset reflect complete features I loose the use of my version control software for experimentation.  However, it is much easier for user/maintainers to figure out how the code is evolving.  Which has great advantages for code reviews, managing multiple branches, etc.</p>
  
  <p>So what's a developer to do? Checkin small steps or complete features?</p>