Plaid is a research programming language with a focus on typestate, permissions, and concurrency. Typestate describes ordering constraints on method calls to an object; Plaid incorporates typestate into both its object model and its type system. Permissions, incorporated into Plaid's type system and runtime, describe whether a reference can be aliased and whether aliases can change that reference. Permissions support static typestate checking, but they also allow Plaid's compiler to automatically parallelize Plaid code.In this paper, we describe the usability-related hypotheses that drove the design of Plaid. We describe the evidence, both informal and scientific, that inspired and (in some cases) validated these hypotheses, and reflect on our experience designing and validating the language.Typestate is an abstraction that divides an object's lifetime into a sequence of abstract states, describing in which state(s) each method can be invoked, and the state transition caused by each method. For example, a file may start out in the Closed state, transition to the Open state when the open() method is invoked, accept several calls to the read() method while in this state, and finally transition to the Closed state when the close() method is invoked.