Module information

CS3219 provides an in-depth, hands-on experience in key aspects of software engineering that accompany the development of software. Based on proven principles and best practices, this course focuses on software architectural design from the perspective of the software process. It covers techniques for requirement elicitation and specification that provide sound base for architectural design. The course covers design decision exploration as well as patterns that explicate principles and best practices in replicable form.

~ Description from NUS Mods


  • Venue: Online
  • Lecturer: Prof Bimlesh Wadhwa
  • Lecture Time: Thursday, 14:00-16:00
  • Tutorial Time: Monday, 14:00-15:00
  • Taken in AY2021/2022 Sem 1

Module Breakdown

  1. Team Project ~ 35%
  2. OTOT Assignment (Personal Assignment) ~ 35%
  3. Exams ~ 30%


  • CS2103T

Module details

This module is 4 MCs.

This modules involves:

  1. Software Development Process
  2. Software Requirements Specification
  3. Software Design Principles
  4. Software Architecture Styles / Architectural Patterns
  5. Message Patterns
  6. Object Behavior and Interaction Patterns
  7. Software Design Quality


The lectures were conducted by Prof Bimlesh Wadhwa. Most lectures were about the content of the lecture slides. However, there were a few interactive sessions where Prof Bimlesh Wadhwa invited an Alumni to share about his experience in the industry working with Kubernetes.

It also contributed to our OTOT Assignment and actually helped me a lot in understanding the concepts of Kubernetes and how to use it.


The tutorial content was mostly based on the lecture content that was taught in the previous week.

It usually consists of questions which tests us on the following:

  1. Our understanding of the concepts
  2. Our ability to argue for / against a certain design decision
  3. Our ability to apply the concepts we learn to real software

Group Project

There were 2 possible projects that we could choose from.

The 1st option was Peer Prep, which is a platform for students to practice their interview skills with their peers.

The 2nd option is to propose your own project idea and get it approved by the Prof.

After selecting our own project, we can define our own requirements and write our own software.

The project is graded based on the following criteria:

  1. Choose 1 of the architectures
    • Traditional/Monolithic Architecture
    • Microservices Architecture
    • Mix of different architectures
  2. Scalability of the application
    • EG: Using Kubernetes
  3. Demonstrate Service Discovery


  1. Final Report
  2. Final Presentation
  3. Code Submission

OTOT Project

The OTOT project was given to us at the start of the semester and we were given the freedom to complete the project on our own timeline. I will recommend you to start early so that you do not have to rush it at the end of the semester. Some projects involve demos that we have to present to the Prof / TAs.

We do not have to complete all the projects in the OTOT Brief. We can choose the projects that we are interested in and complete them as long as we fulfill the maximum possible score for the assignment.

We were also given Google Cloud vouchers to use for our projects.

The OTOT Project has a maximum score of 35 points. These are the outline of the OTOT Projects for my semester:

Kubernetes & Docker

  1. Deploy a project in Docker
    • Write a dockerfile (1 mark)
    • Setup NGINX and run a reverse proxy (1 mark)
  2. Deploy a project using Kubernetes
    • Setup Kubernetes through Docker Desktop & Configure Kubectl (1 mark)
    • Ability to connect to an application running in Kubernetes (1 mark)
  3. Advanced Kubernetes Features
    • Write an ingress.yml file (1 mark)
    • Use an ingress controller to enable sticky session load-balancing (1 mark)
    • Define a Horizontal Pod Auto-scaler and show that it works as expected(1 mark)

Making a CRUD Application

  1. Implement a simple backend
    • Successfully execute GET, POST, PUT, DELETE request on localhost using Postman (1 mark)
    • Successfully execute GET, POST, PUT, DELETE request on to deployed endpoints using Postman (1 mark)
    • Demonstrate edge case handling. The deployed app should not crash on unexpected input (1 mark)
  2. Testing your application through Continuous Integration (CI)
    • Test APIs using any testing framework (1.5 mark)
    • Use Travis/Other CI Tools to automate testing and write the configuration file to run those tests automatically (1.5 mark)
  3. Deploying your application using Continuous Deployment (CD)
    • Deploy your application to a serverless cloud service provider (1.5 mark)
  4. Implementing a frontend
    • Interact with the API using frontend (2 Marks)
    • Implement styling to the frontend (1 Mark)

