For me, it's a bit like this:
- Alpha: the software is useless or can't be understood/used by anybody. Test with a small group of really interested people
- Beta: the software is incomplete or buggy, but can already be used by the target public. Test with a bigger group of users or go public
For example my project ZetaMode (an online game) is in alpha because we are still missing a bunch of core features and some more advanced features are still under considerations. It's totally useless and not really fun at the moment.
Once all features are added and the game will actually become playable, we will open it to more users. That's where we will test our concept "under load". This part would be the beta.
Stable would be the public & user friendly version. And of course as bug-free as possible.
But in the end, you give it the name you want ? You can call it beta right from the start if you want.
You should probably not plan your features based on alpha & beta. These are just honorific names for your milestones that you will choose based on how quick/well your implementation goes.