Agile

= Agile Development Methods =

To complete your project efficiently in the short time-frame of the course, agile development principles provide a few, very helpful, ideas.

Although you can read online articles for yourself, here are the basic guiding principles:


 * 1) Code in close collaboration with other developers.
 * 2) * This includes techniques like pair programming, where two people sit together and take turns coding one at a time.  It's more helpful than it sounds because there are a lot of things to keep track of while programming.
 * 3) Early prototyping and frequent delivery
 * 4) * Don't consider it done until the code is working and tested.
 * 5) Customer collaboration
 * 6) * Don't ``just follow the contract''
 * 7) Plan and re-plan to respond to change.

Scrum
More specific guidelines for handling a project can be found in The Scrum Guide(TM). It outlines a development cycle consisting of the following steps:
 * 1) Sprints: group meetings where everyone collaborates to identify "next step" objectives.
 * 2) * It's important that these objectives be measurable and achievable within a short time-frame.
 * 3) * Of course, the steps should align with and work toward long-term needs.
 * 4) Prototyping and testing
 * 5) * The goals are worked on and completed by building working code and then testing it. New code and features emerge during this phase, and should be built incrementally and in small, easy to group chunks (i.e. functions).  This way, it's easy to adapt, add or remove these from the final project as needed.
 * 6) * If you do not code in pairs, each person should still regularly report what they did to make progress, what they plan on doing, and (importantly) what issues are in the way.
 * 7) Sprint Retrospective: look at the goals that were achieved and those that were not
 * 8) How long did each take?
 * 9) Use this summary to double-check the timeline for delivery of the final project (here the final presentation).

Building code is like the process of gardening. New growth continues to emerge, and must be carefully evaluated in context to decide where to put effort and where to pruned back.

Kanban
This is not a process, but rather a documentation technique.

Kanban is just the name for a project board that lists goals in columns. As progress is made toward completing each goal, it moves to the right. Although it's unlikely an actual board will be needed for the group projects in this class, it's a helpful tool for mentally `visualizing' your progress and online versions exist which may be helpful.

For goals in your projects, you probably need stages like:
 * 1) Create pseudocode
 * 2) Implement
 * 3) Test
 * 4) Merge into project