Come December, it will be officially 2 years since I joined Janio as a Software Developer. My journey would be considered quite unusual to some. I first started out as an intern in November 2018, following which, I worked part-time for the company in my final semester before converting to a full-time role after graduating last May. Coming from a Mechanical Engineering background with little exposure to, or experience, in software development, this switch was not without its challenges. I hope that my sharing will reveal some of these key experiences and lessons learnt along the way.
Discovering A New Passion
Budding interests in computing
I have always enjoyed building things and learning how things worked (which was one of the reasons I chose to pursue Mechanical Engineering), and I think this lends itself very well to the world of software engineering, where you are required to sometimes understand complex problems in order to come up with a solution.
I was first introduced to code in year one of university, where every engineering student had to enroll in an Introduction to Computing module. Over the course of the semester, I learnt basic computing concepts such as variables, loops, conditionals, and pointers. I found the problem-solving aspect of programming to be challenging, yet rewarding — it was like trying to solve a puzzle, something that I figured I was quite good at. It didn’t occur to me at that point in time that this was something I could do for a living.
Making the switch from Mechanical Engineering to Software Development
However, after gaining more exposure to the Mechanical Engineering industry, I decided that being a Mechanical Engineer wasn’t right for me. At the end of my second year, I took the leap and applied for a change to a Computer Science course. Unfortunately, this occurred during a period of peak interest in programming-related jobs, resulting in my request being denied. Despite this setback, I was determined to find a way to make a career out of computing. I then decided to start learning programming on my own.
I knew that the world of computer programming is undoubtedly vast and multi-faceted, ranging from mobile development to web development, artificial intelligence to computer networking… the applications are virtually endless.
The first challenge I faced was not knowing which path to choose or which discipline to commit to. After some deliberation, I decided to go with Python as my primary programming language, as the syntax was friendly and the language was general enough to keep my options open. I then took some time to explore different software developer paths, and eventually settled on web development, mostly focusing on the backend (with a bit of frontend development).
The difficulty comes after mastering the basics [of programming] — what do you do next? After learning about loops, arrays and booleans, what can one do with this newfound knowledge?
The next difficulty I faced was trying to figure out things on my own. The thing is, there are a lot of great resources available on the internet. The challenge was troubleshooting an issue, sifting through the expanse of information available in order to accurately find the solution to my problem. I would say that the ability to debug a faulty code and to find answers online (translation: Stack Overflow) is one of the most important skills you can have as a professional developer.
I think one of the best ways to learn and improve as a developer, short of landing an internship or a job, is to work on your own projects. Personally, following along a course or tutorial to build your first note-taking app or an eCommerce replica may not be the best way to learn. It’s not uncommon for people to fall into the habit of going through the motions and replicating what the tutor teaches, without internalising what is being taught. By actually building something that you find useful or interesting, you will have a greater motivation to work through the project on your own. The learning is also less “scripted” — you tend to run into unexpected problems that you will have to work at to resolve.
Lessons learnt from your own projects will stick with you much longer than any explanations from a tutorial.
After learning the basics of coding, I felt that I needed some practical experience to apply what I had learnt. It was around this time that I started looking for projects and internships. Through a mutual acquaintance, I got to know of Jun Kai (our CEO) and the help he needed with a small software project for his startup.
On this project, I helped the company create a web automation framework using Python and Selenium to control interactions with their web applications and write test cases for the frontend. Shortly after completing this project, I decided to continue with another internship here.
The startup experience
In working for a small startup, I realised that I was given the opportunity to work on larger and more complex features that made a direct impact on the company. This helped me to improve by leaps and bounds as a developer, mostly because of the steep learning curve and exposure to various aspects of software development. It was also at this time that the company was starting to expand in business and in the size of its workforce.
As my internship came to a close, I asked if they were willing to have me on board as a part-time developer, and was pleasantly surprised to be offered a full-time role instead!
Key contributions and impact
Fast forward to today, I have developed several features and applications over the past 2 years. This includes creating a web application to document our external APIs and providing a platform for potential merchants to test them out, to refactoring and redesigning how we generate our tracking labels. One of the most impactful contributions I made to our system was to create a new framework to fetch updates from our partners. As a company in the logistics industry, one of our key services is to provide our consignees with on-time and reliable tracking updates. A technological challenge in the industry today is the synchronicity of those updates between different systems, and at Janio, we work closely with our partners to bridge that gap.
Over the course of several months, I created a new framework to reliably configure, log, and monitor the fetching of updates from our partners. With this new framework, we are now able to configure specific parameters, including how often we fetch updates, how many orders we are fetching per batch, and the desired time between fetches per order. Improved monitoring and logging have also been made possible with this framework, which allows us to troubleshoot and gain insights into delayed updates or any other issues we may face when attempting to fetch those updates.
What it takes to be an effective Developer
One of the most important takeaways I’ve gained from this role is that being a professional developer isn’t just about being a good coder. Beyond that, you have to be a great communicator.
From listening to the Product team and business owners about what they want from the feature, to explaining the technical implications and limitations of developing a feature in a certain manner, having a thorough understanding of the business and its requirements will enable you to develop features with more clarity, and ultimately, achieving a better product.
After 2 years of working as a Software Developer, I’m glad I decided to take this risk and carve out a career path on my own. I was fortunate enough to be given the opportunity to discover a profession that I enjoy.
That being said, my process of learning and improvement is far from over. The tech landscape is evolving at an extremely fast pace, with technologies changing at an exponential pace and new ones emerging every few years.
To me, being a developer is a lifelong learning journey and I’m excited to see what comes next!
We're still looking out for tech developers! You can view open positions here.