Skip to content

CAPP 30320 - Software Engineering for Civic Tech

This course focuses on software architecture and design, emphasizing skills and technologies essential for the type of collaborative development teams common in open source and civic technology sectors. The curriculum covers modern design patterns, software testing, and the construction and maintenance of data pipelines.

We will delve into special topics such as APIs, GIS, data privacy and licensing, using real-world examples from civic technology.

Students will collaborate on a project, experiencing a comprehensive requirements gathering and revision process. This approach provides hands-on experience with evolving requirements and showcases the advantages of thoughtful design.

At the conclusion of this course students will have a comprehensive understanding of real world considerations in software design as well as practical experience building a data-driven application as part of a team.

Goals

  • Develop fluency in common software architectures and patterns, and a sense of when they are and aren't appropriate to use.
  • Gain practical experience working on a team, building a project with enough complexity as to help demonstrate the benefits of the practices discussed in class.
  • Begin to develop "taste" when it comes to software design & interface choices.
  • Understand some special considerations that come with working in the civic tech sector, from audience considerations to working within certain constraints.

Textbook

Textbook: A Philosophy of Software Design, 2nd Edition

This is a short, digestible book that serves both as an introduction and helpful reference for aspiring software developers and seasoned professionals alike.

Relevant readings from this book and outside sources will be assigned before lecture to give us all shared context.

Coursework

The primary work in this course will be completing a quarter-long group project and applying best practices as you go. There will be regular meetings & milestones as part of this work.

Students should expect to write a significant amount of code as part of this course.

For more details, see Course Project.

Prerequisites

This course requires completion of CAPP 30122 (Computer Science with Applications 2) and CAPP 30235 (Databases for Public Policy) or equivalent.

Course Information

Days: Monday & Wednesday

Location: Ryerson 255

Time 1:30-2:50pm

Course Schedule

Week Date Lecture Due
1 Monday, 3/24 Introduction
1 Wednesday, 3/26 Intro/Project Teams
1 Friday, 3/28 M0: Project Proposal
2 Monday, 3/31 Human-Centered Design
2 Wednesday, 4/2 Design Exercise
2 Sunday, 4/6 @ 11:59pm M1: Design Milestone
3 Monday, 4/7 Building Software on a Team
3 Wednesday, 4/9 Tools for Working Together
3 Friday, 4/11 @ 11:59pm M2: Work Plan
4 Monday, 4/14 Application Architecture
4 Wednesday, 4/16 Testing
4 Friday, 4/18 @ 11:59pm M3: Git Repository
5 Monday, 4/21 Interface Design
5 Wednesday, 4/23 APIs
6 Monday, 4/28 Functional Patterns
6 Wednesday, 4/30 Data Pipelines
6 Friday, 5/2 @ 11:59pm M4: Preliminary Documentation
7 Monday, 5/5 OOP Design Patterns
7 Wednesday, 5/7 Refactoring
7 Friday, 5/9 @ 11:59pm M5: Prototype Presentation
8 Monday, 5/12 Special Topics
8 Wednesday, 5/14 Special Topics
9 Monday, 5/19 Special Topics
9 Wednesday, 5/21 Conclusion
10 TBD Final Deliverable

Course Staff

James Turk

Email: jturk@uchicago.edu

Office: JCL 398E

Teaching Assistants

TBD

Office Hours

TBD, will be scheduled with each team

Please schedule additional time as needed: https://cal.com/jamesturk