This is a course about software development "in the large" and "for real." That means, software development

The Problem

The field of software engineering arose a number of years ago in response to a perceived software crisis: While there seems to be a doubling each year in the number of software applications demanded, the size of such applications, the complexity of such applications, and mission criticality of such applications, there has been almost no increase in programmer productivity or program quality.

To put it bluntly, much of what is developed is:

The crisis arises because standard programming techniques, such as those you've learned at Northwestern, are totally inadequate for real world software needs. The consequences have been much worse than getting a C-:

The Cause

These problems arise because fundamental, critical questions were either not asked or not properly answered:

Everything you know is not enough

All of you have probably tried to answer the first set of questions in some form for various course assignments, and perhaps in some programming job. Chances are that for at least some of your projects, you weren't even close. Scale the error in your estimates for a one-person three-week project to a five-person six-month project and you'll see how bad it can get.

Most you have probably never had to answer the remaining questions. What your course projects were supposed to do was decided by someone else (the professor or the textbook) and no one really used the results anyway.

Step back and look at the entire software development process, which is typically broken down into these phases:

Chances are good that your programming courses have only dealt with implementation and perhaps a little design. Implementation, the part where you've spent countless hours, and the part that probably defines what software development is for you, is in fact only a small part of the overall process.

In fact, in most cases, you can tell a well-run project from one that is doomed by how much of the effort is spent on implementation. If implementation accounts for more than 20% of the project effort, the project is in trouble. Most likely, there's

Approaches to Solutions

There are many, many different approaches to resolving these problems, some complementary, some contradictory. These approaches can be organized under two key themes.

Better Management

Management approaches including the following techniques:

Quality Assurance

Quality approaches include the following techniques:

Course Goals

In no way can a one-quarter undergraduate course cover everything in what is a very broad field with a wide variety of subareas, a wide variety of often contradictory methodologies, and a lot of debate about works and what doesn't.

Therefore the goals of this course are modest but concrete. I want to make you better software engineers because you will

Course Activities

To that end, this course will consist of a number of activities and challenges:


Comments? comment image Send mail to Chris Riesbeck.