INFO 461 Cooperative Software Design

Instructor: Andrew Begel, Ph.D. email Andrew (Prof)
Teaching Assistant: Zubin Chopra email Zubin (TA)
Lab Assistant: Prof. Amy Ko email Amy Ko (LA)
email class
Quarter: Spring 2018


In this class, you'll learn how to think like a software engineer. You'll learn what software engineers do and how they do it. You'll also learn about the contexts in which a software engineer sits—a team, an organization, a market, and a society—learning to understand how your low-level engineering skills are connected to these larger contexts. By the end of the course, you should be able to enter any organization and understand the social and technical contexts in which you are writing software. If you want to become a great software engineer, this is the course for you.

To learn these things, this course has three major phases:

  • Two weeks of context setting about software, software engineers, and society
  • Five weeks of readings and skills on grand challenges in software engineering
  • Four weeks of software engineering practice

Additionally, we'll use the labs throughout the quarter to practice interpersonal skills critical to being a great software engineer.


You should aspire to be a software engineer or to work closely with them. Because we'll be building for the web, you should also know:

  • JavaScript, HTML, and CSS
  • How to build basic responsive, interactive websites
  • How to use Git and GitHub
  • INFO 343 or CSE 154 should be suitable preparation for the above.

Office Hours

I'm available to talk about jobs, careers, graduate school, research, class, and anything else. My office hours this quarter are Tuesday and Thursday 1-3pm in MGH 015, though occasionally I need to schedule things over them. To guarantee I'll be around, write me in advance to secure a time.

The TA will be available Wednesdays from 3:30pm—5:30pm at the Mary Gates Commons. For alternative appointments, email the TA to schedule a meeting.

Devices in Class

We will use smartphones and laptops throughout the quarter to facilitate activities and project work in-class. However, research and student feedback clearly shows that using devices on non-class related activities not only harms your own learning, but other students' learning as well. Therefore, I only allow device usage during activities that require devices. At all other times, you should not be using your device. I'll help you remember this by announcing when to bring devices out and when to put them away.

Teams, Repositories, and Releases

This quarter we have 8 teams:

Team Go! GitHub Site Try it! (Follow instructions on email invite from Harshitha).
Git Schwifty GitHub Site Try it!
Team TBD GitHub Site Try it!
LAVJ GitHub Site Try it!
KSJI GitHub Site Try it!
Three Musketeers GitHub Site Try it!
Pug Life GitHub Site Try it!
Pass-n-Play GitHub Site Try it! (Use your TestFlight invite instead of the App Store).


Week 1 — What is software engineering?
Week 2 — What do software engineers do?
Week 3 — Defining requirements
Week 4 — Specifying Code
Week 5 — How software engineers should work
(Andrew at Autism at Work Summit 2018 in Redmond, Washington)
  • Homework 4 due
  • Lab discussion (5 min)
  • Reading (30 min): Comprehension
  • Homework 5 (50 min): Process
Week 6 — Verifying Code
Week 7 — Evolving Code
  • Homework 6 due
  • Lab discussion (5 min)
  • Reading (30 min): Debugging
  • Midterm (30 min)
  • Homework 7 (50 min): Release
Week 8 — Sprint
  • Lab discussion (5 min)
  • Activity (110 min): Work time
5/19, 5pmNo class
  • Requirements freeze
Week 9 — Sprint
  • Lab discussion (5 min)
  • Activity (110 min): Work time
Week 10 — Sprint (Andrew at ICSE 2018 in Gothenburg, Sweden)
  • Talk: Great Engineers Build in Accessibility. Annuska Zolyomi (55 min)
  • Activity (55 min): Work time
Finals week
6/3, 5 pm (Sunday) No class
6/4, 5 pm (Monday) No class
6/5, 5 pm (Tuesday)No class
6/6, 5 pm (Wednesday)No class
6/7, 4:30pm-6:20pm (Thursday)Final in EEB 003


There are 100 points you can earn in this class:

  • Activities (17 points, 1 point each). Show up and engage to get credit.
  • Reading (28 points, 2 points each). Prove you read and understood the reading.
  • Midterm (11 points). Prove you know and can do everything from the first seven weeks of the class.
  • Project (44 points, team score). Reach several software engineering project milestones.

After rounding your points to the nearest integer, I'll map your 100 points to a 4.0 scale using the table below.

