Cloud-Scale Software Engineering

CPSC 639, Yale University, Spring 2017

Meetings:Fridays 1:00pm-3:45pm
Lecturer:Eric Koskinen
Office Hours:Fridays 3:45pm-5:00pm (or by appointment)

Course Summary

This course teaches students engineering methodology, design and implementation skills that are needed for developing software systems that may span a range of scales, from desktop/mobile applications to cloud-level distributed systems. The course will begin by covering software engineering foundations including the software lifecycle, software engineering models such as extreme programming and agile development, design patterns, modularity/reusability, version control, multi-threaded design, sockets, and file I/O. The latter portion of the course will extend these foundations by focusing on software scalability and reliability. To this end, we will examine distributed Cloud platforms and cover Cloud-specific concepts such as MapReduce, key-value stores, and log-based platforms. The course will emphasize the practical engineering of real software systems. Students will work in teams to complete a few multi-week projects and a significant semester-long project.

The approximate breakdown of grading will be:

  • Expected attendance at all lectures
  • 20% Homework
  • 10% In class mid-term exam (tentatively: March 10)
  • 10% In class final exam (May 6, 2pm?)
  • 60% Project

Course Goals

  • To understand the role of software in computer systems
  • To understand the importance of software engineering practices
  • To accrue basic software engineering skills
  • To gain experience working in a team, developing a significant software system
  • To understand the power of cloud computing and how to tackle cloud-related challenges

Course Pre-requisites

CPSC 323 (Systems Programming & Computer Organization)

Course TextBook

Engineering Software as a Service: An Agile Approach Using Cloud Computing


  • Weeks 1-3: Process, Planning, Estimation, Risk Management
  • Week 4: Software Requirements
  • Week 5: Architecture
  • Week 6: Design & Modularity
  • Week 7: Formal Methods
  • Week 8: Coding
  • Week 9: Quality Assurance
  • Week 10: Analysis
  • Week 11: Scalability & Reliability 1: Distributed Systems
  • Week 12: Scalability & Reliability 2: Cloud Computing concepts and data-types MapReduce, key-value stores, and log-based platforms.
  • Week 13: Scalability & Reliability 3: Log-based Cloud platforms