Software engineering as a discipline arose in response to the ‘software crisis’ recognised about ten years ago and which gave rise to the two NATO conferences in Garmisch and Rome [l], [2]. These two conferences provided the impetus for the introduction of a course in software engineering as part of the computers and cybernetics degree course at the University of Kent. Software engineering lacks a unified theoretical basis except for certain specialised areas, compiler writing and some aspects of operating system design for example. These areas being the ones which are covered anyway in the traditional computer science degree course. This course therefore emphasises the aspects of software engineering directly concerned with the production of large items of software. One can formalise this as follows: The aim of the course is to introduce students to some of the problems, with techniques for their solution, which arise in large software projects. It would be ideal at this point to have a list of problem areas with possible solutions and to create a sequence of independant tasks for the students which would illuminate in turn each of the problems and demonstrate how they may be solved. This does not seem possible partly because the problems themselves arise from the interactions which only occur in projects above a certain size. Also the problems are not well enough understood to be isolated in this fashion. The alternative which was adopted was to split the students into groups of four or five with a staff member assigned as project leader to each group. Each group undertakes a substantial project, working on average, one day per week for three ten week terms (trimesters). The next section of the paper discusses how such projects might be organised and assessed.