ACCEPTABLE vs EXCELLENT CODE "Excellent" version is more efficient in terms of initializing the player's partners. Its output is also more informative since we know the exact status of each player for every pass of the game (it doesn't need to be inferred from the code and the previous output). The output is also more succinct. It also doesn't hurt that seeding the random number generator with the result of time() as opposed to &uThisTask() yields a better distribution of random values. Note that the SendMessage() method in the "excellent" version is shorter than in the "acceptable" version, and thus delays the caller less. ACCEPTABLE vs EXCELLENT TEST DOCUMENTATION Note that since the program accepts no input from the user, there is no user interface to test. Instead, concentrate upon analysing the results to show how the algorithm has been correctly implemented. Both programs are tested reasonably well, but the "excellent" version summarizes the information neatly and doesn't force the reader to skip all over the output trying to match up facts and conclusions. There may be times, especially in simulations, where multiple runs of the program may be required in order to show different random aspects of the program that are important; however, it is perfectly acceptable (even desired) that output that does *not* contribute new information be omitted and replaced by something like the ellipsis i.e. "...". Just make sure that your omission is clearly noted, and why. It is *not* acceptable to omit error messages, or edit your test output in any other way.