Milestone #2:   feasibility
1 Description
2 Iterative Design Process
2.1 Prototyping
2.2 Testing
2.3 Evaluation
2.4 Refinement
3 Write-up
4 Deliverables
5 Assessment
6.3.0.7

Milestone #2: feasibility

1 Description

Software development is not an orderly, monotonic procession from idea to product. Beyond the endless cycling of finding and fixing bugs, there’s the larger-scale cycle, whereby you throw out parts of your existing ideas, and come up with new ones. As you write your programs, you will discover that parts of it won’t work, and you will also have new ideas.

For this milestone, your goal is to develop a 30% complete prototype. As part of this process, you’ll need to refine and evaluate your original plan, throwing parts of it out, and coming up with new ideas.

As part of your 30% prototype, you’ll need to provide a data definition for your world. This is probably the piece that is most crucial to your final success.

2 Iterative Design Process

Iterative design is a process for developing software. The key to iterative design is to get small pieces of software running completely, so that you can evaluate the results and make course corrections before progressing to the next piece.

For instance; suppose you’re developing a program that simulates a keyboard. A *non*-iterative design process might have you spend the first week designing the graphics of the keyboard and listing all of the features it will have, the second week implementing a framework for the pieces of the program to work together, etc. The problem with this approach is that when something goes seriously wrong in week 3, you’re back to square one, and it’s time to panic.

The iterative design approach would be to get something very simple working well enough that it can be evaluated. Can you get a one-key keyboard working? Now, can you add some of the bells and whistles that your project involves? Try to make sure that you minimize the intervals between working iterations of your program; you want to return as quickly as is feasible to the "not finished, but at least it compiles and runs and does something" state.

2.1 Prototyping

For this milestone, you must create a usable program prototype that contains at least 30% of the product features. This first prototype is not going to be pretty. You should concentrate on implementing elements and basic controls. Pretty graphics and cool animations should be left out at this point. It is ok for your user interface to consist entirely of solid rectangles at this point, and to dramatically reduce the complexity of the final product.

2.2 Testing

Once you have a working prototype, you are going to test it. You should try and find as many people as you can to try your product. Every member of your team should try it, some students from other groups should try it, and, if you can manage it, get your mom, grandma, or little brother to try it. Also, you should observe testers using your prototype and note when you feel they were having trouble understanding the product, or were unhappy with the way it worked.

2.3 Evaluation

You should have some way of capturing the feedback from those that tested your product. You can have a questionnaire that they complete after trying it, or perhaps you could interview them. Try and determine if they understood the way it worked. Did they like the feedback they got from the program? What didn’t they like about the product? Would they use it again? Why or why not?

2.4 Refinement

Finally, look at the feedback you got from the testers. Do you see some commonalities in their complaints or praise? What changes could you make to your program to address their concerns? Prioritize the improvements you could make to your product, based on the testers’ feedback, and start working on incorporating those changes into your next prototype.

3 Write-up

You are going to submit a 3-page paper describing your iteration through the design process. Your paper should use 12pt font, have 1in margins, and be single-spaced. Here are the major sections (label them clearly) you need in your paper along with a brief description of each:
  • Description Briefly describe the idea behind your product, the look of the program, and its basic controls.

  • Prototype Describe what features and rules you have implemented in your prototype. You are required to minimally implement 30% of your final program.

  • Testing Describe the process the users went through in testing your program. How much time did you spend explaining how it worked? How long did they use it? Who tested your program?

  • Evaluation Discuss all the methods you used to collect feedback from the testers. What questions did you ask them? When did you collect the information from them? Describe how you analyzed the results.

  • Refinement Given this feedback, what should you change about your program? You should include the prioritized list of improvements discussed above.

4 Deliverables

You must submit the following on or before the assignment deadline:

  1. A usable 30% prototype that you will demonstrate in lab.

  2. Your prototype’s data definition, as a separate single file called "world-definition.rkt"

  3. A 3-page paper describing each phase of your iterative development: Prototyping, Testing, Evaluation, Refinement

Submit all of these as a single ".zip" or ".tgz" file, using PolyLearn.

5 Assessment

You will be graded in the following categories: