Software Engineering Internship II

The first real internship I had was as a software engineer at a relatively well-established startup. It had the funding of Y Combinator, a prestigious accelerator for ambitious founders. Now, my second real internship was, as you guessed it, as a software engineer at another startup! Albeit, it was less prestigious at the moment though it also already had funding from other accelerators such as Antler.

If thou hath known me, my preference in software is mainly in the backend. This is mostly a lousy excuse because I just don’t enjoy front-end development that much. And so I ventured forth to find opportunities in backend development. Now, during the interviews, I was tasked to create a take-home project which is basically just a simple note-taking CRUD app. Sounds easy, until they told me that I had to use a JavaScript/TypeScript (TS) based language for the app.

Now, I pretty much code in TS all the time (second used language after Python). But during that time, TS was unfamiliar to me. I never even once used it. So, that alone was a challenge. But to be honest, once you know one programming language well, you can pick up other languages (with the same paradigm) quite quickly. So for the task, I spent about 2 days, submitted it, and proceeded to the interview. The interview consists of 3 rounds. It was straightforward. In the first round, the CTO and one (and only) engineer vibe checked me and asked general questions. The second interview was about how I did the task, and the last one was necessary because I negotiated for better pay.

Anyway, I got the job and started working during the fifth semester (while academic studies were ongoing). This second internship was more laid back because the first month was just spent on me getting used to the environment, business model, and tasks. To my absolute surprise, however, I was tasked to create a mobile app from scratch. Mind you, I’ve only had experience in Flutter but they wanted me to do it in React Native. Not going to lie, my heart dropped a bit when I realized I had to spend the next 3 months working on a mobile app.

My grudge against mobile app development is due to several factors. First, it is resource intensive because I had to open a smartphone emulator to see my progress. The other option is to use my phone but this means that I can’t really use any other app during development time. Otherwise, I have to restart the connection. Second, I had to develop for both iOS and Android. This is excruciatingly annoying because what looks good on Android may not look as great on iPhone. Not only that, some of the native elements behave differently which just makes it annoying and hence I have to make the components from scratch. Third, I do not have an iPhone!! And because of Apple’s policy, I can’t emulate an iPhone on my Windows computer.

This is perhaps the most annoying factor because that means I can’t debug any mistakes on an iOS device since I can’t really see them! I have to wait and ask for another engineer who has an iPhone to check it out. Fourth, most mobile app development is basically just frontend but for mobile. While it is not exclusively so, the mobile app I worked on is mostly a JSON beautifier that fetches data from the backend. Now, I don’t think this is bad, and of course, you can have underlying logic on the mobile app itself. However, in my experience, this holds true and since I don’t enjoy frontend as much as backend, it adds to my disdain for mobile development. These are mainly the reasons why I try to avoid mobile development as much as possible.

But oh no! The first day has started and so you must do what you got to do. And so as instructed, I spent a long while familiarizing myself with the team, environment, and mobile development itself. This month passed by quickly since I mostly just experimented and reported it. I can’t help but wonder now if this month was spent effectively. I mean if the contract is 3 months, I’d imagine that you shouldn’t spend 1/3 of that time just to experiment. But, I am not really complaining since I like learning.

The real challenge began in the second month when I actually had to code. I remember a lot of push-back from my seniors which was really helpful. I learned a lot of best practices and good habits to write better code. Coming from a total beginner, this was completely expected. I’m glad that they were patient enough to review my code thoroughly. And I mean thoroughly. My mentor is only slightly older than me so he probably had a couple of months of full-time software experience as well. Hence, his feedback was sharp and set to a high standard. It’s great, but also taxing since sometimes I feel like it’s too rigid. But I often see why he criticizes it and comes around to see it his way (though not all the time). Overall, it’s a great environment. The people are supportive, kind, and great at their job.

The second month came by and went quite quickly. As did the third month since it was mostly just development. I don’t have anything else to add, to be honest. It wasn’t boring, but I struggled to remember anything memorable. During development, since we had to start from scratch, I often worked on basic features like authentication, checkout, notification, history, etc. This is in contrast to the first SE internship where I worked on some cool features like a CV generator and SEO stuff. I could probably only recall that one time we had an offline meetup during an international event held in Jakarta. It was fun, I met with the entire team, including engineering (at this point the startup had 2 engineers), marketing, design, and even the CEO. Since the event was about promoting your startup, I managed to spend my day as a promoter for the startup. I gave out flyers, talked to potential investors about the startup, and had a blast.

Overall, it was a pleasant experience. I was going to compare this internship with my first but it wasn’t really fair. On my first one, I worked on something I was more interested in so there is already a clear bias. Other than that, we had more offline meetups (almost weekly) so there was more connection. I am even still in touch with the CTO to this day to help him vet potential candidates. However, the latter gave me an entirely new experience. I never once imagined working as a mobile developer, and yet I did it anyway. It was enjoyable, but I don’t think I’ll do it again. Once is enough!