Note that this website covers both 324 and 326. Most of the material will directly apply to students in 324. Students taking 326 should consult with the instructor and refer to the syllabus for CSC 326.

Important Note!!

Since this course includes an experiential learning component that takes place off-campus, F-1 Visa holders must secure Curricular Practical Training authorization through the Office of International Student Affairs before the projects start.

Additionally, depending upon the project to which you are assigned, you may also need to consent to a background check as a volunteer working at that site.

Class Meetings (Fall 1 2020)

The course will be entirely online, however, you should reserve the stated class times for synchronous class activities, and the lab time is reserved for team meetings and work time.

Class meeting times:

TBD but probably M – F for 110 minutes each.

I will work to be as flexible as possible (with recorded lectures and asynchronous participation options), but some synchronous classes and meetings will be required and marked on the schedule as [Required].  These will be few, but they are significant, such as your team’s final presentation via WebEx.  Missing a required session will negatively affect your grade!

Please refer to the schedule for the topic of the day and for links to the daily activities.  Each day should have a page that outlines what you need to do (in approximate order).  Whenever it makes sense, the checklist will include links to the readings, assignments, video lectures, online class meeting room, online discussions, etc.  Each page will also have resources that are suggested either as alternatives as a way to learn more about the topic.  These resources are optional!!


Barbara Z. Johnson, Ed.D.  (she/her/hers)
Noyce 2811
See website for additional details.

Course Description and Overview

This course combines software engineering theory with hands-on practice on a real project prototype that is being created in a team for a community partner.  Theory is emphasized in the first few weeks of the class, and then you will progress to working on the team project for the majority of the week.

About 1/3 of the course will focus on software engineering and design principles, especially Software as a Service (SaaS) and software development models (especially Agile). These may not be directly applicable to the team project, but they form a theoretical basis for work on large-scale projects and introduce concepts and terminology that you will encounter in the software development industry.

About another 1/3 of the course will focus on technical skills applicable to the development of web-based solutions using the Ruby on Rails framework.

The rest of the course focuses on the application of these ideas and tools as you  work in teams to build software prototypes that support local community organizations while we revisit principles of object-oriented design in context.  Thus, a large component of this course is a practicum in which you will work with each other, with alumni mentors, and with non-profit organizations and Grinnell College departments (who function as clients).

Learning Goals

  1. Apply Agile software development methodology, tools, and practices in real-world team projects
  2. Contrast Agile software development with plan-and-document methodologies
  3. Build SaaS applications with the Ruby on Rails framework and apply those skills on a large-scale project
  4. Gain experience with the complexities of real-world software development:
    • communicating with clients
    • working as part of a team
    • self-directed technical learning
    • creating a substantial project from scratch, or learning and extending an existing code base
    • making design decisions that may have long-term consequences
    • managing a large code base
    • addressing pragmatic and ethical dilemmas

You will be able to draw upon these experiences in pursuing academic or industry positions. By storing your source code through GitHub, you will make a substantial beginning or addition to your professional portfolio. In addition, you will develop professional skills and perspectives.


Required Texts

  • Hartl, Michael. (2020). Ruby on Rails Tutorial 6th Edition (Rails 6).  The first few chapters of the ebook are available for free, but this may change at any moment.  It is highly recommended that you purchase the book and create an account at in order to access the most up-to-date information.  Hartl often grants discounts and scholarships to students up on request; so don’t be afraid to email him. Note: There are some substantial differences between Rails 5 and Rails 6.  If you use an old version of this book, there will probably be times when you be confused.
  • Sommerville, Ian. Software Engineering (10th Edition).
  • Additional readings will be assigned during the semester, usually as links to online readings.

Recommended Resources

  • Head First Ruby by Jay McGavren
  • James Shore and Shane Warden (2007) The Art of Agile Development.

Also, check out the success tips from the students from prior courses.

Submitting Work

Most assignments will be submitted through our course in Pioneer Web, especially during the first half of the course. In-progress scores can be found in the Pioneer Web course grade center. I will do my best to get assignments graded and feedback returned within 3 – 4 days after submission.

