1. A method comprising: executing a first upgrade process on a first host machine for upgrading a first software application on the first host machine; executing a second upgrade process on a second host machine for upgrading a second software application on the second host machine; storing, by the first upgrade process, first data in a shared storage, the first data indicative of a status of the first upgrade process; storing, by the second upgrade process, second data in the shared storage, the second data indicative of a status of the second upgrade process; reading, by a data processing system, the first data and the second data from the shared storage; generating, by the data processing system, a report based upon the first data and the second data read from the shared storage, the report comprising timing information associated with the execution of the first upgrade process on the first host machine and the execution of the second upgrade process on the second host machine, wherein the timing information includes a total execution time of the first upgrade process and a time that the first upgrade process spent waiting on the second upgrade process, wherein the time that the first upgrade process spent waiting on the second upgrade process is determined by subtracting a first time from a second time, wherein the first time is a time that the first process started to wait for the second upgrade process, and wherein the second time is a time associated with generating the report; and communicating the report to a user.