IMHO, anyone who isn't using some kind of revision control is just asking for trouble. I used to be like EvanCarroll, and eschew it. My moment of epiphany came when I had a "well, it worked yesterday, why the hell doesn't it work today" moment for about the nth time, and realized how much work CVS saved me:
- Find yesterdays tarball
- Unpack it somewhere safe
- Look at timestamps to see which files I changed
- Use diff on those files to find out what I changed
- Figure out which change breaks what
vs.
- Use CVS to do a diff between last CO and current files
- Figure out which change breaks what
After that, I started using CVS for everything I worked on. The more I used it, the more valuable it became. Some of the advantages:
- Multi-branch development. You can easily manage "stable" and "unstable" branches, adding patches to the "stable" branch while working on new features in "unstable". Merging the patches from stable into unstable later is straightforward.
- Multiple work sites. So I work at home and at the office, often on the same project. Sometimes I forget to save my home changes to the repository before coming in the next day (i.e. make changes at home, make changes at work, commit changes at work, make changes at home, commit changes at home). No big deal with CVS (or SVN, etc.): the merges are done automatically.
- Collaboration with other developers. This is a big one: two devs can work on two files at the same time, and neither will lose their work -- the control system takes care of the merge. Not only that, but I can easily find out who made the change without having to rely on them remembering to add their name in a comment.
Much like test-driven development, CVS or SVN can seem like a waste of time at first, but after a little while one realizes that it actually saves time in the long run.