Software engineers learn new technologies through videos, docs, and practice
We will use video courses - links posted on the website
Jose Salvatierra - REST APIs with Flask and Python in 2024
Kay Ashaolu - Universal Building Blocks (System Design)
All available free through UC Berkeley O'Reilly access
Labs
Labs are held Fridays 9-10am in 210 South Hall
Lab 0 is ungraded (environment setup)
INFO 253B: 4 graded labs (Labs 1-4)
INFO 153B: 6 graded labs (Labs 1-6)
Grading methodology:
Check+: 10/10 (Correct solution)
Check: 8.5/10 (Shows significant effort)
Check-: 7/10 (Incorrect, low effort)
No submission: 0/10
Submit via GitHub Classroom link in bCourses
In-Class Explorations
Hands-on exercises during lecture time
Graded Pass/No Pass
Pass: You worked on it and showed engagement
No Pass: You didn't work on it
Correctness is NOT graded - we want evidence of exploration
Encourages experimentation and learning by doing
More on Assignments
Assignments must be done individually (but you can ask for help)
Dates posted on course website
Lab sections near due dates are dedicated to assignment help
Late penalty: 5% deducted per day
Submit via GitHub Classroom link in bCourses
Please contact us if you run into any issues
AI Policy for Assignments
Initial Submission: NO AI assistance
Build fundamental understanding yourself
Resubmission: AI ENCOURAGED
Can resubmit after receiving initial grade for regrading
Final Project/Exam: AI ENCOURAGED
AI-assisted development is the present and future
Philosophy: Understand fundamentals first, then leverage AI effectively
More on the Group Project
INFO 253B only
Build a project with other students
Groups of 4-5 - no exceptions
We will form teams based on skills survey
Timeline:
Proposal assigned: Week 8
Proposal due: Week 9
Project due: Week 14 Monday
Presentations: Week 14 Friday
More on the Take-Home Exam
INFO 153B only
Assigned: Week 13 Monday
Due: Week 14 Monday (1 week to complete)
Format: Individual practical coding project
Content: Demonstrates mastery of backend development concepts
AI Tools: Encouraged - use AI assistants to build professional-level code
Extra Credit Exam
Both INFO 153B & 253B (Optional)
When: Week 14 Friday, during lab
Duration: 50 minutes in-class
Format: Single problem, in-class coding challenge
Reward: 10 bonus points applicable to any single assignment
Grading: All or nothing - full credit for correct solution, zero otherwise
AI Tools: Allowed during the exam
Technologies You Will Use
Python - Our primary programming language
Flask - Web framework for building REST APIs
Docker - Containerization for deployment
SQLAlchemy - ORM for database operations
Marshmallow - Validation and serialization
Redis + rq - Async task processing
Git/GitHub - Version control and collaboration
But Don't Worry
This is not primarily a programming class
Grades are based on demonstrating understanding of core concepts
Extra bells and whistles are for extra credit
We are here to help
This is Still a Graduate Class
Perform well without constant supervision
Understand prep materials from various sources
Ask for help proactively
Get frameworks working on your own
Responsibilities
Me (Instructor)
Provide clear learning objectives
Create engaging content
Be available during office hours
Grade fairly and promptly
You (Students)
Complete prep before class
Attend and participate
Start assignments early
Ask questions when stuck
Course Materials
Course materials will be publicly available on the website
Some content behind O'Reilly paywall (free for enrolled students)
Universal Building Blocks videos on bCourses
Questions?
Before we move on, I want to address the elephant in the room...
AI IS GOING TO REPLACE MID-LEVEL ENGINEERS!
MARK ZUCKERBERG SAID SO!
WHY LEARN ANYTHING IN THIS CLASS?
Let's listen to the actual clip:
So here's my take on this
AI is incredibly powerful and getting better
But it's a tool, not a replacement for understanding
Those who understand fundamentals will use AI most effectively
Those who don't will be limited by what AI can do for them
Fundamentals
We can be pretty sure that no matter what happens:
We'll be using hash tables/dictionaries
We'll be using arrays and objects
We'll need HTTP and REST patterns
We'll need databases and queries
We'll need to understand system architecture
...and so on
So my ultimate take is
If you learn the true fundamentals of how to actually build things, AI becomes a tool for that purpose, and not a mystical force that builds things for you
Are there really fundamentals for backend system design?
I will argue in this class that there are - it's just the information is either in people's heads, or scattered in books
Course Structure
This class will be split into two parts:
Part I: Learn by Building (Weeks 1-9)
Build real REST APIs with Flask, databases, Docker, and async processing
Part II: Learn by Reflecting (Weeks 11-14)
Step back and analyze what you built - identify patterns and principles that scale to any backend system
Part 1: Learn by Building (Weeks 1-9)
🐍
Python
Fundamentals refresher
🌐
REST APIs
Flask, HTTP, JSON
🐳
Docker
Containers & compose
✅
Validation
Input & error handling
🗄️
Databases
PostgreSQL & SQLAlchemy
⚡
Async Processing
Redis + RQ
Build real backend systems from the ground up
Part 2: The Seven Building Blocks
Worker
Service
Key-Value Store
File Store
Queue
Relational DB
Vector DB
■ Task ■ Storage
Worker
Core Function: Handles long-running tasks asynchronously without blocking
Mental Model: Like a kitchen - works behind the scenes to prepare complex dishes
Perfect For:
Background jobs
Data processing
Scheduled tasks
Heavy computations
Limitations:
Not for user-facing requests
No real-time interactions
Delayed responses
Examples: Image processing, email sending, report generation, video encoding
Service
Core Function: Handles synchronous requests with immediate responses
Mental Model: Like a restaurant server - takes your order, processes it, brings back results
Perfect For:
API endpoints
User-facing operations
Fast processing tasks
Real-time interactions
Limitations:
Not for long-running processes
No heavy computations
Blocks while processing
Examples: User login, search queries, file uploads, payment processing
Key-Value Store
Core Function: Fast data retrieval using unique keys, O(1) performance
Mental Model: Like a coat check - give them a ticket (key), get back your coat (value)
Perfect For:
Caching data
Session storage
Configuration settings
Real-time counters
Limitations:
No complex queries
No relationships
Simple key-based access only
Examples: User sessions, shopping cart, cached API responses, user preferences
File Store
Core Function: Stores and retrieves large files with metadata support
Mental Model: Like a warehouse - stores big items with tracking information
Perfect For:
Images, videos, documents
Media files
Backup storage
Global content distribution
Limitations:
Not for structured data
No complex queries
Slower than Key-Value Store
Examples: Photo uploads, video streaming, document storage, software downloads
Queue
Core Function: Manages ordered message flow with FIFO processing
Mental Model: Like a line at a coffee shop - first in, first out, orderly processing
Perfect For:
Task coordination
Message passing
Background job scheduling
Event processing
Limitations:
Messages are temporary
No complex relationships
Processing order constraints
Examples: Email notifications, image processing jobs, order processing, real-time messages
Relational Database
Core Function: Stores structured data with ACID properties and complex relationships
Mental Model: Like a filing cabinet with cross-references - organized, connected, reliable
Perfect For:
Business data
Financial transactions
User accounts
Complex queries
Limitations:
Slower than Key-Value Store
Fixed schema requirements
Not ideal for unstructured data
Examples: User profiles, order data, inventory management, financial records
Vector Database
Core Function: Finds similar items using AI embeddings and semantic search
Mental Model: Like a smart librarian who finds books similar to what you're looking for
Perfect For:
AI and ML applications
Recommendation systems
Semantic search
Image/text similarity
Limitations:
Requires AI embeddings
Complex setup
Not for exact matches
Examples: "Find similar products," AI chatbots, image search, content recommendations
The Caveat
The "Seven Building Blocks" is NOT about building the most efficient system
These designs are not optimized for performance
The goal is to inspire your intuition for systems
If you build intuition, you'll utilize new tools (like AI) better
Isn't this how LLMs work in the first place?
Building Intuition Future-Proofs Yourself
Growing intuition is key to staying up to date
It helps you utilize the latest tools to your advantage