I never had to work on the same file with other person but I have 3 ways to deal with multiple versions of a design file.
Milestones
I used milestones for a moment when we were trying the AGILE way as designers (like some developers do). It's quite efficient but takes quite some times (more when you begin to use this. At the end, it's quite nice). Lots of organisation needed.
Number/dates/details in file name
When I started design, I dealt with numbers for versioning. Horrible. Seriously, don't. Or be organize. "Design1.psd" "Design2.psd" etc...
Dates/Hours are nice if you got a good memory of what did I do yesterday?. In my case, less horrible than number but not much more powerful. "Design20100801-1112.psd"
Details are better. I used names like "Design20100801-1112-add-pattern.psd" = date-hour-details. Quite long filenames but it's fast to use and you find your file quite faster than any previous method.
SVN or GIT
a.k.a the real version control
I, now, use SVN. I save regurally the same file "Design1.psd" for example. And every hour or every pause I commit my modifications and give details about it.
If I made an error or the client wanted the previous version, I just update to version xxx and it's done.
It also gives you the power of branches and tags which are really interesting to handle milestones.
There's a reason why developers use version control software/DB/etc... It's efficient and designers should use it too. (But it's quite hard to understand/use in the beginning)