Team Project
Basic information
There will be one team project in the second half of the semester. A team of three or four students (teams of four students are preferred) will develop this project. These students do not have to attend the same seminar.
The
purpose of the team project is to learn to work and cooperate in a
development team. You will be developing a complex project from start to
end. It will require you to divide work between team members, similar
to real work scenarios.
The
only deadline for the project is one day before the date of your presentation. You will learn more in the "Project requirements" sub-chapter below.
Presentation dates will be published towards the end of the semester /
during the exam period.
After successfully finishing the project, you will present it to the teachers. During the presentation, all members of the team have to be present (if not properly excused). The presentation will be roughly 10 minutes long, as there needs to be room for questions from teachers. The presentation consists of a project demo to showcase how the project fulfills the assignment requirements.
Project registration, topics
There will be a list of project topics and their short specifications in the IS. You will find it in the section “Student” > “PB138” > “Lists”.
The enrollment starts on 21/Mar/2024 at 8 pm. Only one student can enroll to each topic, so please, choose a single person from your team who will try to register on your chosen topic.
After 24 hours, we will make the topics available to 4 people each. That’s when all team members should enroll to the chosen topic. If
you haven’t found a team yet, you can use the “looking-for-team”
channel on Discord. Creating and managing your team is your responsibility, and we try not to interfere unless it is necessary.
There are enough team project assignments/topics for all students of the course, but if you have your own idea (it can be inspired by some existing website or app), let your tutor know - best is to prepare your own assignment; the format needs to match the format of the assignments published by us. Your tutor will check your topic and (hopefully) approve it, or they will request some changes to the assignment. After approval, your requested topic will be yours - you will be automatically enrolled on it by your tutor.
Project requirements
The project requirements are a bit simpler this year: your project has to consist of a TypeScript-based frontend (React is strongly preferred, but we're not going to limit you from using some other framework/library), TypeScript-based backend (either using Node.js, Bun or Deno). You may use Next.js, Remix or a similar framework as well. The idea is to put the knowledge you gain from this course into some practical assignment. We know that some of you know web frameworks in Java, C#, Python, and PHP, but that is not what this course is about. Occasionally, if you have a very good reason you can justify, we may allow you to use other technology rather than the TS-based backend. You must consult a non-TS backend with your seminar tutor. The frontend, however, has to be TypeScript-based.
The project source code has to be hosted on faculty Gitlab, or Github with a mirror to the faculty Gitlab. The project visibility has to be set to private, and you will be required to add some seminar tutors / lecturers with at least Developer privileges. The list of people to add will be tied to the presentation date, and will be announced on Discord and by email.
To be more specific about TypeScript - we require you to develop fully typed solutions without taking shortcuts (most notably by using any
to bypass type checking). We also require you to use a robust database solution (such as Postgres with services like Neon). One last requirement is to mock the application with meaningful data - No Lorem ipsums, no placeholder texts; the used data should look believable and must not repeat (too much).
Advice and hints from us:
- We advise you to create tests (mostly integration tests) for your database & APIs using frameworks like Jest or Vitest. We advise you to look into Playwright and visual regression testing for your frontend.
- Setting up CI/CD jobs for your project might be the next stage - setting up your CI pipelines to execute tests (at least on Merge/Pull request branches) is very helpful for other people to see the state of your code, allows spotting mistakes early and is a generally good skill to learn (no development job views CI/CD knowledge as a disadvantage, quite the contrary).
- While deployment is not necessary for your project presentation, it is one of the crucial things to learn to boost your career. You can deploy your application for free on many services which provide freebie plans (for example, Vercel, Netlify or you can deploy it to a VM on stratus.fi.muni.cz/). During deployment, you will learn about infrastructure setup, maintenance and various cloud solutions.
Presentation
There will be time slots available in the IS for your presentations. First, your team leader
will enroll for a time slot of your team's preference. After some time, we'll open up the capacities for the whole teams. The presentations
will be held online via our course Discord server. The list of @xlogin
's will be via email one day prior to the source-code deadline.
The teams have to finalize the codebase one day before the presentations. The typical deadline is 12:00 (PM - during lunch!) This is a hard requirement, as the tutors need some time to review the state of the codebase.
The presentation should be roughly 10 minutes long, but not longer. After your 10 minutes, there will be another 5-10 minutes for questions, discussion, code review and final evaluation.
Each member of the team has to attend the presentation (if not properly excused).
Recommended structure of your presentation
Introductory slides: briefly
introduce your topic, selected technologies, as well as your team and
responsibilities. A few slides (let's say 3-5 slides) are optimal. Do not make your slides too long; this is not the primary part of your presentation. If you have a more in-depth demo, you can skip the slides altogether.
Demo of your application:
show us your result, how it works, and the required functionality.
Basically, show us how we can use your result and what your result is
capable of. This is the most important part of your presentation, so spend most of your time demoing the app.
Workflow/code-base: one after another, present your role in the project. Mention what part of the code-base you were working on. Feel free to show us your code; choose the most interesting part of your code-base => either the most challenging one or the one you are most proud of. You can also mention some problems you encountered and how you dealt with them.
Final notes: no
need to be nervous about the presentation. Consider it a discussion
about your project and (if there's enough time) things you learned
during the semester.
Recommendations
Work agile and iteratively. Choose your scrum master - the person with the best social skills in your team. This person will act as a mediator during discussions, manage tasks necessary to accomplish the project's assignment and keep the group going.
The
next role in your team should be an infrastructure specialist. This
person will prepare a docker development environment, set up a CI
pipeline, and create a testing and deployment infrastructure.
In developer roles, you will need to cover both the backend and the frontend. Choose according to your preferences.
One
person doesn't need to stick to one role. Discuss your roles in your
teams and stay flexible. We do not require you to have fixed development
roles. However, it is usually the best way of working in practice.
Never
forget to test your stuff when you commit it. Pair review your code -
use merge requests for reviewing your colleagues' work. Someone who has
not worked on the feature should do the final testing rather than the
one who developed it.
Leave yourself enough room to work on the project - it can take well over a month in some cases. Project management, honest expectations, and fair, periodical work is the correct way to approach this project.