1. A method comprising: storing a base application; storing a plurality of program modules associated with the base application, wherein the plurality of program modules comprises a first module and a second module, and wherein each of the first module and the second module is a software extension that adds to or alters a default functionality of the base application; receiving user instructions to form a configuration file containing references to additional files that contain program code implementing interaction rules, wherein the configuration file also contains data that defines at least partially an operation of the base application, and wherein: the interaction rules define, for the base application, how the first module interacts with the second module to form a configured first module, the interaction rules define events triggered by the second module, the first module is notified of the events triggered by the second module through a default event handler included in the base application, and the interaction rules define event handlers that specify how the first module handles the events triggered by the second module; and executing the base application and the configured first module on behalf of a user, wherein the additional files include functional logic that access data sources, and wherein each of the first and second modules manages its own data, controlling how much data is obtained from the data sources, displayed to a user, updated, and passed to the base application and to each other.