Interning at Nimble

Company retreat to Phuket. I’m the person on the right with the weird short.

Prologue

I’m a second-year student at Bandung Institute of Technology, taking a microbiology major. Unfortunately, Nimble is not a scientific research company and have no project related to bacterias. Nimble is a company that builds software with expertise and passion. I got that from our website 😉.

I applied to Nimble last March, at Ask HN: Who is hiring? when they open a 6-month-long software engineering intern position on the web team. I have built several side projects during my studies, but I had zero professional experience. I was nervous when I applied. The night before the interview I crammed algorithm & data design tutorial. I tried to forget all the growing bacteria techniques I learned during the day.

Then I realized they don’t do algorithmic testing. Instead, they gave a simple Ruby on Rails take-home project. I finished the take-home project within 10 hours of work, thanks to my failed startup-wannabe project that also used Ruby on Rails.

I got accepted. I was thrilled.

They helped me with the visa and university leave permission for the whole semester. They bought me an airplane ticket from Jakarta to Bangkok and provided me with 2 weeks of a hotel while I was searching for an apartment. I went from a broke university student to a soon-not-to-be-broke university student traveling abroad and staying in a fancy hotel.

The Beginnings

On the first day of work, I got my work laptop and my desk. From three years ago, I dreamed of buying myself a Dell Ultrasharp 24" monitor but couldn’t afford it. Then here I had two of the exact same monitor that I dreamed on my desk ready to be used.

In the beginning, I worked on various projects:

  • Writing component testing using Jest and documentation for a React.js application that shows our company’s open source projects
  • Working on a Ruby-on-Rails and Vue.js application doing graphs to show agile velocity and agile points for each team sourcing data from Pivotal Tracker and JIRA.

And my favorite is, when our CTO Olivier, told me to investigate why the test suite in an established web project suddenly started to take way more time than before. The test suite for the project used to take ~23 minutes on our continuous integration platform (CI/CD). Then for some unknown reason, the testing time became ~35 minutes and it stayed there for a couple of weeks.

I spent a couple of days learning test profiling and benchmarking tools. I searched through the CI build history to find the commit that caused the slowness. In the end, we found the culprit, created a workaround, and we managed to reduce the time down to ~15 minutes yay!

Before I came to Nimble I had never done a code review and I always coded on my own.

Before I came to Nimble I had never done a code review and I always coded on my own. During the first three months, I learned how to do code review, how to write better code so someone can read and review it easily, how a product manager fits into development workflow, and how to work in a team.

Side Story

Aside from day-to-day work task, at Nimble we have a monthly “hacking” event called Nimble Growth. It’s an interesting, memorable, yet challenging event. Each month we had 1.5 days starting from Thursday noon till Friday to work on nearly anything, and to present it at the end of the day.

Many of my Nimble Growth sessions started as a small internal event but ended up leading to something I’ve never imagined.

On my first Nimble Growth session, I created a web application called What’s This Fruit. It’s a machine learning powered web application to differentiate fruits. It used a pre-trained Keras model, then we fine-tuned it using a publicly available dataset and made it into a web application using Tensorflow.js. We followed this and this tutorial to make it work. I remember during the presentation I brought a banana and an apple and the application could differentiate them…woohoo.

For my second and third sessions, I teamed up with Micky, my colleague who sits next to me, to compare libraries needed to make a real-time Ruby on Rails application. We chose that topic because Rails built-in solution, ActionCable, is considered pretty slow when handling a lot of connections, so we sought for alternatives. We ended up comparing ActionCable, AnyCable, and Pusher. We compared the ease of implementation, cost, maintenance problem, and the performance by benchmarking them on Google Cloud.

The interesting part is that Olivier told us to present that project on a local Ruby Tuesday Meetup!

Speaking in front of colleagues is already terrifying, and now we had to do it in public? I attended the Ruby Tuesday meetup regularly, but I never imagined myself being the speaker.

Olivier gave us a chance. We took it. More than 30 people came. It went much better than I expected.

My fourth Nimble Growth session is the most interesting one. Our company held a challenge for our web team with prizes of two all included trips for RubyConf Malaysia 2018. There were two categories for the challenge:

  • 1. Best performer, someone with the highest agile points tally during that month
  • 2. Best presenter, someone with the highest voting score on the upcoming Nimble Growth session.

I had almost zero chance for the best performer category, so I pushed my luck for the best presenter category. The night before the Nimble Growth session, my parents bet I wouldn’t get it. You know, I’m just an intern. And why they would give the ticket to someone who stayed in the company for only 7 months?

I tried my best. And for some reason, I got the best presenter category.

I, Olivier, and Micky flew to Malaysia. We got an amazing hotel room. I had a blast. It was my first tech conference. The most disappointing thing was, we didn’t take any photo there.

Finale

Back to the office. Three months after my internship started, I was assigned to the Overblock team and stayed there for the rest of my internship. The Overblock team was building a cryptocurrency trading application.

When I thought code review was hard, it became even harder when I joined the Overblock team. Because we are building a trading platform, security is the first priority. Every team member had to review each other’s code extensively. We work directly under Carlos, our CEO. He’s internally infamous for maintaining a high bar of code quality and has a strict code review. Most of the time I have to think twice or three times before implementing something, otherwise, I would have a bad time during code review.

During my whole internship, I’d say the best part of it is when I worked with the Overblock team. The development team consisted of Carlos, I, An, and Ros, some of the best engineers I’ve ever worked with. They guided me from the start, explained me the codebase, and taught me a lot of Ruby on Rails best practices.

Because of the difficult nature of the application, I poured blood, sweat, and tears, just to make one pull request go through the review. I felt like bonds among us grew stronger for each merged pull request.

Until today, I just laughed when one of us jokingly call our own team, wait for it, the Overblock family.

Epilogue

One common theme I saw at Nimble was how much you have to learn every day. Team rotation, role rotation, and the high rate of new projects kicked us out of our comfort zone. So you have years of HTML, Javascript or React.js experiences when you joined? Good luck designing the database schema on the next project. Hmmm, you worked mostly on the backend stuff on the previous jobs? Good luck dealing with align-items and justify-content soon. Oh, you have both front-end and back-end experiences using Ruby on Rails? Great, now go set up Terraform on the new project.

I’ve never gone to countries outside of South East Asia yet but based on talking with several people in the field, I’m sure Nimble is one of the best tech company in South East Asia.


If you love a great and balance work pace, Nimble is hiring for engineers and product people to join our team Bangkok, Thailand✌️