Lee Jia Keat

March 25, 2025Last Updated: September 5, 2025

Time for a story, or rather, incoherent ramblings about my life. This post won't be very structured, it's really just a messy reflection of the path that I have chosen.

Parts of this might seem really messy, because its been sloppily edited a few times, and my writing style has changed significantly since the first time I wrote this post.

Minecraft

Growing up, I really liked playing Minecraft, and it was probably Minecraft that eventually lead to me becoming a Software Engineer.

This is the story of how a dumb kid somehow got into IT because he liked games, probably quite a common story, to be honest.

As a kid, I really liked playing around with Minecraft mods and plugins, particularly CraftBukkit plugins, which were plugins you could install onto a server to add cool features like shops, guns, mini-games, etc.

Although I managed to get my own Minecraft server up and running at the tender age of 12, complete with port forwarding, I wasn't smart enough to figure out how to write my own plugins.

It's hard to say whether the frustration from my lack-of-plugin-making-capabilities was what eventually drove me to choose IT as my diploma of choice, but I like to believe that it had significant influence.

Early Education

I may be Malaysian born and raised, but my entire educational background has been a Singaporean one. From primary school, all the way to graduating from university.

Choosing Information Technology

After taking my GCE O'Levels, I really wanted to become a programmer, and I wanted to work with computers.

I didn't really care about my exact career path at the time, I just wanted to learn to code, and learn to code I did.

This fact basically threw any thoughts I had about joining a Junior College (which was the "preferred" route to the big-name universities) out of the window, and I ended up enrolling for a Diploma in Information Technology at Ngee Ann Polytechnic, Singapore.

Family Influence

In hindsight, the fact that my brother was a programmer was a probably a strong influence in my decision to become a Software Developer.

One time, he showed me a simple web application he made in HTML, a simple 2D Tilemap editor inspired by a game called CrossCode.

He also showed me a bunch of other cool little toy projects, which I can't quite recall now.

At the time, I had no idea how games were made, I didn't even know it was possible for a game to be made by a single person, so it kinda blew me away that just anyone could make a game if they really wanted to.

Studying for a Diploma

About a week before I stepped into the campus, I scanned the course brochure and discovered that I would be learning Python.

Curiosity got the better of me, and I decided to try learning it on my own. After all, in the digital age, you can theoretically learn anything by looking it up online.

The first actual program that I wrote, that wasn't just a Hello World, was also the very first game that I made.

It was a simple guessing game, a common stepping stone for most developers, but one that basically set in stone my desire to write software.

I made it through a couple chapters of Python tutorials, many of which were on W3Schools, before school started, giving me a huge head start on the programming aspect of software development.

Most modules were a breeze, as almost everything was interesting. However, I was horrible at math, barely getting a C for just about all my math modules.

Game Development

I was mostly just floating through the modules, until I was given the opportunity to select Game Development as one of my electives, and down that tree I went.

It was this choice, instead of going down the Big Data or Machine Learning route that eventually lead me to enroll at DigiPen after receiving my Diploma.

First ever game

The first game I made was made in Unity, a simple 2D side-scrolling shoot-em-up, kinda like metal slug I guess.

The basic premise is a zombie apocalypse happened and you have to go pew pew all the zombies.

As a two-person team, we just smushed a bunch of sprites together with a tilemap, a couple weapons, scuffed dialogue, and scattered a bunch of zombies around the map, and somehow it turned out pretty well.

The funny thing is, we were supposed to make a game in GameMaker, but I so heavily disliked GameMaker at the time for some reason that I asked if I could try using Unity instead. Fortunately, our professor said yes.

We had zero experience, so our game was just a mishmash of tutorials and forum code. We even had this strange movement bug that accelerated the player when jumping against the corner of a tile, which we eventually just ended up calling a feature.

Sadly, all the files for this game have been lost, I don't even remember the name of the game, it was something along the lines of GuyShootStuff.

Also, as amateur first-time game developers, we had no idea how copyright worked, so all our game assets were ripped directly from the internet. Definitely can't publish that.

First mobile game

The second game I made was a mobile game, also made in Unity, it was yet another side-scroller, but this time it's also a bullet hell.

This game was made for a mobile-development module, the requirements of which was to make any mobile application, we ended up fulfilling the rubrics by jamming in some SQLite near the end to store local leaderboard scores.

First networked game

It sounds impressive, but we heavily abused libraries to do the heavy lifting, zero networking knowledge required. We used firebase and stuff to do user authentication, store user data, player inventory, etc.

