While I was reflecting over my internship this summer, I started to think about the things I wish I had learned in school to maximize my learning experience as an intern. I spent a month at Oursky, where helped the company improve its JS documentation for Skygear by following their guides to build my own todo app.
My learning curve was steep because we didn’t learn JS in my CS classes. Most of my CS courses focused on algorithms and theory and projects only required us to fill in certain algorithms we learned in class rather than creating projects fresh and learning about the mechanisms that go into creating a product.
After a lot of setbacks and fumbling with JS from scratch, I developed my to-do app using ReactJS with Skygear as a backend. The hardest part wasn’t the tools, but learning about how to work on a product.
Here’s the course I wish our school would offer to all CS students to help them work in startups and just any tech company that needs to build products.
CS401: MVP Development Syllabus
Course quota: 5 Groups x 3 members per group
*Unlike many theoretical and algorithmic-based courses, CS401 is a project-based course that focuses on developing a comprehensive set of skills necessary for creating an MVP (Minimal Viable Product). In this course, we will think about the development and design issues that go into consideration when doing rapid development for with a serverless backend. We will also discuss about the best practices and tools used to design and implement serverless applications. You are expected to work in a group of three to develop an MVP. Your MVP topic will be proposed, designed, and implemented by your group.
You should form your team and register for the class together.*
By the end of this course, students will be able to develop serverless applications by:
- understanding of the severless application development life cycle.
- gaining technical skills for the design and implementation of an application.
- getting real-world experience of how a development team works together on a project.
- using collaboration tools during its development process.
Assignments and Participation — 30% of grade
Exam — 30% of grade
Final Project — 40% of grade
Jan 17: Class Overview
An introduction to MVP development. This lecture is an overview of the product development lifecycle. Using design thinking, we will identify the client’s problem, propose possible product solutions, design an MVP, implement, test, and iterate following the SCRUM framework.
Jan 19: Consulting client cases (Overview)
This lecture will be presenting the products that “client” companies participating in the class want. We will be walking through their key problem and look at the different strategies for market researching about the products and market competitors.
Assignment: Research market, competitors for top 3 clients to do proposals for
Jan 24: Team Structure
This lecture is an overview of the team structure: PM, Front-end, Backend, QA. We will discuss the the different roles and tasks each position take on in terms of producing a product.
Assignment: Decide roles for each person in team
Key Date: Decision on which teams get which clients
Jan 26: What’s in your tech stack?
In this lecture, we will discuss the things we need to consider when deciding on our tech stack in terms of the type of product we are creating: whether it’s a mobile, web, consumer-based, or B2B product etc. We will have an overview of current popular tech stacks.
Assignment: Project proposal due
- iOS: Objective-C/Swift, Tools: Xcode, etc.
- Android: Java, Tools: Android Studio, etc.
Backend: Serverless options (for rapid development)
Jan 30: Principles of Serverless App Development
This lecture focuses on the principles applications for severless development. We will cover the use cases for serverless backend development that helps us focus on frontend development to get a product to users.
Feb 2: Collaboration tools
This lecture gives an overview and compares different types of tools your team can use to collaborate on your MVP. For example:
- Source code management/hosting: GitHub, Bitbucket, etc.
- Project management: Trello, Waffle.io Basecamp, Asana, Jira, etc.
- Team communication: Slack, Hipchat, Zoom, etc.
- Documentation: Quip, etc.
Assignment: Create team and individual accounts for tools your team decides to use
Feb 7: Business side of an app
In this lecture, we will discuss the business model canvas: thinking about value proposition, deciding on 1–3 customer segments have provide a solid revenue model.
Assignment: Create a business model canvas for your product
Feb 9: Product Design: UX
This lecture introduces the principles of product design. In this lecture, we will focus on user experience design. We will learn how to create user stories, user flows, and wireframes using tools such as Sketch.
Assignment: Wireframe for client
Feb 14: Product Design: UI
This lecture will discuss the visual details of a product. We will have an overview of a checklist for front-end developers and learn how to create mockups and prototypes using tools like Atomic.
Assignment: Mockup for client based on feedback, decide on tech stack by next class
Feb 16: Setting up your Environment
This lecture will be a lab session to set up your project environment based on your group’s chosen tech stack. You will install your tech stack tools/software and dependencies. TAs will be here to support you if you run into any troubles.
Assignment: Research frameworks and open-source libraries for your tech stack
Feb 23: Midterm (Theory / Principles)
Feb 28 — March 21: Implementation
Assignment: Create/prepare a sales pitch for your MVP
March 23: Final Project Presentations
On this final class, your group will pitch your MVP. Your team will discuss: the client’s problem, your team’s design/solution, your product’s business canvas, a demo of your project.
Assignment: Course & Peer Evaluations
Many people may say an internship is meant for getting an experience of the basic workflows of your potential career. Well not anymore. Nowadays, internships are becoming an unspoken requirement to learn all the things you don’t get to learn in your classes and to get the experiences you need to get hired. Ironically, you need experience to get experience. That’s where schools can help.
A course like the above could give me the opportunity to learn the development life cycle of a product: from architecture, design, implementation, and to its deployment. With the incorporation of a serverless backend, the course time could be cut in half because students can focus on applying principles of design and implementing an MVP by working on the frontend before moving to serverside development in the next semester.
About the writer: Xiuwen was a CS student intern from California who interned with Oursky during the summer of 2017. Check out her todo app on GitHub.