bw logo

Chapter 2. Rules of Thumb

This is a list of rules/ideas/philosophies that have been used in the design.

  • Scalability, reliability, efficiency

    The general goal is to produce a scalable, reliable, and efficient system. This should be done while keeping as much simplicity and flexibility as possible.

  • Occam's Razor

    The simplest design that satisfies all requirements should be considered the best, or in the words of Einstein, "Make things as simple as possible, but no simpler".

  • Improve the worst case

    In general (mainly when it comes to the client experience), the worst case should be improved over the average case. For example, it is not beneficial to have a blinding fast and accurate situation when a client is not near a cell boundary if the experience is poor when he is near one.

  • Client/server bandwidth is valuable

    The most important resource is the bandwidth between the client and server. After this, it is probably CPU, and then intra-server bandwidth.

  • Keep information together; Avoid two-way calls

    Information (or data) that is often used together should be easily accessed together. For example, a large amount of the data processed together in the game is related to objects that are geometrically close. It makes sense then to use data partitioning based on locality.

    It is also expensive to have to request information from a separate server machine when it is necessary. This is true for a number of reasons including the extra hops and coordination required and (maybe even more importantly) the reduced likelihood of being able to batch requests together.

  • Avoid bottlenecks; Make the system distributed

    The design should try to avoid single central points where things occur. This approach can cause performance bottlenecks and make the design non-scalable. It can also introduce a single point of failure, therefore raising fault tolerance issues.

  • Where possible, do communication in batches

    There is a fairly high overhead in sending a single packet. That is, it is a lot more expensive to send ten individual packets than it is to send one packet that is ten times bigger.