Hi there

Hi there,

I was wondering how you measure your software, I mean, how you know what the best feature of your software is, the feature which is less used, how often and for how long features are used and so on.

I know there are surveys for that but if only 10% of the users answers then the answer is not meaningful.

Comments

  1. To do this successfully, in an ideal world, you need the concept of a "user" where you can track the same persons behavior over time. You obviously don't have to know who they are, but ideally you know they are the same person.  If you can make the assumption that the software instance on a single computer is used by a single  person, that is very helpful. You also really need to know when a session starts and ends. Then you can get meaningful stats about how often different people use a particular function in a given session.

    ReplyDelete
  2. I use a "coverage log" on my corporate products.  I log button and menu item clicks, tabbed notebook paging, Etc events to a database table and then analyze the data offline to see what features are actually being used and how often.  Multiple projects can share the same coverage table by adding a project ID column and setting it accordingly.

    DROP TABLE IF EXISTS `utility`.`coverage`;
    CREATE TABLE  `utility`.`coverage` (
      `id` int(10) unsigned NOT NULL auto_increment COMMENT 'unique id',
      `progid` int(10) unsigned NOT NULL COMMENT 'program id code',
      `hittime` datetime NOT NULL COMMENT 'date/time of coverage hit',
      `unit` varchar(45) default NULL COMMENT 'unit name',
      `line` int(10) unsigned default NULL COMMENT 'unit line number',
      `classfunc` varchar(255) default NULL COMMENT 'class-methodname or unit-func name',
      `msg` varchar(255) default NULL COMMENT 'optional message',
      `progver` varchar(20) default NULL COMMENT 'program version string',
      `uid` int(10) unsigned default NULL COMMENT 'user id->progusers.id',
      `mid` int(10) unsigned default NULL COMMENT 'member id, if any',
      `hostname` varchar(45) default NULL COMMENT 'hostname, if appropriate',
      `ip` varchar(25) default NULL COMMENT 'ip if any',
      `loglevel` int(10) unsigned default NULL COMMENT 'loglevel',
      PRIMARY KEY  (`id`),
      KEY `Index_2` (`unit`,`line`,`classfunc`,`progver`),
      KEY `Index_3` (`progid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1352569 DEFAULT CHARSET=latin1 COMMENT='app coverage for usage studies';

    ReplyDelete
  3. I use JEDI Debug code to figure out the unit, method/function name and source code line number that is added to the above table.  That way I can just add a call to "LBC" (Log Button Click) in my click handler.  The JEDI debug code looks at the return address for LBC and figures out the source code info for LBC's location in code.  LBC then inserts a new coverage record with all of this complicated junk filled in.  Look mom!  I logged coverage using 3 (4 counting the semicolon) characters per click handler!

    ReplyDelete

Post a Comment