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.

Remote clients

Because we hope that the client will attend presentations in person, we are cautious about clients who are not based in the Ithaca area. If your client is not based locally, you need to discuss what methods of communication you will use to work together. Recently there have been some successful projects for remote clients. For more about this topic, see Working with Remote Clients.

Student organizations

It is possible to do a project for a Cornell student organization, with an officer of the organization as client. If you propose such a project, the instructor needs to meet with the client before a definite decision is made.

Entrepreneurship projects

In the past we have had several projects for student entrepreneurs. Some have worked well; others have been less successful. If you propose such a project, the instructor needs to meet with the client before a definite decision is made.


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.

See the Assignments page for more information about the milestones.

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.

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.

Technical environment

Most projects will use C++, Java, Python, or similar languages. The software will usually run on Unix, Windows, or Macintosh computers, tablets, or smartphones, but you are encouraged to use whatever is right for your particular product.

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.