Course Schedule
This schedule will definitely change over the course of the semester. Please continue to check back for updates.
Topic 1: Intro to the Course
Expectations, team norms, intro to the tech stack and course structure.
Course intro + course arc + architecture overview
Welcome to the course!
Teams + Working Agreement (Phase 1) + dev setup
- Maitre, N.L., Marra, L., Kjeldsen, W. et al. A social media-delivered intervention for motor delays: stage-Ib randomized clinical trial and implementation exploration. Pediatr Res (2025). https://doi.org/10.1038/s41390-025-04151-5. Full text available via UNCA library.
- Rasmusson, J. (2010). The Agile Samurai. Ch. 1: Agile in a Nutshell
- Rasmusson, J. (2010). The Agile Samurai. Ch. 2: Meet Your Agile Team
Topic 2: Backend Architecture + Testing as Specification
Deepen backend architectural understanding and introduce testing as behavioral specification (contract-level). SDLC concept: turning vague needs into testable behaviors.
Backend deep dive: models, schemas, routes, dependencies
Pytest workshop: contract-level tests (backend)
- Testing workshop focused on contract-level API tests (not full coverage)
- Studio: write tests for existing endpoints
- Live critique of one test PR: clarity, naming, and what behavior is asserted
Topic 3: Data Modeling + API Design + Review-as-Learning
Design and implement a new backend model (including relationship design) with tests. SDLC concept: articulating tradeoffs and constraints in PRs and reviews.
Class cancelled
Domain modeling + relationship tradeoffs (whiteboard first)
- Team agreements
- How is testing going? Any questions?
- Mini-lecture on relationship design and tradeoffs
- Activity: whiteboard the domain model before coding
- Begin implementation plan and test plan (what behavior must be true)
Topic 4: Software Design Principles in Practice
Apply design principles (cohesion, coupling, DRY, data minimization) directly to the starter architecture. Use tests to refactor safely. SDLC concept: design for change.
HW1 Reflection + Data Modeling Studio
- HW1 Feedback & Discussion
- Show & Tell: Compare your implementation with your counterpart on the other team and discuss.
- Discussion of each team's data model
Writing Clean Code and Refactoring Safely
- Lecture using your codebase as examples: cohesion/coupling, DRY, function/class size, and data minimization
- Studio: refactor or extend an existing API safely (tests as guardrails)
- Martin, R. C. (2009). Clean Code. Chapters 2 (Meaningful Names), 3 (Functions), and 17 (Smells and Heuristics) Link
Topic 5: Frontend Architecture & System Boundaries
Treat React as architecture: component responsibility, state ownership, and data flow. Connect UI to tested APIs. SDLC concept: mapping user needs to system behavior.
React architecture review (state ownership + boundaries)
- React as an architectural system: pages vs components, local vs global state, and data flow
- Activity: map one backend feature to a UI flow and identify states/edge cases
- Slides
- React Architecture
Integration studio: connect frontend to backend feature
- Studio: implement UI integration with a tested backend endpoint
- Review focus: component responsibility and predictable data flow
- Quick check: 'What can a user do now?'
- TypeScript, Contexts, Hooks
Topic 6: Mobile - React Native and Expo
Build mobile UI using React Native and Expo. Connect mobile app to backend API. SDLC concept: platform considerations and mobile-specific patterns.
React Native architecture + Expo setup
- React Native vs React: similarities and differences
- Expo: what it is, why we use it
- Team activity: set up Expo project, understand structure
- Discussion: "How is mobile different from web? What's the same?"
- Slides
- React Native + Expo
- Expo Documentation. Getting Started Link
Mobile UI + navigation + backend integration
- Mobile UI patterns: navigation, screens, components
- Team studio: build mobile UI for existing backend feature
- Connect mobile app to same backend API
- Pair programming: one codes, one reviews, then switch
- Reflection: "What's hard about mobile? What's easier than web?"
- Mobile UI Integration
Topic 7: UX, Prototyping, and Revisiting Assumptions
Introduce HCD and low-fidelity prototyping once technical fluency exists. Use critique to surface mismatches between user intent and current implementation.
Human-centered design + low-fi prototyping
- Intro to HCD
- Create low-fidelity prototypes (paper or Figma) for a targeted flow
- Studio critique: identify mismatches between current UI/system behavior and user goals
- Slides
- Human-Centered Design + Low-Fi Prototyping
Iterate based on prototype + review focus on assumptions
- Studio: revise a flow or UI element based on prototype critique
- Review focus shifts: assess user assumptions and flow clarity (not code style)
- High-Fidelity Prototyping + Implementation
Topic 8: Design Synthesis + Sprint 1 Demo + Phase 1 Reflection
Synthesize design work, stabilize Phase 1 contributions, and demo. Prepare for the Phase 2 shift from exploration to shared ownership.
High-fi prototyping + demo prep
- High-fidelity prototyping and alignment: confirm prototype behaviors map to system behaviors
- Studio: prepare Sprint 1 demos and ensure PRs are reviewable and rebased (linear history)
- Demo Prep + Phase 1 Reflection
- Short reading: Agile Overview (forward-looking; prepares for Phase 2) Link
Sprint 1 demos + Phase 1 retrospective
- Sprint 1 demos
- Phase 1 retrospective: what improved (tests, reviews, design clarity), what remained hard, and what will change in Phase 2 (shared repo, vertical slices)
- Sprint 1 Demos + Phase 1 Retrospective
Topic 9: Spring Break
No class
Spring Break - No class
Spring Break - No class
Topic 10: Phase 2: Agile and Vertical Features
Introduction to Agile. Form vertical teams. Begin feature development in shared repo.
Agile introduction + vertical team formation
- Agile principles: iterations, user stories, sprints
- Form vertical teams: backend + web + mobile developers
- Team working agreement for Phase 2 (collaboration, communication)
- Discussion: "How is Phase 2 different? What skills do we need?"
- Schwaber, K., & Sutherland, J. The Scrum Guide. Link
Sprint 1 planning + feature assignment
- Review shared repo structure and workflow
- Assign features to vertical teams
- Sprint 1 planning: break features into user stories and tasks
- Define API contracts (shared types)
- Set up feature branches
- Team reflection: "What are our goals? What are we worried about?"
Topic 11: Feature Development Sprint 1
Build first vertical feature. Practice daily standups, PRs, code review across teams. Reflect on collaboration challenges.
Feature development kickoff + daily standup protocol
- Teams begin feature work
- Daily standup protocol: what did you do, what will you do, blockers
- Pair programming: backend + frontend developers work together
- Discussion: "How do we coordinate? What's hard about shared codebase?"
Feature work + PR workflow + code review
- Teams continue feature work
- Open PRs, practice code review across teams
- Resolve merge conflicts, coordinate API changes
- Team reflection: "What's working? What's challenging? How are we communicating?"
Sprint 1 continued: feature development
- Teams continue Sprint 1 feature work
- Daily standups
- Pair programming and collaboration
- Team check-in: "What progress have we made? What blockers do we have?"
Sprint 1 continued: integration and testing
- Teams continue feature work
- Integration testing across components
- Code review and PR refinement
- Team reflection: "What's working well? What needs improvement?"
Topic 12: Feature Development Sprint 2
Continue feature development. Sprint review and retrospective. Plan next sprint.
Sprint 1 review + sprint 2 planning
- Sprint 1 demos: teams show what they built
- Sprint retrospective: what worked, what didn't, what to improve
- Sprint 2 planning: next features, user stories, tasks
- Reflection: "How did Sprint 1 go? What did we learn about teamwork?"
Sprint 2 feature development kickoff
- Teams begin Sprint 2 features
- Continue daily standups
- Practice cross-team coordination
- Team reflection: "How are we improving? What's still hard?"
Sprint 2 continued: feature development
- Teams continue Sprint 2 feature work
- Daily standups
- Integration and testing
- Team check-in: "What progress have we made?"
Sprint 2 continued: refinement and testing
- Teams continue feature work
- Code review and PR refinement
- Integration testing
- Team reflection: "What's working? What needs improvement?"
Topic 13: Feature Development Sprint 3
Final feature sprint. Integration testing. Polish and refinement.
Sprint 2 review + final sprint planning
- Sprint 2 demos
- Sprint retrospective
- Final sprint planning: polish, integration, testing
- Discussion: "What features are complete? What needs polish?"
Sprint 3 feature development kickoff
- Teams begin final sprint features
- Polish existing features, fix bugs
- Write integration tests
- Team reflection: "What are we proud of? What needs work?"
Sprint 3 continued: integration and polish
- Teams continue final sprint work
- Cross-team integration: ensure features work together
- Bug fixes and polish
- Team check-in: "What's left to do?"
Sprint 3 continued: final refinement
- Teams finalize features
- Final integration testing
- Code review and PR refinement
- Team reflection: "What are we proud of? What would we do differently?"
Topic 14: Final Delivery and Reflection
Final integration, testing, and polish. Course reflection and celebration.
Final integration and testing
- Final integration testing: all features work together
- Bug fixes and polish
- Prepare for final demo
- Team reflection: "What did we accomplish? What are we proud of?"
- Martin, R. C. (2011). The Clean Coder. (Ch. 12-13) Link
Final demos + course reflection
- Final team demos: showcase completed features
- Course reflection: "How did we grow? What did we learn?"
- Celebration and wrap-up