H M < >
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

  1. Project Title & Team - Name, team members, roles
  2. Problem Statement - What problem are you solving? Why does it matter?
  3. Target Users - Who will use this? What are their needs?
  4. Project Objectives - What will the project achieve?
  5. Key Features - Core functionality (prioritized)
  6. Technical Constraints - Technology, time, resources, expertise
  7. Success Criteria - How do you know if you've succeeded?
  8. 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:

  1. Individual Preparation: Each member researches similar solutions
  2. Brainstorm Users: Create user personas together
  3. Define Problem: Reach consensus on core problem
  4. List Features: Everyone contributes feature ideas
  5. Prioritize with MoSCoW: Vote/discuss to categorize
  6. Assign Writing: Divide brief sections among team
  7. 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):

  1. Review Project Idea (5 min): Revisit your chosen project from Lecture 1
  2. 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?
  3. Identify Target Users (10 min): Create 1-2 user personas
    • Who are they, what do they need?
    • What's their context of use?
  4. List Features (10 min): Brainstorm all possible features
  5. Prioritize with MoSCoW (10 min): Categorize features as Must/Should/Could/Won't
  6. 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:

  1. Install Core Tools:
    • Programming language runtime (Python, Node.js, Java, etc.)
    • Package manager (npm, pip, maven, etc.)
    • Database (PostgreSQL, MongoDB, MySQL, etc.)
  2. IDE/Editor Setup:
    • VS Code, PyCharm, IntelliJ, etc.
    • Extensions/plugins for your languages
  3. Version Control:
    • Git installed and configured
    • SSH keys for GitHub (if using)
  4. 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:

  1. Prerequisites: Required software and versions
  2. Installation Steps: Exact commands to install dependencies
  3. Configuration: Environment variables, database setup
  4. Running the Project: Commands to start all services
  5. Testing: How to verify everything works
  6. 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):

  1. Setup Environment (15 min):
    • Install core tools (language runtime, database, packages)
    • Verify installations with version commands
    • Document each step in setup.md
  2. 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
  3. Build Prototype (20 min):
    • Write minimal code to test chosen component
    • One person codes, others help debug
    • Test that it runs successfully
  4. 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

  1. Submit to Moodle:
    • Team design brief (complete version)
    • Setup.md file documenting your prototype setup
    • Screenshot of working "Hello World" prototype
  2. Refine Your Brief: Incorporate any feedback from today
  3. Expand Prototype: If time, try adding one more component
  4. Read About Agile: Review Scrum Guide (link on Moodle)
  5. Think About User Stories: How would users describe your features?
Questions? Post on Moodle forum or email me.