A major component of the course is a software development project. The objective is to develop a software product for an actual client who intends to use it in regular production.

At the beginning of the course, you will form project teams with 6 to 8 members. During the semester, the project team will work together through the full development cycle, from an initial feasibility study to delivering a functioning product, and will make a series of presentations and reports of the work to the client.

For more information see the following web pages:

Choosing a project

You are encouraged to identify your own project, but some potential projects and clients will be suggested by the course team.

In selecting a project, think broadly. Your project can be an application, system software, or even a toolkit. Software engineering covers everything from smartphones to supercomputers. The only conditions are that there must be a real client and real users.

A client can be any person or organization except yourself (e.g., a Cornell department, a local company or other external organization, a member of faculty or staff, etc.). There should be a firm intention by the client to use the software in production. Aim for a minimum of a three-year production life with many users.

Time boxes and sprints

The project has to be completed within a fixed time period, by the end of the semester. This is called a time box. The team has to agree with the client how much can be achieved, and manage the project to deliver the software by the end of the time box.

A sprint is the development within a time box of a piece of software that is fully tested, documented, and ready to put into production. For your project, the sprint can be either:

  • An entire small system (e.g., a web site or a mobile app).
  • A component of a larger system.

In planning your sprint, focus on the need to deliver completed code at the end of the time box. A common mistake is to over-commit and not have time to do sufficient polishing, testing, and documentation.

Process within the time box

The projects are big enough that you will need to use a systematic development process within the time box. In the course we suggest several processes that you might choose. They include:

  • iterative refinement
  • modified waterfall model
  • agile

Some projects use a combination of these approaches.


Since every software project is different, there is no set list of deliverables that every project must provide. Part of your task is to decide what is needed for this specific project. Typical deliverables include working code, documentation, training materials, test suites, etc.

Every project should use a project management system for their documentation and code. This should be chosen in conjunction with the client. Many projects use GitHub.

  • The projects are divided into four parts, each of which ends in a milestone. At each milestone, the team submits a written report.
  • After the second, third, and final milestones, the team makes a presentation to the client and the course team.

See the Assignments page for more information about the milestones.


These are group projects, but you will also be rewarded individually for special contributions to the project, or failure to provide a fair share of the effort.

The three primary criteria for a successful project are: satisfying the client's needs, usability of the product, and maintainability over the life of the product.