CS241001 Software Studio

from Ideas to Applications to Real Impact


This course presents hands-on labs in the software aspect for students to be familiar with software design and development processes. The class follows a mainstream of building a useful mobile app under selected topics. We introduce some important software design concepts and development tools.

The class is divided into three parts. In the first part, we guide students to identify user needs and design core features. In the second part, we will teach fast prototyping and feedback analysis. Finally, we talk about how to make the software intelligent by introducing some basic AI and machine learning concepts.



Teaching Assistants

Time & Location

  • Video & lectures: Tue. 3:30-5:20pm at Delta 105
  • Labs: Thu. 3:30-5:20pm at EECS 326.328
  • Office hour: Mon. 3:30pm-5:20pm at Delta 724.729

Grading Policy

  • Part-I Project Presentation 20%
  • Part-II Project Presentation 20%
  • Part-III Project Demo & Presentation 30%
  • Labs 30%


This course requires students to have solid understanding of

  • Data Structure,
  • Programming (in C/C++ or Java)
You will be asked to read the documentation of Android or iOS to be familiar with the mobile app development yourself. The lectures focus on other aspects than code. You will also be asked to develop a functional mobile app in the end.



If you have any feedback, feel free to contact: shwu [AT] cs.nthu.edu.tw

Lecture 00


About This Course... | FAQ


General Rules and Introduction to Git

This lab guides you through the main idea of version control systems, the basic usage of Git, and how to submit on our GitLab.

GitLab Slides

Android Basic in Kotlin 1: Kotlin Basic

Learn Kotlin and build your first app.

GitLab Document

Lecture 01

Design Thinking

Thinking as a Designer

Slides App List

Android Basic - Introduction

This lab guides you through the folder structure of Android.


Android Basic in Kotlin 2: Layout

Build apps and imporve the user interface.

GitLab Document

Lecture 02

Empathizing with users

First UX research, User interview, Empathy Maps


Android Basic - Layout

This lab guides you through Layout and RecyclerView.


Android Basic in Kotlin 3: Navigation

Enhance your users' ability to navigate across, into and back out from the various screens within your app for a consistent and predictable user experience.

GitLab Document

Lecture 03

Define Problems Worthy to Solve

Design sprints, User stories and journey map, "How might we", Problem statement


Android Basic - Navigation

This lab gives an introduction to Option Menu, Bottom Navigation and Navigation Drawer.

Slides GitLab

Lecture 04

Android Basic - Review Questions

This lab review what you have learned in the last 3 weeks in android basic course.


Android Basic in Kotlin 4: Internet

Write coroutines for complex code, and learn about HTTP and REST to get data from the internet.

GitLab Document

Lecture 05

Ideating Solutions

Brainstorming and the Crazy 8. Competitive Aduit and Unique Value Proposition. Refining and deciding the best solutions.


Android Basic - Corutines

This lab introduce more details of corutine.


Android Basic in Kotlin 5: Data persistence

Keep your apps working through any disruptions to essential networks or processes for a smooth and consistent user experience.

GitLab Document

Lecture 06

Wireframes and Low-Fidelity Prototypes

Design Sprint Day 3. Storyboarding, wireframing and Lo-fi prototyping.


Android Basic - Flows

This lab introduce why we use Flow and how to produce a Flow.


Android Basic in Kotlin 6: Data persistence

Use Android Jetpack’s WorkManager API to schedule necessary background work, like backing up data or downloading fresh content, that keeps running even if the app exits or the device restarts.

GitLab Document

Lecture 07

Usability Study

Design Sprint Day 5. Low-fi Prototype. 7 Key Elements of a good plan.


Apollo server with GraphQL

Download and set up Node.js. Start with your first server.

GitLab Slides

Lecture 08

Hi-Fidelity Prototypes

Improved Low-fi Prototypes. Creating Mockups. Getting feedback from design critic sessions. Hi-fi prototyping & usability tests.


Lab Apollo Server with GraphQL & Weathermap Api

Generate WeatherMapApi Key and build a Apollo server with Weathermap Api.

GitLab Slides

Lecture 09

Lab Apollo Server with GraphQL and Database

Try to build GraphQL server with your own Database.

GitLab Slides

Lecture 10

Design for Execution Part 1: Acquisition and Activation

A cognitive model for human brain. Optimizing context or touchpoints. Optimizing decision interface.


Lab Apollo Server with GraphQL & Android App

Try to combine Android app with GraphQL apollo server.

GitLab Document

Lecture 11

Design for Execution Part 2: Retention and Growth

Design for retention and Growth. Know the reason why we are addicted to social media.


Lab - Clean Architecture & Dependency Injection in Android

Introduction to clean code and architecture. Learn the new conecept of Dependency Injection in Android.


Lecture 12

Lab - Jetpack Compose Basic

Introduction to jetpack compose in android. Learn how to build a simple layout by jetpack compose.


Lecture 13

Data Analytics

Introduce to Invisible Design Part I. Deep into Data Analysis and Business Intelligent.


Lab - Jetpack Compose State

understanding of @Composable and how it interact with State. Learn how to use Navigation in Compose and handle complex UI logic.


Lecture 14


Introduce to Invisible Design Part II: Machine Learning and Web/App Intelligence. Give some basic concepts of machine learning and show the open source from Github.


Lab - Kotlin Flow and Compose Snapshot

Trace code in online project and learn how the Snapshot object work with Flow.


Lecture 15

Lab - Tensorflow.js

Introduction to Tensorflow.js and implement it in GraphQL. Train a text-toxic model on your own.

Slides Notebook


Here are some course materials and resources related to this course. For code and its details (such as assigned reading, project links, quiz, etc.) please refer to the GitLab. For online forum please refer to the eeclass system.

GitLab eeclass

Online Tutorial