Abstract:
Applications are instrumented to gather usability information. The gathered usability information is analyzed. This analysis can identify, for example, unused or infrequently used features, very frequently used features or features that users have trouble utilizing. Based on the analysis, determinations are made as to modifications to make to the applications. The modifications can be executed by the same instrumentation used to gather the usability data.

Description:
TECHNICAL FIELD 
   This invention pertains generally to updating software applications, and more specifically to adapting application features in realtime, based on dynamically gathered usability information. 
   BACKGROUND ART 
   The process of gathering feature usage data and then adapting software to address identified shortcomings in subsequent releases of an application takes so long that it is nearly useless. Users typically have to wait for service packs or brand new versions of software before they see identified problems addressed. Users would benefit greatly from a more timely and responsive feedback mechanism that resulted in timely updates that adapt the software to address usability shortcomings. 
   What is needed are methods, computer readable media and computer systems for adapting application features in realtime, based on usability dynamically gathered information. 
   SUMMARY 
   As users operate software programs, information concerning what features of the applications are actually used is dynamically gathered. Based on this gathered usage data, the applications are modified in realtime, so that users do not need to wait for new releases or updates in order to see identified problems fixed. More specifically, a gathering module captures usability data as programs are run and transmits the data to an analysis module. The analysis module analyzes the data, and determines things such as which user interface components and dialog options are and are not being used, and which software functionalities users have trouble operating. The analysis module determines modifications to make to the applications, and transmits this information to a modification module. The modification module updates the applications in realtime, for example through the use of dynamic instrumentation. 
   The features and advantages described in this summary and in the following detailed description are not all-inclusive, and particularly, many additional features and advantages will be apparent to one of ordinary skill in the relevant art in view of the drawings, specification, and claims hereof. Moreover, it should be noted that the language used in the specification has been principally selected for readability and instructional purposes, and may not have been selected to delineate or circumscribe the inventive subject matter, resort to the claims being necessary to determine such inventive subject matter. 

   
     BRIEF DESCRIPTION OF THE DRAWINGS 
       FIG. 1  is a block diagram illustrating a high level overview of a system for adapting application features in realtime based on dynamically gathered usability information, according to some embodiments of the present invention. 
       FIG. 2  is a flowchart illustrating steps for adapting application features in realtime based on dynamically gathered usability information, according to some embodiments of the present invention. 
   

   The Figures depict embodiments of the present invention for purposes of illustration only. One skilled in the art will readily recognize from the following discussion that alternative embodiments of the structures and methods illustrated herein may be employed without departing from the principles of the invention described herein. 
   DETAILED DESCRIPTION 
     FIG. 1  illustrates a system  100  for adapting application features in realtime based on dynamically gathered usability information  105 , according to some embodiments of the present invention. It is to be understood that although various components are illustrated in  FIG. 1  as separate entities, each illustrated component represents a collection of functionalities which can be implemented as software, hardware, firmware or any combination of these. Where a component is implemented as software, it can be implemented as a standalone program, but can also be implemented in other ways, for example as part of a larger program, as a plurality of separate programs, as a kernel loadable module, as one or more device drivers or as one or more statically or dynamically linked libraries. 
   As illustrated in  FIG. 1 , a feature analysis manager  101  includes a gathering module  103  for gathering usage data  105  concerning specific features  107  of applications  109 , and a modification module  111  for modifying the applications  109 , for example by adjusting the availability of features  107  being monitored. Gathered usage data  105  is transmitted to an analysis module  113  for processing. The analysis module  113  is also a component of feature analysis manager  101 . The analysis module  113  makes determinations  115  as to modifications to be made to applications  109  from which usage data  105  has been gathered. The analysis module  113  transmits these modification determinations  115  to the modification module  111 , which modifies the applications  109  accordingly. 
   In the embodiment illustrated in  FIG. 1 , the gathering module  103  and the modification module  111  are instantiated in the form of software instrumentation within applications  109  being modified, and the analysis module  113  is instantiated as software running on a backend server  117 . It is to be understood that in other embodiments, some or all of this functionality can be distributed in other ways, and reside on a single computing device or on more and/or different computing devices as desired. It is to be understood that although  FIG. 1  illustrates two applications  109  being monitored and updated, the present invention can be used in conjunction with any number of applications  109  and/or entire systems as desired. 
   The gathering module  103  can glean usage data  105  such as how frequently certain features  107  (e.g., user interface components or available functionalities) are accessed by users, which menu options are and are not selected by users and how long users spend performing various operations (e.g., the lengths of time users spend on a given dialog before selecting an option). As noted above, the gathering module  103  transmits this data  105  to the analysis module  113 . 
   The analysis module  113  analyzes the received data  105  and determines features  107  and options that can be eliminated, simplified, or otherwise improved. For example, if two options are presented on a menu and one of those options is selected 100% of the time by all users, then the second option can be eliminated altogether. More generally, if a dialog contains, e.g., ten options but only, e.g., three of them are ever used with a desired level of regularity, then the unused (or infrequently used) options can be eliminated. If users are found to spend a lot of time determining which option to choose on a given dialog (or on another type of user interface element presenting choices), then that dialog can be reworked, for example by splitting it into multiple dialogs. It is to be understood that these are only examples of the types of analysis that can be performed, and the types of determinations  115  that can be reached. The specific analysis logic to apply and the specific criteria on which to make specific modification determinations  115  are variable design parameters. 
   Once the modification determinations  115  have been made, the analysis module  113  transmits the determinations  115  to the modification module  111  (e.g., running as instrumentation at an application  109  level, as illustrated). The modification module  111  then makes the corresponding modifications  115  to the application  109 , for example by suppressing eliminated features  107 . As will be understood by those of ordinary skill in the relevant art, the instrumentation to allow for significant dynamic changes can be flexibly implemented with data driven user interface specifications such as Hypertext Markup Language (“HTML”), or within the context of more static user interface models, such as traditional Microsoft Windows® programming, which also supports dynamic instrumentation. The implementation mechanics of implementing such dynamic instrumentation is known to those of ordinary skill in the relevant art, and its use within the context of the present invention will be readily apparent to those of such a skill level in light of this specification. 
     FIG. 2  is a flowchart illustrating steps for adapting application features in realtime, based on dynamically gathered usability information, according to some embodiments of the present invention. The gathering module dynamically gathers  201  information  105  concerning usage of application  109  features  107 . As noted above, in some embodiments the gathering module  103  comprises instrumentation associated with the application  109  in question, whereas in other embodiments the gathering module  103  can comprise other instantiations of application monitoring functionality, for example software running as an integral part of the feature analysis manager  101  running on a backend server  117 . Therefore, in some embodiments, the analysis module  113  receives the usability information  105  from an external source running on another computing device. In other embodiments the information  105  is gathered  201  by a process running on the same computing device (e.g., a backend server  117 ) as the analysis module  113 , wherein this process monitors execution of the application  109  as it is being used. 
   The gathering module  103  can gather  201  application usability data  105  such as information  105  concerning which user interface components are accessed by users, information  105  concerning frequencies with which user interface components are accessed by users, information  105  concerning which options associated with user interface components are selected by users, information  105  concerning frequencies with such options are selected by users and information  105  concerning lengths of time users spend performing various operations while using the application  109 . Of course, these are only examples of the type of data  105  that can be gathered  201 . 
   The analysis module  109  analyzes  203  the gathered information  105 . Responsive to results of the analysis, the analysis module  109  determines  205  modifications  115  to make to the application  109 . This can comprise, for example, determining  205  components (e.g., user interface components, user interface selectable options and/or program functionalities) to eliminate from the application  109 , add to the application  109 , or simplify. 
   Responsive to the determinations  115  made by the analysis module  113 , the modification module  111  modifies  207  the application  109  in realtime. As noted above, in some embodiments, the modification module  111  comprises instrumentation associated with the application  109  in question, whereas in other embodiments the modification module  111  can comprise other instantiations of application modifying functionality, for example software running as an integral part of the feature analysis manager  101  running on a backend server  117 . Therefore, in some embodiments, the analysis module  113  sends the usability information  105  to an external source running on another computing device, and in other embodiments the modifications are made  207  by a process running on the same computing device as the analysis module  113 . 
   As will be understood by those familiar with the art, the invention may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. Likewise, the particular naming and division of the portions, modules, agents, managers, components, functions, procedures, actions, layers, features, attributes, methodologies and other aspects are not mandatory or significant, and the mechanisms that implement the invention or its features may have different names, divisions and/or formats. Furthermore, as will be apparent to one of ordinary skill in the relevant art, the portions, modules, agents, managers, components, functions, procedures, actions, layers, features, attributes, methodologies and other aspects of the invention can be implemented as software, hardware, firmware or any combination of the three. Of course, wherever a component of the present invention is implemented as software, the component can be implemented as a script, as a standalone program, as part of a larger program, as a plurality of separate scripts and/or programs, as a statically or dynamically linked library, as a kernel loadable module, as a device driver, and/or in every and any other way known now or in the future to those of skill in the art of computer programming. Additionally, the present invention is in no way limited to implementation in any specific programming language, or for any specific operating system or environment. Furthermore, it will be readily apparent to those of ordinary skill in the relevant art that where the present invention is implemented in whole or in part in software, the software components thereof can be stored on computer readable media as computer program products. Any form of computer readable medium can be used in this context, such as magnetic or optical storage media. Additionally, software portions of the present invention can be instantiated (for example as object code or executable images) within the memory of any programmable computing device. Accordingly, the disclosure of the present invention is intended to be illustrative, but not limiting, of the scope of the invention, which is set forth in the following claims.