1. A method for modifying a financial software, comprising: executing a first executable of the financial software during a user session, wherein the first executable includes a first set of modules which perform a set of tasks for a user; determining an execution time of each of the set of tasks performed by each of the corresponding first set of modules during a time interval; selecting weights for each task in the set of tasks, wherein the selected weights for each task are based partially on the user's activity history with respect to the task during previous user sessions, and partially on the relative importance of the task as predetermined by a developer; determining a performance metric as a weighted summation of the execution times of each of the set of tasks based on the selected weights; in response to detecting that the performance metric has degraded more than the predetermined threshold, dynamically selecting, during the user session, a second set of modules which perform the set of tasks, wherein the second set of modules is different from the first set of modules, wherein said selecting is based on the performance metric that was determined, and wherein the second set of modules improves the performance metric when the performance metric is determined subsequently; generating a second executable of the financial software based on the second set of modules during the user session; and executing the second executable during the user session.