It's all a blur, because we honestly had no idea what we were doing.

We ended up making a weird fitness-gamification-hybrid application, where players can sort-of battle each other in a pushup battle, among other things.

We somehow got an A for this.

First game in C++

Disaster. C++ was incredibly difficult for us at the time, we had no idea how memory worked, or even how the language really worked, so we kinda just stumbled our way in the darkness until we had a crappy top-down arena battler.

We didn't have a game engine as far as I can remember, and I think we were dealing with a simple wrapper on top of DirectX.

Honestly, it was a miracle that we survived, given that we didn't know anything about how camera matrices worked, so we just moved the whole world instead (close enough).

Our final implementation was horrible, but hey, it worked, and we had a somewhat playable game.

Hindsight

The brief stint I had with game development in Polytechnic pretty much solidified my desire to further study Game Development, which eventually lead me to enroll at DigiPen.

Internship

By this point, I was doing pretty well for myself, I could effortlessly ace most programming modules, and was pretty comfortable with my grades overall.

However, it was this complacency that lead me to believe I could handle anything that life threw my way. When it was time to find a company for my internship, I thoughtlessly went for an AI-based role at a Panasonic R&D branch.

I had neither the qualifications, nor the experience to back myself up, and I went for the interview thinking I already had this job in the bag.

Boy was I wrong, I was rejected almost immediately, and after a couple more bumps, rejections, bad assumptions and misunderstandings, I found myself as a manual tester at CrimsonLogic.

The 6 months I spent as a manual tester were some of the most miserable months of my life. I hated my job, the people were nice, but the job was just straight-up boring.

It was soul-draining, every day was a similar routine, testing, testing and more testing.

It didn't help that I was suffering from a debilitating skin issue, my skin was incredibly dry and itchy. I had difficultly sleeping and was in constant pain.

Fortunately, every cloud has a silver lining, I had the opportunity to work on automation testing for a bit, learning about Selenium Webdriver, and getting to touch the ancient version control tool that is TortoiseSVN.

I eventually ended up making my own macro tool using AutoHotKey, for the really tedious tasks like documenting the testing process.

Printscreen, tab to Microsoft Word, paste, and repeat. My macro script saved me from going insane.

I didn't share my tool initially, as I was afraid of getting into trouble. After all, when you're using a macro, is it really still manual testing?

In hindsight, it probably doesn't matter.

I eventually shared the tool with some close friends, fellow interns doing the same job, and I didn't get fired so all is well I guess.

Final Year Project

After my internship, having mostly learned my lesson, I went on to develop a rhythm game for my final year project with a group of friends.

The game I developed was a bootleg clone of osu!mania made in Unity with a twist, the game doubles as a beatmap editor, where users can create maps by organically "playing" through a song.

User key presses would be recorded and saved into the beatmap, allowing them to create a beatmap entirely through "playing".

To achieve this, copied the file format from mania and stripped it down to the bare minimum. No fancy keysounds here, just note timings.

Things were going pretty well, we had a decent prototype that could play some heavily processed osu!mania maps.

Unfortunately, I got complacent (again) during the holidays, practically not touching the project at all.

As a result, we fell behind during the final stretch, we had a functional product, but it was severely lacking in polish.

We still got a pretty good grade though, it's just that the final product left much to be desired, and ultimately left me feeling disappointed and regretful for not putting in more effort.

DigiPen

Junior Year

DigiPen was an eye-opening experience. I thought I understood Software Engineering before, but boy was I wrong. It turns out, I didn't know a thing about software, I just knew how to code.

I felt like I learned more about Software Engineering in the first trimester of my time at DigiPen than in the entire three years I spent studying for my Diploma in IT.

It was truly an enlightening experience, it was like I was reborn as a Software Engineer. I think a more accurate way to put it is like going through a job change, or class ascension.

We started out learning C from scratch, how a program is actually laid out in memory, how the stack works, code compilation, linking, some basic assembler, computer architecture, etc. etc.

Actually learning how sofware works, instead of just learning how to code.

Software Engineering Project

DigiPen offers this cool module called the "Software Engineering Project", which many of us call by its old module code 'GAM".

Students are required to gather in teams, brainstorm project ideas, and implement them to completion, or at least, complete enough to satisfy the rubrics.

These software engineering modules were my favourite part of the DigiPen curriculum, as they put all your technical (and communication/teamwork) skills right through the grinder.

