Feb 05, 2025
Northwestern CS394 Spring Software Engineering Course for 2025

Introduction and Overview
In the spring of 2025, I will again be teaching CS394 at Northwestern University in Evanston, IL. The course will focus on answering and exploring the question, how do we best work in teams to build software reliably and predictably that users love. With few exceptions, most software is built by a team of people working together, whether that is in a company or as part of an open-source project. Since the 1960s, a significant branch of computer science, software engineering, has explored tools and methods for humans to work better together to produce machine code that solves problems. In the early 2000s, a significant breakthrough in team software development, which built on lessons of the previous decades, was the creation of agile methodologies and the drafting of the agile manifesto.
The course I will teach will have a very similar structure to Chris Riesbeck’s 394 Course. We will have two team projects as the significant focus of the course. The first will be a startup-like project in React and Firebase. The second will be a client-oriented project where software is developed on behalf of a ‘customer’ outside of the students. Our second project will also explore issues with multi-agile team development.
What is required to take the course
Students should have done some significant programming. A good knowledge of data structures and experience working in multiple programming languages is essential. The course projects will require software development from every student in JavaScript/TypeScript and the React framework. We will use Google’s Firebase as our backend database. Students also should be prepared for significant time to coordinate with their teams (And in the second project) with their clients outside of course times. How well you show up and perform with your team is fundamental to success in the course.
Learning React and JavaScript/TypeScript will not be covered in the course syllabus, and students are expected to have this experience or pick it up in the process of developing their team projects. Resources will be provided for students to learn these technical pieces on their own. Likewise, source code control using Git and GitHub will be used extensively in the course for software development. Basic Git skills are not covered in the course, but resources will be provided.
That said, I am developing a set of exercises, based on feedback in the CTECs from last year, for students to up their technical game around web development. The goal will be that all students who complete the course will be able to successfully pass the technical aspects of an interview as an intermediate-level React Developer.
A common survey is used for CS 394 to get into the course and the survey is available on the CS 394 Course Page for admittance. Let us know if you have preferences between the courses. My class will be Tuesday & Thursday at 9:30 am, and Professor Riesbeck’s 394 is Monday & Wednesday at 9:30 am. Students will need to coordinate times to meet with their team outside of class as well to work on the project. Students will be expected to be in each class on time in person. (See FAQ below).
Some more on Professor Warren
This site provides a pretty complete background on me in the profile on this site. I’ve been teaching off and on at Northwestern for more than ten years. I taught software engineering last year, and elements of CS394 also existed within the NUvention Web course I team-taught for more than 15 years. I’m a “pracademic”—that is, most of my approach is based on my work experience at big companies (Microsoft and Ford Motor Company) and startups. Most recently, I was involved in leading software at Ford Motor Company, where I was responsible for all in-vehicle software, connected cloud systems, and mobile applications. I will also be co-teaching a course in corporate innovation for the second year in the Farley Center for Innovation and Entrepreneurship.
Guest Speakers
We will have a few guest speakers, some in person, some on Zoom for short Q & A’s, though most learning will come from building projects in teams. In particular, we may have guests who have led software products at major tech companies, many of whom will be former students. Jeff Henshaw, who was on the X-Box Founding team (but not an NU alum!), is confirmed for one of our May classes (he will also speak in an open class in Corporate Innovation).
FAQ
When is the course?
The course is scheduled for Tuesdays and Thursdays in person at 9:30 am. Room TBD.
How can I take the course?
The course is by permission only. Dr. Riesbeck and I use a common 394 application form, which is available on the CS 394 Course Page. Priority is given to those who are CS Majors/Masters, towards the end of their NU degree program, and those with web programming experience.
How is the course the same or different from Professor Riesbeck’s CS394?
They will be very similar. Dr. Riesbeck and I have taught together in NUVention Web, and the syllabus for spring 394 is a second derivative of his.
The two biggest differences are the following:
-
I recommend developing in TypeScript and will provide a starter for the first project.
-
The second project has a client like Professor Riesbeck’s, but it is done by multiple teams who coordinate to serve a single client. This is to get some ‘real world’ experience with managing the interdependencies of teams in developing software. Students were positive on this approach last year and recommended continuing the approach in future classes.
I will also have some additional labs, which Prof. Riesbeck sometimes has for skill-building in React and related tools (testing, AI-assisted coding, likely a monorepo lab).
What will I get out of the course?
You will learn tools and techniques for building software in groups; and more importantly, you will get the experience of applying those concepts experientially with your team—learning by doing. This is not a lecture oriented course. You will leave the class with opinions and experience on how best to run a team software project; perhaps a technique or two you will introduce to the next software team you are part of. You will get a project you will have completed with your team you can talk about. You will likely also build a strong connection with one or more members of your team. If you are engaged with your team, project, and the labs, you should exit the class with enough knowledge to pass an entry level ‘full stack’ interview in industry.
Is the class recorded? Can I be remote?
The class is in person, and to receive full points, students must be on time and attend each class. The classes will be recorded. A full attendance and grading policy will be provided in the syllabus.
What textbook is required?
The Agile Samurai by Jonathan Rasmusson
What programming knowledge do I need to take the course?
It’s recommended students complete CS214 and another substantial programming course in any language before this course. Familiarity with web technologies, including JavaScript, CSS, HTML, React, and database technology, will be required for the projects and is not covered directly in the syllabus. All students will be required to write software in React and JavaScript/TypeScript in the course. Every student must check in some code to their project under their GitHub ID to get a good grade in the course. If you want to get started, look through Professor Riesbeck’s excellent set of resources.
Can I audit the course?
Since most of the course is project work in a team, auditing the course isn’t permitted.