Starting Lines; Shaping and Sketching
Week One
Monday, January 13 Video
- Welcome & introductions
- Course policies
- Course calendar
Wednesday, January 15 Video
- Introduce Project One
- Lo-fi prototyping and shaping
- Fat-marker sketches
System-Design Fundamentals and Strategies
Week Two
Monday, January 20
- No class. Martin Luther King, Jr. holiday.
Wednesday, January 22 Video
- Refining your systems-design thinking
- Determining architecturally significant requirements
- Establishing project boundaries
- Arriving at narrowly defined problems
One-on-One Conferences; Project Two
Week Three
Monday, January 27
- No class. Individual Project One remote consultations with instructor.
System Architecture and Patterns; Dev Teams as Design Studios
Week Four
Monday, February 3 Video
- Advanced basics: grooming a Git-centric development environment
- Determining architecturally significant system features via frontend prototyping
- Visual regression testing with BackstopJS
Wednesday, February 5 Video
- More front-end prototyping
- Abbreviated tour of an example framework (Ruby on Rails)
Describing and Illustrating System Architectures
Week Five
Monday, February 10 Video
- Framework selection: starting from No
- Comparatively exploring and developing in a new framework (ExpressJS example)
Wednesday, February 12 Video
- Establishing minimal foundations in reference to generated code
- Tracking dependencies (manifests, semantic versioning)
- From frontend prototype to backend framework (ExpressJS/NodeJS example)
- Establishing and seeking loosely-coupled component parts for a system
- Auditioning candidate components
Dependence on Libraries and Frameworks
Week Six
Monday, February 17
- No class. Remote team consultations with instructor.
Wednesday, February 19 Video
- Refresher: Git remotes and pull requests; enforcing code reviews
- Working on feature branches; keeping up-to-date with
git rebase
Isolating Code and Working with Asynchronous Data
Week Seven
Monday, February 24 Video
- Working with data (synchronous and asynchronous JS)
- Isolating business logic
- Beginning to write tests
Wednesday, February 26 Video
- Remote class; watch Basecamp for details
- Request/response and I/O: GitHub API example
- Integrating tests into Git workflows
Working with Data Structures & Data Stores
Week Eight
Monday, March 2 Video
- Spending (plenty of) time determining and sketching data structures
- Flat-file storage; applications and use cases
- Relational databases (SQL and friends)
- Applications and use cases
- Document-based databases (NoSQL and friends)
- Applications and use cases
Wednesday, March 4 Video
- Implementing SQL-style databases: SQLite example
Q&A; Document-style Databases, Configuration
Week Nine
Monday, March 9 Video
- Q&A: local vs. flat-file vs. cloud databases
- Q&A: why Nginx?
- Q&A: JavaScript-less design patterns; EJS patterns and library access
- Q&A: field/data validation
- Implementing document-style databases: MongoDB example
- Configuration and connection: what to commit, what to obscure (ENV)
Wednesday, March 11
- No class; Stolley out sick
Monday, March 16
- No class.
Wednesday, March 18
- No class.
Shifting from Alphas to Betas, Designing for Production
Week Eleven
Monday, March 23 Video
- Triaging the rest of the semester
- Thinking about betas and production readiness
- Alpha-release project postmortem: HTML semantics, form elements
Wednesday, March 25 Video
- Seeding NoSQL-style databases (MongoDB example)
- Working with
async
functions, inside and out
- Implementing flat-file storage
- More on environment variables
- Testing with databases, especially setup and tear-down
Interconnection, Configuration, Security
Week Twelve
Monday, March 30 Video
- Server setup and security (Linode example)
- Key authentication over SSH
- Basic firewall (ufw)
- Basic testing to ensure server security
Wednesday, April 1 Video
- Selecting a web server
- Researching and implementing a configuration
- Setting up
https
with Certbot
Advanced Front-End Techniques
Week Thirteen
Monday, April 6 Video
- Web sockets and Socket.io
- Custom event emitters
- HTML
data-
attributes and user- vs. script-friendly data
Wednesday, April 8 Video
- Finishing up sockets: data-driven updates via the DOM
- Features of Progressive Web Apps
- Service workers
- Local storage
- The fetch API
Code Quality
Week Fourteen
Wednesday, April 15 Video
- Reorganizing code
- Ensuring test completion for libraries
- Revising for functionality
- Refactoring for performance, elegance, readability
- Testing dependencies
- Aiming eventually to remove dependencies
Deployment and Monitoring; CI/CD
Week Fifteen
Monday, April 20 Video
- Introduce the final project
- Git-based deployment strategies (custom scripts)
- Simple use of pm2 to start, monitor, and keep an app running
- Deployment packages and libraries
Wednesday, April 22 Video
- Working with JSDoc
- Integrating docs with GitHub Pages
- (Supplemental video coming this weekend with the remaining topics)
- Ensuring even a simply deployed app runs in production
- Using TravisCI on GitHub
- Including a TravisCI status image in your README file (or elsewhere)
- Robust deployment with pm2
Monday, April 27
- Catch-up day or new topics
- Open Q&A
Wednesday, April 29
- Open Q&A