This document provides guidelines for your senior design project and team formation.

Teams, Advisors, and Mentors

One of the objectives of the SD course is team software development. The size of the team must be 3-4 persons per team. Exceptions for smaller teams are typically only granted in the case of research projects. When defining the project, each team member must be assigned specific components of the project. Four person teams are suggested to think of their project as having two integrated halves, each developed by a pair of students. There will be regular team assessments to ensure equitable and productive teamwork.

One of the course instructors will act as the faculty advisor for each team. Your faculty advisor will meet with you regularly to ensure all team members are making progress and to help direct the overall project and ensure it meets our design criteria.

Each project will be assigned a mentor. Mentors are typically GW CS alumni currently working in industry, but may be a faculty member for research focused projects. There will be required weekly or bi-weekly check-ins with the mentors and status reports will be documented for assessment. Mentors will be assigned based on the topic (technical area) of your project, but their primary purpose is to provide project management guidance and they will not necessarily be able to give detailed technical help.

Project Criteria

Projects must have both an algorithmic and a technical component.

An algorithmic component refers to the core logic, methods, and problem-solving procedures your solution employs. This isn’t just about writing code, but about designing, analyzing, and optimizing algorithms to address interesting challenges or tasks.

The technical component pertains to the actual implementation, integration, and deployment of these algorithms in a real-world system or application. This could involve considerations like system architecture, database design, interface development, and other practicalities that transform your algorithm into a fully functioning product or solution.

Together, these components ensure that students gain a comprehensive experience, bridging the gap between theoretical understanding and practical application.

Research projects are a special category of project where the idea typically (but not necessarily) comes from a faculty research advisor. If you are already involved in research with a faculty member, you can propose a project based on that work. The project still must meet the technical and algorithmic requirements, but often the focus will be more on the evaluation of a new algorithm and less on the development/usability/UI aspects of the project.

  • If you are considering a research project, then you need to contact the faculty member as soon as possible and get their approval to serve as your research mentor. Research projects may have smaller group sizes.

Project Proposals will be due in the second week of classes. Each team must propose at least 2 and a maximum of 3 projects, each of which must meet the project criteria in this document.

Good and Bad Project Ideas

The typical senior design project will build a significant software (and/or hardware) system for an application (or product) and must have technical and algorithmic components. In a nutshell, an SD project needs to have core computer science as its “meat”, something that’s innovative, something that will challenge you and take you out of your comfort zone not just in terms of programming, but in the project’s core design. We know that some projects involve a lot of work, but a lot of programming is not a substitute for innovative core CS content. Your project should clearly include both technical challenges and an algorithmic component.

To illustrate, here are some projects that would NOT be acceptable, no matter how ambitious the programming effort:

  • Any project where a database-backed website is the core contribution. You already know how to build websites - there is no new technical or algorithmic achievement in merely building a more feature-rich website. Websites can definitely be part of a project, but not the core contribution. As a thumb rule, anything that resembles your Database course project (CS 2541) in complexity will not be acceptable.
  • Any project that is mostly a direct application of sophisticated APIs. A good example is populating Google maps with data from some other source. For example, showing restaurants and their ratings on maps. Similarly, your algorithmic component cannot be fully achieved simply by using an API such as ChatGPT. You must do more than just glue together one or more APIs.
  • Any project whose primary contribution is game design. Even if the game is dazzling and innovative, if the effort is primarily in game design and graphics-package mastery, it won’t suffice for a project unless it has a challenging algorithmic component and a key problem/application that it addresses.

Now, there are exceptions. For example:

  • A website can be part of a project whose core includes some algorithmic or systems content. For example, extending the university registration management system you built for CS2541 to automatically assign classrooms to courses based on a bin packing algorithm might qualify if your focus is on designing new algorithms and demonstrating why they are effective.
  • Similarly, you can do a game if your primary contribution is something core in AI algorithms or computational geometry.
    However, to be granted an exception, you will have to make a strong case for an exception.

Here are some criteria to use in looking for projects:

  • Does the project have an algorithmic challenge and a compelling application of the algorithm? Again, it is not enough to merely code up an algorithm to a problem, as you might in a research project or an algorithms course. The algorithm needs to be part of a substantive application.
  • Are there novel CS abstractions/mechanisms and a compelling application?
  • Will your project build or significantly augment a software tool (e.g., language, compiler, Operating System) that is useful and innovative in some way?
  • For a hardware based project, is there an interesting challenge you will be solving in controlling or using the device?

A few more points about the project:

  • If the success of your project depends on a lot of data, then you’ll need to explain how you’re going to get the data. For example, if you were going to create a searchable image database (with a new kind of search algorithm), to show that it’s effective, you’ll need lots of images. Where are these going to come from? How large? Why are the datasets compelling/useful?
  • Your project needs to be innovative - not a clone of some previous project. If it builds on an existing product then what innovate technology are you building into the product. We urge you to think out of the box.
  • You also need to think about what you will demo and you will make your demo compelling. This includes User interface, Usability, the “wow” factor which can include key research contributions, etc. Thus, while much of your project is about the technical meat, you should think about devoting time and effort to these other aspects. Of course, we understand that it’s harder to demonstrate “wow” with an OS project than, say, a robotics project. We will weight accordingly, and help you with that aspect.