A computer-implemented method performed by at least one processor, the method comprising: accessing, by the at least one processor, a component library that stores at least one version of each of a plurality of software components; publishing, by the at least one processor, a first version (118) of a software component from the component library to a plurality of workspaces that provide a software development environment, the first version being included in at least one application that is created using at least one of the plurality of workspaces; receiving, by the at least one processor, a second version (118) of the software component that includes at least one modification to the first version; and performing, by the at least one processor, at least one test to verify that the second version is compatible with the first version and, based on verifying that the second version is compatible with the first version: storing, by the at least one processor, the second version in the component library; and publishing, by the at least one processor, the second version from the component library to the plurality of workspaces; creating, by the at least one processor, a tree structure that stores information describing available versions of the software component, including the first version and the second version, wherein the tree structure includes a plurality of nodes that each corresponds to a respective version of the software component; reducing, by the at least one processor, a width of the tree structure by merging at least two of the available versions of the software component, the merging based at least partly on a calculated relative weight of the at least two available versions, wherein the relative weight is calculated based at least partly on the number of identified bugs in the respective versions; and updating, by the at least one processor, one of the at least one applications to include the second version. accessing, by the at least one processor, a component library that stores at least one version of each of a plurality of software components; publishing, by the at least one processor, a first version (118) of a software component from the component library to a plurality of workspaces that provide a software development environment, the first version being included in at least one application that is created using at least one of the plurality of workspaces; receiving, by the at least one processor, a second version (118) of the software component that includes at least one modification to the first version; and performing, by the at least one processor, at least one test to verify that the second version is compatible with the first version and, based on verifying that the second version is compatible with the first version: storing, by the at least one processor, the second version in the component library; and publishing, by the at least one processor, the second version from the component library to the plurality of workspaces; storing, by the at least one processor, the second version in the component library; and publishing, by the at least one processor, the second version from the component library to the plurality of workspaces; creating, by the at least one processor, a tree structure that stores information describing available versions of the software component, including the first version and the second version, wherein the tree structure includes a plurality of nodes that each corresponds to a respective version of the software component; reducing, by the at least one processor, a width of the tree structure by merging at least two of the available versions of the software component, the merging based at least partly on a calculated relative weight of the at least two available versions, wherein the relative weight is calculated based at least partly on the number of identified bugs in the respective versions; and updating, by the at least one processor, one of the at least one applications to include the second version.