≥ 97 → 4.0 91 → 3.5 85 → 2.9 79 → 2.4 73 → 1.8 67 → 1.3 61 → 0.7
96 → 3.9 90 → 3.4 84 → 2.8 78 → 2.3 72 → 1.7 66 → 1.2 ≤ 60 → 0.0
95 → 3.8 89 → 3.3 83 → 2.8 77 → 2.2 71 → 1.6 65 → 1.1
94 → 3.7 88 → 3.2 82 → 2.7 76 → 2.1 70 → 1.5 64 → 1.0
93 → 3.6 87 → 3.1 81 → 2.6 75 → 2.0 69 → 1.5 63 → 0.9
92 → 3.5 86 → 3.0 80 → 2.5 74 → 1.9 68 → 1.4 62 → 0.8
Late work receives no credit unless you can provide a note from a health care professional documenting the reason for your absence. However, you can miss up to 3 activities without penalty and without documentation. This should be enough to allow for sickness, unavoidable travel, and other personal matters. If you miss a reading quiz due to absence, you can make up the quiz credit by either 1) writing a critique of the reading or 2) writing a summary of the reading and a description of what you found most interesting about it and how it relates to your own experiences, and submit it via Canvas within a week of the missed quiz. A critique should provide at least three improvements to the reading. These may be additional discussion points, points you think are wrong, or a correction to the article's spelling, grammar, or clarity. At most one improvement may be a correction to the article's spelling, grammar, or clarity.


Each day in class we'll practice some skill. You'll get 1 point if you engage in and complete the activity. How to get credit for the activity will depend on the activity; sometimes being present will be enough, sometimes being to class on time will be enough, and sometimes you'll have to turn something in.


Readings are due at the beginning of each lecture (twice a week). Each time, you'll need to come prepared to discuss two things: 1) the chapter written by Amy Ko and 2) a reading or podcast you've selected from the chapter's list of further readings.

The day that each reading is due, we'll do the following:

  • Share what you're confused about.
  • I clarify confusions.
  • I give you some questions to answer individually about the assigned chapter you read.
  • You turn in your answer.
  • You discuss your answers with your neighbor.
  • We discuss the correct answers as a class.

Your answer is correct, you'll receive 1 point. I will give partial credit for partially correct answers, at my discretion.

Selected Reading

Your selected reading assignment is your choice. Before class, read one of the articles linked in the reading. You'll see links to most readings in the chapter; they're in the ACM Digital Library, which UW gives you free access to while on campus. To gain access off campus, you'll need to use the UW Libraries proxy.

For an additional 1 point of reading credit, submit to Canvas a summary of between 200 and 500 words that:

  • Summarizes the point of the article. The summary should demonstrate that you have read the paper (and not just the abstract).
    • -0.5 pts if summary missing
    • -0.25 pts if summary is not thorough enough
  • Describes the thing you found most interesting about the article and explains why it is interesting. Connect the reading to your experiences, other parts of this course, your project, your interests, etc.
    • -0.5 pts if there is no mention of what is interesting
    • -0.25 pts if you fail to draw connections from the reading
  • Includes a citation to what you read.
    • -0.25 pts if citation missing

When reading the article, here are a few points to remember:

  • You don't need to read every word to understand the discovery in the paper.
  • Not all research papers are well written; expect some to be more accessible than others.
  • Read not only for the discovery of the paper, but the basis on which that discovery was made. Do you believe its result?

In class, after we discuss the assigned reading, we will:

  • Break into groups of four
  • Discuss your selected readings as a group, identifying one insight from the readings that connect with the topic of the day to share with the class
  • Elect someone to share the insights with the class.
  • We'll hear from 3-4 groups about their most interesting insight.

If you really don't want to read one of the readings I've selected, you're welcome to write me with a different recommendation. The reading you choose can be academic, or it can be an extensive blog post, video, or podcast that concerns the topic for the day.


The midterm will test your knowledge of the reading from the first seven weeks of class. Why include a midterm? It'll incentivize you to read more closely and retain what you read better. It'll also help me differentiate who really knows the material and who doesn't so that we may assign grades that best reflect your knowledge. It will cover every topic in the assigned readings and every skill practiced in class.

The midterm will consist entirely of true/false questions. (Fun!) Your final points will be 11 x fraction_correct. Also note that any questions that more than 60% of students in the class get wrong will be excluded from the final score as they were likely confusing or concern material that I taught poorly.


The project is split across eleven homework assignments, each worth a different amount:

  1. Design your organization (4 points)
  2. Design (4 points)
  3. Requirements (4 points)
  4. Specifications (4 points)
  5. Process (4 points)
  6. Verification plan (4 points)
  7. Release (10 points)
  8. Evaluate (2 points)
  9. Patch (2 points)
  10. Reflect (2 points)
  11. Project Presentations (4 points)

The goal of the project is for you to practice planning and executing a software engineering project in order to experience the nuances of setting up processes, constraints, and plans for an organization. Note, however, that because the timeline for the project is so short, it won't give you a deep, longitudinal experience with software engineering, nor will it give you practice with massive complexity or scale. I believe these kinds of experiences are best left to practice in industry, as they're very difficult to replicate in the artificial setting of a university.

Note that in the final three weeks of the course, we'll use class time primarily for team meeting time. The TA and I will be available as consultants to help you debug, do research on libraries, and provide advice on implementation efforts. You are not required to come to class those days, but I highly recommend using the time for team coordination and help.