My 4 year journey as a self-taught software engineer

Lim Chee Keen
9 min readDec 11, 2023

I am writing this post just as I am about to leave my first full-time job as a software engineer. It has been quite an adventure to get to this point and it’s time for a bit of reflection. There were so many great projects that I did and wonderful people that I met along the way, and this post would not do justice to all of them. Nevertheless, I have penned down the pivotal events on my path from leaving the Navy to becoming an engineer.

First Year

I left my job as a Naval Officer in 2019 to move to Japan with my wife. While I was there, I read about coding and software development while working part-time at an English school. I began seriously programming at the start of 2020. I bought a new laptop to run Android Studio and coded my first application in Java.

Then COVID forced everything to shut down and everyone to stay at home. I would go as far as to say that if it weren’t for COVID, I would not have become an engineer. During that time, I spent the whole day developing and learning everything I needed to make the app work. Things like Git, SQL, Object Oriented Programming. It was also during this time that I picked up game development on Unity and Machine Learning (ML) in Python. All these were possible because COVID forced everything to be online and they were either free or really cheap.

My first success came when I deployed my app on the Android Playstore. My app helped me to track recipes and do shopping. I wrote about it here. I also got my certification in ML and coded a simple game on Unity. This was seven months since I started.

First app deployed: plan.buy.cook
First app deployed: plan.buy.cook

When my friends found out I deployed an app, they asked if we could collaborate to make another one. They were non-engineers who had an idea and needed someone to code it. This app would help users learn Business Mandarin Chinese. It would have to be available on both Android and iOS, so I went to learn Flutter in order to develop the app, which we named Quika.

The Second Year

Our team wanted to deploy Quika before Lunar New Year, but surprise surprise, it took much longer than that. There were lots of design changes and content changes that we made following the test version. We finally launched the app in May 2021. You can read about it here.

Quika: An app for learning Business Chinese

It was around this time that I was contacted by my current boss on LinkedIn. Initially he needed mobile engineers, but the project fell through. He then approached me to join a web development team. Even though I had no experience in web development at that time, I would not pass up the opportunity. I joined GAOGAO on a part-time basis to work on Auris. Auris is a web-based application where users upload video/audio files and the AI-powered tool would convert the speech in these files into subtitles. You can even edit the videos and subtitles on the platform. We deployed the Minimum Viable Product (MVP) at the end of 2021.

Being on the Auris project was daunting at first. I did not have knowledge of JavaScript and industry practices. However, my boss and teammates were incredibly helpful and patient, for which I am eternally grateful. Once I found my feet, completing tasks and delivering on expectaions weren’t a problem. The project went well enough that I asked to be hired full-time if I returned to Singapore and my boss agreed. So after two and a half years in Japan, my wife and I moved back to Singapore.

At the end of the year, I started an ML and AI study group where I taught the basics of ML in Python to my colleagues. This experience gave me confidence that I knew the fundamentals of ML and be able to teach it to others. It also deepened my knowledge of the subject as I had to create content before every presentation, some of which I came across for the first time. The sessions were one hour per week and it ended in mid-2022.

The Third Year

At the end of the first quarter on 2022, I ended my work with Auris. The project surpassed the target number of active users in just a few months and was successfully handed over from the starting team to a new team. After the Auris project I was tasked to learn… Blockchain. Huh?? Why?? It turns out our company wanted to develop a team of engineers who were proficient in Blockchain and writing smart contracts. In addition, I was tasked to start a meetup group and host an event about Blockchain. So I did both.

Our team created a Decentralised Autonomous Organisation (DAO) creation website. I learn Solidity and hooked up the smart contracts to the frontend React application. It was on this project that I guided my first intern. I also ran the inaugural Blockchain.connect() meetup. COVID measures were easing up so we could host an in-person event. We had a decent turnout of around 30 people. I did a technical presentation on Smart Contracts at the event.

Hosting Blockchain.connect()

Aside from my work at GAOGAO, I met my future co-founder and we decided to start an app service together. The planning took a few months as we both work full-time and we wanted to get the foundations right, so research time was needed. Eventually I got started on my latest app, Bizbulk, in the latter half of the year.

