Thread Debugger Design

Top-level diagram

External Dependencies

Task breakdown

Potential tasks (breakdown based on design)
GUI (2-5 people)
 - Miscellaneous (1 person)
 - ThreadView (1-4 people)
   - displaying code (.5 people)
   - examining variables (1 person)
   - displaying misc state (1-2 people)
   - stack trace (.5 people)
   - setting bp + control flow (1 person)
   
Debugger (1-3 people)
 - Thread interactions manager (1 person)
 - Thread (1 person)
 - GDBParser (.5 people)
 - GDBInterface (1-2 people)
 
Main (1-2 people)
 - Miscellaneous (.5 people)
 - EventLoop (.5 people)
 - PersistentState (1 person)


Potential group oriented tasks (breakdown based on group need):
- Lead (1 person) - administrative lead, makes final decisions
- Architect (1 person) - technical lead
- Programmer (5-10 people)
- Documentation
  - Lead (1 person) - decides on quality, organizes + keeps people honest
  - Documentors - everyone on their own code
- Testing + Release Engineering
  - Lead (1 person) - decides on product quality, maintains repository (branches/tags)
  - Test Engineers
    - auto unittest suite maintainer (1 person)
    - unit test creation - everyone on their own code
    - system testers (2 people)

Possible Group Organization

Lead: tara
Architect: lincoln
System Programming Breakdown. Pair Programming. (lead,alternate)
  - GUI.CodeView: (owen,kevin)
  - GUI.Miscellaneous: (lincoln,tara)
  - Debugger: (nate,brendan)
  - GDBInterface: (sean,josh)
  - Main + Miscellaneous: (colin,)

Documentation lead: dominic
Release lead: sean
AutoTest maintainer: kevin
System testers: dominic, josh

(This was based on the following inferences I made from who I know personally
and their profiles online):

People who are likely to be able to lead in OCaml programming:
- lincoln, owen, colin, sean, nate

People who want to be heavier coders:
- lincoln, colin, josh, nate, sean, 

People who want to play a leadership role:
- tara, dominic, sean, lincoln


Weekly Schedule (totally crazy!)

Assumptions

None. My specifications were clear to me...

Testing

Extremely important. Unit tests early for all appropriate functionality. System tests where appropriate, and heavy iterative user testing as long as we can go near the end.