Minimum requirements for interactive systems to be usable and reliable include computer systems performing as intended, and users not making errors in issuing commands or in interpreting information from the device display, Traditionally, most approaches to software engineering have focused on the first of these concerns: correctness of system performance. However, it is equally important to deal with the user concerns. An instruction language is presented for describing the knowledge a user needs to perform tasks with the device. The constraints provided by a semi-formal description language help the designer to identify possible mismatches between the system model and the user's model of that system. This type of mismatch is illustrated with an example taken from the design of the Macintosh desktop. If a further step is taken, formalising that description and adding principles about users' cognitive processes, inferences may also be made about possible user errors. This is illustrated with an example taken from the design of a mail tool. The instruction language and associated principles provide a means of evaluating a system design in relation to user knowledge prior to implementation.