1. A method performed by a computer processor, said method comprising: receiving trace data gathered by tracing an application; analyzing said trace data to identify a plurality of code elements; identifying a plurality of relationships, said relationships being between two of said code elements and having directionality; determining a performance metric for each of said code elements; determining a characterization for each of said relationships; analyzing said plurality of relationships to identify a first code element as a bottleneck; and storing a bottleneck annotation associated with said first code element.