For teamwork, only ONE report per team will be necessary.

This class will be challenging and should take at least 20 hours of work per week. Some of the work will be done during class meeting times, but you should plan to spend about 10 hours outside of scheduled class and lab periods,  in addition to class meeting times. Each week, some time will be spent on learning software design principles and software engineering practices, some time will be focused on learning a variety of languages and related frameworks, and the rest will be available for work on the individual or team project.  Hence, it is very important that you attend class meetings and work with your development team to arrange out of class meetings and work sessions.



  1. Do the reading for the day BEFORE class. This way, you can ask questions and contribute to the discussion.
  2. Reading journals are due by the 10:30 pm on the day they are due.
  3. Come to online class and lab meeting times. This will be especially important as we begin to work on the team projects. If you cannot make it to class, email me and your team as soon as possible!  See also the policy on absences and lateness below.
  4. Do NOT record your classmates or share video, audio, or text discussion responses outside of PioneerWeb.  In order to learn, we need to trust each other and know that mis-steps along the way to developing mastery will not be distributed outside of class.
  5. Work with your team, both during class meeting times and outside group project times. If you cannot make it to a group meeting or work session, inform them as soon as possible and negotiate a way to help the group meet its objectives for that sprint.

Dates and Deadlines

During this period of compressed time frames due to the pandemic, it is even more important that you submit assignments on time so that I can give you feedback before your next assignment is due!

Assignments are designed to aid your learning and also to help me gauge how well the class as a whole is understanding the material. Therefore, I want you to do assignments and hand them in, even if they are late. So, you may hand in assignments past the due date & time, but you will receive a lower score. I will subtract 10% per day from the points you would have received if it was on time. In reality, this only will apply to assignments that are done individually.

If you do not appear when your team makes a presentation or you do not contribute to a team report, your team will have the opportunity at the end of the term to rate your performance as a team-mate, and that will affect your final grade.

When turning in group work, please turn it in on time, even if it is not perfect. It is far more important that I see how your team is doing — the good and bad — than it is to try to make it look, or sound, better.

Emergencies and Illnesses

Although dates for homework, reading journals, reports, and the final project submissions are firm, I understand that circumstances arise when you are not able to attend class. If you cannot attend class, you must let me and your team know as soon as possible since this will impact the work your team needs to accomplish during the current sprint.  You are also expected to understand the material that was presented in class. Even an excused absence does not excuse you from learning the skills and concepts.

When circumstances are known ahead of time (e.g., academic activities, athletic events, religious holy days), I expect you to make arrangements with me before the activity occurs. Normally, we will identify an alternative date for the due date.

When circumstances cannot be reasonably anticipated (e.g., illness, family emergencies, serious injury, etc), I expect you to notify me as soon as is reasonably possible. (Email is fine.) In the case of medical problems that require you to miss several classes or request multiple extensions on assignments, I expect a written note from a medical professional or counselor that indicates that your health interfered with the course activity. (I do not need to know any details of the medical problem, but I do need to know that you sought help and that the medical professional believed meeting the deadline would likely interfere with your health.)   OR, you may work with academic support staff and have them contact me on your behalf.  Keeping in contact is especially important when taking an online class.  

Absolute Deadline: All homework must be turned in by the last date of finals by the time specified by the Registrar (usually 5:00 pm, although it may be pushed back to midnight); submissions received after that time cannot be counted in the grading of the course without a formal extension (requested through the Registrar’s Office).

Absences and Lateness

Your classmates and teammates depend on your contributions to learn new material and complete the required work for this course. Don’t let them down! You are expected to participate actively every weekday, even if you cannot join us “in class”!!

I encourage students who plan to observe religious holidays that coincide with class meetings or assignment due dates to consult with me in the first three weeks of classes so that we may reach a mutual understanding of how you can meet the terms of your religious observance and also the requirements for this course.

If you need to miss more than two class periods or need multiple assignment extensions for an exceptional reason (e.g. to attend an academic conference, deal with a family emergency, or due to long-term illness) please talk to me as soon as possible and we will make an alternate arrangement.

