CP2106 Independent Software Development Project (Orbital)

4 minute read

Published:

Academic Year 2021 - 2022
Summer

NUSMods Description

Orbital provides a platform for students to gain hands-on industrial experience for computing technologies related to students’ own interests. Done in pairs of two, Orbital students propose, design, execute, implement and market their project to peers and faculty. Peer assessment and critique of others’ projects are key components of the modules’ deliverables.

Review

This module is my first forray into Software Engineering. My partner and I attempted Orbital at the Artemis level. Everything was new to me and I had to learn a lot of technologies from scratch. Previously, I only had research background and I normally play around with research problems. My partner and I built a mobile application which can help students do module planning more seamlessly by using a SAT Solver. Our TA was very encouraging and was always ready to lend a helping hand by giving us useful advice to point us in the right direction when we lack the necessary technical knowledge.

The entire frontend was built using XML and Android Java with Materials UI whereas the backend (Solver) was built entirely in Python. One particular problem I encountered was handling database calls. I realised, through monitoring the database calls, that reading and writing into the database was asynchronous. When I tried to write and read into the database in that sequence, I realised that the document was being modified whilst being read, which lead to a lot of incorrect output. I had no experience in Asynchronous Programming, but I learnt how to use the Completable Future Monad to handle such database calls. I even took up Parallel Programming courses so that I could better understand how multi-threading works and how to go about properly parallelising tasks.

My partner and I also had issues with the UI design of our Android App. The entire aesthetic look of the App was built using XML and Material UI. Unfortunately, we were not able to achieve the look that many other teams achieved (by using higher level API and other frameworks). Nonetheless, despite us building our app using Android Java, and also a lack of artistic flair on our part, we redid the entire look of our app. We also received praise by our mentor and 3 other teams during our project evaluation that our UI greatly improved by miles.

Another issue was setting up the backend for our app. We were using Heroku free tier to run our backend scripts as well, but due to the large number of build packs used, deploying was impossible as the server would time out after 15 minutes. Due to our inexperience, we tried to download and precompile 23GB of slug and then push them into the backend instead to save time. However, our computers were not configured to the environment required for the slug to compile and so we spent 3 days trying to figure out a workaround. However, it was easily resolved with an email to Heroku’s Helpdesk to extend the build time to 30 minutes instead after realising pre-compilation was an impossible task.

Lastly, compatibility issues were also a very huge problem from the start. We originally planned to use Google ORTools as one of the API to implement a feature of the app. However, it was not well documented that ORTools API was not compatible with computers of ARM Architecture. I tasked myself to actually try out the API but realised that the native libraries could not be loaded. I then spent 1 full week trying to debug the API but to no avail. We only found out after searching through Stack Overflow that the maintainer mentioned that it was not tested on M1 Macs yet. We had to abandon the API and used Z3 SMT Solver instead which was developed by Microsoft. This would make the implementation more complex as well, but regardless, we managed to build the feature successfully and adhere to Software Engineering Principles despite the added complexity.

Despite all these challenges, my partner and I managed to achieve the highest level of achievement possible for the module and even presented our posters during the project showcase. The achievement came with many setbacks along the way, but it definitely taught me to be resilient and to persevere no matter what. I think these traits are really important in the current workforce. We also learnt how to write industry-style code and several software engineering principles which would be very valuable to apply in any technology-based setting in the future. Thus, this challenging task actually turned out to be very fruitful and rewarding.