A method for use in a computing device to determine a plurality of recommended geographic server locations by attempting to minimize both user-server latency and a latency of inter-user communications, the method comprising: acquiring geographic information for a plurality of users (102A-102N) of a set of one or more networks (103A-103N), wherein the geographic information for each of the plurality of users (102A-102N) indicates a geographic location of that user; acquiring relationship information for at least some of the plurality of users (102A-102N), wherein the relationship information indicates those of the plurality of users (102A-102N) that are connected on a network of the set of networks (103A-103N); transforming the geographic information and the relationship information into a graph including a plurality of nodes representing the plurality of users (102A-102N) and a plurality of edges connecting the plurality of nodes according to the relationship information, wherein each of the plurality of edges includes an edge weight, wherein each of the edge weights indicates an estimated network latency time between those users of the plurality of users (102A-102N) represented by the nodes at each end of the edge; generating a first plurality of clusters by performing a first clustering algorithm on the graph, wherein each cluster of the first plurality of clusters includes a centroid and a set of one or more nodes of the plurality of nodes, wherein each of the set of nodes is included in only one of the first plurality of clusters; generating a second plurality of clusters by performing a second clustering algorithm comprising, iteratively examining pairs of clusters of the first plurality of clusters, and for each examined pair of clusters, repeatedly swapping pairs of nodes between the pair of clusters when a swap of a pair of nodes will: reduce a total cut weight of the graph, wherein the total cut weight is a sum of edge weights of edges that connect nodes in different clusters, and locate each node of the pair of nodes, when swapped to the other cluster of the examined pair of clusters, within a defined maximum distance from the centroid of the other cluster to thereby bound user-to-server latency; and causing information describing geographic locations of centroids of the second plurality of clusters to be presented to a user as the plurality of recommended geographic server locations. acquiring geographic information for a plurality of users (102A-102N) of a set of one or more networks (103A-103N), wherein the geographic information for each of the plurality of users (102A-102N) indicates a geographic location of that user; acquiring relationship information for at least some of the plurality of users (102A-102N), wherein the relationship information indicates those of the plurality of users (102A-102N) that are connected on a network of the set of networks (103A-103N); transforming the geographic information and the relationship information into a graph including a plurality of nodes representing the plurality of users (102A-102N) and a plurality of edges connecting the plurality of nodes according to the relationship information, wherein each of the plurality of edges includes an edge weight, wherein each of the edge weights indicates an estimated network latency time between those users of the plurality of users (102A-102N) represented by the nodes at each end of the edge; generating a first plurality of clusters by performing a first clustering algorithm on the graph, wherein each cluster of the first plurality of clusters includes a centroid and a set of one or more nodes of the plurality of nodes, wherein each of the set of nodes is included in only one of the first plurality of clusters; generating a second plurality of clusters by performing a second clustering algorithm comprising, iteratively examining pairs of clusters of the first plurality of clusters, and for each examined pair of clusters, repeatedly swapping pairs of nodes between the pair of clusters when a swap of a pair of nodes will: reduce a total cut weight of the graph, wherein the total cut weight is a sum of edge weights of edges that connect nodes in different clusters, and locate each node of the pair of nodes, when swapped to the other cluster of the examined pair of clusters, within a defined maximum distance from the centroid of the other cluster to thereby bound user-to-server latency; and iteratively examining pairs of clusters of the first plurality of clusters, and for each examined pair of clusters, repeatedly swapping pairs of nodes between the pair of clusters when a swap of a pair of nodes will: reduce a total cut weight of the graph, wherein the total cut weight is a sum of edge weights of edges that connect nodes in different clusters, and locate each node of the pair of nodes, when swapped to the other cluster of the examined pair of clusters, within a defined maximum distance from the centroid of the other cluster to thereby bound user-to-server latency; and reduce a total cut weight of the graph, wherein the total cut weight is a sum of edge weights of edges that connect nodes in different clusters, and locate each node of the pair of nodes, when swapped to the other cluster of the examined pair of clusters, within a defined maximum distance from the centroid of the other cluster to thereby bound user-to-server latency; and causing information describing geographic locations of centroids of the second plurality of clusters to be presented to a user as the plurality of recommended geographic server locations.