In this paper we study the problem of designing algorithms in situations where there is some information concerning the typical conditions that are encountered when the respective problem is solved. The basic goal is to assure efficient performance in the typical case, while satisfying the correctness requirements in every case. We introduce adaptability, a new measure for the quality of an algorithm, which generalizes competitive analysis and related frameworks. This new notion applies to sequential, parallel and distributed algorithms alike. In a nutshell, a "hint" function conveys certain information about the environment in which the algorithm operates. Adaptability compares the performance of the algorithm against the "specialist"-an algorithm specifically tuned to the particular hint value. From this perspective, finding that no single algorithm can adapt to all possible hint values is not necessarily a negative result, provided that a family of specialists can be constructed. Our case studies provide examples of both kinds. We first consider the "ancient" problem of on-line scheduling of jobs in m identical processors, and show that no algorithm can fully adapt to the natural hint of largest job size. In particular, for the cases m = 2,3, we present specialists that beat the general lower bound for on-line makespan. In the domain of distributed computing, we analyze the Distributed Consensus problem under several hint functions. To fulfill the requirements of one of the cases we consider, we present the first consensus algorithm that is simultaneously optimal in number of processors, early-stopping property (that is, it runs in time proportional to the actual number of faults), and total number of communicated bits. In our new parlance, the algorithm adapts to the number of faults hint with both running time and communication.