This chapter discusses distributed software engineering and distributed systems. It covers topics like distributed system characteristics including resource sharing, openness, concurrency, scalability and fault tolerance. Some key issues with distributed systems are their complexity, lack of single control, and independence of parts. The chapter addresses design issues for distributed systems such as transparency, openness, scalability, security, quality of service, and failure management. It also covers models of interaction, middleware, and client-server computing.