This was a question posed on the Rails Studio mailing list…
My initial reply to a suggestion to check out Railscasts was…
And then, once you are happy with your learning, throw away all of your Auth code and get the Devise gem loaded and working 🙂
To which, the OP replied:
Hmm, I would think your own custom solution would always be smoother than using someone else’s code. Why use Devise?
Here is my reply:
One day, in a galaxy far away, I needed to have millisecond resolution timing on the PC to do some reaction time experiments with subjects as they were exposed to various shapes and colors (eventually used to improve HUD symbology for fighter aircraft display). Since the computer timer chip could only get down to 54ms, I was on the prowl for a better way. Lo and behold, I found some assembly code techniques I could use to over clock the timer chip. Problem solved. I hated writing assembly code… But I had to. Must. Not. Be. Blocked.
Product went into production, and was used by the researchers…
A month or two later, I found an awesome timer package for $50. It did what I needed and more, by a guy who specialized in this.
As fast as I could, I ripped out my code and dropped in the new library. I never looked back. You see, timing was not core to my research app, but rather contextual (like printing or graphing). (As an aside, the module grew and grew and kept up with hardcore CPU vagaries… it was able to tune itself in spite of processor logic becoming much less predictable as it went from 286 to 386 to 486 to 586. I was glad I didn’t have to keep up with the CPU technology! I used this same core functionality on apps that I wrote to control missiles in real-time.)
So, if your business is all about writing an authentication module, then that is what is “core” for your work, and you should craft your own and hone it to perfection.
Or, if you just want to do it as a learning exercise, that is great! Learn, and then pitch your code.
But for me, I am all too happy to drop in some other folks’ gem that gets a set of functionality up and running quickly, so I can get on with my core functionality and not be distracted.