Application functionality optimization

A method, apparatus, and system provide the ability to optimize execution of an application. An application is acquired. The application includes functions, and each function has a corresponding feature flag that determines whether the corresponding function is executed. Execution conditions of execution of the application are monitored at run-time (in a machine learning module). The machine learning module recognizes a pattern relating to the execution conditions to determine a stress relating to the execution of the application. During execution of the application, the machine learning module toggles the feature flags based on the pattern and the stress such that the corresponding functions do not execute.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The present invention relates generally to application responsiveness, and in particular, to a method, system, apparatus, and article of manufacture for controlling and optimizing application functionality at execution time based on machine learning.

2. Description of the Related Art

Computer software is often distributed on the web/Internet and consist of separate components that are programmed by separate people (within an organization) that run independently from each other at disparate locations throughout the world. Further, applications may commonly have pieces of code that provide nice-to-have functionality but not necessary (i.e., optional) functionality. In such a web hosted technological environment, high availability, responsiveness, and customizability are increasingly desirable and problematic in the prior art. For example, it is desirable to customize software such that premium users/customers have access to different functionality compared to that of standard customers who in turn may have different functionality compared to that of free/university users. Similarly, it may be desirable to temporarily reduce application functionality to all or a subset of users based on execution conditions (e.g., bandwidth, processor consumption, type of media consumption, time of day, etc.).

Prior art systems may hard code the different functionality into the application itself such that any user that is a member of a predefined entitlement category is provided access to a particular version of an application (e.g., a “premium” version). However, such hard coding into the application itself is limiting and fails to provide flexibility and customizability. In addition, such hard coding and categorization of classes of customers/users requires substantial manual selection of both the functionality and conditions upon which such functionality is enabled.

In view of the limitations of the prior art, it is desirable to have an application with customizable functionality that is optimized based on execution conditions and prior manual functionality configuration.

SUMMARY OF THE INVENTION

Embodiments of the invention overcome the problems of the prior art by utilizing feature flags that are associated with certain application functionality (e.g., pieces of code) such that the functionality will be performed (i.e., will execute) when the evaluation of the feature flag returns true and will be skipped with the value of the feature flag returns false. The “values” to determine whether a feature flag will return true or false are not embedded in the code that a developer writes. Instead, in one or more embodiments, the values are managed from a web portal that is accessible to administrators of the application. Further, in one or more embodiments, the values are determined at run time based on machine learning that provides predictive capabilities to determine whether particular application functionality should execute.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

Execution Optimization Details

Applications have an ever-increasing number of web-hosted technologies that require high availability and responsiveness. Maintaining high availability and responsiveness is difficult but embodiments of the invention provide a tool as a solution to such problems. Specifically, embodiments of the invention utilize feature flags (FFs). Using FFs, a developer can flag certain pieces of code so that they will execute when the evaluation of a FF returns true and will be skipped when the value of a FF returns false. The “values” to determine whether a FF will return true or false are not embedded in the code that a developer writes. In one or more embodiments, the values may be managed from a web portal that is accessible to administrators. In this regard, the prior art requires that any potential FF values be set via manual process.

Embodiments of the invention utilize feature flags to perform various interesting functions. For example, in the FUSION 360 integrated computer aided design (CAD), computer aided manufacturing (CAM), and computer aided engineering (CAE) software (available from the assignee of the present application), a user may create three-dimensional (3D) models and version the model over time. Each time the model is saved to the cloud, a 3D viewable for the model may be generated. The 3D viewable is a light-weight representation of the model that is used only for viewing purposes. The viewable is a nice-to-have but not entirely necessary (i.e., it is optional). The FUSION application (as well as other applications) have many pieces of code that provide optional nice-to-have functionality that is not necessary. Embodiments of the invention associate FFs with such optional nice-to-have functionality. If the FF evaluates to true, such functionality is executed/available, and if the FF evaluates to false, the functionality is not executed/enabled. Further, as described herein, the values that determine true vs. false may be web-accessible but not directly built into the code.

