W4156 Advanced Software Engineering

Spring 2020 -- Junfeng Yang and William Reinisch

  • Location: IAB 411
  • Time: T 12:10pm-2:00pm
  • Credits: 3
  • TA: Vikram Nitin
  • Office Hours: TBD
  • Instructor: Junfeng Yang
  • Address: 519 CSB
  • Office Hours: By appointment
  • TA: Amogh Gupta
  • Office Hours: TBD
  • TA: Yu Jian Wu
  • Office Hours: TBD
  • Email: software-course@lists.cs. Best way to reach us.

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 through an entrepreneurial lens. In particular, we will study how to engineer a SaaS product, including topics such as customer discovery, behavior-driven development, Ruby on Rails, and Dev/ops. For details on the topics we will cover, please go to 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. You will learn not only relevant engineering skills, but also necessary business skills such as how to interview customers and gather early feedback for your ideas. We believe that the tremendous advance in technology now makes it much easier to create software startups, and that software engineers tend to be the best founders given their skills and passion to build software that help others.

If you are interested in creating a startup soon, we hope this course will prepare you for your entrepreneurial adventure. Better yet, the course project you do may turn out to be the next unicorn!

If you have done research for example as a PhD student and created technology that you think has commercialization potential, we hope this course will teach you the skills needed to turn your technology into a useful software product and gain traction.

Even 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 who not only is well-versed in modern software engineering practices but also has a keen business and product sense.

Course Format and Student Workload

This course will center around lecturing, online self-studying, and a final project . We will meet once per week where the teaching staff will talk about topics on software entrepreneurship. You will conduct intensive self-studying by taking Berkeley's Agile Development Using Ruby on Rails courses (basics, advanced) on edX. There will be a semester-long course project where you and your team will 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.

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 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. The Kindle version suffices. All other relevant materials will be made available online at the Course Syllabus page.

Grading

20%: Class participation.
20%: Assignments including two iterations of your SaaS product.
60%: Final project including the SaaS product you build, the demo and pitch deck, code, documentation and relevant data.