1. A method for finding dependencies in a software system, the method comprising: obtaining an input source code resource comprising source code, where the input source code resource comprises a plurality of source code software system entry points within the source code to the software system; obtaining at least one software artifact data gathering strategy configured to extract information from the input source code resource; identifying a plurality of artifacts in the software system comprising at least one artifact for each of the plurality of source code software system entry points; using the obtained at least one software artifact data gathering strategy to gather a plurality of related artifacts in the software system from the identified plurality of artifacts, where each of the plurality of related artifacts is heterogeneous in at least one of structure, composition, and relationships; determining at least one dependency between the gathered plurality of related artifacts; and outputting an output resource, where the output resource comprises the determined at least one dependency between the gathered plurality of related artifacts gathered using the obtained at least one software artifact data gathering strategy.