iP:
tP:
This activity is worth 2x2=4
participation points.
iP Peer Evaluation 1
) that you will be using to submit your evaluation and take note of the things you need to evaluate.java -version
command to confirm).java -jar {file_name}
command to open it.iP Peer Evaluation 2
).Reminder:
Milestone requirements are cumulative. The recommended progress for the mid-milestone is an implicit requirement for the actual milestone unless a milestone requirement overrides a mid-milestone requirement e.g., mid-milestone requires a document to be in a temp format while the actual milestone requires it to be in the proper format. Similarly, a requirement for milestone n
is also an implicit requirement for milestone n+1
unless n+1
overrides the n
requirement. This means if you miss some requirement at milestone n
, you should try to achieve it before milestone n+1
or else it could be noted again as a 'missed requirement' at milestone n+1
.
Admin tP → Supervision (Extract) → Tutor's role in making project decisions
Note that tutors are not allowed to contribute to graded components of your project work. For example, if you are faced with a design decision in your project, the tutor is not allowed to make that decision for you.
Reason: to ensure fairness across teams, and to ensure the work you submit for grading is entirely your own
Following from the above, don't expect the tutor to answer questions that are specific to graded deliverables (e.g., ask which design alternative is better -- that's a decision you need to make yourself). At best, the tutor can channel the question to the professor. However, you can raise such questions in the module forum where the professor can answer the question in a general way that's not unfair to other teams (and other teams can benefit from the answer as well).
How to make project decisions (given your tutor is not going to make them for you)? Here are some tips:
Admin tP: Functionality Expectations
The expected level of functionality to be added by a 5-person team is roughly the equivalent effort taken to create AB3 functionality. Furthermore, we expect a team to reach that level if each member puts in an effort equivalent to the effort they put into the iP. Some examples meeting that criterion:
You will get full marks for implementation effort if you meet the expectation stated above. There are no extra marks for exceeding that bar. You are better off spending that effort in improving other aspects of the project.
If you wish to add the following features to your app, we recommend (but not require) you to follow similar features in AB4 in order to reduce the effort required.
One semester ago, we reduced the tP functionality expectations by about 40-50% compared to the previous semesters, in order to reduce your workload. Keep that in mind in case you receive advice about project from seniors who did this module more than one semester ago.
Admin tP: Individual Expectations
Some examples:
Example enhancements
Tip: Contribute to all aspects of the project e.g. write backend code, frontend code, test code, user documentation, and developer documentation. Reason: If you limit yourself to certain aspects only, you could lose marks allocated for the aspects you did not do. In addition, the final exam assumes that you are familiar with all aspects of the project.
Tip: Do all the work related to your enhancement yourself. Reason: If there is no clear division of who did which enhancement, it will be difficult to divide project credit (or assign responsibility for bugs detected by testers) later.
🤔 How much testings is enough? We expect you to decide. You learned different types of testing and what they try to achieve. Based on that, you should decide how much of each type is required. Similarly, you can decide to what extent you want to automate tests, depending on the benefits and the effort required.
There is no requirement for a minimum coverage level. Note that in a production environment you are often required to have at least 90% of the code covered by tests. In this project, it can be less. The weaker your tests are, the higher the risk of bugs, which will cost marks if not fixed before the final submission.
Team-tasks are the tasks that someone in the team has to do.
Examples of team-tasks
Here is a non-exhaustive list of team-tasks:
Roles indicate aspects you are in charge of and responsible for. E.g., if you are in charge of documentation, you are the person who should allocate which parts of the documentation is to be done by who, ensure the document is in right format, ensure consistency etc.
Recommended roles and responsibilities
This is a non-exhaustive list; you may define additional roles.
Model
, UI
, Storage
, etc. If you are in charge of a component, you are expected to know that component well, and review changes done to that component in v1.3-v1.4.Ensure each of the important roles are assigned to one person in the team. It is OK to have a 'backup' for each role, but for each aspect there should be one person who is unequivocally the person responsible for it. Reason: when everyone is responsible for everything, no one is.
Admin tP: Team Expectations
Some examples:
Example enhancements
Tip: Contribute to all aspects of the project e.g. write backend code, frontend code, test code, user documentation, and developer documentation. Reason: If you limit yourself to certain aspects only, you could lose marks allocated for the aspects you did not do. In addition, the final exam assumes that you are familiar with all aspects of the project.
Tip: Do all the work related to your enhancement yourself. Reason: If there is no clear division of who did which enhancement, it will be difficult to divide project credit (or assign responsibility for bugs detected by testers) later.
🤔 How much testings is enough? We expect you to decide. You learned different types of testing and what they try to achieve. Based on that, you should decide how much of each type is required. Similarly, you can decide to what extent you want to automate tests, depending on the benefits and the effort required.
There is no requirement for a minimum coverage level. Note that in a production environment you are often required to have at least 90% of the code covered by tests. In this project, it can be less. The weaker your tests are, the higher the risk of bugs, which will cost marks if not fixed before the final submission.
Team-tasks are the tasks that someone in the team has to do.
Examples of team-tasks
Here is a non-exhaustive list of team-tasks:
Roles indicate aspects you are in charge of and responsible for. E.g., if you are in charge of documentation, you are the person who should allocate which parts of the documentation is to be done by who, ensure the document is in right format, ensure consistency etc.
Recommended roles and responsibilities
This is a non-exhaustive list; you may define additional roles.
Model
, UI
, Storage
, etc. If you are in charge of a component, you are expected to know that component well, and review changes done to that component in v1.3-v1.4.Ensure each of the important roles are assigned to one person in the team. It is OK to have a 'backup' for each role, but for each aspect there should be one person who is unequivocally the person responsible for it. Reason: when everyone is responsible for everything, no one is.
Admin Appendix E(extract): Setting up the issue tracker
We recommend you configure the issue tracker of the tP team repo as follows:
Issue type labels:
type.Epic
: A big feature which can be broken down into smaller stories e.g. searchtype.Story
: A user storytype.Enhancement
: An enhancement to an existing storytype.Task
(or type.Chore
) : Something that needs to be done, but not a story, bug, or an epic. e.g. Move testing code into a new folder)type.Bug
: A bugPriority labels:
priority.High
: Must dopriority.Medium
: Nice to havepriority.Low
: Unlikely to doBug Severity labels:
severity.VeryLow
: A flaw that is purely cosmetic and does not affect usage e.g., a typo/spacing/layout/color/font issues in the docs or the UI that doesn't affect usage.severity.Low
: A flaw that is unlikely to affect normal operations of the product. Appears only in very rare situations and causes a minor inconvenience only.severity.Medium
: A flaw that causes occasional inconvenience to some users but they can continue to use the product.severity.High
: A flaw that affects most users and causes major problems for users. i.e., makes the product almost unusable for most users.When applying for documentation bugs, replace user with reader.
Create following milestones : v1.1
, v1.2
, v1.3
, v1.4
You may configure other project settings as you wish. e.g. more labels, more milestones
Admin Appendix E(extract): Project schedule tracking
In general, use the issue tracker (Milestones, Issues, PRs, Tags, Releases, and Labels) for assigning, scheduling, and tracking all noteworthy project tasks, including user stories. Update the issue tracker regularly to reflect the current status of the project. You can also use GitHub's Projects feature to manage the project, but keep it linked to the issue tracker as much as you can.
You can break the user story into issue subject and description in this way:
title | As a user I can add a deadline |
---|---|
Description | ... so that I can keep track of my deadlines |
Alternatively, you can put the entire user story in the description.
title | Add deadline |
---|---|
Description | As a user I can so that I can keep track of my deadlines |
In both cases, apply the type.Story label.
Assign the type.*
and priority.*
labels to those issues.
Formalize the project plan by assigning relevant issues to the corresponding milestone.
Define project tasks as issues. When you start implementing a user story (or a feature), break it down to smaller tasks if necessary. Define reasonable sized, standalone tasks. Create issues for each of those tasks so that they can be tracked.
A typical task should be small enough for one person to do in a few hours. eg.,
Write the Developer Guide
Update class diagram in the Developer Guide for v1.4
There is no need to break things into VERY small tasks. Keep them as big as possible, but they should be no bigger than what you are going to assign a single person to do within a week. eg.,
Implementing parser
(reason: too big).Implementing parser support for adding of floating tasks
Do not track things taken for granted. e.g., push code to repo
should not be a task to track. In the example given under the previous point, it is taken for granted that the owner will also (a) test the code and (b) push to the repo when it is ready. Those two need not be tracked as separate tasks.
Write a descriptive title for the issue. e.g. Add support for the 'undo' command to the parser
priority
can be omitted if you think they don't help you.Assign tasks (i.e., issues) to the corresponding team members using the assignees
field. Normally, there should be some ongoing tasks and some pending tasks against each team member at any point.
Given below are the conditions to satisfy for a milestone to be considered properly managed:
Planning a Milestone (to do within the first week of the iteration):
Issues assigned to the milestone, team members assigned to issues: Used GitHub milestones to indicate which issues are to be handled for which milestone by assigning issues to suitable milestones. Ensured issues are assigned to team members. Note that you can change the milestone plan along the way as necessary.
Deadline set for the milestones (in the GitHub milestone). Your internal milestones can be set earlier than the deadlines we have set, to give you a buffer.
Wrapping up a Milestone:
A working product tagged with the correct tag (e.g. v1.3
) and is pushed to the main repo or a product release done on GitHub (example).
CI passing for the version tagged/released.
Milestone updated to match the product i.e. all issues completed and PRs merged for the milestone should be assigned to the milestone. Incomplete issues/PRs should be moved to a future milestone.
Milestone closed.
Try to achieve all milestone requirements, but do not fret if you miss a few. You will get full marks as long as you achieve about 60% of the milestone requirements on average. Yes, that's a pretty low bar, but we have set it low in order to reduce workload and stress. Ideally, you should achieve close to 80-90%.
Add functionality in small steps, aiming to deliver the first working version of your product by the mid-milestone (i.e., in one week), and v1.2 at the end of this iteration (i.e., in two weeks).
If you split the iteration into two smaller iterations of one-week each (recommended), name the first one v1.2
and the second one v1.2b
so that the dashboard can track them accurately.
From this point onwards each member is expected to contribute the amount of code does not matter; even small contributions are acceptablesome code to each v1.3, v1.4 milestone, preferably each week; only merged code is considered as contributions The ability to deliver code incrementally is an important learning outcome of this module because incremental delivery, among other things, improves the visibility of your work.(Reason).