This paper presents an approach to defining component-based software architectures in which interfaces rather than components play the key role. Architectural descriptions are built from 'i-specs' that define interface-level interaction patterns. An i-spec can be seen as a contract defining the rights and obligations of 'roles' that can be played in interface-based interactions. We introduce the 'closed world assumption' for i-specs, leading to a compositional approach to defining software architectures. We show how i-specs can be composed and how component specifications can be constructed from i-specs.