Costs ===== User thought is most expensive. User time spent waiting is next. Developer time for the version control system is also relatively expensive. Machine resources are cheap. In particular; disk is generally very cheap; an ordinary programmer earns enough to buy hundreds of GB of disk per day. However, it is sometimes limited, as on a laptop. Therefore it is generally OK to trade off disk space for anything else, but it should be possible to be compact. Network round trips are very bad. Consider scalability also; avoid anything worse than O(n). Try to avoid anything that needs e.g. to hold the whole tree in memory at any time, or to hold the entire history of the project.