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.
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 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:
- Complete the homework assignments. Study the assigned chapters in the textbook, take self-check quizzes, and write code for the Coding/Hands-on Integrated Programming activities (CHIPS) individually. We will not use our precious class meeting time to cover everything taught in the textbook. Instead, we will focus on discussing the most important topics. To truly make this course work, you must be prepared to conduct much self-studying. Of all CHIPS assignments, five will be graded, totaling 50% of your course grade.
- Complete the final project and demo. The final project is essentially a mini-startup project. You are expected to build a SaaS product and launch it. In terms of ideas, you are encouraged to come up with an idea of your own, which the teaching staff will help refine. Alternatively, you can choose one of the startup ideas we suggest. During the semester, your team will propose your project and turn in two iterations of the SaaS product. Towards the end of the course, we will have a Demo Day event (over two class meetings) where all teams pitch and demo their products. Each team will submit code, documentation, data, URL to your product, and pitch deck during the finals week. This project is a semester-long project: you and your team need to make constant progress throughout the semester, so that you can do iterations and build a good SaaS product. Your team will fail the final project badly if you spend no time on it during the semester and count only on the final push. The project will be 50% of your course grade.
- Participate in discussions. Our class meetings will include not only lecturing, but also discussions. The teaching staff will ask pointed questions. You are also welcome to bring the problems you encounter when working with your potential customers into the class meetings. There will also be much discussions on the online discussion board, ranging from students helping each other solve Rails setup issues to providing constructive feedback on each other's SaaS products. An up to 10% extra credit may be given to the students who actively participate in online and/or in-class discussions and make significant, insightful contributions throughout the semester. There is no set number of these awards, but you should think of the awardees as students who have stood out consistently and improved the course significantly -- those who you would potentially seek out as your co-founders.
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%
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 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.
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.
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.
If you disagree with any grades, submit your grievance via a private post to all teaching staff on the online discussion board, 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 online 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.
Teams are formed based on mutual preferences of the students, and we expect all team members to contribute their best. However, on 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 note on the online discussion board 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 note on the online discussion board.