W4995 Engineering Software-as-a-Service

Fall 2021 -- Junfeng Yang

  • Location: Math 207
  • Time: TTh 8:40am-9:55am
  • Credits: 3
  • Instructor: Junfeng Yang
  • Address: 519 CSB
  • Office Hours: By appointment
  • TA: Frances Cao
  • Office Hours: M 5:30-6:30, Sat 11-12
  • TA: Mohar Chatterjee
  • Office Hours: MW 2-3
  • TA: Tiffeny Chen
  • Office Hours: Th 11:30-12:30, Sat 2-3
  • TA: George Cherian
  • Office Hours: MW 11-12
  • TA: Aaron Jackson
  • Office Hours: Th 5-6, F 10-11
  • TA: Andreas Kellas
  • Office Hours: T 10-11, F 1-2
  • TA: Akhil Ravipati
  • Office Hours: TTh 2-3
  • TA: Chengrui Zhou
  • Office Hours: TW 4-5
  • Please contact staff through Piazza only

Course Description

In 2011, Marc Andreessen penned a famous Wall Street Journal article “Why Software Is Eating The World.” Almost a decade later, software is still eating the world. Companies like Google, Amazon, Uber, and Airbnb are revolutionizing entire industry sectors, and even traditional enterprises have to embrace this transition to software and automate numerous tasks within their organizations in order to remain competitive.

This software revolution is driven primarily by two technology trends. On the client side, billions of users now own computers and smartphones with broadband Internet access, providing each of them “instant access to the full power of the Internet, every moment of every day.” On the backend, cloud services and readily available software tools vastly simplify creating software startups in many industries, without the need to invest in infrastructure or employee training. For instance, when WhatsApp was acquired by Facebook for approximately $19.3 billion dollars, it powered hundreds of millions of users worldwide but had merely 50 employees.

These technology trends not only enable software to flourish, but also fundamentally change our software engineering process. Broadband access enables developers to run their software in the cloud for users to access via browsers or mobile apps -- so-called Software-as-a-Services (SaaS). The developers of SaaS products continuously gather user feedback and behavior analytics, quickly refine existing or build new product features, and deploy to production in matter of minutes to test out their ideas -- so called Agile Development. This style of close collaboration with customers and fast iteration of product ideas is in stark contrast with how software was engineered two decades ago.

In this course, we will study modern software engineering practices including including topics such as SaaS architecture, behavior-driven development, Ruby on Rails, and Dev/ops. For details on the topics we will cover, please check out the Course Syllabus page.

Course Goals

The general goal of this course is to help you learn the skills and practices to build modern software products and services. We believe that the tremendous advance in technology now makes it much easier to create software products today.

If you are interested in creating a startup soon, we hope this course will prepare you for your entrepreneurial adventure. Better yet, the final project you do may turn out to be the next unicorn! Nowadays software builders tend to be the best founders given their skills and passion to build software that help others.

If you have no immediate plans to start a company, we hope the skills you learn in this course will better prepare you to be a software engineering leader well-versed in modern software engineering practices.

Course Format and Student Workload

This course will center around lecturing, individual assignments, and a final project done in teams of three four . We will meet twice per week where the teaching staff will talk about topics on engineering SaaS. You will work on intensive reading and programming assignments individually. There will also be a semester-long final project where you and two teammates will together build a working SaaS product and launch it by the end of the semester.

You have three main responsibilities in this course:

You should not take this course if you cannot commit to the above responsibilities.

Course Grade Breakdown

50%: Five graded CHIPS programming assignments, 10% each.
50%: Final project, 10% for each of the project proposal, iteration 1, iteration 2, demo, and final submission.
10%: An up to 10% extra credit may be given to the most active contributors to our discussions.
0%: There will be no exams.

Expect grades not to be curved. Grade Buckets:

100% <= A+
90% <= A < 100%
80% <= B < 90%
70% <= C < 80%
60% <= D < 70%
0% <= F < 60%

Prerequisite

