1. A computerized method of creating a user model, comprising: providing at least one software component collection of a plurality of software components, each one of said plurality of software components is associated with a single attribute and having: an input port adapted to receive at least one input attribute value, said at least one input attribute value is received from a member of a group consisting of: at least one of said plurality of software components or at least one hardware component; and an attribute generation engine for inferring a single attribute value from said at least one input attribute value, an attribute repository field which stores said single attribute value; an output port adapted to output said single attribute value to another of said plurality of software components, and a metadata which holds an identifier relating to respective said software component; selecting according to at least one developer input, a subset of said plurality of software components; defining according to said at least one developer input, a plurality of data links each defining a flow of a respective said single attribute value from a respective said output port of at least one member of said subset to a respective said input port of another member of said subset; generating a user model based on said subset and said plurality of data links; instantiating said user model for at least one specific user; and outputting said user model.