Framework: Software Design & Development Course

  • All text, course design, and development done by Eliott: no GenAI use – not even for brainstorming.

I have taught multiple versions of a Software Design and Development course since I joined Grinnell College in 2020. After experimenting with different programming languages, thematic focus, and individual and group project formats, I developed and adapted frameworks that I find successful and hope will help other instructors.

Here is the spring 2026 syllabus, and here the course page. I am using AI as a motivating theme to:

  1. Provide students with a brief glance at the foundations of AI and RL techniques (since not all of them will have the opportunity to take an AI course).
  2. Motivate the importance of separation of concerns and exemplify modular programming (through labs that are inspired by robotics and multi-agent reinforcement learning frameworks).
  3. Illustrate specific uses of GenAI tools.
  4. Contextualize ethical discussion and carer readiness.

1. Book choice: After many diggings, I finally found a book that translates the importance of concepts very well: The Essence of Software: Why Concepts Matter for Great Design. Daniel Jackson. There is also a wonderful ACM talk: The Essence of Software (Or Why Systems Often Fail by Design, and How to Fix Them) with Daniel Jackson.

Other books that I am currently using are:

  • Ian Sommerville’s resources to teach about software engineering and software failure (the Ariane launch failure provides profound reflections and learning experiences).
  • Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring, John F. Dooley.
  • Fundamentals of Software Architecture: An Engineering Approach. Mark Richards
  • Core Java, Volume I, newest Edition, Cay S. Horstmann, Gary Cornell.
  • (In previous iterations, when I applied a data visualization focus, I used Visualization Analysis and Design, by Tamara Munzner.)

2. Communication. The course emphasizes communication skills (such as active listening, client meetings, and demonstrations) and collaborative practices and software development settings (Scrum).

To reflect on ethical issues and develop systems-thinking skills, I use Jigsaw reading, followed by student-led discussions and activities in various formats. For example, to practice with software architecture concepts, I ask them to architect an automatic entry door and a vacuum cleaner (videos from the Vacuum Wars channel are particularly fun). To practice systems-thinking skills and dealing with abstraction, I have been combining user stories with scenarios such as: Dealing with 1. Security concerns in an amusement park, and 2. Energy consumption at a hotel. Depending on the instructor’s goals, the UX challenges provide insightful activities.

I also require them to reflect on the content and write about it, answering my guiding questions in the Background Journal deliverable, and this year, I will add a Dev Journal. My goal is for them to reflect on their growth as software designers and developers and, most importantly, reflect on the usage of genAI tools. Although in the majority of the programming labs the use of GenAI tools is forbidden, there are at least three activities in which I ask them to use GenAI tools for different purposes (my goal is not only for them to develop expertise in using these tools but also to identify what uses make the most sense, or not, to them).

3. Career Readiness. I run a “CV lab” day in which I provide tips and multiple resources to help solidify career readiness. I noticed that students have been so busy with courses and other academic commitments that career readiness often falls to the bottom of their “time budget”. Thus, I decided to explicitly make career readiness a deliverable (Here is the one from last year).

4. Individual project. Students appreciate the opportunity to have an open-ended project that they can add to their technical portfolios. I give them the option to either use or not a GenAI tool (here I provide the Individual Project description). Over the course of a few weeks, I provide activities to scaffold their individual project development, such as: elevator pitch, project scope, peer software testing, class presentation, and demo video.

5. Group Project. Having worked with different formatings, the one that has been working well is having me as their technical client. Before the semester begins, I craft a few topics and then adapt them based on what I observe in students’ preferences. My approach to determining project topics has focused on providing a dual experience: one that builds on a research paper, while also being generalizable and useful in industry settings.

As soon as students start working on their projects, they are instructed on how to identify and contact alumni to ask for mentoring and feedback. Identified alumni must be knowledgeable about the group project, and during the weekly Demonstrations, students are required to report on their interactions with them. It is always exciting to learn what connections students made between their project topics and alumns expetise.

After each demonstration, I meet with each group to provide specific feedback and instructions for the next sprint. These interactions provide unique, concrete experiences for students to showcase and illustrate their achievements with recruiters.

Out of curiosity, see below a few project topics from last year. And here is a page I created to showcase the students’ project outcomes; thus, at the end of the semester, they fill out the OnlinePresence document, which informs what gets published.  And of course, we apply Scrum.

  1. Simulating the Retinal Image of Visual Scenes on Nonhuman Eyes.
  2. Magnus Effect and Football
  3. A Computational Model Multiple Representations
  4. Networked Agents and Public Goods Games (PGGs)

One of the most useful frameworks I have found to help prevent free-riders in the group project is the CRediT table from the Software Impacts journal (which was inspired by Publishing: Credit where credit is due, by Liz Allen, Jo Scott, Amy Brand, Marjorie Hlava & Micah Altman). Inspired by those resources, I adapted it to my class and require students to report weekly on their contributions using the Individual Contributions Log Report (I compare what I observe in class with the entries and weekly demonstrations). That not only helps with accountability, but many times students want to contribute but are not exactly sure how; thus, the Contributions Log’s concrete examples help situate inexperienced students and give them concrete, actionable ways to contribute. In addition, I use a Professional and Scientific Conduct document to ground our practices.

  • Note: I just launched this page (spring 2026), and I plan to update it during the fall semester.
  • You are welcome to adapt this content to academic settings, as long as you cite this page.