My Internship Journey

Daniel Fung
SCTD, GovTech
Published in
5 min readSep 25, 2021

Over the past 7 months (Jan — July 2021), I had the opportunity to intern at GovTech’s Sensors and Internet of Things (SIOT) Division with the SmartGym team. It was an invaluable experience for me, and I would love to share more about my work during this period!

What is SmartGym?

You may be wondering: What is SmartGym?

Well, our team utilizes in-house sensors to track and record workout data from the various machines in a gym, after which users will be able to monitor their progress from any of our Kiosks located at the gyms.

SmartGym aims to be every citizen’s #1 Fitness Lifestyle Companion and we hope that through this, individuals will be more motivated to take ownership of their fitness journey.

For more info about what we do and to meet our awesome team click here — SmartGym Team

What did I work on?

In my role as a front-end developer, my primary job scope includes testing and implementing new features for the SmartGym application as well as improving the user experience. Luckily for me, I had the opportunity to work with a talented UI/UX designer intern, Kianne, to help come up with a new and improved Version 2 design for our app. Here are some of the things that I worked on:

Fig 1. Redesigned Kiosk UI
Fig 2. Abdominal Console
Fig 3. Improved Weighing Scale UX

Flutter

We used the Flutter framework for app development. It is a relatively new mobile UI framework conceived in 2017 and it uses Dart language. Not only is it used for both Android and iOS devices, it also allows for cross-platform development (mobile, tablet, and desktop) which makes it incredibly versatile.

I will briefly describe the data flow of the app and its architecture, so that you get a general idea of how things work here.

Firstly, data flow. On the console side, workout data needs to be reflected ‘live’ on-screen for users to see what they have done or are doing. To achieve that, the app subscribes to a socketIO channel to receive an update message whenever there is a change in the workout data. Upon receiving this update message, the app will then fetch the latest workout data from mongoDB via openApi to be displayed on-screen. Here’s a diagram for visual learners!

Fig 4. Data flow diagram between frontend and backend

Next, let’s talk about architecture. The app is made up of 4 main layers (from lowest to highest):

- API

- Repository

- BLoC

- Widgets

Here, we use a state management tool called Business Logic Component (BLoC) architecture. To put it simply, there are two components: States and Events. States are the UI component and are basically what the user sees. Events are interactions (usually done by the user) that trigger the change in states. It could be pressing a button or when a predetermined condition is met, which causes the trigger. So, what the BLoC does is interpret the events (actions) and return the respective state (UI).

Fig 5. App architecture

Main Hurdle

Before my internship, I didn’t have much coding background and I must admit that the learning curve was pretty steep at the beginning. It took me some time to get comfortable with what I was doing. And just when I thought I got the hang of it… runs code

Fig 6. Red screen of ‘death’

… I guess I didn’t. 🤦🏻‍♂️

Thankfully, after months of consistent practice, guidance, and support from my team, I am proud to say that I managed to get over this hurdle. Cheers!

Takeaway

Looking back, I felt that my internship experience was a very fulfilling one! I was able to develop my skill set as a developer, picking up essential software engineering practices such as documentation and Git for version control. Besides technical skills, I also learnt critical project management skills such as planning, forecasting, and the Agile methodology. At the same time, I acquired vital soft skills such as leadership and interpersonal communication which would be highly beneficial for me in the long run. This level of holistic development is something I feel that not many interns can get to experience, and it made me appreciate my entire internship experience even more!

Of course, not forgetting the amazing team that I worked with! Despite the tightening of COVID-19 restrictions mid-way through my internship, we still managed to work together efficiently as a team whilst having fun and lots of friendly banter in the process. A special shoutout to my buddy, Kelvin Ang, for his patience and guidance throughout my time there. And to my reporting officer, Chin Hiong, for being such a nurturing and open-minded mentor.

Fig 7. (From left to right) Ding Hao, Joaquin, Keith, and I

Conclusion

For anyone considering an internship with GovTech, and want to be part of something challenging yet rewarding, I’d say go for it! I’ve learned so much during my time working with the SmartGym team and I’m sure you will too!

Find more about GovTech’s technical products and solutions on Singapore Government Developer Portal.

--

--