while the present invention may be embodied in many different forms , there is described herein in detail an illustrative embodiment with the understanding that the present disclosure is to be considered as an example of the principles of the invention and is not intended to limit the invention to the illustrated embodiment . [ 0020 ] fig1 is a block diagram of a system 100 according to one embodiment of the present invention . system 100 includes at least one server 102 , one or more clients 104 ( a ) . . . ( n ), and a network 110 for enabling the clients 104 to send data to and receive data from server 102 . server 102 has access to a main storage unit 106 for storing data . each client 104 has access to a local storage unit 108 for storing data . each client also includes a processing unit and software 122 ( or program 122 ) that runs on processing unit and that functions to update a cache 121 stored on storage unit 108 . in one embodiment , programs 122 are launched substantially simultaneously . to avoid network congestion problems that might occur if all of the programs 122 attempted to update their respective caches 121 at the same time , each program performs the following process 200 ( see fig2 ). process 200 is performed each time a program 122 is launched . process 200 begins in step 201 , where a program 122 checks a configuration parameter to determine whether it should attempt to retrieve from its cache 121 data that program 122 requires . if the configuration parameter indicates that program 122 should attempt to retrieve required data from cache 121 , process 200 proceeds to step 202 , otherwise process 200 proceeds to step 204 . in step 202 , program 122 determines whether its cache 121 contains data that program 122 requires . for example , program 122 may need to access a particular configuration file in order for program 122 to provide the functionality that program 122 was designed to provide . so , in step 202 , program 122 checks to see whether the required file is stored in cache 121 . if cache 121 contains data that program 122 requires , then process 200 proceeds to step 210 , otherwise process 200 proceeds to step 204 . in step 204 , program 122 requests the required data from a server , such as server 102 , which stores the data on main storage unit 108 . in step 205 , program 122 receives the required data from server 102 . in step 206 , program 122 updates its cache 121 with the received data . for example , if program 122 receives from server 102 a file having a particular name , and cache 121 stores a file having the same particular name , then program 122 will replace the file stored in cache 121 with the file received from server 102 , thereby updating cache 121 . in step 208 , program 122 generates a random number ( r ) between x and z , where x and z are values that can be set by an administrator or determined programmatically . after step 208 , process 200 proceeds to step 218 . in step 210 , program 122 determines when cache 121 was last updated . in step 212 , program 122 determines whether cache 121 needs updating based on when cache 121 was last updated . for example , program 122 may be configured to update cache 121 if program 122 determines that cache has not been updated within the last x number of days , where x can be configurable . if in step 212 program 122 determines that cache 121 needs updating , then control passes back to step 204 , otherwise process 200 proceeds to step 214 . in step 214 , program 122 retrieves the required data from cache 121 . in step 216 , program 122 generates a random number ( r ) between 0 and y , where y can be set by an administrator or determined programmatically . in step 218 , program 122 starts a timer . in step 220 , program 122 performs operations on and / or uses the data retrieved from cache 121 or received from server 102 ( e . g ., program 122 may display to a user at least some of the data retrieved from cache 121 or received from server 102 ). in step 222 , program 122 checks the timer to determine whether an amount of time that is a function of r has elapsed . for example , the amount of time can be r seconds , minutes , days , etc . if in step 222 it is determined the amount of time has elapsed , control passes back to step 204 , otherwise control passes back to step 220 . because in the process described above each program 122 updates its respective cache at a randomly determined time , process 200 provides a method for avoiding the network congestion that occurs when several programs 122 attempt to update their caches 121 at about the same time . in one aspect , a cache update method according to the present invention may be used by an application launcher , which is a software application that is installed on a user &# 39 ; s workstation ( e . g ., a client 104 ). an application launcher displays application object icons on the user &# 39 ; s workstation and performs various application management functions , such as distributing ( installing ) applications , uninstalling applications , and caching applications . [ 0029 ] fig3 is functional block diagram showing components of an application launching system 300 . as shown in fig3 application launching system 300 includes a master application database 302 for associating applications with a user and / or a workstation ( i . e ., a user 301 and / or a workstation 306 is associated with zero or more applications ) and for storing application data ; a database server 304 that has access to database 302 ; a workstation 306 ; and a network 310 for enabling workstation 306 to communicate with server 304 . workstation 306 has installed therein an application launcher 308 . additionally , workstation 306 has direct access to a storage medium 312 for implementing a cache 314 . cache 314 is used to by application launcher 308 to cache data that is stored in master application database 302 . [ 0030 ] fig4 is a flow chart illustrating a process 400 performed by application launcher 308 according to one embodiment . process 400 begins in step 401 , where application launcher 308 determines user 301 &# 39 ; s identifier ( e . g ., username ) and / or workstation 306 &# 39 ; s identifier . in step 402 , application launcher checks a configuration parameter to determine whether to bypass a random cache update feature . in one embodiment , the configuration parameter is stored in database 302 , but the parameter could also be stored in a local configuration file stored on storage medium 312 . if the configuration parameter indicates that application launcher 308 should bypass the random cache update feature , process 400 proceeds to step 404 , otherwise process 400 proceeds to step 428 . in step 404 , application launcher 308 transmits to server 304 a user and / or workstation identifier that identifies user 301 and workstation 306 , respectively , and requests server 304 to respond with a list of the applications that are associated with the user and / or workstation identifier . upon receiving the request from application launcher 308 , server 304 access database 302 to determine the applications that are associated with the user and / or workstation identifier and transmits to application launcher 308 system requirement information for each of the determined applications . in step 406 , application launcher 308 receives the system requirement information . in step 408 , for each application , application launcher 308 examines the application &# 39 ; s system requirement information to determine whether workstation 306 meets the application &# 39 ; s system requirements . after step 408 , control passes to step 410 . in step 410 , application launcher 308 transmits to server 304 a message that includes the identifier of each application whose requirements are met by workstation 306 . after receiving the message , server 304 retrieves from database 302 application data for each of the identified applications and transmits the retrieved application data to application launcher 308 . the application data for an application may include some or all of the following : a title for the application , an icon for the application , and other application related data . in step 412 , application launcher 308 receives the application data transmitted from server 304 . in step 416 , application launcher 308 updates its cache 314 with the received application data . in step 418 , application launcher 308 generates a random number ( r ) between x and z , where x and z can be set by an administrator or determined programmatically . after step 418 , control passes to step 438 . in step 428 , application launcher 308 determines whether cache 314 is “ empty .” that is , application launcher 308 determines whether cache 314 stores application data that is associated with one or more applications that are associated with user 301 and / or workstation 306 . if cache 314 contains no such application data ( i . e ., cache 314 is empty ), then control passes to step 430 , otherwise control passes back to step 404 . in step 430 , application launcher 308 determines when cache 314 was last updated . in step 432 , application launcher 308 determines whether cache 314 needs updating based on when cache 314 was last updated . for example , application launcher 308 may be configured to update cache 314 if application launcher 308 determines that cache has not been updated within the last x days , where x can be configurable . if in step 432 application launcher 308 determines that cache 314 needs updating , then control passes back to step 404 , otherwise process 400 proceeds to step 434 . in step 434 , application launcher 308 retrieves from cache 314 the application data that is associated with the applications that are associated with user 301 and / or workstation 306 . in step 436 , application launcher 308 generates a random number ( r ) between 0 and y , where y can be set by an administrator or determined programmatically . in step 438 , application launcher 308 starts a timer . in step 440 , application launcher 308 performs operations on and / or uses the application data retrieved from cache 314 or received from server 304 ( e . g ., application launcher 308 may display to a user at least some of the data retrieved from cache 314 or received from server 304 ). in step 442 , application launcher 308 checks the timer to determine whether an amount of time that is a function of r has elapsed . for example , the amount of time can be r seconds , minutes , days , etc . if in step 442 it is determined the amount of time has elapsed , control passes back to step 404 , otherwise control passes back to step 440 . while the processes illustrated herein may be described as a series of consecutive steps , none of these processes are limited to any particular order of the described steps . additionally , it should be understood that the various illustrative embodiments of the present invention described above have been presented by way of example only , and not limitation . thus , the breadth and scope of the present invention should not be limited by any of the above - described exemplary embodiments , but should be defined only in accordance with the following claims and their equivalents .