COMS W3137 Data Structures and Algorithms, COMS W3157 Advanced Programming, and COMS W3827 Fundamentals of Computer Systems; or equivalents of these three courses.

Strong prior experience with Object-Oriented programming languages such as Python or Java is required.

Strong independent study skills are required.

Prior entrepreneurial experience is a big plus.

Enrollment

Enrollment for this class will be limited. Please register early if you plan to take this class. Please make sure you meet the prerequisites before registering. If you are waitlisted, please come to the first two weeks of the class because slots typically open up.

Materials

The only textbook we will use is Engineering Software as a Service: An Agile Approach Using Cloud Computing, 2nd Edition. The free PDF version suffices. There is a ton of free resources available from the the textbook website. You will also have access to a revised version of the textbook on Codio along with the CHIPS assignments. All other materials will be made available at the Course Syllabus page.

Collaboration / Copying Policy

Please read Computer Science Department’s Academic Honesty Policies & Procedures and Columbia College and Columbia Engineering’s Academic Integrity before you proceed.

We encourage you to help one another in understanding the concepts and principles needed to do the homework assignments and projects for this class. However, what you turn in must be your own, or for group projects, your group's own work. Copying any part of other people's code, solution sets, or from any other sources is strictly prohibited. The homework assignments and projects must be the work of the students turning them in. Anyone found violating the class collaboration policy will be punished severely.

You must explicitly cite all sources of information that you reference as part of your homework and project submissions. For each citation, you should describe how that source was referenced. You do not need to cite conversations with instructional staff or the course textbooks, but you should cite everything else, including any conversations with other students related to the homework assignments, and any websites used. Referencing any uncited sources other than the course materials is considered cheating.

All students or groups who are determined to submit work that violates the class collaboration policy will receive a receive an F for the course for the first offense. That is, we have zero tolerance of such violations. More serious cases of cheating, such as copying someone's work without their knowledge or cheating on exams, will result in the person cheating not only receiving an F for the course but also being reported to the Dean's office, which may result in further disciplinary actions, including suspension or expulsion from the program. Penalties will be given without discussion or warning; the first notice you receive may be a letter from the Dean. Note that you are responsible for not leaving copies of your assignments lying around and for protecting your files accordingly.

Late Policy

There will be no deadline extensions. For individual programming (CHIPS) assignments, there is a 72-hour grace period, accumulated over all assignments, for which you will not be downgraded. Lateness is accounted at hour granularity (e.g., 1 second late == 1 hour late). Once you reach 72 hours of lateness, the next assignment submitted even one-second after the corresponding deadline will be graded zero. Thus, we strongly recommend you to submit on time, even if with an imperfectly running solution.

If you have an illness or emergency and request an exception to this policy, you must notify the teaching staff before the deadline with your timeline for turning in the work as well as requesting a letter from one of your student deans explaining the circumstances. We cannot extend the deadline past three days.

No late group project assignments will be accepted. Students are given plenty of time to work on their projects. Our proposal and demo events will happen in class and therefore cannot tolerate any late submissions.

Grading Policy

If you disagree with any grades, submit your grievance via a private post to all teaching staff on Piazza, documenting the merits of your case. The grader responsible will respond likewise via private reply. If you are still dissatisfied you may appeal in like manner to the instructor, who will only examine the Piazza record of the dispute, and will respond via private reply. For a grade dispute to be considered, the written grievance must be submitted in writing within two weeks of when the respective assignment grade is released.

Teamwork Policy

Teams are formed based on mutual preferences of the students, and we expect all team members to contribute their best. However, in rare occasions, free riding does occur. Team members should try to resolve this issue internally first. If free riding continues, team members should send the teaching staff via a private Piazza note documenting the free riding issues and failed attempts to resolve them internally. The teaching staff may reassign the free rider to a solo team or lower their grade accordingly.

Open Door Policy

We would like the course to run smoothly and enjoyably. Feel free to let us know what you find just, good, and interesting about the course. Let us know sooner about the reverse. See us or leave us a private Piazza note.