In additional embodiments, it may be desirable to set FF values (that are associated with particular functions [e.g., optional nice-to-have functions]) to false when a system (e.g., a system utilizing cloud-based services) is under stress. For example, stress may result from high user usage at peak times in the day, an unexpected spike in the number of users, some services being down, etc. In embodiments of the invention, an overall system may be monitored through various means to determine when a system is under stress. Such monitoring may be performed via machine learning. For example, a machine learning module may monitor the state of a cloud based services system (e.g., AUTODESK CLOUD) looking for stress, turning off non-essential cloud services in times of stress. and turning on non-essential cloud services when the system is stress free. In this regard, embodiments of the invention associate FF with particular functions, have the ability to monitor system operations (e.g., looking for stress), and have the ability to toggle on/off values in the FF based on such monitoring.

Further to the above, embodiments of the invention may not be limited to non-essential services, nor does it need to be a an all of nothing toggle. In this regard, functionality for non-paying users may be temporarily turned off so that premium, paying customers always experience good throughput for their jobs. In addition, the machine learning may determine an order or precedent for multiple FF associated with users or a group. For example, FF may be implemented across teams not collocated as well as across different locations. Further, based on the monitoring, the machine learning module may determine patterns in use and the ability to set FF in an efficient manner.

FIG. 1illustrates the logical flow for optimizing execution of an application in accordance with one or more embodiments of the invention. The flow ofFIG. 1may be conducted using the components illustrated inFIG. 2. In this regard,FIG. 2is a system-level diagram for a system that can be used to optimize execution of an application in accordance with one or more embodiments of the invention.

At step102, an application202is acquired (via a processor in a computer). The application includes two or more functions204and each of the functions204has a corresponding feature flag206. Each feature flag206determines whether the corresponding function204is executed.

At step104, execution conditions208of execution of the application202are monitored, in/via a machine learning module210executed by the processor, at run-time.

At step106, a pattern212relating to the execution conditions is recognized/determined in order to determine a stress relating to the execution of the application202.

At step108, during executing of the application202, one or more of the feature flags206are toggled based on the pattern212and the stress such that the corresponding functions204do not execute. The values used to toggle the feature flags206may be managed from/via a web portal. Further, the corresponding functions204that do not execute may include/consist of non-essential cloud services. In addition, the machine learning module210may toggle the feature flags206further based on a time of day and/or based on a prediction of when the execution of the application will undergo the stress.

In view of the above, embodiments of the invention may be configured to grant/enable access to functionality based on a user profile. For example, embodiments may grant/enable access to functionality to premium user/customers while restricting/limiting such access to non-premium users. In this regard, different characteristics may be used to determine whether to toggle a feature flag. Such characteristics may include the time of day (e.g., the machine learning module may determine that users use a particular software module during a particular time of day), type of work, industry, experience of users, types of features (e.g., extensive cloud based rendering/modeling versus local operations), etc. Such an enablement of functionality may be granted on a temporary basis during a time of stress or based on other arbitrary standards that may be defined by a user/determined by the machine learning module.

As an example of the use of embodiments of the invention, during normal circumstances/execution conditions, all users may have the ability to generate thumbnail images. However, when experiencing a high load (e.g., a load the exceeds a threshold load value), it may be desirable to restrict the generation of such thumbnails. The machine learning module may determine/predict the stressful conditions (e.g., when the system is about to go under stress), and toggle the feature flags thereby disabling the generation of thumbnail images functionality, and then toggling such functionality back on when the load decreases to within normal threshold limits. Accordingly, the machine learning module enables an automated mechanism (e.g., without user input) for adjusting functionality in an application at run-time based on a variety of conditions (e.g., user profile and stress). Such machine learning monitoring provides a predictive capability such that a system remains resilient even when stressful execution conditions occur (i.e., the system will not fail as enabled functionality is simply reduced such that the system continues to provide essential features to the desire user/customer base).

Further to the above, in a system that utilizes extensive cloud services, embodiments of the invention may act as a gate-keeper such that downstream applications may be toggled during periods of stress or to counteract a predictive stressful event.

Hardware Embodiments

