We consider a directed network in which every edge possesses a latency function specifying the time needed to traverse the edge given its congestion. Selfish, noncooperative agents constitute the network traffic and wish to travel from a source $s$ to a sink $t$ as quickly as possible. Since the route chosen by one network user affects the congestion (and hence the latency) experienced by others, we model the problem as a noncooperative game. Assuming each agent controls only a negligible portion of the overall traffic, Nash equilibria in this noncooperative game correspond to $s$-$t$ flows in which all flow paths have equal latency. A natural measure for the performance of a network used by selfish agents is the common latency experienced by each user in a Nash equilibrium. It is a counterintuitive but well-known fact that removing edges from a network may {\em improve} its performance; the most famous example of this phenomenon is the so-called {\em Braess's Paradox}. This fact motivates the following network design problem: given such a network, which edges should be removed to obtain the best possible flow at Nash equilibrium? Equivalently, given a large network of candidate edges to be built, which subnetwork will exhibit the best performance when used selfishly? We give optimal inapproximability results and approximation algorithms for several network design problems of this type. For example, we prove that for networks with $n$ vertices and continuous, nondecreasing latency functions, there is no approximation algorithm for this problem with approximation ratio less than $n/2$ (unless $P=NP$). We also prove this hardness result to be best possible by exhibiting an $n/2$-approximation algorithm. For networks in which the latency of each edge is a linear function of the congestion, we prove that there is no $(\frac{4}{3}-\eps)$-approximation algorithm for the problem (for any $\eps > 0$, unless $P=NP$); the existence of a $\frac{4}{3}$-approximation algorithm follows easily from existing work, proving this hardness result sharp. Moreover, we prove that an optimal approximation algorithm for these problems is what we call the {\em trivial algorithm}: given a network of candidate edges, build the entire network. A consequence of this result is that Braess's Paradox (even in its worst-possible manifestation) is impossible to detect efficiently.