Bizbulk’s main aim is the facilitate group buys of premium products. It allows buyers to host groups and purchase high-end products in bulk. I chose the tech stack for the application based on what I knew and what the app needed. Flutter for the frontend, Firebase for the backend, Stripe for e-payments. I wrote about this architecture here. I managed to find time outside of work hours to develop this, but the sheer number of basic features required meant that I needed close to a year to complete the MVP.

On a side note, I attained the AWS certificate for Machine Learning DevOps in August 2022. This took me three months.

The year ended with me on a project for a Japanese fintech firm. The significance of this project was that it enabled me to look at, for the first time, Golang server side code. I knew eventually I would need to learn server side programming and it was great exposure to be able to get hands-on experience on it.

The Fourth Year

2023 started with a change in projects to one that was about creating a Metaverse with voice and video communication capabilities. I was charged to lead the frontend team, another first for me. Just as how I was mentored and guided when I started out with GAOGAO and the Auris project, I was now guiding other junior developers. A full-circle experience, I would say.

Work on Bizbulk was also in full swing. After a few rounds of testing and finetuning, Bizbulk launched in April 2023. Over the next few months, the number of users and income from the app slowly increased. This was one of my best achievements thus far. Check it out on Android and iOS.

My next project was migrating a client’s website from Client-Side Rendering to Server-Side Rendering. We also added a payment gateway to process online payments. The project successfully concluded within a few months.

My final project with GAOGAO was a Flutter app which allows users to search for Anytime Fitness gyms and check in to their gym session. Available on Android and iOS.

At the end of 2023, I received news that my application to a masters program offered by the National University of Singapore had been accepted. The Master of Computing (General Track) is aimed at people with “non-computing undergraduate degrees and aims to provide a systematic pathway for graduates who wish to embark on an accelerated conversion to the computing field”. I chose to pursue this course as it will enhance my foundational knowledge of computing and allow me to advance my career as an engineer.

Team GAOGAO

The journey of being “self-taught” ends here, four years since I started. A total of 9 projects completed: 4 mobile apps and 5 web apps.

Worked with dozens of engineers from Japan, Vietnam, Canada and Singapore.

Tons of version upgrades; hundreds of pull requests, thousands of commits, millions of lines of code deployed…

And yet so much more to learn and improve on.

Reflections

Distilled from the lessons learnt along the way are some principles that I will stick to going forward. These serve as guides and ways of thinking rather than hard rules to follow.

  • You learn the fastest when you teach. Start a study group, present at a meetup, explain a concept to someone.
  • There are far too many technologies to learn all at once. Focus on 3 to 5. For me they are: Flutter, ML with Python, React and Firebase. I will add a fifth soon, which is Golang, in order to have server side skills.
  • Most of the best resources are free. This to me was the most surprising. I never spent over SGD$100 learning to code. Learning from Youtube, Stack Overflow, free blogs and using open source projects, free-tier services have kept my total costs over the 4 years of my journey to under SGD$200.
  • The harder the concept/technology, the more building blocks they are made out of. To understand how they work, break them down to their fundamentals. Take time to learn each one, it will be worth it when you finally get a deep understanding.
  • Find your best environment for deep work. I was able to find a place in my home where I could do about 4–6 hours of very good work everyday because I could consistently focus and getting things done or completing my required learning.
  • Keep records. This ranges from writing down lessons learnt to journaling your progress. You won’t refer to them on most days, but when you need them, these will be invaluable.
  • Lastly, learn from others but don’t make comparisons. Everyone’s story is different.

Final note

I found that being a software engineer simply means doing software engineering regardless of experience or paper qualifications. Reading books, looking at open source code, learning principles were what I consistently did over the four years and is what anyone would call an engineer. I came across this quote a few years ago and I think it best encapsulates this idea.

Oscar Wilde said that if you know what you want to be, then you inevitably become it. That is your punishment. But if you never know, then you can be anything. There is a truth to that. We are not nouns, we are verbs. I am not a thing — an actor, a writer — I am a person who does things — I write, I act — and I never know what I am going to do next. I think you can be imprisoned if you think of yourself as a noun.
Stephen Fry

--

--

Lim Chee Keen

Former Navy Captain Turned Software Engineer | Flutter & React developer | ML & AI programmer | Co-founder for Group Buy service