Before you consider onboarding, make every effort to design your app so that all its features and tasks are intuitive and easily discoverable.
Onboarding is not a substitute for good design.
Give users only the information they need to get started. A good onboarding experience shows users what to do first or briefly demonstrates a few of the features that most users are interested in. If you give too much information to users before they have a chance to explore your app, you make users responsible for remembering details they don't need right away and you may send the message that your app is hard to use.
From personal experience, lots of apps force you to be educated about their awesome features. That’s bad. I’m here not to learn about your app, not to watch your lengthy video tutorials, I’m here to do my job. Instead of having the experience, I'm being told about the experience, and that doesn't feel simple.
A great app is one that just opens up, and lets you start immediately.