Goh Chun Teck works at Garena, a private internet company, as a software engineer, developing software applications and coding programmes. A Computer Science major in university, Chun Teck’s interest in Computing began even before then, having taken Computing as a subject at his GCE ‘A’ Level Examinations. This exposure to technology as a discipline and continued to expand during his time in university, when he began taking many Information Technology modules.
How will you describe your typical workday at Garena?
Chun Teck: As a software engineer, I mostly do coding everyday. We develop software applications by designing and planning the architecture, and the framework which will build it subsequently. If there are new features or new requests for the applications then we will just adapt accordingly. So most of our time is really spent sitting in front of the computer and writing code. We also have numerous technical meetings and general meetings as well to discuss our applications. As a server developer, I also spend time monitoring the servers to ensure nothing goes wrong.
We don’t really meet customers as software engineers. There is a layer of abstraction, so in front of us are the product managers and operations people who interface with clients and then proceed to allocate work to us. Product managers coordinate everything. For example, they give software engineers the specificities and requirements in the product, and set deadlines for the features.
The time spent at work may go beyond the official hours of 9.30am – 7.30pm, depending on the projects and deadlines we have. Newer startup companies may try to create and deploy their products as fast as possible, and may have tighter deadlines.
What is the workplace environment like, and how has your experience in this line of work been?
Chun Teck: I work in an office environment, which is a desk-bound job with a team of 5-6 people. Because my interest lies in coding and developing software, I enjoy what I do daily. I get to work with other skilled engineers and learn from them as well.
I like it that we constantly get to explore and learn new technology. So on that note I get to learn and improve my technical skills. I also get to see different perspectives and bounce ideas across each other, so we are able to learn from each other. Occasionally, we also get to provide feedback on the products that we build as well.
What I would like to change about it? Coding can be a little solitary so it could involve a little more teamwork and cooperation – this depends on the companies as bigger companies may have multiple engineers working on the same feature, so there is more teamwork and cooperation. On the other hand, smaller companies may have a single engineer working on multiple features by themselves.
Has there been a case where you really could not solve the bugs?
Chun Teck: There are cases where we really could not solve, which I’m sure will exist for many software companies. Then there are of course bugs that will take us days to fix, or bugs that we really cannot reproduce no matter what we try. This is in a way the more tedious part of the job. You really have to just look through the code and perform many tests, trying to narrow down the location of the bug. Eventually, we may seek help from others, or let others try to solve the bug, as they may bring in new insights. Worst case is when we give up and decide to rewrite that portion or do it a different way hoping that will clear the bug. Debugging is actually a very big part of the job. There are days where we spend more time debugging than coding.
What are the best parts of your job that also motivates you to go to work?
Chun Teck: I look forward to solving a problem that is unresolved. Because of my interest for coding, I am motivated to continue to fix the problem, solve the problem and build the feature or product. After everything is finished, getting to see the completed application running smoothly without any problems and being used by users gives me satisfaction.
How was your university experience studying computer science?
Chun Teck: I studied Computer Science in University, but actually started learning it in junior college where it was taught as a subject. My subject combination then was Physics, Chemistry, Mathematics and Computing.
I took a lot of IT modules in University and was exposed to a lot of new technology. I actually took a DDP (Double Degree Programme) in Computer Science and Mathematics but I decided to drop Math after 2 years since I would rather focus on computing. Though maths was related, the math you learn in university didn’t really apply to software engineering as you learn more about mathematical theories. I made the decision at the end of Year 2. This allowed me to take more computing modules. Eventually I converted Mathematics into a minor since I already took some math modules. Most of the people I know went on to become IT professionals rather than deciding to change to another field.
I think undergraduate formal training and all the core modules in the degree is really crucial in becoming a good software engineer. Online courses to learn coding may allow you to become a developer but you actually require a lot more in depth knowledge to become a good software engineer – for that you really have to understand about how operating systems, networks and so on work under the hood. Structured learning will provide a good foundation. Of course, that’s not saying that you cannot become a developer through online courses and self-learning, but I feel that proper formal training in a university will give you a good advantage.
Is a degree a necessity before becoming a software engineer?
Chun Teck: I feel that it is not necessary to have a degree, but non-graduates have to work a lot harder to actually learn things without having undergone structured learning in university. On the other hand, although university provides undergraduates with a lot of formal training, you may lack the hands on experience if you don’t take up internships (like me). Thus, learning a lot on the job is important as well – you will really get hands on experience about the full software development flow, which may differ across companies and products. In university, most of the homework and projects is about solving a given problem and getting the right answer. In the real world, however, there are a lot more crucial external factors that come into place, such as optimisation and scalability.
You can still go into CS in university even if you don’t know anything about computer science. It would however be good if you are little bit more fluent in Math-oriented, logical stuff – but it’s fine even if you were from an arts course before attending university. In university, the modules train you from bottom-up because they assume that you don’t know anything – even though you’d probably have to work a bit harder at the programming courses (the first few module you will take) as compared to those who are already somewhat fluent.
In terms of career aspirations, where do you see yourself in the next 5 years?
Chun Teck: I see myself doing the same thing, software engineering. But I would want to see myself as becoming more proficient and more of an expert in what I do. I hope to become more proficient in different fields within software engineering as well. There are two tracks I can follow – either management or technical. In the management track, you may gradually start to manage your whole team of programmers, but you may end up doing less coding. The other track allows you to advance and further your technical knowledge. Personally, I am more inclined towards the latter track as I am more interested in the technicalities rather than management.
Do you look for individuals with different types of ideas or different abilities? Do you think that’s important? Or is it just primarily coding abilities?
Chun Teck: It’s not just coding ability, but problem-solving ability. I mean, coding is easy to pick up. Once you learn one programming language, eventually it’ll be easy to pick up the other languages that the company you are joining uses. It’s important to know how to solve the problems that the product faces. Some examples include knowing how to build your application such that it can support millions of users, how to optimise your program and scale it, how to structure the architecture such that it is easy to add new features and remove features, and how to do things in a way such that you get fast, responsive applications which won’t consume so much data in a mobile application.
In short – It’s a lot of problem solving.
Harvard University has compiled this list of 42 professional competencies. So in your opinion, which of these would you consider the most relevant or more applicable to your work on a daily basis?
Chun Teck: Adaptability is important. There are constant new technologies out there. Our features and requirements for our products change constantly. All these require us to learn how to adapt and go with the current flow.
Attention to detail. That’s pretty important because as we have to pay attention to literally everything while we code. Even a minor detail or one single line of code can drastically affect our product.
Teamwork is also pretty important. Although I said previously that coding can be a bit solitary, we eventually we work as a team to develop a single product. So, we’ll still have to be able to work well with others.
Another thing is communication. This is pretty obvious also. You need to be able to communicate well with your colleagues.
Stress tolerance. This one can be pretty important because inside our field, we normally have a lot of tough deadlines and a lot of things to meet. So we will need to be able to take the stress if we need to be able to take the workload. Everything is very fast paced. Like I said before, if you encounter bugs, you can’t just give up even if you can’t find them. So it’s actually pretty important.
Continuous learning is also very important because there is constantly a lot of new technologies emerging. In IT, the things you’ve learned 5 years ago may become obsolete today if nobody is using it. So you have to constantly keep trying to learn – to keep discovering new technologies out there, whether it can be used inside the product, whether we can apply this in our work.
In a way, it’s the same as innovation. After learning all the new stuff, see how we can actually use it, how we can apply to our development.
Technical knowledge is a given.
Do you see the tech industry in Singapore developing further?
Chun Teck: Definitely. IT is still growing very fast in Singapore and there’s always a demand for software engineers. There’s high demand and not enough supply. So it would be good to go into this industry – the pay is pretty good as well. So if you’re a good programmer, good software engineer, a lot of tech companies will pay well for you. There is a lot of foreign talent in universities and I’m guessing in tech companies here. I think there is a shortage of local talent – a lot of Singaporeans don’t do this job, and go towards more traditional stuff such as banking, medicine, law.
If you’re technically good, regardless what race or what country, companies will hire you. Of course, there might be communication issues arising from your background. You should be fluent in English. But regardless of that, it’s the technical skill. If you’re good, people will hire you.
If you’re giving advice to someone much younger than you, who wants to do software engineering or computer science, what would you say?
Chun Teck: One or two courses will not suffice as formal training. To be a good engineer, you need a lot of technical depth to actually write good code that won’t break right at the start. Education is basically very important. For those who just want to do it as a hobby, simply taking a programming course online is okay. They get to play a little bit of coding. But if you really want to go into this field full-time or for the rest of your life, then you really need the proper background knowledge and depth.