I think you should test users “motor coordination” & reflexes. After all, that’s what traffic police does when he stops you.
Some sort of game where the user needs to quickly burst some randomly appearing bubbles (= reflex test) and draw straight lines (= motor coordination test) on the screen comes to my mind.
Alcohol impairment is also characterized by poor perception of
time…have them hit a button in 10 seconds with no timer or
Btw, I am willing to test your solution for free provided that you pay for my booze 🙂
Other than a silly novelty thing (e.g., the gmail labs “mail goggles”) or requiring a breathalyzer attachment to activate (e.g., your application starts automobiles for people with past DUIs), its not worth it.
Assuming your application is useful and people will want to use it while both drunk and sober, any barriers that could differentiate the ability of some moderately drunk person and a sober person will filter out a lot of sober people. Requiring fine motor tests or math/memory questions will let lots of drunkards through and frustrate a lot of sober users, especially if the user is in a rush, commuting, or multitasking.
For example, I primarily use mobile devices mostly while commuting on the subway. I won’t be able to trace a line easily as I’m standing on a moving train with people bumping into me; or it may take extra time to type in math answers with one hand holding the device and the other switching back between holding a pole and typing on the device.
Most of the time when one is moderately drunk (BAC ~ 0.10), you can temporarily focus to pass these sorts of tests if they try. A college friend would always try doing difficult math while drunk (e.g., advanced calculus and do it correctly) and then shortly after pass out or vomit.
How do we know when to test if the user drunk?
An app that requires a test before you can use it at start up will be so frustrating you’ll stop using it immediately, well intentioned or not. A schedule system would allow users to specify when they wish to be tested (e.g. I might be drunk after 8 PM on fridays and saturdays). Most importantly, this could allow you to have an app that blocks other apps based on a schedule; rather than building this feature into a single app, one could have an app that blocks texting, email or calls, rather than requiring the user to use your proprietary app. (this has implementation due to access rights, but is a possible feature)
How do we know you’re drunk?
Speech recognition is an advanced possiblity. Computer analysis is now possible which can detect slurred speech. This will likely work for a majority of users, but it’s important to consider users may be mute or may be using their phone where speaking aloud would be inappropriate; while a nice feature it should not be the only way to test drunken users.
The easy software solution would be an integrated breathalyzer; this of course requires specialized hardware, but isn’t completely infeasable; these devices are cheap and could be a peripheral or built into a handset from the get go.
Barring speech recognition and specialized hardware, a motor skill and or reaction time test is the common solution; alcohol significantly impairs task performance. Allow a user to set a baseline performance (to accommodate users with better or worse motor control/reaction times than typical) and give them a test. Common motor skill tests could be simple commands like “tap here” on a touch enabled device or a typing test.
Asking a user to set a “drunk baseline” would be a very bad idea; never encourage irresponsible behavior.
What do we do if they’re drunk?
Give the user several tries to retry. I would hesitate to ever implement a “lockout” that prevents future tries. You could leave a lockout or timeout feature as a configurable option; users with poor motor skills will want it off, but, ahem, “power users” of alcohol might want the extra security a lockout provides.