Introduction
Congratulations on completing the first module of our Full Stack Web Development course! Over the past week, you've learned about development environment setup, code editors, browser tools, project organization, Agile principles, and productivity tools. Now it's time to put it all together in a comprehensive weekend project.
In this project, you'll create a fully customized development workspace that incorporates all the elements we've discussed. This workspace will serve as your foundation for all future development work, so it's worth taking the time to set it up thoughtfully.
Polya's Problem-Solving Framework
Before diving into the project, let's introduce a powerful framework that will guide our development process: George Polya's 4-Step Problem Solving Procedure. While originally developed for mathematical problem-solving, it's remarkably applicable to software development challenges.
Polya's framework consists of four fundamental steps:
Step 1: Understand the Problem
In this step, you thoroughly analyze what you're trying to achieve:
- What exactly is the problem or task?
- What are the requirements and constraints?
- What inputs are available, and what outputs are expected?
- Can you restate the problem in your own words?
- Can you think of a simple example or use case?
For a developer, this might involve:
- Reading requirements documents carefully
- Discussing user stories with stakeholders
- Clarifying acceptance criteria
- Creating sample data or test cases
Step 2: Devise a Plan
After understanding the problem, you develop a strategy to solve it:
- What approaches could work for this problem?
- Can you break it down into smaller sub-problems?
- Have you solved similar problems before?
- What algorithms, design patterns, or libraries might be helpful?
- What steps will you need to take?
For a developer, this might involve:
- Sketching the architecture or component structure
- Selecting appropriate technologies
- Planning the database schema
- Creating a list of tasks in priority order
Step 3: Carry Out the Plan
This is where you implement your solution:
- Follow the steps in your plan
- Work methodically through each sub-problem
- Check each step as you go
- Be persistent but also willing to revisit your plan if you hit roadblocks
For a developer, this might involve:
- Writing code according to your planned architecture
- Implementing features one by one
- Writing tests to validate your solution
- Committing code in logical chunks
Step 4: Look Back
After implementing your solution, you reflect on both the result and the process:
- Does your solution work for all test cases?
- Can you verify the result?
- Can you derive the result differently?
- Can you use the solution or method for other problems?
- Can you improve the solution (performance, readability, etc.)?
For a developer, this might involve:
- Code review (by yourself or others)
- Refactoring for cleaner, more efficient code
- Documenting the solution and lessons learned
- Creating reusable components or templates
- Retrospective reflection on the development process
Throughout our weekend project, we'll apply Polya's framework to guide our approach. This systematic process will not only help us create a better development workspace but also establish a valuable problem-solving mindset for all your future development work.
Project Requirements
Your weekend project is to create a comprehensive development workspace with the following components:
- Customized Code Editor Setup: Configure VS Code (or your preferred editor) with useful extensions, settings, and snippets
- Browser Development Environment: Set up your browser with developer-focused bookmarks, extensions, and DevTools configurations
- Project Organization System: Create templates and scripts for consistent project structures
- Task Management System: Implement a workflow for tracking and prioritizing development tasks
- Project Documentation: Create standardized templates for project documentation
- Problem-Solving Workflow: Integrate Polya's 4-step method into your development process
Each component will be described in detail below, along with specific requirements and suggestions. Remember to apply Polya's framework as you work through each part of the project.
Part 1: Customized Code Editor Setup
Let's apply Polya's framework to set up your code editor:
Understand the Problem
- What activities do you perform most frequently in your code editor?
- What languages and frameworks will you be working with?
- What are your pain points in your current editing workflow?
- What specific tasks would you like to automate or simplify?
Devise a Plan
- Research extensions for your primary languages and frameworks
- Identify keyboard shortcuts that could speed up your workflow
- Plan custom snippets for code you write repeatedly
- Consider editor settings that match your preferences
Carry Out the Plan
Install and configure the following (or equivalents for your chosen editor):
Essential Extensions
- ESLint: JavaScript/TypeScript linting
- Prettier: Code formatting
- Live Server: Launch a development server
- GitLens: Enhanced Git capabilities
- Auto Rename Tag: Automatically rename paired HTML/XML tags
- Path Intellisense: Autocompletes filenames
- Bracket Pair Colorizer: Color codes matching brackets
- At least 2 additional extensions specific to your preferred stack
Custom Settings
Configure editor settings in settings.json (for VS Code):
{
"editor.fontSize": 14,
"editor.fontFamily": "Your preferred font, 'Fira Code', Consolas, 'Courier New', monospace",
"editor.wordWrap": "on",
"editor.tabSize": 2,
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 1000,
"terminal.integrated.fontSize": 14,
"workbench.colorTheme": "Your preferred theme",
"workbench.iconTheme": "material-icon-theme",
// Add at least 5 additional customizations
}
Custom Snippets
Create at least 5 custom snippets for code patterns you frequently use. For example, in HTML:
{
"HTML5 Boilerplate": {
"prefix": "html5",
"body": [
"",
"<html lang=\"en\">",
"<head>",
" <meta charset=\"UTF-8\">",
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
" <title>${1:Document}</title>",
" <link rel=\"stylesheet\" href=\"${2:styles.css}\">",
"</head>",
"<body>",
" $0",
" <script src=\"${3:script.js}\"></script>",
"</body>",
"</html>"
],
"description": "HTML5 boilerplate"
}
}
Keyboard Shortcuts
Customize at least 5 keyboard shortcuts for operations you perform frequently
Look Back
After setting up your editor:
- Test your configuration with a small project
- Evaluate which extensions provide the most value
- Refine your settings based on actual usage
- Document your setup for future reference or environment replication
Part 2: Browser Development Environment
Let's apply Polya's framework to set up your browser for development:
Understand the Problem
- What browser do you prefer for development?
- What web development tasks do you perform frequently?
- What information do you need quick access to?
- What aspects of web debugging are most important to you?
Devise a Plan
- Research browser extensions for web development
- Plan a bookmark structure for development resources
- Identify DevTools customizations that match your workflow
- Consider different profiles for development vs. regular browsing
Carry Out the Plan
Browser Extensions
Install and configure the following (or equivalents for your chosen browser):
- Web Developer: Adds a toolbar with various web development tools
- React Developer Tools: For inspecting React component hierarchies
- Redux DevTools: For debugging Redux applications
- JSON Formatter: Makes JSON readable in the browser
- Wappalyzer: Identifies technologies used on websites
- Accessibility Insights: Helps check for accessibility issues
- At least 2 additional extensions specific to your preferred stack
DevTools Configuration
Configure Chrome DevTools (or equivalent):
- Enable dark theme (if preferred)
- Position dock to right or bottom based on preference
- Enable network request blocking for testing
- Configure persistence for console history
- Set up workspace mapping for direct file editing
- Create at least 3 custom snippets in the Sources panel
Development Bookmarks
Create a bookmark folder structure with at least the following categories:
- Documentation: Links to docs for your primary languages and frameworks
- Tools: Online development tools (like CodePen, regex testers, etc.)
- Resources: Design resources, icon libraries, etc.
- Learning: Tutorials, courses, and reference materials
- Inspiration: Sites with good design or implementation examples
Add at least 5 bookmarks to each category
Look Back
After setting up your browser:
- Test your extensions on various websites
- Practice using DevTools with your customizations
- Refine your bookmark organization
- Consider creating a separate browser profile for development
Part 3: Project Organization System
Let's apply Polya's framework to create a project organization system:
Understand the Problem
- What types of projects will you be working on most frequently?
- What structure best supports your development workflow?
- What information needs to be consistently available across projects?
- What repetitive setup tasks could be automated?
Devise a Plan
- Design directory structures for different project types
- Plan templates for configuration files
- Identify scripts that could automate project setup
- Consider documentation standards
Carry Out the Plan
Project Templates
Create at least 2 of the following project templates:
Frontend Template (e.g., React, Vue, or vanilla):
frontend-project/
├── public/
│ ├── index.html
│ ├── favicon.ico
│ └── assets/
├── src/
│ ├── components/
│ ├── pages/
│ ├── services/
│ ├── utils/
│ ├── styles/
│ ├── App.js
│ └── index.js
├── tests/
├── .gitignore
├── package.json
├── README.md
└── [Framework-specific config files]
Backend Template (e.g., Node.js, Express):
backend-project/
├── src/
│ ├── controllers/
│ ├── models/
│ ├── routes/
│ ├── middleware/
│ ├── services/
│ ├── utils/
│ └── app.js
├── config/
├── tests/
├── .env.example
├── .gitignore
├── package.json
└── README.md
Full-Stack Template:
fullstack-project/
├── client/ (Frontend structure from above)
├── server/ (Backend structure from above)
├── .gitignore
├── package.json
├── docker-compose.yml
└── README.md
Configuration Templates
Create templates for at least 5 of the following configuration files:
.gitignore.eslintrc.json.prettierrcpackage.json(with common dependencies and scripts)tsconfig.json(if using TypeScript).env.exampledocker-compose.yml.github/workflows/ci.yml(for GitHub Actions)
Automation Scripts
Create at least one script to automate project initialization. For example, a bash script that:
#!/bin/bash
# project_init.sh
# Usage: ./project_init.sh project_name [frontend|backend|fullstack]
PROJECT_NAME=$1
TYPE=${2:-fullstack}
TEMPLATES_DIR="~/dev/templates"
if [ -z "$PROJECT_NAME" ]; then
echo "Error: Please provide a project name"
echo "Usage: ./project_init.sh project_name [frontend|backend|fullstack]"
exit 1
fi
mkdir -p $PROJECT_NAME
cd $PROJECT_NAME
case $TYPE in
frontend)
echo "Creating frontend project structure..."
cp -r $TEMPLATES_DIR/frontend/* .
;;
backend)
echo "Creating backend project structure..."
cp -r $TEMPLATES_DIR/backend/* .
;;
fullstack)
echo "Creating full-stack project structure..."
cp -r $TEMPLATES_DIR/fullstack/* .
;;
*)
echo "Error: Invalid project type"
echo "Valid types: frontend, backend, fullstack"
exit 1
;;
esac
# Replace template placeholders with project name
find . -type f -name "*.json" -o -name "*.md" -o -name "*.html" | xargs sed -i "s/PROJECT_NAME/$PROJECT_NAME/g"
# Initialize git repository
git init
git add .
git commit -m "Initial commit"
# Install dependencies if package.json exists
if [ -f "package.json" ]; then
npm install
fi
echo "$TYPE project '$PROJECT_NAME' created successfully!"
Look Back
After creating your project organization system:
- Test your templates by creating a sample project
- Evaluate whether the structure supports efficient development
- Refine templates based on practical usage
- Document your organization system for future reference
Part 4: Task Management System
Let's apply Polya's framework to set up your task management system:
Understand the Problem
- What types of tasks do you need to track?
- How do you prioritize work?
- What information is essential for each task?
- What is your preferred workflow style (Kanban, to-do list, etc.)?
Devise a Plan
- Select a task management tool that fits your needs
- Design a task workflow that matches your process
- Identify task metadata and categorization system
- Plan integration with your development tools
Carry Out the Plan
Set up a task management system using one of the tools we discussed (Trello, GitHub Projects, Notion, Todoist, etc.):
Kanban Board Structure
If using a Kanban-style tool (like Trello or GitHub Projects), set up the following columns:
- Backlog: Tasks to be done eventually
- This Week: Tasks planned for this week
- Today: Tasks prioritized for today
- In Progress: Tasks actively being worked on
- Code Review: Tasks awaiting review
- Testing: Tasks being tested
- Done: Completed tasks
Task Categories
Create a labeling or tagging system with at least the following categories:
- Type: Feature, Bug, Refactor, Documentation, etc.
- Priority: High, Medium, Low
- Effort: Small, Medium, Large
- Technology: Frontend, Backend, Database, etc.
- At least 2 additional categories specific to your workflow
Task Template
Create a template for task descriptions that includes:
- Objective: Clear statement of what needs to be done
- Acceptance Criteria: Conditions for considering the task complete
- Resources: Links, references, or dependencies
- Notes: Additional context or information
Problem-Solving Integration
Explicitly incorporate Polya's 4-step procedure into your task workflow:
- Add a "Planning" checklist to tasks with sections for each of Polya's steps
- Create a task template that prompts you to document your understanding, plan, execution, and review
- Set up reminder questions for each step to ensure thorough problem-solving
Look Back
After setting up your task management system:
- Test it with a small project or set of tasks
- Evaluate whether it provides sufficient visibility and organization
- Refine categories and workflow based on actual usage
- Document your task management approach
Part 5: Project Documentation
Let's apply Polya's framework to create documentation templates:
Understand the Problem
- What information needs to be consistently documented?
- Who are the audiences for different types of documentation?
- What makes documentation useful and maintainable?
- What forms of documentation are most relevant to your projects?
Devise a Plan
- Identify key documentation types needed for your projects
- Design templates for each type
- Establish formatting and style conventions
- Plan for maintenance and updates
Carry Out the Plan
Create templates for at least 4 of the following documentation types:
README Template
# Project Name
Brief description of the project.
## Features
- Feature 1
- Feature 2
- Feature 3
## Installation
```bash
# Clone the repository
git clone https://github.com/username/project.git
# Navigate to the project directory
cd project
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
# Edit .env with your configuration
```
## Usage
```bash
# Start development server
npm run dev
# Build for production
npm run build
# Run tests
npm test
```
## API Documentation
[Link to API documentation if applicable]
## Technologies
- List of key technologies and frameworks used
## Project Structure
Brief explanation of the project organization.
## Contributing
Guidelines for contributing to the project.
## License
[License information]
## Contact
[Contact information]
API Documentation Template
# API Documentation
Base URL: `https://api.example.com`
## Authentication
[Authentication details]
## Endpoints
### Resource Name
#### Get all resources
`GET /resources`
**Query Parameters**
| Parameter | Type | Description |
|-----------|------|-------------|
| param1 | string | Description |
| param2 | number | Description |
**Response**
```json
{
"data": [
{
"id": 1,
"name": "Example",
"property": "value"
}
],
"meta": {
"total": 1
}
}
```
#### Get a specific resource
`GET /resources/:id`
[And so on for other endpoints...]
Code Documentation Guidelines
Create a template for code-level documentation, including:
- Format for function/method documentation
- Standards for commenting complex logic
- Expectations for module/file documentation
- Examples of good documentation practice
Architecture Documentation Template
Create a template for documenting system architecture, including:
- High-level overview
- Component diagram
- Technology stack description
- Data flow explanation
- Integration points
- Deployment architecture
Commit Message Format
Establish a standard format for git commit messages, such as:
type(scope): subject
body
footer
With guidelines for each component
Look Back
After creating your documentation templates:
- Test them by documenting a small project
- Evaluate whether they provide sufficient clarity and information
- Refine based on what works well in practice
- Consider whether any additional templates would be valuable
Part 6: Integrating Polya's Problem-Solving Framework
Finally, let's explicitly integrate Polya's 4-step problem-solving procedure into your development workflow:
Problem-Solving Templates
Create a template document or note for approaching development problems:
# Problem-Solving Worksheet
## 1. Understand the Problem
### Problem Statement
[Clear description of the problem]
### Requirements
- [Requirement 1]
- [Requirement 2]
### Constraints
- [Constraint 1]
- [Constraint 2]
### Examples/Test Cases
- [Example 1]
- [Example 2]
### Questions to Ask
- [Question 1]
- [Question 2]
## 2. Devise a Plan
### Approach
[Describe your planned approach]
### Alternatives Considered
- [Alternative 1]
- [Alternative 2]
### Steps
1. [Step 1]
2. [Step 2]
3. [Step 3]
### Resources Needed
- [Resource 1]
- [Resource 2]
## 3. Carry Out the Plan
### Implementation Notes
[Notes on the implementation]
### Challenges Encountered
- [Challenge 1]
- [Challenge 2]
### Adjustments Made
- [Adjustment 1]
- [Adjustment 2]
## 4. Look Back
### Solution Summary
[Brief description of the solution]
### Verification
- [Verification method 1]
- [Verification method 2]
### Lessons Learned
- [Lesson 1]
- [Lesson 2]
### Improvements for Next Time
- [Improvement 1]
- [Improvement 2]
Integrate with Your Task Management System
Modify your task workflow to explicitly include Polya's steps:
- Add checklist templates to task cards
- Create columns or status flags that correspond to each step
- Design review processes that emphasize the "Look Back" step
Problem-Solving Journal
Create a template for a development journal that helps you track how you solve problems:
- Date and problem description
- Your approach using the 4 steps
- Key insights or lessons learned
- Reusable patterns or solutions
Review Questions
Create a set of review questions for each step of Polya's method, tailored to software development:
Understand Phase Questions
- Can I explain this problem/feature in my own words?
- Do I know what the expected inputs and outputs are?
- Have I identified all requirements and constraints?
- Can I create a simple example or test case?
- Are there any terms or concepts I need to clarify?
Plan Phase Questions
- What approaches could solve this problem?
- Can I break this into smaller, manageable parts?
- Have I solved similar problems before?
- What data structures or patterns would help?
- What's the simplest approach that could work?
- What are the potential edge cases?
Execute Phase Questions
- Am I following my plan?
- Can I verify each step as I go?
- Am I documenting important decisions?
- Should I reconsider my approach based on what I'm learning?
- Am I writing tests to verify my implementation?
Look Back Phase Questions
- Does my solution satisfy all requirements?
- Have I tested with various inputs, including edge cases?
- Is the code clean, efficient, and maintainable?
- Could I explain this solution to someone else?
- Are there patterns here I can reuse?
- What would I do differently next time?
Project Submission
To complete this weekend project, you'll need to:
- Implement all six parts as described above
- Create a GitHub repository containing all your templates, configurations, and scripts
- Write a README that explains your workspace setup and how you've integrated Polya's problem-solving framework
- Include screenshots of your editor and browser setup
- Prepare a brief (3-5 minute) demonstration of your workspace
Submission is due by the start of next week's first session. Be prepared to share your approach and what you learned in the process.
Evaluation Criteria
Your project will be evaluated based on:
- Completeness: Implementation of all required components
- Customization: Adaptation to your specific development needs and preferences
- Integration: How well the different parts work together as a cohesive system
- Problem-Solving: Effective incorporation of Polya's 4-step framework
- Usability: Practicality and ease of use in actual development work
- Documentation: Clear explanation of your setup and choices
Tips for Success
- Start with the basics: Focus on getting the core components working before adding advanced customizations
- Apply Polya's method to the project itself: Use the 4-step process to approach each part of this weekend project
- Test as you go: Regularly try using your workspace to ensure it's practical and effective
- Prioritize what matters most: Invest the most time in the components that will have the biggest impact on your productivity
- Keep it maintainable: Create a system you can easily update and evolve as your needs change
- Document your choices: Record why you made specific decisions to help your future self
Additional Resources
Editor Configuration
Problem-Solving Resources
- Polya's "How to Solve It" Summary
- How to Solve It - Wikipedia
- Applying Polya's Technique to Coding Problems