This site is from a past semester! The current version will be here when the new semester starts.

tP week 6: Conceptualize the producttP week 8: mid-v1.2


tP week 7: Do a practice iteration → v1.1

  1. Do a practice iteration (v1.1) Thu, Mar 7th 23:59
  2. Update project website: AboutUs, README
  3. [Optional] Update the UG
  4. Update the DG: user stories, glossary, NFRs, use cases
  5. Plan the next iteration (v1.2)
  6. Start implementing the next version

v1.1

  • Product goal: Update some documents to match the new product direction.
  • Process goal: Get ready for proper iterations.
  • Strategy: Practice the workflow while updating the documents.


Start using Git via the CLI

If you have been using Sourcetree (or other GUI) for Git before, we strongly recommend that you move towards using the CLI to perform Git tasks in the second half of the semester. Doing so will strengthen your Git knowledge (because CLI takes you closer to what's actually happening, while GUIs might hide such details).
But you can continue to use your favorite Git GUI for a more 'visual' view of your repo, side-by-side with the CLI e.g., from Sourcetree, you can open a gitbash terminal, run the command in that terminal, and see the result in the GUI.

PR review comments matter! Remember to do proper PR reviews throughout the tP, at least for non-trivial changes, as the quality and quantity of PR review comments you have given to peers affect your tP marks (under the project management aspect).

1 Do a practice iteration (v1.1) Thu, Mar 7th 23:59

A secondary purpose of this iteration v1.1 is to practice the required workflow while modifying some documentation files, before you start updating the code in the following iteration. The panel below explains how to use GitHub to do a project iteration.

Strongly recommended to do this as a team activity (preferably F2F, or else connected via Zoom/MST), at least until everyone has merged a few PRs for this iteration. That will help you proceed faster (e.g., a PR can be reviewed immediately after it has been created) and will also make it easy for you to help each other w.r.t. to the workflow matters.

  • Tasks 2, 3, and 4 (given in subsequent sections) are the documentation updates to be done in this iteration.
  • Don't forget to 'wrap up' the milestone (as explained in the panel above), after the work is done.

2 Update project website: AboutUs, README

Recommended procedure for updating docs:

  1. Divide among yourselves who will update which parts of the document(s).
  2. Update the team repo by following the workflow given below:

Guidance on using documentation tools (e.g., How to preview changes locally before committing/pushing) can be found in the relevant section of the Developer Guide of your team project website that you set up earlier. Given below is a shortcut, for your convenience:

FAQ: When all members are updating the same document, can we create one issue and assign it to all?


Lookout for these mistakes which were the most common in previous runs of the course:

  • Not following the required phrasing style for the first sentence of Java method header comments.
  • Not following the convention for Git commit message subject.
    Caution: This is very hard to rectify later, after PR containing the commits have been merged.
    Reason: While Git allows editing past commits, it changes their timestamp, which affects your weekly code contribution stats (which are factored into evaluating the consistency of your coding work over the project duration)
  • Forgetting to do each PR from a separate branch (i.e., send PR from the master branch) of your fork. This error means your PR will not be considered as following the forking workflow correctly.

A: Update the following pages in your project repo:

  • AboutUs page: This page (in the /docs folder) is used for course admin purposes. Please follow the format closely or else our scripts will not be able to give credit for your work.
    • Add your own details. Include a suitable photo as described here.
    • There is no need to mention the tutor/lecturer, but OK to do so too.
    • The filename of the profile photo should be docs/images/github_username_in_lower_case.png
      Note the need for lower case () e.g. JohnDoe123 -> docs/images/johndoe123.png not docs/images/JohnDoe123.png.
      If your photo is in jpg format, name the file as .png anyway.
    • Indicate the different roles played and responsibilities held by each team member. You can reassign these roles and responsibilities (as explained in Admin Project Scope) later in the project, if necessary.
  • README page: Update it to match your project.

    • Add a UI mockup of your intended final product. Note that the image of the UI should be docs/images/Ui.png so that it can be downloaded by our scripts. Limit the file to contain one screenshot/mockup only and ensure the new image is roughly the same height x width proportions as the original one. Reason: when we compile these images from all teams into one page (example), yours should not look out of place.
      The UI mock up can be a hand-drawn sketch or created using a tool such as PowerPoint, PlantUML, Figma, etc.
      Can the AB3 screenshot used for this? Only in the unlikely case that your v1.2 UI looks exactly the same as AB3.

    • Update all contents to match your own project.

    • Update the link of the GitHub Actions build status badge (Build Status) so that it reflects the build status of your team repo.

    • Acknowledge the original source of the code e.g.,
      This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).

If you did the above updates correctly, your UI mock up and profile photos should appear in your project website and this Project List Page.

