Single project courses with a large number of participants are an excellent vehicle for teaching undergraduate students the problems of producing complex software systems. The emphasis placed on realistic development and delivery of a finalized product enables the students to appreciate software development as an engineering activity where cost/benefit decisions have to be made. In addition, students learn communication and project management techniques that are needed in many industrial settings. In this paper we describe our criteria for the selection of projects that are complex enough to warrant large groups of developers but can still be developed in the limited time of a semester. We discuss our experience with different software development methodologies and process models, explore the problems of producing consistent and complete project documentation and describe an organizational and communicational structure that ensures a high chance of success. The discussion is based on the experience with three project courses in which 12-30 students have designed, built and successfully delivered systems between 15,000 and 27,000 lines of code within a single semester.