If the attendance policy raises accessibility concerns for you, please let me know and I will work with you on alternatives.  This is especially important if you are in a time zone that makes attendance very difficult.


Throughout the course , I may ask you to break out in Collaborate (or WebEx?) into random groups for small group discussions and to work on in-class assignments.  This is to encourage you to meet new people and get different viewpoints on the material during discussions.

You will be assigned to work with a team of 2+ other people in order to develop web-based software for a local “client” that is a non-profit organization or staff/faculty of Grinnell College. Depending upon the current availability of clients, you may be extending existing code or starting a new project.

During Week 1 or 2, we will give an overview of the projects we have available this term, and each student has the opportunity to rank their interest in each project AND preferred team meeting times (using US Central time as our reference time zone).  You can also request to work with specific students.  Using this information, I will create teams and let you know your assignment within a couple of days.

We have alumni mentors who support each team’s development efforts.  They maintain contact with the team during the term, using remote meetings and other digital communication services.

Academic Honesty

Please take a moment to review the Computer Science Department’s Academic Honesty Policy. This course is one important and practical step on your transition to becoming practicing computer scientists, whether you plan to work in the industry or continue on in academic research. Since we will be creating software that will be published and used by clients, you must practice appropriate attribution habits so that they become second nature. Failure to do so may cause embarrassment  and lawsuits in the “real world” (see Sam’s excellent exposition on the subject since I don’t think I can say it better). While we are here in class, forgetting to credit a source or a collaborator may be cause for disciplinary action.

There are two main categories of assignments in this course. Individual assignments are the Reading Journals (RJ), Homework (HW), and and your Ethics Paper. I expect that you will write up your own answers and not copy from anyone else. If you ask anyone else (other than me) for help, proofreading, or comments, you must cite the person. If you go to another online or written source (other than our textbooks or other listed resources), cite it. When in doubt, cite!! You may use any standard citation style you like.

Most of our work this term will be done collaboratively. Be sure to list everyone who works on code, documents, reports, and presentations with you.  You only need to turn in one copy of an assignment for the whole group.  You will “turn in” your portfolio as well, and these documents should cite everyone who worked with you to create each item in your portfolio.  It is also very important to include citations for books or online sources that you used as reference material.  Again, when in doubt, CITE!


Grading will be done on a fixed scale:

Letter Grade down to % cutoff
A 93.0
A- 90.0
B+ 87.0
B 83.0
B- 80.0
C+ 77.0
C 73.0
D 63.0
F anything < 63.0%

Grades in this class will be based on:

  • Individual work on reading journals and homework assignments
  • Team reports, plans, and presentations
  • Progress on the team project through several sprints
  • Feedback from team and self evaluations

Category Weighting:

10% Class Participation
10% Reading Journals and Discussions
15% Ethics Paper
10% Homework
15% Portfolio
10% Team Charter, Memo of Understanding, and Team Reports for each sprint
10% Presentations
20% Project (which includes the self and peer evaluation scores)

Accessibility and Inclusion

My goal is to create a learning environment that supports the learning needs of all students. If you have specific physical, psychiatric, or learning disabilities and require accommodations, please let me know early in the semester so that your learning needs may be appropriately met. You will also need to have a conversation about and provide documentation of your disability to the Coordinator for Disability Resources, John Hirschman, located on the 3rd floor of Goodnow Hall, 641-269-3089.

Religious Observances

Grinnell College offers alternative options to complete academic work for students who observe religious holy days. Please contact me within the first three weeks of the semester if you would like to discuss a specific instance that applies to you. Since this class will incorporate class discussions and working sometimes in pairs or groups, it is important that I know you will be absent ahead of time so that I can adjust the assignments!


Neither teaching nor computer science are solitary pursuits. This syllabus and all course materials have been prepared in conversation with and adapted from the example of many generous colleagues, including but not limited to those who have taught prior iterations:  Dr. Janet Davis, Dr. Barbara Johnson, Dr. Sam Rebelsky, and Dr. Anya Vostinar.