Milestone #2:   feasibility
1 Description
2 Data Definition
3 Iterative Design Process
3.1 Prototyping
4 Deliverables
5 Assessment
6.11.0.2

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.

2 Data Definition

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. Your data definition must allow you to represent all of the values that change during the running of your program.

The big point is this: if you start with the wrong data definition, you’re going to wind up fixing it later, and throwing away a huge amount of code. That could be a learning experience, but I don’t want you to have to start over.

For this reason, I will be reviewing your data definition in person, during lab.

3 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.

3.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.

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"

Submit your data definition only, in a file called "world-definition.rkt", to the PolyLearn handin bin that I’ll create for this.

5 Assessment

You will be graded in the following categories: