Sprint Challenge: Design Document
Challenge Objective
Create a comprehensive design document for your Learn and Be Curious project. This document should outline your project's architecture, data models, API design, and DynamoDB tables. It will serve as a roadmap for your implementation and a reference for your team.
Design Document Template
Your design document should include the following sections:
1. Problem Statement
A clear, concise description of the problem your project aims to solve. This should include:
- The primary purpose of your application
- The key challenges or pain points being addressed
- The target users or audience for your solution
- The value proposition - why your solution matters
2. Use Cases
Detailed descriptions of how users will interact with your system. For each use case, include:
- A descriptive title (e.g., "User Creates a New Playlist")
- Actor (who is performing the action)
- Preconditions (what must be true before the use case begins)
- Main success scenario (step-by-step flow)
- Alternative paths or exception cases
- Postconditions (what is true after the use case completes)
3. API Design
Define the API endpoints your application will expose, including:
- Endpoint path and HTTP method (e.g., GET /playlists/{id})
- Request parameters (path, query, body)
- Sample request body (if applicable)
- Response codes and descriptions
- Sample response body
4. DynamoDB Table Design
Detail your DynamoDB tables, including:
- Table names
- Primary key structure (partition key and sort key if used)
- Attributes and their data types
- Global Secondary Indexes (if needed)
- Example items
5. Frontend Design
Outline your application's user interface, including:
- Wireframes or mockups of key screens
- User flow diagrams
- Component hierarchy
- State management approach
Submission Guidelines
Submit your design document by following these steps:
- Create your design document in the designated location in your project repository
- Ensure all team members have reviewed and contributed to the document
- Make sure your document covers all required sections
- Submit a link to your document according to your instructor's directions
Evaluation Criteria
Your design document will be evaluated based on:
- Completeness: All required sections are included
- Clarity: Ideas are clearly communicated
- Technical soundness: The design is technically feasible
- Consistency: The different components work together logically
- Scope: The project is appropriately scoped for the timeframe
Design Document Examples
Below are links to example design documents that you can use as references:
Example 1: E-commerce Product Management
A system for managing product inventory, orders, and customer accounts for an online store.
Problem Statement:
Small businesses need an affordable way to manage their online product catalogs and process orders.
API Endpoints:
GET /products - List all products
POST /products - Add a new product
GET /products/{id} - Get details for a specific product
PUT /products/{id} - Update a product
DELETE /products/{id} - Remove a product
DynamoDB Tables:
Products Table
- PK: productId (string)
- Attributes: name, description, price, category, inventory
Orders Table
- PK: orderId (string)
- Attributes: customerId, orderDate, totalAmount, status, items
Example 2: Task Management System
A collaborative task management system for teams to organize projects and track progress.
Problem Statement:
Teams need a simple way to assign, track, and prioritize tasks across projects.
API Endpoints:
GET /projects - List all projects
POST /projects - Create a new project
GET /projects/{id}/tasks - List tasks for a project
POST /projects/{id}/tasks - Add a task to a project
PUT /tasks/{id} - Update a task's status or details
DynamoDB Tables:
Projects Table
- PK: projectId (string)
- Attributes: name, description, ownerId, createdDate
Tasks Table
- PK: taskId (string)
- Attributes: projectId, title, description, assignee, status, dueDate, priority
Tips for Success
- Start early: Give yourself plenty of time to think through your design
- Iterate: Your first design might not be your final design - be willing to revise
- Seek feedback: Share your design with peers and instructors for input
- Consider scalability: Design with future growth in mind
- Test with use cases: Validate your design against your use cases to ensure it meets requirements