It is foolhardy to believe that the design and realization of distributed software systems is similar to more traditional, centralized systems. In this paper, we first examine the unique problems that are introduced by distribution that make it such a challenging task. That is followed with a description of some of the most
common distributed algorithms and techniques that have been developed for coping with these problems. Finally, an illustration is provided of the type of distributed software technology that is now becoming available to the distributed system designer.