08 Aug 2023, 7-min read

My Experience at CVWO

#intern #swe

I have been working for Computing for Voluntary Welfare Organisations (CVWO) for the past 13 weeks. It was my first ever internship and I have learned a lot from this experience. I would like to share some of my thoughts and reflections in this post.

I heard about this programme back in Sem 1 when I was taking CS1101S. This is how it works: students will be divided into teams and each team will be assigned a Voluntary Welfare Organisation (VWO) to work with. Over 13 weeks, they will be working closely with the VWOs to maintain and develop the software systems for them. These include fixing bugs, adding new features, and improving the user experience.

This sounded really interesting to me. I have always wanted to do something meaningful with my skills and I think this is a great opportunity to do so. I applied for the programme and was accepted.

The Application Process

Winter Assignment

Over the winter break, we were given a take-home assignment to complete. The assignment usually involves creating a simple web application with CRUD operations using the tech stack they specified. This year, we were tasked to create a simple forum application, using React as the frontend, and Ruby on Rails (RoR) as the backend.

I started learning web development with Vue and Django. I have never used RoR before and I have a very limited experience with React, so this is a very good opportunity for myself to learn something new.

My plan was to complete the project with a bottom-up approach: backend first, then the frontend. I started learning RoR by reading some tutorials and its documentation. Tutorials are very useful as they usually teach you how to build a simple application from scratch. However, I think it is also important to learn how to read the documentation to truly understand how things work. I started building the backend by first implementing user authentication and authorization, then designing the database schema, and finally implementing the CRUD operations.

The backend went quite smoothly and I was able to complete most of the features within a few days. I then started working on the frontend. Apparently, Redux is the recommended way to manage state in React. I have used other state management libraries before, but I have never used Redux. To be very honest, I think Redux is very confusing and I had a hard time understanding how things work. There is a lot of boilerplate code which makes the experience even worse. I spent a lot of time dealing with Redux before actually implementing the frontend features. I was able to complete the frontend eventually.

You can find the source code for the winter assignment:

  1. Frontend
  2. Backend

Interview Process

After submitting the winter assignment, I was invited for an interview. The interview was conducted by Prof. Ben Leong and the team leads (who are also students). The interview lasted around 15-20 minutes and they mostly asked about my personal experience with web development and my winter assignment.

The interview went quite well and I was accepted into the programme. I was super excited to start working with my team!

The Experience

I was assigned to work with the Lions Befrienders Service Association (LBSA) team. LBSA is a VWO that provides befriending services to seniors. They have a web application that allows their staff to manage their befriending services. The application was built by previous CVWO batches and my team will continue working on it for the next 13 weeks.

For the first two weeks, we were tasked to learn about the codebase and fixing some simple bugs. This is a good opportunity for us to get familiar with the codebase and the tech stack. We also hold weekly meetings every Monday with Prof and other teams to discuss about our progress and any issues we have encountered.

Migrating the Frontend

After that, our main goal of this internship is to migrate the frontend of our current application from RoR views to React. This is an extremely challenging task. For perspective, the current frontend is written in RoR views and it is very tightly coupled with the backend. We had to basically rewrite the frontend from scratch, recreate all the features in React (and at the same time, make sure that we do not recreate similar components and reuse the components as much as possible), modifying the existing controllers and transforming them into APIs, and finally, connecting the frontend to the backend. LBSA is one of the largest projects under CVWO (according to VS Code counter, the codebase is over 300k lines of code!) It is a very big project and it is very hard to understand how everything works.

In a team of six, each of us is responsible in migrating specific areas of the application. We worked on different branches and avoided dependencies between each other as much as possible. We also had to make sure that the application is still working after each merge. We also had to communicate with each other frequently to make sure that we are on the same page.

Integrating Singpass

After spending almost a month solely on migrating the frontend, I was tasked with my other partner to integrate Singpass into the application. This is a very interesting task as I have never worked with Singpass before. We had to read the documentation and figure out how to integrate it into our application. We also had to test it on our staging server and make sure that it is working properly.

The goal is to use Singpass as a way to authenticate users and as a 2FA method. This is to ensure that only authorized users are able to access the application. This is a very important feature as the application contains sensitive information about the seniors. We also integrated Singpass into our existing role-based control access so that certain roles are required or exempted from using Singpass.

The End

After weeks of hard work, we presented our work to GIC, our sponsor for this programme. We received a lot of positive feedback from them and they were happy with our work.

Some Reflections

13 weeks flew by very quickly. However, I think I have learned a lot from this experience:

  1. Do not underestimate the power of user experience: I have never considered UX to be very important. I also had the misconception that UX is about the aesthetics of the application. However, I soon realised that UX is much more than that. UX is how users interact with the technology, and having a good UX is essential to ensure users are able to use the application effectively.

  2. Communication is key: In any team, effective communication is essential. Working in a software engineering project with dozens of branches and hundreds of commits, it is easy to step on each other’s toes. Communication is important to ensure that everyone is on the same page and to avoid conflicts.

  3. It is okay to ask for help: When working on Singpass initially, we worked on it mostly independently for a few days without each others’ help. The progress was very slow and we were stuck at some point. It was then we decided to work together much more closely with the help of our team lead. Ever since, our progress has been much faster. If we had asked for help earlier, we would have saved a lot of time.