The freedom to build just about anything you want, is the most liberating form of educational assessment that I have ever experienced. Well, anything as long as it was part of a game/game engine/simulation.

GAM100

I worked on an Asteroids clone using a C framework. The player controls a spaceship and shoots down asteroids to accumulate score. The twist here is that the asteroids split into smaller ones, and difficulty increases over time, eventually spawning bosses and hazards.

This project put everything I learned about C to the test, memory management, linkage, compilation, etc.

I had a ton of fun, and even got to do a little bit of pixel art.

The game is called Asteroids.

GAM150

We made a little stealth game, Captain Stealth's the name. A simple top-down stealth game, the goal is to escape from a prison. The player can hide in vents, trigger distractions to hide from guards and has to find keys to open doors.

Find all the keys, open all the doors, and find the exit. The whole game takes place in one map, very short.

This time, the game was written in C++, on top of a simple graphics wrapper. I made a simple little component framework (inspired by Unity of course) using virtual inheritance, and it just worked like a charm for our tiny game.

GAM200

TO BE CONTINUED.

Applied Mathematics

This was the first time I actually enjoyed learning Maths. For the first time, I could directly see the applications, how I could use Linear Algebra and Calculus in my code to manipulate a virtual world.

USA

So, everyone has the opportunity to go overseas for a trimester-long exchange program during their senior year at DigiPen. For my cohort, we could only choose to go to the U.S of A, because COVID.

So what did we do there?

Well, I got really fat, like +10kg fatter, and I was strangely unmotivated to really do anything but eat.

Possibly because it was an overseas exchange program, but studying ended up taking a backseat and I ended up treating most of the trip like a holiday.

Which is a pity, because the professors and modules over there were stellar, I just didn't make the most of it. Not to say that I didn't learn anything of course, just that I could have engaged with the material so much more, if not for the strange mental state that I was in.

Burnout

I've never felt so burned out, juggling the cramped time table together with the copious number of projects pushed me to the brink, there was a time when I didn't even submit the final project, because I knew I already had enough marks to pass.

Internship

I made a big decision to pivot into Web Development for my internship (Integrated Work Study Program), and ended up joining PSA International as a Full-stack Engineer Intern.

I learned quite a bit about the "other side" of Software Engineering, JavaScript frameworks like Angular, backend frameworks like Spring, legacy tech (looking at you, Weblogic), CI/CD, DevOps, Unit Testing, etc, etc. It was overwhelming, yet exhilarating, I greatly enjoyed using my new-found knowledge as I went about my work, even if it wasn't the so-called best way to do things (my mentor always encouraged me to keep it simple, and in hindsight, he was always right).

Getting Cancer

Half-way through my internship, I was diagnosed with stage 4 colorectal cancer, sucks doesn't it. I suffered frequent bouts of dizziness and light-headedness, especially when exerting myself. I struggled to climb stairs, or walk quickly.

I honestly thought I was just too fat, but it turns out that I suffered from serious anemia, and was leaking blood constantly from my colon. I ended up getting surgery and then going through chemotherapy (still am btw).

Anyway, my school and company gracefully let me graduate without fully completing my capstone project.

Dealing with cancer has been difficult, it's hard to wonder how one can be so unlucky, but ultimately, I've come to terms with it.

Although not all the factors are clear, I am now fairly certain that my previously unhealthy lifestyle greatly exacerbated the development of the cancer.

That, in combination with my general ignorance, led to things being much worse than it could have been. Now, I am a firm believer in the philosophy of "food is medicine", and pretty much avoid ultra-processed junk like it's the plague.

Take care of your body, for health truly is wealth.

RATH

After getting cancer, an old GAM-mate reached out to me, asking for help with programming some tech for his indie game studio. This opportunity felt like a silver lining in the face of my rather grim situation, and so I jumped into it immediately.

Although I was working entirely voluntarily, I appreciated the opportunity to continue honing my technical skills, while picking up game development and design techniques from my more design-oriented peers.

Jack of all Tech, Master of Nothing

Up until today, I find great difficultly in choosing one specialization to stick to.

Although game development is my main passion, I still enjoy developing in other fields too. Like this blog, for example.

I have a bad habit of starting unfinished projects, projects that typically start out strong, then fizzle out quickly, like gas from a soda.

Either way, life marches on, and I will keep going, to be the best version of myself that I can ever be.

Fun facts

  1. This post was initially written when I was in the hospital doing chemotherapy. I used GitHub codespaces, and while not the perfect writing experience, it was adequate to pen down my thoughts and see it be deployed.