We are actively encouraging collaboration in EE/CSE 371 (everything but the quizzes) – this can help you manage the workload better and make your experience in the class more enjoyable. The main benefit of working with partners is the ability to discuss your approach and share code without worrying about violating any academic conduct rules.
You are given the option of completing almost every assignment (except the quizzes) with one or more collaborators:
Homework and lab reports are submitted via .
You will be given a Gitlab repo for the quarter to better enable collaboration (it beats emailing project files back and forth!). If you are less familiar with git, don't hesitate to ask a staff member or view the following resources:
However, working with a partner does NOT automatically guarantee a smoother and easier workflow! A common misconception is that working with N groupmates means that your workload get cut by a factor of N. This won't be the case, but that's okay! If each of your workloads ends up at less than what it would have been working individually, then that's a win! Our hope is that this will benefit students particularly in the reduction of debugging time and the writing and proofreading of lab reports.
Clear and frequent communication is vital to the success of working with your group. Part of this means establishing expectations early, which might take the form of a short conversation/discussion. Potential topics to discuss include work approach, what your schedules and priorities are for the quarter, approaches that have worked for you in the past, comfort level with topics and tools, submission handling, and late day usage. Remember that you're not trying to impress your groupmates; being realistic will allow you to formulate a plan that will work for all of you. Expectations do not need to form an exhaustive contract, but having some communication before beginning can alleviate future frustrations and misunderstandings.
The assignment specifications for this course can be quite long with lots of information, as well as design decisions that have purposefully been omitted for you to make. It is recommended to read the specs on your own first, taking notes on key aspects or areas of confusion, and then discuss with your group. This is useful for checking each other's understanding prior to drawing any diagrams and writing any code and can save time in the long run.
You always want to make sure that you agree upon a design before attempting to implement anything in code. This ensures that all groupmates are on the same page regardless of the work division and also speeds up debugging since you can contrast the expected behavior against the actual behavior. Finishing design diagrams (e.g., block diagrams, state diagrams for FSMs and ASMDs) first also gives you an opportunity to get feedback from the course staff early on and makes putting together your lab reports easier. Recommended tools for creating diagrams include: (circuits), (diagrams), and (diagrams).
When establishing tasks for a work session or dividing work among groupmates, the more specific you can be the better. As opposed to saying your task is to "finish the assignment", try identifying specific diagrams/modules/features you will work on implementing. This will avoid confusion over task distribution (e.g., no one completing a task because everyone thought someone else was going to do it) and can increase efficiency as everyone will know exactly what they want/need to accomplish.
Regardless of the approach you and your group follow, taking breaks from working can increase your productivity and reduce frustration. With pair programming in particular, checking in with your partner while you work and taking breaks as needed can greatly improve the experience.
If you are working without groupmates present, write down any question or uncertainty that crosses your mind while working on your code so that you don't forget to get it addressed when you next communicate with your group. This could be on a physical piece of paper, in a digital document, or directly in your code comments (but don't forget to clean up unwanted comments later!).
Make sure to share both successes and failures with your group so that you all can learn from your individual experiences and can try to avoid running into the same issues in the future.
We understand that student schedules are extremely busy and that sometimes it is not feasible for all group members to attend the same office hours. However, we find that groups that attend office hours together are more efficiently helped and often come out with deeper understanding.