In my last blog post, I talked about the importance of License Server and Purchase Type for merchandise. That introduces at least an all-in-one payment purchase implementation. This blog post, I want to focus on feature design and plugin based software modularization.
As to features, we should design a vertical list to contain all of them, each feature should present in different places, when a customer picks up a purchase plan, we give him the features in our software. And every functionality in our software is a feature, any entry, a context menu dropdown, different buttons, whenever an action is triggered, there is a context in which we check which feature will be presented to our customer.
And we also name all features in an UI first, accordingly, we render the UI for our customer. So we have CustomerFeatures, FeatureChecker, these such concepts. Each feature has a code. We only give customers the features they have purchased. Still we take LinqPad for example, premium purchase has Auto-Completion, more syntax support, etc, also, basic plan is free for everybody. We put a link at a handy place for user to get access to our online purchase webpages to pay! This is very important. Because when our user is typing, they always feel the hardness of having non-premium feature like Auto-Completion