I recommend this article with good examples and explanations:
In short, the three tips are (citing from the article above):
Avoid long up-front tutorials and screen-by-screen walkthroughs
I would bet that when presented with a series of screens that must be swiped through before actually using an app or web service, most of us barely pay attention or simply ignore the content (we have actually seen users do exactly this in various usability studies here at Blink). Swipe, swipe, swipe, swipe, swipe. Ah finally, here is the app I downloaded.
Make onboarding contextual and progressive
Rather than asking your users to remember everything up-front, why not provide guidance as they go? Surfacing helpful information at the point of action is always going to be more effective than a firehose-worth of instructions and explanations at the beginning.
Maximize empty states
Maybe a user hasn’t added friends or followed anyone yet, or maybe it’s a system that requires some user input data for content generation. These “blank slate” experiences are a key point in a user’s journey through your site or app and are a great onboarding opportunity to start demonstrating the value of your product. Empty states are also a very natural point to inject some onboarding to continue guiding users along.