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

Week 5 [Fri, Sep 3rd] - Project

iP:

  1. Learn from others (optional)
  2. Add Increment as a branch: Level-5
  3. Add Increment: A-Packages

tP:

  1. Brainstorm user stories before the tutorial
  2. Choose user stories for v1.0 during the tutorial

iP

1 Learn from others (optional)

  • You can use the iP Code Dashboard to view others' iP code, using the Links → iP Code Dashboard item in the top navigation menu. Click on the </> icon corresponding to a student name to see the code written by that person. We encourage you to read others’ code and learn from them. If you adopt solutions from others (also encouraged), please follow our reuse policy.

2 Add Increment as a branch: Level-5

  • Do each increment as a Git branch. Here is an example:
    • Start a branch named branch-{increment ID} (e.g. branch-Level-5). You are recommended to have multiple commits in that branch. Follow the branch naming convention exactly or else our gradings scripts might miss your branch.
    • After the increment is ready, merge the branch-Level-5 back on to master, without a fast-forward so that git creates a separate commit for the merge. git tag that merge commit as Level-5.
    • Push the branch to your fork so that the bot can detect it. As before, push the tag as well.
    • Advanced git users: do not delete the branch after merging.
Duke Level-5: Handle Errors

3 Add Increment: A-Packages

  • Recommended: if you are new to git, do this as a separate branch too (for additional practice), similar to how you did Level-5 (branch name branch-A-Packages).
Duke A-Packages: Organize into Packages optional

tP: Gather requirements

1 Brainstorm user stories before the tutorial

  • Learn the recipe for brainstorming user stories in the textbook → Specifying Requirements → UserStories → Usage.
    Also learn about brainstorming and user stories.

  • Follow the steps in the recipe mentioned above to arrive at user stories for the the product, with your team members.

  • User stories for what version? At this stage, collect user stories to cover at least the final version you hope to deliver at the end of the semester. It is OK to go even beyond that (reason: we are simulating a project that will continue even after the semester is over).

  • How many user stories? Aim to collect more user stories than you can deliver in the project. Aim to create at least 30 user stories. Include all 'obvious' ones you can think of but also look for 'non obvious' ones that you think are likely to be missed by other competing products.

  • User stories of what size? Normally, it is fine to use epic-level user stories in the early stages of a project but given this is a small project, you may want to define smaller user stories (i.e., small enough for one person to implement in 1-2 days).

    • Bad As a user, I can track my schedule, so that I can know when to do things.
      Reason: too big, as track can involve a lot of things.
    • Good As a user, I can add a time to a task, so that I can record when a task need to be done.
    • Good As a user, I can see the pending task that has the next earliest deadline, so that I can know what I need to do next.
  • What format?: You may use a sentence format or a table format but do maintain the prescribed three-part structure of a user story. In particular, try to include the benefit part in most user stories as that will come in handy when prioritizing user stories later.

  • How to record?
    Keep records of intermediate steps (e.g., persona, scenarios) in your collaborative project document started in the previous week.
    You can write each user story in a piece of paper (e.g. yellow sticky note, index card, or just pieces of paper about the size of a playing card). Alternatively you can use an online tool (some examples given in [Textbook Specifying Requirements → UserStories → Usage → (panel) Tool Examples ]).

2 Choose user stories for v1.0 during the tutorial

Project planning, with a twist

Intuitively, you might think the right thing to do is to decide what features will be in v2.1 and then plan the intermediate versions based on that. But that's not what we are going to do.

Why? Given the difficulty of reliably estimating the effort each feature will need, any such long-range plan is likely to be inaccurate.

Instead, what we will do is to assume the current iteration is the last iteration, plan that iteration to deliver the product (based on available time), and try to follow that plan as best as we can. After the iteration is over, we plan the next iteration as if it's the last iteration. But that time, you can factor in the experience from the previous iteration to do a better job of planning.

How is that better?

  • Shorter-term plans have a better chance of being accurate and doable.
  • You get multiple clean shots at project planning. Each try can learn from the previous tries. Hence, more learning.
  • As each iteration produces a working product, you always have a working product, which practically eliminates the risk failing to deliver a working product by the final deadline.

The goal of this activity is to come up with the smallest possible product that is still usable so that it can be implemented as v1.0, to be delivered at the end of the first project iteration. We try to make it small because you will have only two weeks to implement v1.0 and coding as a team is a lot harder than writing code alone.

Do not discuss features, UI, command format, or implementation details yet. That would be like putting the cart before the horse. At this stage we are simply trying to choose which user needs to fulfill first.

  • If the product can be of some use without a given user story, that user story should be left out of v1.0, even if the omission makes the product hard to use, as long as the product is not impossible to use e.g., in most cases a product can be used without an 'edit item' feature because the user can always delete an item and add a new item instead of editing an existing an item.
  • Don't worry about v2.0. You can design v2.0 after v1.0 done.
  • Don't worry about v1.0 being 'too small'. You can always add more features to v1.0 if you finish it ahead of schedule.
    You can also select an additional set of user stories that are nice-to-have in v1.2, to be done but only if there's time left.
  • If possible, narrow the scope of v1.0 further e.g., narrower target user, a smaller value proposition.

Suggested workflow:

  • First stage:
    • Divide the user stories among team members.
    • Each member will go through their user stories to discard (e.g., cross out, or move to a different location, but not delete) which are definitely not needed for v1.0.
  • Second stage:
    • All members discuss the remaining user stories (i.e., the ones not discarded in the first stage), and try to trim the list further.