CMU597: Industry Project - Lecture 2
Project Brief & Early Technical Feasibility
Part A: Writing Design Briefs | Part B: "Hello World" Prototypes
James Williams
Birmingham Newman University
jwilliams@staff.newman.ac.uk
3-hour session • 2 parts • 2 team tasks
Session Timeline
Part A: Writing an Industry Design Brief (90 minutes)
30 minutes: Lecture on problem definition, users, requirements, constraints
45 minutes: Task 1 - Team design brief workshop
15 minutes: Break
Part B: Feasibility Prototype ("Hello World") (90 minutes)
30 minutes: Lecture on tech stack validation and feasibility testing
45 minutes: Task 2 - Build minimal technical prototype
15 minutes: Q&A and troubleshooting
Learning Objectives
- Understand the purpose and structure of industry design briefs
- Learn to define problems clearly and identify target users
- Identify technical and business constraints for projects
- Write clear, measurable requirements as a team
- Understand the importance of early technical validation
- Build "Hello World" prototypes to test tech stack feasibility
- Validate that team can work with chosen technologies
- Identify potential technical blockers early in the project
Why Design Briefs Matter
Design Brief: A concise document that defines the problem, users,
requirements, and constraints for your project. It's the foundation for all subsequent work.
Benefits:
- Aligns team understanding
- Prevents scope creep
- Clarifies priorities
- Guides technical decisions
- Enables stakeholder communication
Industry Use:
- Client projects start with briefs
- Product roadmaps need definition
- Teams use as reference
- Investors require clarity
- Handover documentation
Industry Design Brief Structure
- Project Title & Team - Name, team members, roles
- Problem Statement - What problem are you solving? Why does it matter?
- Target Users - Who will use this? What are their needs?
- Project Objectives - What will the project achieve?
- Key Features - Core functionality (prioritized)
- Technical Constraints - Technology, time, resources, expertise
- Success Criteria - How do you know if you've succeeded?
- Project Scope - What's included and explicitly excluded
Each section should be concise - typically 2-5 sentences
Defining the Problem
Key Question: What problem are you solving, and why does it matter?
✗ Weak Problem Statement:
"We want to build a mobile app for students."
Too vague, no clear problem
✓ Strong Problem Statement:
"Students struggle to find available study spaces across campus, wasting 15-30 minutes daily.
Current booking systems are fragmented and don't show real-time availability."
Specific, quantified, clear pain point
Good Problem Statements:
- Are specific and measurable
- Identify who is affected
- Explain why it matters (impact)
- Avoid jumping to solutions
Understanding Target Users
User Analysis Framework:
- Who are they? Demographics, roles, technical proficiency
- What do they need? Goals, tasks, pain points
- When/Where do they use it? Context of use
- How do they currently solve this? Existing solutions or workarounds
- What are their constraints? Device access, connectivity, time
Example: Healthcare Booking System
Primary Users: Patients (ages 25-75), varying tech skills
Needs: Book appointments easily, receive reminders, access history
Context: Mobile-first, need quick access during work hours
Current Solution: Phone calls (long wait times, limited hours)
Constraints: Some have limited smartphone experience
Writing Functional Requirements
Functional Requirements: What the system must DO - specific features and behaviors.
Requirements should be:
- Specific: Clear, unambiguous description
- Measurable: Can verify if it's implemented
- Achievable: Technically feasible for your team
- Relevant: Addresses user needs or business goals
- Testable: Can be validated through testing
✗ Poor Requirement:
"The system should be user-friendly"
✓ Good Requirement:
"Users must be able to create an account and log in using email/password within 2 minutes"
Non-Functional Requirements
Non-Functional Requirements: How the system should PERFORM - quality attributes.
Common Categories:
- Performance: Response time, throughput, load capacity
Example: "Search results must load within 2 seconds"
- Security: Authentication, authorization, data protection
Example: "Passwords must be hashed using bcrypt"
- Usability: Learning curve, accessibility, error handling
Example: "Must meet WCAG 2.1 Level AA standards"
- Scalability: Growth capacity, concurrent users
Example: "Support 100 concurrent users"
- Reliability: Uptime, error rates, data consistency
Example: "99% uptime during operating hours"
Identifying Project Constraints
Types of Constraints:
Technical Constraints:
- Must use specific technologies
- Integration requirements
- Platform compatibility
- Team's technical expertise
Project Constraints:
- Timeline (12-week semester)
- Team size and availability
- Budget (free/open-source tools)
- Scope limitations
Be Honest: Acknowledging constraints upfront helps scope projects
realistically and prevents over-commitment.
Defining Success Criteria
Success Criteria: Specific, measurable outcomes that define project success.
Example: E-Commerce Platform
Functional Success:
- ✓ Users can browse products, search, and filter
- ✓ Complete checkout flow with test payment integration
- ✓ Admin panel for product management
Technical Success:
- ✓ Code deployed to cloud platform (e.g., Heroku, Vercel)
- ✓ 80%+ unit test coverage on backend
- ✓ Responsive design working on mobile and desktop
Team Success:
- ✓ All team members contributed equally (tracked via Git)
- ✓ Complete documentation (README, setup guide, API docs)
Managing Project Scope
MoSCoW Prioritization:
- Must Have: Core features - project fails without
these
- Should Have: Important but not critical - include
if time allows
- Could Have: Nice to have - only if ahead of
schedule
- Won't Have: Explicitly out of scope - revisit later
Scope Creep Warning: Teams often try to add too many features.
Better to build fewer features well than many features poorly.
Rule of Thumb: If you have 10 weeks, plan features for 7 weeks.
Buffer time for integration, testing, and unexpected issues.
Design Brief Example
## Study Space Finder - Design Brief
**Team:** Tom (Frontend), Bob (Backend), Charlie (Database), Dana (Mobile)
**Problem Statement:**
Students waste 15-30 minutes daily searching for available study
spaces across campus. Current systems don't show real-time availability.
**Target Users:**
University students (18-25) who need quiet study spaces. Mix of
laptop users and group study needs.
**Objectives:**
- Provide real-time study space availability
- Reduce time spent searching for spaces
- Enable booking to guarantee space
**Key Features (MoSCoW):**
MUST: View live availability, filter by location/type, book spaces
SHOULD: Save favorite spaces, receive booking reminders
COULD: Social features (study groups), occupancy predictions
**Technical Constraints:**
- 12-week timeline
- Team has React/Node.js expertise
- Must integrate with campus authentication
- Free hosting (Heroku/Vercel)
**Success Criteria:**
- Functional web + mobile app deployed
- Real-time updates working
- 90% of bookings processed without errors
Team Decision Making for Design Briefs
Collaborative Process:
- Individual Preparation: Each member researches similar solutions
- Brainstorm Users: Create user personas together
- Define Problem: Reach consensus on core problem
- List Features: Everyone contributes feature ideas
- Prioritize with MoSCoW: Vote/discuss to categorize
- Assign Writing: Divide brief sections among team
- Review & Refine: Everyone edits final document
Best Practice: Use shared documents (Google Docs, Notion) so everyone
can contribute simultaneously and see changes in real-time.
Task 1: Team Design Brief Workshop
Instructions (Work in your project teams):
- Review Project Idea (5 min): Revisit your chosen project from Lecture 1
- Define the Problem (10 min): Write a clear problem statement together
- What problem does it solve?
- Who is affected and how?
- Why does it matter?
- Identify Target Users (10 min): Create 1-2 user personas
- Who are they, what do they need?
- What's their context of use?
- List Features (10 min): Brainstorm all possible features
- Prioritize with MoSCoW (10 min): Categorize features as
Must/Should/Could/Won't
- Write Brief Sections (15 min): Divide writing among team:
- Constraints, Success Criteria, Scope
- Compile into one document
Time: 45 minutes
Deliverable: 1-2 page design brief (submit to Moodle by end of session)
Break Time
15 Minutes
Take a break. When you return, bring laptops - you'll be coding!
Next: Part B - Building "Hello World" Prototypes
Part B: Early Technical Feasibility
You've defined WHAT you're building. Now let's validate that you CAN build it
with your chosen technology stack.
What is a "Hello World" Prototype?
- Minimal technical proof-of-concept
- Tests your tech stack setup and viability
- Validates team can work with chosen tools
- Identifies blockers early (before you invest weeks)
- NOT a full feature - just the simplest possible working example
Why Validate Technical Feasibility Early?
Benefits of Early Validation:
- Catch technical blockers NOW
- Confirm team can use tech
- Test development environment setup
- Verify integrations are possible
- Adjust project scope if needed
Risks of Skipping Validation:
- Discover tech doesn't work (Week 8)
- Team struggles with chosen stack
- Integration impossible/too complex
- No time to pivot
- Project failure
Industry Reality: Professional teams always build prototypes/spikes
before committing to architectural decisions.
What Should Your Prototype Validate?
Choose ONE of these based on your project:
- Web App: Basic server + database connection + API endpoint
Example: Node.js server returns data from PostgreSQL via /api/test
- Frontend + Backend: Frontend fetches data from backend
Example: React app displays data from Flask API
- Database Operations: CRUD operations on a test table
Example: Create, read, update, delete a "User" record
- External API Integration: Call third-party API successfully
Example: Fetch weather data from OpenWeather API
- ML Model: Load a pre-trained model and make prediction
Example: Load scikit-learn model, predict on sample data
- Mobile App: Display "Hello World" on iOS/Android simulator
Example: React Native app with button that updates text
"Hello World" Prototype Examples
E-Commerce Platform (Full-stack)
Backend: Node.js/Express server with one route
Database: PostgreSQL with "products" table
Frontend: React app fetching products from API
Goal: Display list of 3 hardcoded products
ML Image Classifier
Model: Load pre-trained ResNet model
Input: Test image (cat/dog)
Output: Print classification result
Goal: Verify TensorFlow setup and model loading works
IoT Monitoring System
Hardware: Raspberry Pi + sensor
Code: Read sensor value (temperature)
Output: Print value every 5 seconds
Goal: Confirm sensor communication works
Tech Stack Setup Checklist
Essential Setup Steps:
- Install Core Tools:
- Programming language runtime (Python, Node.js, Java, etc.)
- Package manager (npm, pip, maven, etc.)
- Database (PostgreSQL, MongoDB, MySQL, etc.)
- IDE/Editor Setup:
- VS Code, PyCharm, IntelliJ, etc.
- Extensions/plugins for your languages
- Version Control:
- Git installed and configured
- SSH keys for GitHub (if using)
- Test Communication:
- Slack/Discord for team chat
- Shared project board (Trello/Jira)
Example: Node.js + PostgreSQL "Hello World"
// server.js - Minimal Node.js + PostgreSQL example
const express = require('express');
const { Pool } = require('pg');
const app = express();
const pool = new Pool({
user: 'your_user',
host: 'localhost',
database: 'test_db',
password: 'your_password',
port: 5432,
});
// Test route: fetch data from database
app.get('/api/test', async (req, res) => {
try {
const result = await pool.query('SELECT NOW()');
res.json({
message: 'Hello World!',
timestamp: result.rows[0].now
});
} catch (err) {
res.status(500).json({ error: err.message });
}
});
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
This validates: Node.js works, PostgreSQL connection works, API endpoint
responds
Example: React + API Integration
// App.js - Minimal React component fetching from API
import React, { useState, useEffect } from 'react';
function App() {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetch('http://localhost:3000/api/test')
.then(response => response.json())
.then(data => {
setData(data);
setLoading(false);
})
.catch(error => {
console.error('Error:', error);
setLoading(false);
});
}, []);
if (loading) return Loading...
;
return (
{data?.message || 'No data'}
Server time: {data?.timestamp}
);
}
export default App;
This validates: React setup works, API calls work, data displays
Example: Python ML "Hello World"
# ml_test.py - Minimal ML model loading and prediction
import numpy as np
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
# Load sample dataset
iris = load_iris()
X, y = iris.data, iris.target
# Train simple model
model = RandomForestClassifier(n_estimators=10, random_state=42)
model.fit(X, y)
# Make a test prediction
sample = np.array([[5.1, 3.5, 1.4, 0.2]]) # Sample iris features
prediction = model.predict(sample)
probability = model.predict_proba(sample)
print(f"Prediction: {iris.target_names[prediction[0]]}")
print(f"Confidence: {probability[0][prediction[0]]:.2%}")
print("✓ Model loading and prediction successful!")
This validates: Python/libraries installed, model training works, predictions
work
Common Technical Blockers & Solutions
| Blocker |
Solution |
| Database won't start
|
Check if already running, restart
service, verify port not in use |
| Package installation
fails |
Update package manager, use virtual
environment, check Python/Node version |
| CORS errors (frontend →
backend) |
Enable CORS in backend (express: cors
middleware) |
| Port already in use
|
Kill existing process or use different
port |
| API key/credentials
issues |
Use environment variables, never commit
credentials to Git |
Debugging Tip: Read error messages carefully. Copy-paste into Google/Stack
Overflow.
Most errors have been solved by someone else!
Team Coordination for Prototyping
Divide & Conquer Approach:
Option 1: Parallel Components
- Frontend person: Build UI "Hello World"
- Backend person: Build API "Hello World"
- Database person: Set up schema
- Then: Integrate all pieces
Option 2: Pair Programming
- Whole team works together
- One person shares screen
- Others contribute ideas/debug
- Everyone learns the stack
Recommended for Today: Pair programming approach - ensures everyone
understands the setup and can work independently later.
Document Your Setup Process
Critical: As you set up your prototype, document EVERY step.
This becomes your team's setup guide.
Create a setup.md file with:
- Prerequisites: Required software and versions
- Installation Steps: Exact commands to install dependencies
- Configuration: Environment variables, database setup
- Running the Project: Commands to start all services
- Testing: How to verify everything works
- Common Issues: Problems you encountered and solutions
Why? New team members need to set up. You'll need to remember in 3 weeks.
Assessors need to run your project.
Task 2: Build "Hello World" Prototype
Instructions (Work in your project teams):
- Setup Environment (15 min):
- Install core tools (language runtime, database, packages)
- Verify installations with version commands
- Document each step in setup.md
- Choose Prototype Type (5 min): Pick ONE to validate:
- Backend + Database connection
- Frontend + Backend API call
- External API integration
- ML model loading
- Mobile app basic display
- Build Prototype (20 min):
- Write minimal code to test chosen component
- One person codes, others help debug
- Test that it runs successfully
- Document & Share (5 min):
- Add "How to run" to setup.md
- Take screenshot of working prototype
- Commit code to shared repo (or prepare to)
Time: 45 minutes
Deliverable: Working prototype + setup.md (demo to instructor if time)
Lecture 2 Summary
- Design briefs define problems, users, requirements, and constraints
- Good problem statements are specific, measurable, and impact-focused
- MoSCoW prioritization prevents scope creep
- Early technical validation catches blockers before they become critical
- "Hello World" prototypes test tech stack feasibility
- Documentation during setup saves time later
- Teams should work collaboratively on both briefs and prototypes
Next Lecture:
Project Management & Sprint Zero
Agile methodologies, setting up your repository, and planning your first sprint
Before Next Lecture
- Submit to Moodle:
- Team design brief (complete version)
- Setup.md file documenting your prototype setup
- Screenshot of working "Hello World" prototype
- Refine Your Brief: Incorporate any feedback from today
- Expand Prototype: If time, try adding one more component
- Read About Agile: Review Scrum Guide (link on Moodle)
- Think About User Stories: How would users describe your features?
Questions? Post on Moodle forum or email me.