Software engineering is discussed. Successful software engineering is predicated as is all engineering, on effective specification. A specification is nothing more and nothing less than a domain descriptive theory of the application system. The activity of specification must always involve careful description, definition and model building. User-centred software design is only possible if well-constructued specification is given.