I’ve worked on a number of consumer products in my career, some with registration schemes, some without. What is the purpose of a registration scheme? Are people trying to prevent piracy? Are they trying to keep the honest people honest? Or is there some other motivation? For me, it is about motivating people to purchase the software when the demo has expired (in my shareware world). With some of my products, people use it, like it, and forget that the software is even working, so they forget to register. A registration scheme here has proven to be quite effective on my NotifyMail program. I had another program called PhotoCapture that had no registration scheme (I was young and dumb) and asked people to send me a postcard if they used it. I know it was used on various websites back in the day, but only got a handful of cards. That method clearly didn’t work.
I worked on one product that had such sophisticated registration that it made the product hard to use. That and the fact it was buggy lead to its downfall. So is there a happy medium? In many cases, yes, as long as the software is useful and used frequently. In my opinion, if a product is used infrequently (there are some products that a demo version suffices for some), its value goes down to me and then maybe it needs stronger protection. I was playing around with a program yesterday that I had tried months ago while working on writing something that had a similar concept, but worked in a completely different way. Since I had tried the app, the demo expired and I couldn’t play with it or reset my demo period. After about 3 minutes of poking around with Interface Builder, I discovered a serious flaw in their registration system (Interface Builder is a free developer tool that is available from Apple and ships with every Mac). They had 4 buttons on the registration screen that popped up; register (brings up a dialog to enter your code), purchase (takes you to a website), quit, and try. The try button was grayed out because my demo had expired. So in Interface Builder, I duplicated the try button, linked it to the tryAction, hid the original try button, and then ran the application. Oops. Now I had a working version of the application that I simply had to hit the try button each time I ran it. A simple code/design change could have fixed this. Instead of having a quit and a try button that were separate, have one button that had the title change depending on if the demo had expired and then have the action linked to “dismissRegisterDialog” where code behind that would determine if it should quit or should run in demo mode.
Of course I won’t say which app this was, but a few more minutes with the registration code could go a long way. I don’t think most developers should spend a ton of time on registration schemes as they will be broken by hackers anyway. I think it’s important to make it hard enough that the casual person, even developer, can’t break it. I definitely don’t put in registration schemes that are hacker proof, but they seem to work good enough. In my next product, I think I may take a different approach.