Authentication & Authorization

  • Unsuccessful GET request to API if user is not authenticated (1 mark)
    • Return 401 if user is not authenticated
    • Return 200 once the user is logged in
  • Unsuccessful GET request to API when user is not authorized (1 mark)
    • Return 403 if user is not authorized
    • Return 200 if user is authorized
  • Implementation (2 marks)
    • Basic Implementation: Hardcoded checks + Basic Authorizations that are not easily extendable. (1 mark)
    • Advanced Implementation: Usage of JWT, frameworks with role/permission that can be easily extended. (IE: How it will be implemented in Production) (2 marks)

Pub-Sub messaging

  1. Successfully implement a messaging service using Apache Kafka (3 marks)
  2. Successfully manage the failure of the master node in the cluster and another node takes over (3 marks)

Blog Post

Write a blog post on any software engineering principle, pattern or concepts from within/outside the module scope. (Max 3 points) The post needs to have a minimum of 400 words.

  1. Clear, Precise Language used to explain the principle, pattern or concept. (1 mark)
  2. Effective use of diagrams to explain the principle, pattern or concept. (1 mark)
  3. Provide a concrete/hypothetical example where it is utilized. (1 mark)
  4. Unique topic chosen that is relevant to the module. (1 mark)
  5. Provide a concrete real life example (2 marks)

We also have to reflect on our peers’ blog posts and give them feedback on their blog posts

  1. Provide insightful feedback on the blog post. (1 mark)
  2. Demonstrate understanding of the blog post. (1 mark)
  3. Build on the blog post by providing additional information. (1 mark)

If we completed the projects early, we can score bonus points for the project.

Caching Task

  1. Successful GET request with large amounts of data (1 mark)
  2. Successful GET request with large amounts of data with substantial performance improvement from the first one (1 mark)

Module Suggestions

We can give feedback on the following section:

  1. Propose a new topic that you would like to learn in this module

  2. Propose an existing topic that you would like to learn in more detail

  3. Propose a replacement for an existing topic that you think is not relevant to the module

  4. Well elaborated rationale of the suggestion (1 mark)

  5. Brief explanation of the topic and what should be taught (1 mark)


  • Early Submission: Up to 3 marks of bonus based on how much you completed before the deadline
  • Noteworthy Contributions: Up to 3 marks of bonus based on contributions which are mentioned by the Prof / TAs
  • External Pursuits: Up to 5 marks max
    • Merge an open source PR for non-school related projects (1 mark each max 2 marks)
    • Obtain a certificate for a course related to the module (1 mark each max 2 marks)
    • Participate in a mock interview limited to 20 students (3 marks)

This section has a maximum of 3 marks.


Workload (6/10)

The workload is moderate, I feel that good teammates are important for this module to keep the workload low. I feel that I was carried by my group mates.

The workload is mostly related to the size of the group project and the OTOT project.

Organization (8/10)

The module was well organized and the Prof was very responsive to our questions. I really love that the projects are presented to us in this module. The OTOT Project is a creative way to allow us to plan our own time table.

Enjoyment (8/10)

I really enjoyed the module and loved working with my group mates for the project. The OTOT Project also allowed me to explore new technologies that I am interested in.

Usefulness (8/10)

The concepts regarding Kubernetes and Docker are very useful as they are widely used in the industry for DevOps. The principles are a little more abstract and is up to our interpretation on how to apply it.

Overall (8/10)

I really enjoyed this module and I feel that it is a good module to take if you are interested in Software Engineering.


Overall, I will recommend this module if:

  1. You are interested in building software.
  2. You have friends to complete the group project together.
  3. You are interested in learning about Kubernetes and Docker.
  1. NUSMods Link
  2. Review by Paradite
  3. Apache Kafka
  4. Apache NGINX



  1. My Notes
  2. Cheat Sheet

Past Year Papers

  1. AY15/16 Sem 1
  2. AY16/17 Sem 2
  3. AY17/18 Sem 1
  4. AY18/19 Sem 1
  5. Test Questions


  1. Code2Gather