B: Also update site-wide settings, as necessary:

  • You need to update the AB-3 in the top navigation bar of your project website (it's in docs\_config.yml and docs/_sass/minima/_base.scss if using Jekyll; in docs\_markbind\layouts\default.md if using MarkBind).

  • More info on updating site-wide settings such as the above:

3 [Optional] Update the UG

Doing this task now means you'll have less to do later, but it is OK if you want to delay this until you have implemented the features.

  • Update the UG in your tP repo. While you can reuse some content from the feature specification that you did earlier, note that UG is intended for end users, and hence the format, level of details, pitching etc. need to match that audience. For example, the UG should not contain all the nitty-gritty details that is in the feature spec.

  • You can use the current AB3 UG for guidance on the format/flow/tone/level-of-details etc.

  • As mentioned before, while it is more convenient for one person to update the entire UG, we strongly recommend that each person updates their own part of the docs so that we can easily track the contribution of each member using RepoSense.

  • The scope of this update can be v1.2 i.e., only update features that you plan to have in that version.
    Furthermore, as you haven't implemented v1.2 yet, this update will be somewhat speculative. The content may need to be tweaked later if the actual implementation of the feature deviated from the current plan.

4 Update the DG: user stories, glossary, NFRs, use cases

  • Add the following to the DG, based on your project notes from the previous weeks. No need to update other sections, for now.
    Some examples of these can be found in the AB3 Developer Guide.

    • Target user profile, value proposition, and user stories: Update the target user profile and value proposition to match the project direction you have selected. Give a list of the user stories (and update/delete existing ones, if applicable), including priorities. This can include user stories considered but will not be included in the final product.
    • Use cases: Give use cases (textual form) for a few representative user stories that need multiple steps to complete. e.g. Adding a tag to a person (assume the user needs to find the person first)
    • Non-functional requirements: Note: Many of the given project constraints can be considered NFRs. You can add more. e.g. performance requirements, usability requirements, scalability requirements, etc.
    • Glossary: Define terms that are worth recording.

The above DG sections should cover the full requirements of the product, some of which might not even get implemented by the end of this semester i.e., do not limit to just the requirements you intend to implement in the next iteration. Reason: All identified requirements need to be documented for future reference.

Furthermore, these sections will be graded at the final project evaluation, and any bugs in the content can cost you marks at that point. The panel below gives some relevant DG bug examples you can lookout for:

5 Plan the next iteration (v1.2)

  • Plan the next iteration. As you know, you should follow the breadth-first iterative process. Therefore, first you must decide what functionalities should be in the product if you had only two weeks to implement it. You have done that already when you chose user stories for v1.2, translated that to features, and even drafted the UG based on those features. You can tweak that plan further at this point if you wish, given that you now have some idea of how fast the team can work when using the prescribed workflow.
    • Aim to produce a working MVP at the end of this iteration even if the functionalities are not polished (polishing can be done in a later iteration).
    • Avoid depth-first implementations: "I'll do the back-end part of feature X in this iteration" is not acceptable as that is not in the spirit of breadth-first iterative process. Remember, we are pretending this to be the last iteration; why would you implement the back-end part of a feature in the last iteration?
      It is OK to add simpler versions of bigger features, but not OK to add partial features that can't be used yet.
    • [Recommended, Optional] Break the iteration into two mini iterations as follows:

Splitting v1.2 into two mini iterations

  • v1.2: the first working version of your product, to be delivered by the mid-milestone (i.e., in about one week). As this is an internal milestone, the exact deadline is upto your team.
  • v1.2b: an even more functional version of the product, to be delivered by the end of the full iteration (i.e., in two weeks)

This goal of this 'optimization' is to reduce the risk of an . As a side benefit, it also gives you more opportunities to practice iteration planning.

The reason for naming the earlier milestone as v1.2 is so that even if you fail to finish the second one, you can still get credit for reaching v1.2 (which is the milestone tracked by grading scripts) -- think of the first iteration as minimal deliverables for v1.2 and the second one as containing do-if-there-is-time improvements.

Each mini iteration should deliver a working product, not just do half of the tasks planned for the full iteration. Otherwise, it defeats the purpose of this optimization.


  • Divide the work among the team members i.e., the work required for the current iteration.
  • Reflect the above plan in the issue tracker by assigning the corresponding issues (create new issues if necessary) to yourself and to the corresponding milestone. For example, the user story pertaining to the increment show a placeholder for photo, showing a generic default image should be assigned to Jake and to milestone v1.2

6 Start implementing the next version

  • If you have time, start implementing v1.2.


tP week 6: Conceptualize the producttP week 8: mid-v1.2