Originally posted at 12/3/2010
I recently had a discussion on how I select features for NH Prof. The simple answer is that I started with features that would appeal to me. My dirty little secret is that the only reason NH Prof even exists is that I wanted it so much and no one else did it already.
But while that lasted for a good while, I eventually got to the point where NH Prof does everything that I need it to do. So, what next… ?
Feature selection is a complex topic, and it is usually performed in the dark, because you have to guess at what people are using. A while ago I setup NH Prof so I can get usage reports (they are fully anonymous, and were covered on this blog previously). Those usage reports come in very handily when I need to understand how people are using NH Prof. Think about it like a users study, but without the cost, and without the artificial environment.
Here are the (real) numbers for NH Prof:
|Action||%||What it means|
|Selection||62.76%||Selecting a statement|
|Session-Statements||20.58%||Looking at a particular session statements|
|Recent-Statements||8.67%||The recent statements (default view)|
|Unique-Queries||2.73%||The unique queries report|
|Listening-Toggle||1.10%||Stop / Start listening to connections|
|Session-Usage||0.91%||Showing the session usage tab for a session|
|Session-Entities||0.54%||Looking at the loaded entities in a session|
|Query-Execute||0.50%||Show the results of a query|
|Connections-Edit||0.38%||Editing a connection string|
|Queries-By-Method||0.34%||The queries by method report|
|Queries-By-Url||0.27%||The queries by URL report|
|Overall-Usage||0.25%||The overall usage report|
|Aggregate-Sessions||0.21%||Selecting more than 1 session|
|Reports-Queries-Expensive||0.16%||The expensive queries report|
|Session-Remove||0.13%||Remove a session|
|Queries-By-Isolation-Level||0.08%||The queries by isolation level report|
|File-Load||0.04%||Load a saved session|
|File-Save||0.03%||Save a session|
|Html-Export||0.02%||Exporting to HTML|
|Sessions-Diff||0.01%||Diffing two sessions|
|Sort-By-ShortSql||0.01%||Sort by SQL|
|Session-Rename||0.01%||Rename a session|
|Sort-By-Duration||0.01%||Sort by duration|
|Sort-By-RowCount||> 0.00%||Sort by row count|
|GoToSession||> 0.00%||Go from report to statement’s session|
|Sort-By-AvgDuration||> 0.00%||Sort by duration (in reports)|
|Production-Connect||> 0.00%||(Not publically available) Connect to production server|
|Sort-By-QueryCount||> 0.00%||Sort by query count (in reports)|
|Sort-By-Alerts||> 0.00%||Sort by alerts (for statements)|
|Sort-By-Count||> 0.00%||Sort by row count|
There is nothing really earth shattering here, by far, people are using NH Prof as a tool to show them the SQL. Note how most of the other features are used much more rarely. This doesn’t mean that they are not valuable, but it does represent that a feature that isn’t immediately available on the “show me the SQL” usage path is going to be used very rarely.
There is another aspect for feature selection, will this feature increase my software sales?
Some features are Must Have, your users won’t buy the product without them. Some features are Nice To Have, but have no impact on the sale/no sale. Some features are very effective in driving sales.
In general, there is a balancing act between how complex a feature is, how often people will use it and how useful would it be in marketing.
I learned quickly that having better analysis (alerts) is a good competitive advantage, which is why I optimized the hell out of this development process. In contrast to that, things like reports are much less interesting, because once you got the Must Have ones, adding more doesn’t seem to be an effective way of going about things.
And then, of course, there are the features whose absence annoys me…