1. A computer program embodied on a computer readable medium for developing component based software capable of handling tasks, comprising: a data component that stores, retrieves and manipulates data utilizing a plurality of functions; and a client component including: an adapter component that transmits and receives data to/from the data component, a business component that serves as a data cache and includes logic for manipulating the data, and a controller component adapted to handle events generated by a user utilizing the business component to cache data and the adapter component to ultimately persist data to a data repository, wherein the client component is adapted for allowing a user to define tasks that achieve a goal upon completion, allowing the user to input rules which dictate which of the tasks should be selected based on predetermined events, receiving at least one event, and outputting the task which is selected based on the received event in accordance with the rules.