1. At least one non-transitory processor-readable storage device having processor-readable code embodied thereon for programming at least one processor to perform a method, the method comprising: receiving, at a starting component of an application, a plurality of incoming messages, each incoming message is received from a respective user, and comprises a request to perform a business transaction, thereby invoking the starting component as a first component in a respective sequence of components, where each component corresponds to a respective business logic step of the business transaction; in response to each incoming message, the starting component initiates a respective process at the application to perform the business transaction, the business transaction is performed by invoking other components of the respective sequence to carry out the business logic steps, after which a program control is returned back to the starting component, and the starting component provides a respective response message to the respective user; storing data in at least one log which identifies respective execution paths of the application, each respective execution path identifies one of the respective sequences of components; responsive to the storing of data in the at least one log, calculating metrics which represent distances between the execution paths, the calculating metrics includes, for the respective sequences of components of the respective execution paths, assigning higher weights to at least one of: (a) a first n components and (b) a last m components; grouping the execution paths according to the metrics into a plurality of groups of execution paths; and responsive to the grouping of the execution paths, grouping the messages into a plurality of groups of messages.