Starting Lines; Shaping and Sketching

Week One

Monday, January 13 Video

  1. Welcome & introductions
  2. Course policies
  3. Course calendar

Wednesday, January 15 Video

  1. Introduce Project One
  2. Lo-fi prototyping and shaping
  3. Fat-marker sketches

System-Design Fundamentals and Strategies

Week Two

Monday, January 20

  1. No class. Martin Luther King, Jr. holiday.

Wednesday, January 22 Video

  1. Refining your systems-design thinking
  2. Determining architecturally significant requirements
  3. Establishing project boundaries
  4. Arriving at narrowly defined problems

One-on-One Conferences; Project Two

Week Three

Monday, January 27

  1. No class. Individual Project One remote consultations with instructor.

Wednesday, January 29 Video

  1. Introduce Project Two

System Architecture and Patterns; Dev Teams as Design Studios

Week Four

Monday, February 3 Video

  1. Advanced basics: grooming a Git-centric development environment
  2. Determining architecturally significant system features via frontend prototyping
  3. Visual regression testing with BackstopJS

Wednesday, February 5 Video

  1. More front-end prototyping
  2. Abbreviated tour of an example framework (Ruby on Rails)

Describing and Illustrating System Architectures

Week Five

Monday, February 10 Video

  1. Framework selection: starting from No
  2. Comparatively exploring and developing in a new framework (ExpressJS example)

Wednesday, February 12 Video

  1. Establishing minimal foundations in reference to generated code
  2. Tracking dependencies (manifests, semantic versioning)
  3. From frontend prototype to backend framework (ExpressJS/NodeJS example)
  4. Establishing and seeking loosely-coupled component parts for a system
  5. Auditioning candidate components

Dependence on Libraries and Frameworks

Week Six

Monday, February 17

  1. No class. Remote team consultations with instructor.

Wednesday, February 19 Video

  1. Refresher: Git remotes and pull requests; enforcing code reviews
  2. Working on feature branches; keeping up-to-date with git rebase

Isolating Code and Working with Asynchronous Data

Week Seven

Monday, February 24 Video

  1. Working with data (synchronous and asynchronous JS)
  2. Isolating business logic
  3. Beginning to write tests

Wednesday, February 26 Video

  1. Remote class; watch Basecamp for details
  2. Request/response and I/O: GitHub API example
  3. Integrating tests into Git workflows

Working with Data Structures & Data Stores

Week Eight

Monday, March 2 Video

  1. Spending (plenty of) time determining and sketching data structures
  2. Flat-file storage; applications and use cases
  3. Relational databases (SQL and friends)
  4. Applications and use cases
  5. Document-based databases (NoSQL and friends)
  6. Applications and use cases

Wednesday, March 4 Video

  1. Implementing SQL-style databases: SQLite example

Q&A; Document-style Databases, Configuration

Week Nine

Monday, March 9 Video

  1. Q&A: local vs. flat-file vs. cloud databases
  2. Q&A: why Nginx?
  3. Q&A: JavaScript-less design patterns; EJS patterns and library access
  4. Q&A: field/data validation
  5. Implementing document-style databases: MongoDB example
  6. Configuration and connection: what to commit, what to obscure (ENV)

Wednesday, March 11

  1. No class; Stolley out sick

Spring Break

Week Ten

Monday, March 16

  1. No class.

Wednesday, March 18

  1. No class.

Shifting from Alphas to Betas, Designing for Production

Week Eleven

Monday, March 23 Video

  1. Triaging the rest of the semester
  2. Thinking about betas and production readiness
  3. Alpha-release project postmortem: HTML semantics, form elements

Wednesday, March 25 Video

  1. Seeding NoSQL-style databases (MongoDB example)
  2. Working with async functions, inside and out
  3. Implementing flat-file storage
  4. More on environment variables
  5. Testing with databases, especially setup and tear-down

Interconnection, Configuration, Security

Week Twelve

Monday, March 30 Video

  1. Server setup and security (Linode example)
  2. Key authentication over SSH
  3. Basic firewall (ufw)
  4. Basic testing to ensure server security

Wednesday, April 1 Video

  1. Selecting a web server
  2. Researching and implementing a configuration
  3. Setting up https with Certbot

Advanced Front-End Techniques

Week Thirteen

Monday, April 6 Video

  1. Web sockets and
  2. Custom event emitters
  3. HTML data- attributes and user- vs. script-friendly data

Wednesday, April 8 Video

  1. Finishing up sockets: data-driven updates via the DOM
  2. Features of Progressive Web Apps
  3. Service workers
  4. Local storage
  5. The fetch API

Code Quality

Week Fourteen

Monday, April 13 Video

  1. Training your nose for “code smell”
  2. Linting with eslint
  3. Stolley’s opinionated eslint configs

Wednesday, April 15 Video

  1. Reorganizing code
  2. Ensuring test completion for libraries
  3. Revising for functionality
  4. Refactoring for performance, elegance, readability
  5. Testing dependencies
  6. Aiming eventually to remove dependencies

Deployment and Monitoring; CI/CD

Week Fifteen

Monday, April 20 Video

  1. Introduce the final project
  2. Git-based deployment strategies (custom scripts)
  3. Simple use of pm2 to start, monitor, and keep an app running
  4. Deployment packages and libraries

Wednesday, April 22 Video

  1. Working with JSDoc
  2. Integrating docs with GitHub Pages
  3. (Supplemental video coming this weekend with the remaining topics)
  4. Ensuring even a simply deployed app runs in production
  5. Using TravisCI on GitHub
  6. Including a TravisCI status image in your README file (or elsewhere)
  7. Robust deployment with pm2

Work Week

Week Sixteen

Monday, April 27

  1. Catch-up day or new topics
  2. Open Q&A

Wednesday, April 29

  1. Open Q&A