I wrote a small video library app. It renders private Vimeo videos for paid subscribers.

The owners of the app would like to reward users who watch videos. My first implementation was to trigger a watched mutation at 80% of the video playback (this was not ideal but clients demand features). Users have figured this out and are cheating by skipping to 75% and letting it tick over then moving onto the next video. Users only score one watched event so replays aren't a concern.

I can think of a few ideas to stop this behavior but would be interested in other answers to this. It doesn't have to be YouTube levels of fake engagement prevention.

  1. Check n times through the watch, if user sets m/n (they are allowed to skip a bit) they are granted their reward
  2. Check start playback time against time at 80% and have they spent enough time on the video.

If it matters I am using React and Apollo.

  • 2
    Measure how long they have been watching, and record that. Or have segments (say 20secs) and record which segments were watched in their entirety. If enough time/segments of the total have been watched provide an award. – Kain0_0 May 18 at 0:03
  • 1
    Even with a perfect algorithm in place, what's stopping me from running multiple tabs, muting my computer, and walking away to go do something else? Passing out rewards based on an easily falsifiable metric is going to be flawed from its inception. – Flater May 18 at 9:06

In the end, they can play a video while doing something else, so there's nothing you can do.

I’d check that 10 different points in the video are reached the correct real time apart. Taking into account that they might fast forward for short times (some scene that the kids shouldn’t see).

| improve this answer | |

Some people will cheat when the reward is high enough in comparison to the effort and the risk/consequences of getting caught. You've described some ways of cheating, now think like your users and try to find ways of cheating every solution that you come up with. If the reward/effort relation is too low for users to consider cheating, you might have found a solution that works.

One consideration: users may turn on video, do their laundry, and return just in time to start the next video. Is this conceivable? If yes, you might need to include presence checks using the webcam or users filling out questionnaires about the content. Are you willing to invest this effort, and are your users willing to cope with these additional conditions?

| improve this answer | |
  • I wholeheartedly agree with this. There's the saying about making things idiot-proof and the same applies for cheating. I think they just want to obscure the reward from being at a fixed time. – hsimah May 19 at 16:20

This isn't the kind of concern you resolve technically only. The point of this app is, you want your users to watch those videos.

The best way to do this is to entertain them. Make them watch less, but better videos. Target them with easier to watch videos, and ask questions after the video. Maybe make them write a small description or how they liked it. If that's an enjoyable experience, they're way more likely to avoid cheating at all.

You could also reward people more for less enjoyed (or less chosen) videos. Those videos would score better and you'd get to know why it was so boring in the first place.

Acting like users are robots will make them act like robots. They're very good at it. They'll always be better at cheating than you at catching them.

| improve this answer | |

Don't develop a specific "video watched" event. Instead implement web analytics for all use interactions with the page. Then on the back end you can calculate an engagement figure from a combination of events.

This will allow you to change and improve the measure of engagement without changing the code.

If for example you notice people are skipping forward and don't want to include them in your measure, or say only award them half a point or whatever, you will be able to see all the events, start video, skip forward, press play, next video.

Where before your calc may have been:

1 view = pressNext.Time - pressPlay.Time > 75% of vid 

you can change it to :

1 view = (pressNext.Time - pressPlay.Time > 75% of vid) && no skip event in bettween
| improve this answer | |
  • This would be good if they client had the time to pay me to implement it. As it stands they just don't want the reward to be at a fixed time. I this measuring the total time the video is playing against a minimum watched value is the way to go. – hsimah May 19 at 16:21
  • consider doing it so you can charge them for multiple changes going forward with little work required for you – Ewan May 19 at 18:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.