Few contexts
If we ignore the terminology for a bit - some apps have a feature called "contexts", others have "tags", others have "labels", others have "categories" etc etc, and some apps have several of these with different technical capabilities - I think there are two main types of potential use for these "contextual properties".
1) One purpose is grouping the next actions into separate lists and/or into list sections in order to make them easy to overview. For this purpose I personally prefer to have only a few contexts defined, mutually exclusive - only one context per task; the most "scarce" one only. I use these five:
@Person - this action requires real-time interaction with a person (phone, meeting, chat etc)
@Out - this action requires me to be in some temporary location (shop, others' office etc)
@Reflection - this action requires a good thinking environment (mental calm, enough time, not tired etc)
@Base - this action requires me to be physically at my Home/Office
@Device - this action requires me to use a computer, tablet, phone or other particular tool
The listing order above is far from random. If an action requires more than one of those contexts I select the highest one. Specific people are usually the hardest resource to have access to, whereas computers etc are usually the easiest (maybe almost anywhere), so if an action requires me to sit with a person and look at a computer I will assign that action an @Person context.
The @Reflection context provides me with a convenient (perhaps a bit "dirty") means to flag tasks for reprocessing or special review if I think the task is not clear enough as it stands. For example, if I am not sure yet whether it is best to instruct Jim by phone (@Person; real-time dialogue) or to email or voicemail him (@Device; one-way monologue) I assign it a @Reflection context to begin with.
I like it short and sweet like that, because the fewer contexts there are, the fewer buckets I will have to look into. I can often make the final task selection ocularly straight from the list.
2) Another purpose for using "contextual properties" is to be able to quickly narrow down the list to find more exactly the best matching tasks for a given situation right now. In order to do this you have to be able to apply all the contextual requirements, e.g. @Person and @Out and @Devices (or even more detailed. e.g. @JimX, @Bridge, @CameraB, @Sunshine, @Afternoon) and have the filtering capability to make use of this. You seldom have that kind of filtering capability conveniently available in an app. So, realistically, and what I do half-systematically only, is I keep a few non-exclusive additional tags for very frequent contacts and apply those in addition to the main context. I also tag tasks that are particularly large, scary or otherwise revolting that I may want to tackle when I am in the mood for a heavy challenge or may want to see it looming on the horizon during my reviews.