The senior project course has been offered yearly since 1987. In this two-semester sequence, you will complete a substantial real-world project sponsored by industry, a research organization, non-profit, or CU Boulder Department.

How Project Selection Works

  1. Sponsors submit project proposals, including a brief description and optional visual aids.
  2. Students review the proposals and speak to sponsors during a fall Project Fair.
  3. Students submit project preferences, which are used by the instructor to select projects and form teams.


Beginning immediately after project selection, your team will weigh pros and cons of applying the various lifecycle options to your project. Many teams will use an agile approach structured around a series of short, 2- or 3-week software development iterations after a short initial planning stage, while others might spend more time evaluating project requirements and planning their approach to development.

Each development iteration includes planning, development and release. Throughout the project, your teammates are responsible for organizing, scheduling and completing their tasks; however, a very important aspect of each iteration is that the sponsor is closely involved in reviewing the project and providing feedback and direction.


Several documentation artifacts are developed as part of these iterations over the course of the year, including requirements, design, a test plan and documentation for both end users and future developers. The nature of documentation for a specific project is detailed by the project sponsor.


Your team will also give several presentations over the course of the project, which culminates in a poster/demo presentation at the Computer Science Expo during the last week of classes, and a final demo at the sponsor site.

Course Outcomes

Upon completion of the class, you should possess:

  • An understanding of a wide variety of software lifecycle model.
  • An ability to be a contributing member of a software development team.
  • An ability to choose the model most appropriate to their project and using the model as a guide for the teamwork.
  • An ability to analyze and document software requirements.
  • An ability to complete both high-level and detailed software design, along with the ability to create associated written documentation.
  • An ability to reason about tradeoffs among design options.
  • An ability to perform risk evaluation and develop mitigation strategies.
  • An ability to set and meet both short- and long-term goals.
  • An ability to use state-of-the-art collaborative software engineering tools and methods.
  • An ability to correctly implement and integrate components of a larger software system, following practices appropriate for the development environment.
  • An ability to perform testing -- including unit testing, integration testing and system validation -- along with the ability to create an associated written test plan.
  • An ability to produce user documentation for the targeted end users of the software.
  • An ability to create a software product release, along with the ability to create associated written release notes.
  • An ability to communicate (both written and oral) effectively with a wide variety of audiences, including other developers, management, customers and end users.