At the interface between distributed computing and software engineering, we present three contributions that seek to help developers build better large-scale distributed computer systems. More precisely, we look a some key research problems related to software reuse in three representative instances of large-scale networked systems: peer-to-peer overlays, gossip-based protocols, and grid middleware. The work we present touches on three different, but interrelated, aspects of these systems: modular fault-tolerance (in peer-peer overlays), component-based development and programmability (in gossip-based protocols), and interactive performance analysis (in grid middleware). The message emerging from our contributions is twofold: first we demonstrate in concrete terms that today's large-scale distributed systems can greatly benefit from reusable software abstractions. Second, we also illustrate the inherent tension between high-reuse approaches and software complexity, and suggest possible avenues of improvement. Our work on gossip-based systems shows for instance how components can benefit from being combined to a more imperative programming paradigm. Similarly our study of a typical grid middleware exemplifies the difficulties introduced by high levels of reuse in modern distributed platforms, and how these difficulties can be mitigated by combining architectural reverse engineering with dynamic performance analysis.