1. A method for adaptively shrinking a software program, comprising the steps of: maintaining a plurality of adaptive feature records corresponding to a plurality of removal candidate features, wherein each record of the plurality of adaptive feature records includes a usage history and a separation criteria corresponding to a feature of the plurality of removal candidate features, the separation criteria includes when the corresponding feature of the plurality of removal candidate features is unused, unneeded, or unlicensed; monitoring to determine when at least one of the plurality of removal candidate features of a program is invoked; based on determining when the at least one of the plurality of removal candidate features of the program is invoked, updating a usage history corresponding to the at least one of the plurality of removal candidate features; identifying, using a computer system, a first removal candidate feature of the at least one removal candidate features of the program based on when the first removal candidate feature was invoked and a separation criteria corresponding to the first removal candidate feature; and selecting the first removal candidate feature for removal from the program based on identified the first removal candidate feature was not invoked since after installation.