This course teaches the fundamentals of software engineering, including the software life-cycle (analysis, design, implementation, test), project management (estimation, planning & scheduling, risk analysis) and special topics (client-server, component-based development, web engineering). Students work together in small teams to develop a full design and plan for a chosen project topic.