FIG. 3is an exemplary hardware and software environment300used to implement one or more embodiments of the invention. The hardware and software environment includes a computer302and may include peripherals. Computer302may be a user/client computer, server computer, or may be a database computer. The computer302comprises a hardware processor304A and/or a special purpose hardware processor304B (hereinafter alternatively collectively referred to as processor304) and a memory306, such as random access memory (RAM). The computer302may be coupled to, and/or integrated with, other devices, including input/output (I/O) devices such as a keyboard314, a cursor control device316(e.g., a mouse, a pointing device, pen and tablet, touch screen, multi-touch device, etc.) and a printer328. In one or more embodiments, computer302may be coupled to, or may comprise, a portable or media viewing/listening device332(e.g., an MP3 player, IPOD, NOOK, portable digital video player, cellular device, personal digital assistant, etc.). In yet another embodiment, the computer302may comprise a multi-touch device, mobile phone, gaming system, internet enabled television, television set top box, or other internet enabled device executing on various platforms and operating systems.

In one embodiment, the computer302operates by the hardware processor304A performing instructions defined by the computer program310under control of an operating system308. The computer program310and/or the operating system308may be stored in the memory306and may interface with the user and/or other devices to accept input and commands and, based on such input and commands and the instructions defined by the computer program310and operating system308, to provide output and results.

Output/results may be presented on the display322or provided to another device for presentation or further processing or action. In one embodiment, the display322comprises a liquid crystal display (LCD) having a plurality of separately addressable liquid crystals. Alternatively, the display322may comprise a light emitting diode (LED) display having clusters of red, green and blue diodes driven together to form full-color pixels. Each liquid crystal or pixel of the display322changes to an opaque or translucent state to form a part of the image on the display in response to the data or information generated by the processor304from the application of the instructions of the computer program310and/or operating system308to the input and commands. The image may be provided through a graphical user interface (GUI) module318. Although the GUI module318is depicted as a separate module, the instructions performing the GUI functions can be resident or distributed in the operating system308, the computer program310, or implemented with special purpose memory and processors.

In one or more embodiments, the display322is integrated with/into the computer302and comprises a multi-touch device having a touch sensing surface (e.g., track pod or touch screen) with the ability to recognize the presence of two or more points of contact with the surface. Examples of multi-touch devices include mobile devices (e.g., IPHONE, NEXUS S, DROID devices, etc.), tablet computers (e.g., IPAD, HP TOUCHPAD, SURFACE Devices, etc.), portable/handheld game/music/video player/console devices (e.g., IPOD TOUCH, MP3 players, NINTENDO SWITCH, PLAYSTATION PORTABLE, etc.), touch tables, and walls (e.g., where an image is projected through acrylic and/or glass, and the image is then backlit with LEDs).

Some or all of the operations performed by the computer302according to the computer program310instructions may be implemented in a special purpose processor304B. In this embodiment, some or all of the computer program310instructions may be implemented via firmware instructions stored in a read only memory (ROM), a programmable read only memory (PROM) or flash memory within the special purpose processor304B or in memory306. The special purpose processor304B may also be hardwired through circuit design to perform some or all of the operations to implement the present invention. Further, the special purpose processor304B may be a hybrid processor, which includes dedicated circuitry for performing a subset of functions, and other circuits for performing more general functions such as responding to computer program310instructions. In one embodiment, the special purpose processor304B is an application specific integrated circuit (ASIC).

The computer302may also implement a compiler312that allows an application or computer program310written in a programming language such as C, C++, Assembly, SQL, PYTHON, PROLOG, MATLAB, RUBY, RAILS, HASKELL, or other language to be translated into processor304readable code. Alternatively, the compiler312may be an interpreter that executes instructions/source code directly, translates source code into an intermediate representation that is executed, or that executes stored precompiled code. Such source code may be written in a variety of programming languages such as JAVA, JAVASCRIPT, PERL, BASIC, etc. After completion, the application or computer program310accesses and manipulates data accepted from I/O devices and stored in the memory306of the computer302using the relationships and logic that were generated using the compiler312.

