Iteration 3 Details for MPCS 51205

Each iteration will deliver an incremental accretion of work toward the final project deliverable.  Some assignments will require you to work individually and each team member will submit his or her deliverable, and other assignments will require you to work as a team and submit a single team deliverable.  Generally (see specifics within each Iteration), each student will be responsible for delivering some piece of the work (documentation, code, etc.).  You will be evaluated on the clarity and depth of your analysis of these and other deliverables.  "Deep Thinking" as well as "Shallow Thinking" are generally obvious.  Deep Thinking requires time and....thought.

Unless use of a tool is specified, you may take pictures of whiteboards, papers, napkins, etc. as submission artifacts.  From a remote collaborative design perspective, previous teams have happily leveraged free tools including excalidraw.com, which allows for collaborative brainstorming among remote team members.  However, some artifact deliverables will need to be in the form of formal models.  When a formal artifact is required, it will be so specified.

See the syllabus for information on grading.  Turning in Iteration assignments is required.  Submit your assignments as a tarball to the repository according to the directions on each Iteration page.

Iteration 3   Due: 5:00 pm, Monday, November 13, 2023

High Level Architecture and Initial Domain Model: 

Deliverable One:  Produce User Stories, focusing on a particular Microservice

Have each team member be responsible for one or more of the Microservices that you have identified in your Microservices Architecture Blueprint.  Each team member will choose one (or more) Microservices to "flesh out", and you should deliver a vocabulary representing the ubiquitous language of each Microservice.  Remember, these terms are high-level business terms that are central and critical.  This vocabulary will likely contain 10-20 entries (per microservice) and can be delivered in the form of a Word or Excel (or Mac Pages or Numbers) document.  For each term in the language, give a brief definition of it in terms of the context.  An example might be:  "Bid:  A bid is a binding contract that commits you to buy the item at the price you have offered, it if you win the auction." 

Next, consider the functional and technical requirements of the system, and your design of the high level architecture and communication among Microservices depicted in the Microservices Architecture Blueprint.  Based on the functional requirements of the system, you are to begin to write user stories to expand on the system requirements.  Each team member is responsible for drafting five user stories for a particular capability in your system (focusing on a particular microservice).  Your user stories will detail user intentions as well as system responsibilities. 

First, update your Service Operation Analysis deliverable from the previous iteration, now describing those user stories that will play a roll in the development of the microservice.

The user story verbiage should be a simple and direct description of one task or interaction of your microservice.  Focus on stories that implement an API-first approach to your microservice.  Your user stories should be based on the intentions of a user in a particular context.  Your user stories should be both meaningful and descriptive from the point-of-view of users in some role or set of roles as they derive value from a system that will  embody the purpose or intentions underlying the user interaction.  You may document your user stories however you wish, either (most simply) in a document of some form, or you may use any number of "free" Jira-like alternatives, such as trello.com or pivotaltracker.com.  You are of course welcome to use Jira itself, but that will cost money.

You may work collaboratively in developing your user stories, whiteboarding (and documenting) various design alternatives, but each team member will be responsible for the delivery of their individual user stories.  Your user stories should be based on the intentions of a user in a particular context.  Your descriptions should be both meaningful and descriptive from the point-of-view of users in some role or set of roles as they derive value from a system that will  embody the purpose or intentions underlying the user interaction.

Deliverable Two:  Produce Domain Models for your Bounded Contexts

Based on the functional requirements of the system and your developing user stories, prepare a preliminary list of candidate from your Candidate Class List and initial CRC cards and document a a first pass of the Domain Model for your Microservice(s).   Your depiction should become formal at this point and be produced in UML, using whatever tool you're most comfortable with, for example, Visual Paradigm.  Your architecture rendition should continue to include more key components and  interactions as your architecture takes on more form. It should also become more "realizable".

Deliverable Three:

Your team should begin the serious task of coding your microservice domains with this third iteration. 

Your team should begin coding your final project deliverable at this point, if you haven't already begun.  You will want to also produce some tests (coded by hand or developed using an existing harness such as junit, postman, etc.) that verify that your code is producing the results you wish. 

Look at your user stories, and domain models, and decide which parts of the system you should develop with this iteration.  The goal in about four weeks is to demonstrate before the class your auction system in all its glory.  You should continue to enhance the code that you developed for the rest of the quarter.

Your new code is not intended to be the final version of any of the classes you choose to implement.  Feel free to stub out whatever functionality you don't yet have time for or understand.  Your successive "code releases" are intended to represent an incremental expansion of the components of your microservices.

You may find the following online resources helpful as you work together to produce these deliverables:

Domain-Driven Design Reference
Domain-Driven Design Quickly
GitHub References Points on Domain-Driven Design
http://guide.agilealliance.org/guide/crc.html
http://agilemodeling.com/artifacts/crcModel.htm
http://css.dzone.com/articles/crc-cards-primer

You should also begin to contemplate your user HTML and REST-based interface.  You may find the following sites helpful:

http://getbootstrap.com/
http://learn.shayhowe.com/html-css/
http://www.codecademy.com/
You can find a quick index to UML diagrams here.



Deliverable Four:  Continue documenting your Architecture Decisions

Referring to Michael Nygard's documentation of ADR usage here and https://adr.github.io and
https://adr.github.io/madr/, continue documenting your key architectural decisions.  You should store your ADRs in your github repository.


Submission:

For Iterations:

Have your designated Team Lead upload your team's IterationN files and any supporting materials to the repo. Please include a README text file that contains any instructions or additional details for the TAs to assist with grading.

Setup:

When you open the invitation URL in a browser tab, you will have to complete the following steps:

Github may ask you to grant permission for GitHub Classroom to have access to your GitHub account. If you are asked this question, you should say yes and grant access to Github Classroom.

You must click “Accept this assignment” or your repository will not actually be created. Do not skip this step!

If you run into any issues, please ask for help.