
I'm a huge fan of using
patterns when designing web services, especially when it comes to user interaction and non-core tasks. There's a number of reasons why:
- You can focus on what differentiates your service, rather than re-designing what others have already worked out through trial and error
- Users are happier with interaction flows they expect -- and generally, they expect what they've seen before when using other products
- If you're working with a team, they'll generally understand and build a known pattern faster and more correctly than a totally new design, even if the new one might be marginally better
Sometimes though, using patterns can get you into trouble even if they do fit the immediate requirements. As part of building
IsAlternateSideParkingInEffect.com, I utilized a very standard pattern for validating new users -- sending an email to a user with a unique token, then requiring that they provide the token from the email to the system in order to fully activate their subscription.
Frankly, it worked well -- too well. Only about 50% of users would complete the validation (and I assume that the number of spurious submissions is well below half.) For a service where the risk of a faked registration is almost nothing, the pattern was costing me way too many users in the process of guarding against them. The guards were protecting the front gate, but they were eating all of the villagers' food.
I've since changed the process to an "opt-out" model - when a user submits their email to the site, they are immediately "activated", but every message they receive from then on has an unsubscribe link at the bottom. Making this relatively simply change from the established pattern immediately doubled the yield rate of subscribed users per unique visitor to the web site. It was simply a case where the "best practice" pattern didn't fit with the realities of a very specific service design, and acknowledging that reality.