The hardware used in business applications has changed over the decades—from room-sized centralized mainframes to small, often geographically-distributed client-server systems based on a microprocessor—but the characteristics of these systems have typically remained the same: large storage; ability to handle a high rate of transactions (I/Os); and high availability/reliability. Software must be appropriately robust to function in this environment.