CSCE 490 Syllabus

Instructor: Jose M Vidal
Contact Information:

  1. @josemvidal in github.
  2. Email me at I check my email constantly.
  3. Office Hours: see my calendar, drop by Storey 2231 during the listed Office Hours. Or email me for an appointment.
  4. Lab: Storey 1210


Text: There is no required textbook for this class. The one book I highly recommend everyone must read is The Pragmatic Programmer: From Journeyman to Master. You will likely hear me repeating the tips from that book many times.

Lectures: The Lectures are all online at this link. You are responsible for watching them during the first month of classes.

Course URL:

Meeting Times/Room

Every team will meet with me in my office every other week. Meeting times will be scheduled after teams are formed. The typical agenda for these meetings is:

  1. Progress report / demo of your work in the last 2 weeks
  2. Individual reports
  3. Questions / Decisions/ Issues that need my input.

Watch my teamwork lectures for more details on teamwork.

Capstone Laboratory

The Capstone Lab is located in the Story building in room 1210. The building and room will be open to you 24/7. You will need to USC ID to get into the lab (and into the building after hours) and only students registered for CSCE 490 can get into the lab.

The lab has 4 iMacs, 12 Windows PCs, and 12 Ubuntu Linux machines. You can login to any one of them with the same credentials you use for the Linux labs.

Description and Goals

This is the first of a two-semester capstone course in the Department of Computer Science and Engineering for computer engineering, computer science, and computer information systems majors. It is intended to bring together and use many of the concepts and skills learned in other courses in the curriculum.

The official course prerequisites are CSCE 240 (Software Engineering), CSCE 311 (Operating Systems), and either ENGL 462 (Technical Writing) or 463 (Business Writing).

The goals of the course are for you to:

  1. Pursue an independent project under time and resource constraints;
  2. Refine a topic, formulate an approach, and solve a significant technical problem to achieve the project goal;
  3. Organize and work as a team to design and accomplish an independent project under time and design constraints;.
  4. Design a computer based system, consisting of an appropriate mix of software and possibly hardware components, using the techniques, skills, and tools of modern computer system development practice.
  5. Develop effective written and oral skills to communicate among team members as well as with outsiders in a real-world styled environment;

Project teams will be formed very early in the semester. Each team will be responsible for developing the product requirements, designing the product, implementing it, and demonstrating that it works as required.

At the end of the semester each person will also be asked to submit a peer evaluation of his or her teammates and assess their contributions to the project.

Team Formation

There are 2 types of projects: client projects where the team builds an app for a client, and startup projects where the team builds their own app. All teams must have 4 or 5 students. We first form the startup teams, then the client teams. The team formation process is:

  1. If you want to do a startup you find 4-5 students, come up with an idea for an app, and fill out this form to tell my your startup proposal. Note that this is just a proposal. Your name can be in only one startup proposal.
  2. X startup projects will be chosen at random, where the number X depends on how many clients and how many students we have in class. I will post the chosen startup teams on this website.
  3. If you want to do a client project, or if your startup project did not get chosen, then you will read all the project descriptions clients have sent me. Here they are for 2018-19. You can email the client directly if they have questions.
  4. I will post a form on this website where you will tell me your preferences over client projects. FORM NOT POSTED YET. You will fill out that form to tell me your preferences over the client projects.
  5. I run a program to find the allocation of client projects to students that maximizes happiness, under the constraint that all teams must be of 4 or 5 students. I will post the results on this website.

If you are looking for startup partners, you can post on our Github team: 490Fall18 (visible only to people in the class who have told me their github username)


All code must be in git, pushed to github.

We will use github issues. You will add our Milestones. Watch the teamwork lecture for all the details.

You will turn in everything else in the github wiki.

IOW, everything you do will be in your github repo. If it is not there, it will not get graded.


The final grade for this class will be calculated as follows:

Item Percentage of Final Grade
M1: Form Teams 2%
M2: Personal Log 2%
M3: Research 5%
M4: Project Description 2%
M5: Rough Designs 2%
M6: Detailed Design 10%
M7: Functional Requirements 10%
M8: Architecture 5%
M9: Source Control 2%
M10: Working Prototype 50%
M11: Presentation and Demo 10%
Personal Contribution up to 100%
Firing a Team member F if you are fired

Most Milestones receive a team grade, meaning everyone in the team receives the same grade. Others are individual, everyone gets an individual grade.

Notice that your personal contribution counts for up to 100% of your final grade. Your personal contribution will be determined by me. I will be looking at:

  • the peer evaluation done by all team members on all their team members, submitted at the end of the semester
  • your personal log wiki page
  • your git log for repo and wiki
  • participation/attendance in team meetings and in our group meetings (in my office)

Note that if your personal contribution to the project is minimal then your grade will reflect that, regardless of what the project itself receives. Thus, it is possible for a student to fail the class even when the students' project receives an A.

But, what if you want to do pair programming? Then you have to create commits with multiple authors.

Firing a team member

The steps to fire a team member are:

  1. Keep a record of the team member's performance: git log, wiki edits, assigned Issues (all of which are automatically kept for you in github), meeting attendance, etc.
  2. Write up the complaint and bring it to me.
  3. Come up with some specific Issues (features) that should get done by the team member, within a 2-3 week period: the deadline.
  4. I give the student a Formal Warning, and tell them they need to get their assigned Issues done by the deadline.
  5. If no significant improvement happens within the deadline then the student fails the class. Yes, the student gets an F in the class.

I recommend you start the firing process at the mid-semester point. If someone has not done anything by that point, they will almost certainly not turn around and will only drag down your team, which will affect your final grade.

If you don't have the time to devote to this class this semester I recommend you drop it. This class takes a lot of time. It is better to graduate a year later than to get an F and graduate a year later anyway.

Academic Integrity

Cheating is giving or accepting unauthorized aid on any assignment, test, or program, not documenting outside sources of information, or falsifying work records. You are expected to know and abide by the “Rule of Academic Responsibility” found in the Carolina Community Student Handbook and Policy Guide. For this class you may work together and help each other to understand course concepts and to learn how to do specific tasks; but project deliverables are to be either your own individual work or the work of your own team as appropriate.
Cheating on a test or copying someone else’s work, will result in a 0 for the work, possibly a grade of F in the course, and, in accordance with University policy, may be referred to the University Committee for Academic Responsibility and may result in expulsion from the University. To avoid academic espionage be careful how you dispose of printed copies of your work and who you show your work to, do not leave disks or thumb drives with copies of your work lying around, and never give anyone else access to you account for any reason.

In this class, using someone else's github account is considered cheating. That is, making a git commit, or pull request, or editing a wiki page, etc., using someone else's account will be treated exactly the same as taking a test for someone else. If it is done with the consent of the other person then both people are equally at fault.

Specifically, doing the work for someone else or copying code (that is, git-committing code under someone else's name or committing someone else's code under yours) will result in a formal report to the Office of Academic Integrity, which might lead to expulsion from USC.

Tip: If you need to borrow a teammate's laptop, create a new user account in that laptop. Use that user.