It was designed so that instead of having to have a central body allocate major and minor numbers (unique identifiers) to devices, you could access them more like a namespace. For example, your serial port /dev/ttyS2 would become /dev/tts/2; console /dev/tty3 would become /dev/vc/3. You could still have support for the old names for software that would otherwise be confused by these changes.
You can find a detailed description of devfs at http://www.atnf.csiro.au/people/rgooch/linux/docs/devfs.html.
devfs was abandoned for a number of reasons: there were problems with its implementation in the kernel which nobody was prepared to fix, and it enforced a particular device-naming policy, which many people felt was not something that the kernel should be doing.