COMP1531 - Software Engineering Fundamentals

4 minute read medium

Difficulty: 3/10 · Time Commitment: 9/10 · Enjoyability: 4/10 · Mark: 94


I did COMP1531 (Software Engineering Fundamentals) in Term 3 2021. The subject consists mainly of a major group project in Python and is the best first-year subject at UNSW to learn actual techniques and concepts used in a software engineering job.


  • Extremely relevant to real-life software development
  • Interesting group project
  • Lectures fun and engaging
  • Labs have a lot of variety and are a great way to learn Python


  • Group project is very little work if the entire group contributes, however, if the group does not, then it can be extremely stressful and difficult to complete



The main element of COMP1531 is a major group project which spans the entire term. It consists of 3 iterations which are incrementally harder in difficulty (although the workload peaks at the 2nd iteration). The entire course is taught in Python, with most lectures being dedicated to teaching various features of the language.

Having strong prerequisite knowledge of Python programming is very helpful in this course and also lowers the workload quite significantly. This course focuses greatly on writing pythonic code and teaching basic agile methodologies.

In my opinion, the best part of this course is the real-world applicability. From teaching students how to write user stories to learning to work on code as a team using git, this course has so much content for both beginner and intermediate programmers to learn something useful.


When taught by Hayden Smith, this course offers engaging lectures with detailed explanations of each concept. The one drawback to a Hayden’s teaching style is the slow pace of content and I recommend watching the lecture recordings at 3-4x speed rather than attending live lectures because it saves so much time.

If you already have a strong foundation in Python, it isn’t necessary to watch lectures in full, as many lectures simply cover the basics of Python and writing pythonic code.

Tutorials and Labs

When I did this course, tutorials were marked on participation. The marking is generally really lenient and it is easy to achieve full marks in this by simply turning on your webcam and asking/answering a few questions throughout the tutorial.

Labs are primarily used to mark weekly lab exercises and update your tutor on assignment progress. My group found this really helpful every week as we were clued in on different aspects of our code we could improve to maximise our marks and make our code easier to adapt in subsequent iterations of the assignment.


The assignment in this course spans the entire term and has 3 iterations. Each iteration is designed to reuse the code from the previous one, however, many aspects of the code is designed to be refactored to work more efficiently or add new features. This means having good code style and spending time on code design is important to avoid unnecessary time refactoring complex code in later iterations.

The assignment is actually very digestable and probably takes about 5-10 hours of work per person per week. The main problem with this arises when a group of 5 has people who don’t do work. In my experience, the entire burden of the project was split amongst me and one other person, meaning we had to spend 20+ hours a week on just the one course.

Assignment specific advice

  • Get a good group for the assignment. It is really important to have people are not necessarily friends but people who you can trust to put time and care into the project.
  • Break down each function into smaller functions that control basic functionality. This makes it so much easier in later iterations when you have to implement the same functionality a slightly different way.
  • Use nested dictionaries instead of lists for any persistent storage. Please don’t use lists even if it seems easier and more tempting. It makes it so much more complicated to read code and there are absolutely no benefits.


  1. Make sure to start assignments early. Don’t leave each iteration till last minute. The assignment isn’t hard at all and should be doable for almost everyone in the course, however, it is very tedious and time consuming so you won’t get away with leaving it till the week before.
  2. GET A GOOD GROUP. As I said above, the assignment is very doable but it is very long and tedious. Spliting the work amongst 5 people makes it so much faster and easier to finish!
  3. Do more lab exercises than necessary. The final exam in this course is almost the same as the lab questions, so if you do all the lab questions each week, you will be in a great position to finish everything in the finals.
  4. Learn Pytest flags. There are so many good flags that come with Pytest. Read the documentation and experiment with them a little because some of them might save you a lot of debugging time.