In one embodiment, instructions implementing the operating system308, the computer program310, and the compiler312are tangibly embodied in a non-transitory computer-readable medium, e.g., data storage device320, which could include one or more fixed or removable data storage devices, such as a zip drive, floppy disc drive324, hard drive, CD-ROM drive, tape drive, etc. Further, the operating system308and the computer program310are comprised of computer program310instructions which, when accessed, read and executed by the computer302, cause the computer302to perform the steps necessary to implement and/or use the present invention or to load the program of instructions into a memory306, thus creating a special purpose data structure causing the computer302to operate as a specially programmed computer executing the method steps described herein.

Computer program310and/or operating instructions may also be tangibly embodied in memory306and/or data communications devices330, thereby making a computer program product or article of manufacture according to the invention. As such, the terms “article of manufacture,” “program storage device,” and “computer program product,” as used herein, are intended to encompass a computer program accessible from any computer readable device or media.

FIG. 4schematically illustrates a typical distributed/cloud-based computer system400using a network404to connect client computers402to server computers406. A typical combination of resources may include a network404comprising the Internet, LANs (local area networks), WANs (wide area networks), SNA (systems network architecture) networks, or the like, clients402that are personal computers or workstations (as set forth inFIG. 3), and servers406that are personal computers, workstations, minicomputers, or mainframes (as set forth inFIG. 3). However, it may be noted that different networks such as a cellular network (e.g., GSM [global system for mobile communications] or otherwise), a satellite based network, or any other type of network may be used to connect clients402and servers406in accordance with embodiments of the invention.

A network404such as the Internet connects clients402to server computers406. Network404may utilize ethernet, coaxial cable, wireless communications, radio frequency (RF), etc. to connect and provide the communication between clients402and servers406. Further, in a cloud-based computing system, resources (e.g., storage, processors, applications, memory, infrastructure, etc.) in clients402and server computers406may be shared by clients402, server computers406, and users across one or more networks. Resources may be shared by multiple users and can be dynamically reallocated per demand. In this regard, cloud computing may be referred to as a model for enabling access to a shared pool of configurable computing resources.

Clients402may execute a client application or web browser and communicate with server computers406executing web servers410. Such a web browser is typically a program such as MICROSOFT INTERNET EXPLORER/EDGE, MOZILLA FIREFOX, OPERA, APPLE SAFARI, GOOGLE CHROME, etc. Further, the software executing on clients402may be downloaded from server computer406to client computers402and installed as a plug-in or ACTIVEX control of a web browser. Accordingly, clients402may utilize ACTIVEX components/component object model (COM) or distributed COM (DCOM) components to provide a user interface on a display of client402. The web server410is typically a program such as MICROSOFT'S INTERNET INFORMATION SERVER.

Web server410may host an Active Server Page (ASP) or Internet Server Application Programming Interface (ISAPI) application412, which may be executing scripts. The scripts invoke objects that execute business logic (referred to as business objects). The business objects then manipulate data in database416through a database management system (DBMS)414. Alternatively, database416may be part of, or connected directly to, client402instead of communicating/obtaining the information from database416across network404. When a developer encapsulates the business functionality into objects, the system may be referred to as a component object model (COM) system. Accordingly, the scripts executing on web server410(and/or application412) invoke COM objects that implement the business logic. Further, server406may utilize MICROSOFT'S TRANSACTION SERVER (MTS) to access required data stored in database416via an interface such as ADO (Active Data Objects), OLE DB (Object Linking and Embedding DataBase), or ODBC (Open DataBase Connectivity).

Although the terms “user computer”, “client computer”, and/or “server computer” are referred to herein, it is understood that such computers402and406may be interchangeable and may further include thin client devices with limited or full processing capabilities, portable devices such as cell phones, notebook computers, pocket computers, multi-touch devices, and/or any other devices with suitable processing, communication, and input/output capability.

Of course, those skilled in the art will recognize that any combination of the above components, or any number of different components, peripherals, and other devices, may be used with computers402and406. Further, embodiments of the invention are implemented as a software application on a client402or server computer406. Further, as described above, the client402or server computer406may comprise a thin client device or a portable device that has a multi-touch-based display.

Conclusion

This concludes the description of the preferred embodiment of the invention. The following describes some alternative embodiments for accomplishing the present invention. For example, any type of computer, such as a mainframe, minicomputer, or personal computer, or computer configuration, such as a timesharing mainframe, local area network, or standalone personal computer, could be used with the present invention.