| COMP 310 
		 Fall 2016
 | Design Process Overall 
		Guidelines | 
	
		|            | 
Design is a collaborative group process involving the inputs from many 
viewpoints, the weighing of pros and cons of all those viewpoints and the 
construction of a agreed-upon compromise that balances those concerns.
The following is a description of the overall structure and process in which 
class-wide design activities will be performed in the course.   There 
will be multiple design activities that are run, so this design process will be 
repeated each time. 
The class will be divided into several large groups that will each work out a 
version of the inter-computer application programming interface ("API") that 
will govern the communications between connected computers.   Each 
large group will be further divided in to subgroups that will tackle specific 
areas of the API.
In this course, the design process will be evaluated in terms of participation in the 
process, NOT on the "correctness" of the solution.
 
Overall Process:
DOCUMENT, DOCUMENT, DOCUMENT!
Organize Working Sub-groups
	- Elect one of the HW teams to be the group leader.   The group 
	leader team is not required to perform other tasks.
	
		- Record the group leader team name in the wiki.
-  The group leader responsibilities include:
			- Make sure that all aspects of the API are covered
- Identify where the APIs proposed by the subgroups are 
			incompatible with each other
- Ensure that all sub-groups have completed their tasks.
- Ensure that all documentation is complete -- note that each 
			subgroup should be writing up their own documentation!  
			
 
 
- Create subgroups from the remaining members.   The number of 
	subgroups should equal the number of API design tasks.
		- All sub-group assignments will be by HW assignment teams (pairs/triplets).   The HW 
teams should not be broken up.
- Assign API design tasks to each subgroup
- Record in task assignments in the wiki
 
  Design Process
	- For each sub-group:
		- Create Use Cases
			- On the wiki, write down as many scenarios as possible that involve the 
	assigned API section
				- Include both success and failure scenarios
- Record all 
				questions, concerns and ideas as they come up.   
- Restrict your scenarios to just the assigned API section!  
				
					- Simply assume that the rest of the API processes exist and work.
- If necessary, clearly state any assumptions being made about the 
			state of the system or available data with respect to the rest of 
			the API.   Resist the urge to work in tandem with the 
			other subgroups!   Differences will be worked out later!    
			(Team leaders note: record any differences you see so that they can 
			be addressed later.)
 
 
- Use Creately to 
	generate a Use Case diagram for just the assigned part of the API section.  Link to the diagram from the wiki. 
			
				- Break the use cases down into as fine detail as possible.
- Focus on actions, not method calls.
- Remember that an arrow in a Use Case diagram means that one use 
		case is composed of other use cases, 
		not that one use case follows the other!
					- Number the arrows if necessary to indicate a temporal order in 
			the composition of use cases.
 
 
- DO  
			NOT CREATE CLASSES OR 
			METHODS AT THIS STAGE!!
 
- Identify data elements being transferred in use cases
			- Address given questions regarding particular data types (see 
			wiki).   Document group conclusions!
- Just the data that is actually transferred from one computer to 
		another
- Focus on flexibility and extensibility
 
- Identify interfaces, classes and methods corresponding to use cases
			- Address given questions regarding particular entities (see 
			wiki).  Document group conclusions!
- Just the interfaces and classes that need to be common across 
		computers
- Focus on flexibility and extensibility
 
 
- Presentation of API proposals by groups
	
	
		- Team leader to give overall picture and goals of proposed API ONLY.
- Individual parts of API to be described by members of assigned 
		subgroup
 
- Class discussion
		- Pros and cons of each proposal
- Non-binding voting on issues to get feel for consensus
 
- Reformulation of API proposals by each group
	
		- Team leaders coordinate subgroups to make modifications to the API
- Sub-groups responsible for designing the actual changes and updating 
		documentation and diagrams
- Remember that the final vote will be for one of the proposals, not a 
		compromise, so build in the compromises that will enable your proposal 
		to win.
 
- Presentation of reformulated proposals by groups
	
	
		- Team leader to describe high level view of changes that where made. 
- Individual parts of API to be presented by members of assigned 
		subgroup that did not present previously
			- Detail exactly what and why changes where made
 
 
- Class discussion
		- Last attempt by groups to sway class to vote for their proposal.
- Voting on adopted API
 
 
Design Tips
	- Recording the questions is as important as 
	recording the solutions!   A solution means nothing if the 
	question it solves is not well understood.
	
	
- Vagueness kills. Be clear, concise and 
	complete!
	
		- The clearer the statement of the problem, the easier the solution 
		will come.
- The clearer the statement of the solution , the easier it will be to 
		convince others that it is the best solution.
 
- When editing the wiki, do quickly open the page for editing, make your 
	changes and then close the editor.   Do not leave the page open 
	for editing for long periods of time.    This will help 
	minimize conflicts from multiple people editing the same page at the same 
	time.
 
Evaluation
	- Team leaders:  overall completeness and cohesiveness of the 
	proposed API   (10 pts per design activity)
- Sub-groups: clarity and completeness of the documentation pertaining to 
	their assigned API section including the wiki and diagrams  (10 pts per 
	design activity) 
- Everyone:  Voting participation  (1 pt per 
	poll)
- There will be at least two design activities in the course.
- Design activity evaluation will comprise approximately 10% of the 
	overall course grade (subject to change).
"Completeness" includes and is not limited to documentation of all issues, 
scenarios, use cases, protocols and interface/class/method definitions.
 
 
 
 
 
© 2016 by Stephen Wong