Main goal of this seminar is to take what you learnt during seminars (and inspire yourself) to develop a working application in teams of 4 people with the guidance of Tech Lead and a Project Manager.

Project workflow

Create your own repository by forking this repository. Also add your tech lead and your PM as members of the project with Developer role.

Communication during the semester

  • Every project is assigned a Product Manager/Owner (PM/PO) and a Tech Lead (TL is one of your seminar tutors)
  • Create a Discord Server where you invite both PM and TL.
    • Create a room for discussions with PO/PM
    • Create a room for discussions with TL

Work and Deliverables During the Semester

Your PM will contact you with a form where your team can select suitable meeting slots (Milestone meetings, Final Presentation, etc.). For all events, all team members must be present. While participating online is technically possible in emergencies, it is heavily discouraged.

Work is split into 5 Milestones (Milestone 0–4) and a Final Presentation. The table below outlines the timeline, required deliverables, and evaluation focus:

Milestone Target Week Main Deliverables Evaluation & Review Focus
Milestone 0 Week 2 Repo setup, team working agreement, initial meeting with PM Environment check & requirements clarity
Milestone 1 Week 5 UI/UX mockups approved by PM, functional & non-functional requirements signed off, in-memory CRUD functionality for core entities (without DB), working import/export Sound initial architecture and domain design
Milestone 2 Week 10 >50% of functional requirements delivered, persistent database storage, test suite with reasonable coverage Architecture integration, clean layering
Milestone 3 Before Christmas break Background tasks, filtering, DSL, logging, transactions, robust error handling, all functional requirements delivered Error handling, asynchronous operations, polish
Milestone 4 After New Year Remaining tasks (gap closure, bug fixes, edge cases) + course and PM/TL feedback Code quality, stability, edge cases
Final Presentation End of January Virtual software house pitch, live demo & architectural defense within your seminar group Final evaluation & colloquium

Final Presentation

You will present your project in front of your seminar group. Your team represents a software startup, and the audience consists of potential investors. You will present your company and application in a way that sells the product to this audience. Since the course concludes with a colloquium, every team member must participate in the presentation.

The presentation has three parts:

  1. Product Pitch & Demo (15 minutes): Showcase your company branding, user scenarios, and the live application.
  2. Architectural Defense (10 minutes): Discuss the chosen technologies, architectural decisions, design patterns, and how you resolved major technical roadblocks. We also expect a brief overview of how your team leveraged AI tools and how that influenced your development workflow. Brief summary of the feedback given during Milestone 4 is also expected.
  3. Q&A (5 minutes): Questions from the crowd investors.

Technology stack

If you are unsure about the library/approach you would like to use, consult with your Tech Lead.

Required Technologies

  • Java 21 (or newer LTS) with Maven or Gradle
  • JUnit 6, AssertJ for fluent test assertions, and Mockito for mocking
  • Swing or JavaFX for GUI
  • An embedded database (H2, SQLite, or equivalent) and its JDBC driver

Advised Technologies

Other Technologies

  • Hibernate Validator
  • Lombok
    • Warning: Lombok can create bugs that are very, very difficult to debug. Please, use it only if you know what you are doing.

Forbidden Technologies

The goal of this seminar is to learn how things work under the hood and apply these concepts. These technologies make that either very difficult or impossible.

  • Frameworks: Spring (Boot), Micronaut, Quarkus, Dropwizard, etc.
  • Dependency Injection: Spring Context, Google Guice, Jakarta CDI / Injection, etc.
  • Web/SPA Frameworks: React, Vue.js, Angular, etc.
  • ORM Solutions: Hibernate ORM, EclipseLink, or any other Object-Relational Mapping tools.

Project assignments

Your PM will assign an application project based on one of the following topics:

  • Ing. Horvath’s Bistro Supply
  • Doc. Kovácsová and the chaos around the department

All projects have functional and technical requirements. The technical requirements are identical for all projects, whereas the functional requirements are individual as they are uniquely prepared for your team by your PM. Despite having the same topic, the assignments might differ team-to-team.

The non-technical requirements:

  • Develop the project in an Agile manner:
    • You must deliver working functionality every milestone. For example, delivering only a frontend/GUI for the first milestone is unacceptable.
      • Focus on small, deliverable merge requests that your team members have a realistic chance of reviewing. A PR with +5000 / -0 line changes is not one of those.
      • When developing a feature, deliver a smaller scope that works end-to-end first, then enrich it and demonstrate your progress across subsequent milestones.
      • When implementing a backend component, introduce the corresponding UI together with it whenever possible.
  • Come prepared to milestone reviews and submit milestone PRs on time.
  • Every team member must participate. We will evaluate the participation by looking at implemented features and their depth. Having a team member implement only the database layer because they dislike Swing is not acceptable.
  • We expect you will use project management tool like Jira, Trello, GitLab Issues or something of this nature.
  • Have fun and learn a lot!

Expected Git workflow

  • Set up a develop branch
    • Make develop and main protected branches.
    • During each milestone, your team will use this branch for development. All changes to this branch should be made through a merge request (MR).
    • At the end of each milestone, you will create a MR called Milestone-X from the develop branch into the main branch. Add your Product Manager and your Tech Lead as assignees.
  • We encourage keeping a linear Git history (e.g., via rebase/fast-forward), though it is not required.
  • Every contribution to develop must be made through MR that requires at least one approval from one of your team members. Please, actually spend time reading and reviewing!

For milestones 1-4, your tech lead will review your changes, provide feedback, and request any necessary modifications. For these milestones, the tech lead must approve your changes before you can merge them!