"For good performance, designs to avoid include: Fine-grained communication; Treating local calls and remote calls equivalently; Designs that are difficult to add caching to; A non-parallelizable workflow; No load balancing in the architecture; Long transactions; Big differences between the data model and object model; Slow extensive embedded security checking; Non intuitive user interfaces; Lack of feedback in the user interface; Locking shared resources for non-short periods; Not paginating data"