Project 2 - Fall 2012
Architecture and Review
Dates prefixed with a tilde (~) are suggestions.
You will decide when you actually want to complete these
milestones and include those dates in your prelinary management plan.
1 Submissions are due by mid-night of the due-date, and must be e-mailed to
cs181f@cs.pomona.edu .
2 Unless otherwise specified, all written materials should be
submitted as URLs to ASCII text files on github.
3 less 10% for each unexcused late day.
4 part of each individual's grade
is based on the quality and timeliness of their contributions.
Table of Contents
- Introduction
- Major Activities and Deliverables
- Rules
1. Introduction
Now that you have a well formulated idea of what your product should do, it
is time to figure out how such a product can be built. This design must
be elaborated and described well enough that outside reviewers can
evaluate it, assess its feasibility, and identify holes in your design.
This project will exercise a great many key design skills:
- coming up with a viable high level architecture
- working out the implications of your architecture to component definitions
- identifying questions and risks best addressed through prototypes
- validate your architecture against your requirements (and general goodness properties)
- describing that architecture well enough that others can understand it
- reviewing someone else's design, understanding the issues, and
articulating them in a useful form
- working the issues that are inevitably discovered to yield
an architecture that actually has a chance of working.
2. Major Activities and Deliverables
There are several major parts to this project, each of which has its
own goals, processes, and deliverables:
- Initial Plan
You will develop a plan for this project, dividing the
work over your team members and the available time.
- Preliminary Architecture
You will develop an architecture and high level component
specifications for your project (probably going through
many internal revisions and reviews before you have a
design that works). Where critical questions exist,
you will define and carry out research and prototyping
efforts to answer them.
Once you believe that you have a viable architecture, you
will document it, and submit it for design review by another
team.
- Review
You will study another team's proposal, conduct
a formal design review, write up a detailed report,
and work the raised issues with the creating team.
- Revised Architectural Proposal
You will revise your architectural proposal to
address the issues raised in your design review
and prepare a final proposal.
- Post Mortem
You will review the processes you followed in this project
to see what lessons you can learn for how to do things more
effectively in the future.
- Project Management
All of the above will be planned, documented, and managed.
2.1 Plan
The development of the architecture may probably be much more difficult
than you imagine, the process of describing it clearly in writing
may prove extremely challenging, and you will probably discover that
(after your design review) you have a great deal of non-trivial work
to do to fix your design. Also, remember that design is a wicked
problem:
- You may not know how many components you
have to specify and analyze until your
architecture is largely complete.
- You may not have any sense of how difficult
the component analyses will be or how many
iterations you will have to make over the
architecture until you have gone through a
few rounds of revisions and can judge the
difficulty of the issue and rate of convergence.
- You may not have any sense of how the number
or difficulty of the issues that will be raised
in the design review until after it has been
completed.
Each of these factors can cause the work to very quickly
grow much larger than your initial estimates. This means
you need to get budget a great deal of time for revision
and rework, and get started as soon and fast as possible.
2.1.1 Deliverables
Each team will prepare a task-breakdown, identify the dependency relationships between
tasks, and owners for each sub-task, assign due-dates, and schedule regular reviews
of both work-products and progress (to enable adequate time to deal with the
problems that will happen).
A good management plan will include regular status
checks, the results of which should be recorded in the plan document.
As your understanding of the problem
evolves and you respond to unanticipated events,
you will have to revise your plan (not merely estimates, but
the work to be done).
If deadlines are missed, or deliverables fail to pass review, the fact, as well
as the causes and the plan to remedy them must be documented.
2.1.2 Grading
Your initial Management Plan will be graded on the basis of:
- 40% good use of time and resources (work apportioned reasonably over the available time)
- 20% specificity of plan (clear responsibilities: who, what, when)
- 20% provisions for early detection of problems, and time to deal with them
- 20% completeness
2.1.3 Submission
Maintain your plan on github.
You will surely be updating it, and we will be reviewing your history
(changes and comments).
When you are ready to submit them for grading, fill
out the following form and e-mail it to the submission alias.
Team: name-of-your-team
Members: person1, person2, person3, person4
Project: 2A - Management Plan
Plan: https://github.com/your_repo/...
primary author: person1
if you have other files to submit, please include a brief
description of each.
Late points:
if this submission is late, who is using up how many late points
2.2 Preliminary Architecture
You will design and specify a set of components that is (in combination)
capable of delivering your version 1.0 product functionality.
It is tempting to draw some high level pictures and a brief
set of descriptions and call it an architecture ...
but the devil is in the details.
The hard part is working out the implementation and
characteristics of the architecture
in sufficient detail to demonstrate that
the described system is buildable and likely to work:
- the described assembly of components is capable
of delivering the required functionality.
- each of the described components is
reasonably implementable.
- the described interfaces are reasonably abstracted
(understandable and convenient) from the clients'
perspective.
- the described interfaces are reasonably abstracted
(clear, implementable, with good information hiding)
from the component's perspective.
- the development work is supported by mature and usable tools
and technology.
Recall that McConnell described design as a
wicked problem, in that you may not even have a list of
problems to be solved until you have designed (and discarded)
a few solutions. This is a highly iterative process, and these
iterations may consume a great deal of your time.
Often, the best way to convince ourselves of the feasibility
of an architecture
is to sketch out possible implementations of each major
component, looking for options and issues. Such preliminary
research, design, analysis, and prototyping is an important
sanity check on the viability of the proposed architecture.
The goal of these investigations is not to fully design the
major components, but merely to present a compelling argument
for the "feasibility" of the proposed component descriptions:
- Where stable off the shelf technology is available, this may
require no more work than confirming that the the available
technology supports the required interfaces and functionality.
- Where newer technology is available, it may be appropriate
to do a little more research (and/or prototyping) to
confirm its usability and suitability for the proposed
problem.
- Where new components must be constructed, it may still
be possible to use much off-the-shelf technology ... in
which case the design may be little more than showing how
existing components can be combined to achieve the required
functionality.
- For new components that must be constructed from scratch,
it is common to construct a high level design ... with just
enough detail to convince ourselves that such a component
is buildable, and unlikely to involve any "hard" problems.
You don't want your architecture to turn into a complete top-down
design for the whole system. A component analysis only needs to be
complete enough to convince the reviewers that the most of the
likely problems have been identified, and are all likely to be solveable.
Every major component should be analyzed to this "feasibility" level.
Each member of the team should take ownership of the analysis
for at least one major architectural component. If you have many
more components than people, each person should choose at least
one interesting component for thorough analysis or one
interesting question to resovle through a prototyping effort.
If you have too many questions and components, it will be impossible
for you to do all of the necessary design and prototyping within a
few weeks. After each person has taken on a difficult component or
question, you can do a more superficial job on the simpler questions
and components (but note explicitly in each that you are doing so).
In the unlikely situation that you have more people than
interesting components,
sub-divide your major components to create more pieces or find a
problem that requires further analysis or prototyping.
2.2.1 Deliverables
Your architectural description should include:
- A high-level prose description of how the required functionality
will be delivered.
- High-level prose descriptions of each of the run-time components:
what it does, and the requirements it must meet.
- High-level prose descriptions of the major persistent data objects:
what kind of information they contain, how/where they are stored,
and (where appropriate) supporting middle-ware (e.g. MySQL).
- diagrams illustrating the components, their instantiation/deployment
in a real system, and their interactions.
- characterizations of the external interfaces, and the interfaces
between the major components.
- Discussions of the key issues that arose in the development of
this architecture and the rationale that drove the selection of
the chosen approach.
- Discussions of major issues still outstanding (anything that causes
you to doubt that it will be possible to successfully build this system on a
predictable schedule): what the problem is, what options have been
considered, and how those options fall short.
This should be backed up by a set of component analyses (research,
designs, analyses, prototypes, etc) that were done to establish
the feasibility of implementing each major component:
- where existing technology is being used, provide references
and summarize the investigation you did to determine its
suitability.
- where analysis was done, provide a write-up of the issues
investigated, the means of the investigation, and results.
- where prototyping was done, describe the risk issues to
be addressed, a summary of the approach and results,
and github URLs for the actual prototypes constructed.
- where new design work was done, provide design documentation
similar to (but hopefully much simpler than) that described
for the architectural description.
You will note that, while I do describe what should be present in your
architectural description (and there are two full lectures on the
elements of good architecture), I am not giving you sample architectural
descriptions.
There are two reasons for this:
- Every system is unique in both structure and constraints, and
its story probably requires a unique telling. Giving you
samples that did not fit the needs of your particular project
would probably do more harm than good ... as you tried to force
my square peg into your round hole.
- Among the (difficult and soft) skills that I want you to develop
are learning to visualize complex systems, and express those
visions technical prose. I expect that figuring out how to best
tell your story will prove to be a highly educational exercise.
2.2.2 Grading
This submission be graded on the basis of:
- 16% overview
- clarity of the conceptual roles of each components
- clarity of their interactions and how the cooperate to provide
the required services,
- how well this document prepares the reviewer for the remainder
of the design.
- 8% diagrams
- accordance with the prose descriptions
- how clearly they depect component roles and relationships
- how clearly they depict external interfaces
- how clearly they depict inter-component interfaces
- 12% component specifications
- completeness/clarity of functional descriptions
- completeness/clarity of interface descriptions
- completeness/clarity of requirements
- adequacy of this spec to guide implementation
- 8% architectural rationale
- how well it captures the issues that drove the architecture
- how well it justifies the responses to those issues
- clarity and soundness of the analysis and rationale
- 12% issue recognition and understanding
- completeness of the list (are there obvious issues missing)
- worthiness of these issues (are these real architectural issues)
- depth of the understanding of the issues
- insightfulness of propsed solutions
- 24% prototypes and component design analyses
- analysis: how clear it is that your component can be implemented
- analysis: how reasonable the proposed implementation is
- analysis: how clear it is that your implementation will work
- analysis: how clear it is that your component can meet its requirements
- prototype: is this indeed an important question to investigate
- prototype: does this investigation have clear and appropriate goals
- prototype: reasonablness of the planned investigation
- prototype: quality of the implementation of that plan
- both: quality of the analysis, how well the rationale was captured,
and value added by this analysis.
- 20% overall quality of the architecture
- clarity and simplicity
- is the architecture a reasonable response to the requirements
- does it exhibit good modularity and interface abstraction
- how effectively have the recognized issues been responded to
- is this architecture likely to be buildable
- is this architecture likely to work
2.2.3 Submission
When you believe your architecture to be complete, correct, and
comprenensible, check in all the pieces,
fill out the following form and e-mail it to the submission alias.
Team: name-of-your-team
Members: person1, person2, person3, person4
Project: 2B - Preliminary Architecture
architecture: https://github.com/your_repo/...
primary author: person1
component analysis 1: https://github.com/your_repo/...
primary author: person1
component analysis 2: https://github.com/your_repo/...
primary author: person2
...
if you have other files to submit, please include a brief
description of each.
Late points:
if this submission is late, who is using up how many late points
2.3 Design Review
As we refine a design, it is easy to become convinced that we have
made the right decision and that our design is therefore correct.
After we have done our best at refining our architecture, it is time
to seek independent validation from people who haven't already bought-in
to our solution.
Each team will read over another team's architectural presentation,
prepare detailed notes, conduct a formal design review, produce a
written report, and work with the designing team to ensure reasonable
resolution of all outstanding issues. You will select a moderator,
who will work with the submitting team to ensure that the package
is ready for review before it is sent to the rest of your team for
review. Please document any discussions between your moderator and
the submitting team.
2.3.1 Deliverables
2.3.1.1 Review Notes
Prior to your review meeting, each of you (individually) will read
the submitted architecture description and prepare detailed notes
on all questions and concerns. These notes must be submitted at
least 24 hours prior to the actual review session. They should be
neat notes, describing legitimate issues clearly enough to be sent
as email, and organized for discussion (e.g. in the recommended
review order).
2.3.1.2 Review Meeting
Your team will conduct a formal design review of the submitted
architecture. The team that submitted that architecture will be
present to answer questions, but will have no other formal role
in the process.
2.3.1.3 Review Report
The designated scribe for your review session will write up a report
of all conclusions reached in the design review. This is specifically
not "meeting minutes". Rather it is a distillation of key issues and
decisions. It should be carefully written and reviewed. It must contain:
- a clear summary of each important issue rased
- a characterization as a defect, question, or issue
- a characterization as must-fix, should-fix, or comment
- a disposition for the entire project of
- approved
- approved with required changes
- requires another meeting
- rejected (this cannot be made to work)
2.3.1.4 Issue Resolution
You will work with the submitting team to ensure satisfactory resolution
of all issues raised at the design review, and will submit a final report
on the resolution status of each issue.
2.3.2 Grading
These submissions be graded on the basis of:
- 30% individual notes prepared in advance of review
- the thoroughness of study to which they attest
- how well articulated the issues are
- all comments appropriate and within scope
- issues reasonably organized for discussion
- 30% the review process
- agenda and flow
- meaningful discussions of in-scope issues
- each discussion ends in a clear issue disposition
- culminates in a clear project disposition
- all viewpoints heard, avoid rat-holes
- ensure issues are understood, but do not try to resolve them
- all discusion is within scope
- everyone is well-prepared and participating constructively
- review the product critically but courteously
- review was a valuable and productive experience
- 25% the review report
- time, place, project, attendees
- disposition of each issue
- completeness and accuracy
- clarity with which issues are presented
- scope of the report (just issues, no opinions)
- disposition of the entire project
- 15% the final report
- all issues resolved reasonably
- all resolutions documented
- a constructive process
2.3.3 Submission
2.3.3.1 Study notes
When you have completed your study notes in preparation for the review,
each individual should fill out the following
form and e-mail it to the submission alias.
Team: name-of-your-team
Members: person1, person2, person3, person4
Project: 2C - Review Study Notes
Notes: https://github.com/your_repo/...
author: person1
if you have other files to submit, please include a brief
description of each.
NOTE: Late points cannot be used for this submission.
- Full credit if it is submitted 24 hours before the review meeting.
- 50% credit if it is submitted prior to the review meeting.
- 25% credit if it is submitted after the review meeting.
2.3.3.2 Review Meeting
Schedule your review meeting with the professor or grutor. Make sure the
submitting team can get you the architectural package far enough in advance
to enable you to do the required study and prepare your notes prior to the
review meeting.
2.3.3.3 Review Report
When you have completed your Review Report, the scribe should fill out
the following form and e-mail it to the submission alias.
Team: name-of-your-team
Members: person1, person2, person3, person4
Project: 2D - Review Report
Notes: https://github.com/your_repo/...
scribe: person1
Late points:
if this submission is late, who is using up how many late points
2.3.3.4 Final Issue Report
When the submitting team has addressed all issues, prepare a final report
summarizing the status of all issues and then fill out the
following form and e-mail it to the submission alias.
Make sure you schedule this with
the submitting team to allow yourself time to write up this report.
Team: name-of-your-team
Members: person1, person2, person3, person4
Project: 2E - Final Review Report
Notes: https://github.com/your_repo/...
primary author: person1
Late points:
if this submission is late, who is using up how many late points
2.4 Revised Architectural Proposal
You will get considerable feedback on your initial architecture proposal
from the professor, the grutor, and the team that reviews it. Based
on this feedback, you should revise your architecture to address all
of the must-fix issues, and as many as possible of the should-fix issues.
You will be graded on these resolutions, so make sure you document all
changes made and agreement from the reviewers.
2.4.1 Deliverables
2.4.1.1 Revised Architectural Proposal
This is simply a new version of the original proposal, revised based
on the feedback from the graders and reviewers.
2.4.1.2 Summary of responses to raised issues
This is a summary of the issues raised and discovered since the
initial architectural proposal, and the changes made to address
them. It is not a formal report, but gives you the opportunity
to draw our attention to the improvements you have made.
2.4.2 Grading
The revised architectural presentation will be graded on the same
criteria as the initial architectural presentation (with the exception
of the architectural rationale and issue understanding points).
These points will be awarded for your summary of responses to raised
issues document:
- have all must-fix issues have been responded to
- quality of the responses to must-fix issues
- quality of the responses should-fix issues
- documentation and constructiveness of the process
2.4.3 Submission
When your final architecture and issue resolutions are done, fill
out the following form and e-mail it to the submission alias.
Team: name-of-your-team
Members: person1, person2, person3, person4
Project: 2F - Final Architecture
Revised Architecture: https://github.com/your_repo/...
primary author: person1
Summary of Issue Responses: https://github.com/your_repo/...
primary author: person2
if you have other files to submit, please include a brief
description of each.
Late points:
if this submission is late, who is using up how many late points
...
2.8 Post-Mortem Report
This project is a learning exercise, and one of the major ways
we learn is by analyzing past mistakes. You will, as a team,
review all aspects of this project. One of you will then
summarize that process into a post-mortem analysis report.
2.8.1 Deliverables
A report, summarizing the key issues raised in your post-mortem,
and the conclusions you came to. Your post-mortem discussion
should include:
- creation of the initial architecture
- initial refinement of the architecture
- component design analyses
- creating draft architectural description
- studying for your design review
- the design review meeting (as a reviewer)
- the design review meeting (as a reviewee)
- writing up the review report and working the issues
- revising your architecture to address the issues
- the planning and ongoing management of these activities
- the overall project as an educational exercise
Note that if you make no mistakes, you will not be able to earn any points
on the post-mortem. Fortunately, no teams have ever found it necessary
to deliberately make mistakes in order to have something to analyze.
2.8.2 Grading
This report be graded on the basis of:
- 50% whether or not you meaningfully discuss each of the required activities.
- 20% whether or not you identify all of the important incidents.
- 30% the extent to which you are able to derive and articulate useful lessons
(and good future advice) from those experiences.
2.8.3 Submission
Make sure that you have kept your management plan up-to-date,
upload the notes from your post-mortem discussion to github,
fill out the following form and e-mail it to the submission alias.
Team: name-of-your-team
Members: person1, person2, person3, person4
Project: 2G - Post-Mortem
Plan: https://github.com/your_repo/...
primary maintainer: person1
Report: https://github.com/your_repo/...
primary editor: person2
if you have other files to submit, please include a brief
description of each.
Late points:
if this submission is late, who is using up how many late points
2.9 Management
The team will be graded on how effectively they managed themselves
and the work:
- Perform the work according to the plan.
We will determine when work was done by looking
at the dates of the final check-ins.
- Monitor progress and detect problems.
Monitoring plans should be included in your
project plan. Status should be reviewed regularly,
and logged as updates to the project plan.
Problems that come up should be recorded as updates
to the project plan and discussed in your post-mortem.
- Reasonably adjust the plan in response to problems.
Detected problems and responses should be discussed
in your post-mortem, and reflected in revisions to
the plan.
3. Rules
3.1 Due Dates and Slip Days
Any assignment that is not turned in by its due date,
will have its grade reduced by 10% (of its nominal value) for each
late day. I understand that problems happen, and so each student is
granted three slip days. A team of four students would have
twelve slip days between them.
One slip-day will excuse one deliverable
being late by one day.
If a design is one day late, and that delays the
design review by a day, then you may find that you need two slip-days.
Don't make the mistake of using up your slip-days too soon, because
the pressures generally get tighter later in the course.
When a team needs to use slip-days, they need to decide who's
days they are using. However you decide is OK with me, but
we will be tracking the slip days per student.
If will be using any slip days on a deliverable, tell me in
advance that you will be doing so (so that I don't nag you
about whether or not I lost your submission message).
3.2 Team and Individual Grades
When we tackle big projects, we succeed or fail as a team.
Consequently, the majority of the grade you earn on a team
project will be based on the overall quality of the team's
product. But a team can only be successful if everybody
is working towards producing quality results.
Thus, a non-negligible portion of your grade
will be based on individual contributions:
3.3 Primary Authorship
While many activities (e.g. Post Mortem review) are fundamentally team
activities, each major work product will typically have a primary author:
one person who works up the basic organization, pulls together the contribution
from the other team members and writes most of the prose.
The ability to organize large collections of information into a coherent
narrative is an important skill, and each team members should take primary
authorship for multiple work products. The quality portion of the individual
contribution grade is based on the work products for which that person was
the primary author (presided over a process, or wrote at least 2/3 of
the text in a document).
Each work product submission must include an indication of the
primary author (or authors if no individual produced 2/3 of the text).
Note, however, that since the whole team will be graded
on the quality of each work product, it is only prudent
for the entire team to review any high-value work product
before it is submitted.
3.4 Share of Project Work
The quantification of individual contributions is an inexact process.
Reports of hours-spent are sometimes unreliable, and often seem
poorly correlated to results obtained. None the less, team members
generally have a pretty good sense of who is working how hard and
contributing how much value.
At the end of each project, each member of each team should submit
(by private e-mail to me) an assessment of how the overall effort
was divided between the various project activities and team members.
Something like:
| activity | fraction of total | Algernon | Balder | Osiris |
| management | 15% | 50% | 30% | 20% |
| research | 25% | 00% | 75% | 25% |
| report 1 | 10% | 10% | 75% | 15% |
| prototyping | 35% | 20% | 15% | 65% |
| final report | 15% | 50% | 25% | 25% |
I will keep these as confidential, and average them together to get a sense
of the individual contributions to each team's efforts.
3.5 Collaboration and Citation
This is a team project, but different individuals will have primary
responsibility for different processes or work products (or different
parts of a single work product or process). Each team will be working
on a different type of product. You are free to talk your team members
(and for that matter other teams) about the processes you are following.
You may review your work products with your own team members, and revise
them based on their feedback ... but ...
- If you are the primary author of a work-product, you must
cite the source of text you did not write (if it is more
than a sentence), or any information that did not originate
within your team or from your interviews.
You will be doing research to develop your product definition and
requirements. I expect that many of the ideas for your product
will come from this research. Cite all of your sources for each
work product, and explain how each source contributed to your work
products.
- You may not share any of your work products (other than as required
for reviews) with members of other teams.