I Tried to be a Full Time System Engineer for 2 Months

Vincentius
Sep 3, 2018 · 5 min read

My first opportunity to write a code is when I was in my high school as a complete noob in computer-related stuff. And the first thing that came in my mind was, “computers are only for people that are smart enough and writing a code is not an easy task”.

Fast-forward to the end of my high school, I need to make a life decision — what degree should I pursue in. When smartphones are getting their popularity really quick, I started to see that computers has a really good potential to solve our daily life problems. Even though I still remember precisely how hard coding was, I made a life decision to get a degree in computer science.

3 years after, I still having a hard time when asked to code something that’s really new. Something that you cannot google to get a reference. And yesterday, I noticed something I’m doing wrong my whole life.

“The current education system never teach us how to create. Instead they teach us how to copy.” — Ajey Gore (Group CTO of GO-JEK)

When I receive a new task, I tend to find a tutorial on how to get it done. Finishing the task as soon as possible, then move on to the next task. By doing our tasks this way, we will quickly fall on the mindset of a routine. We repeatedly do the same thing again, and again. Even I might repeatedly do the same mistakes without really know why it’s happening.

With my fellow coworkers

During my 2 months of internship at GO-JEK, we, the interns divided into 2 teams. Each team will work on the same set of projects, so on each project, there will 2 solutions of the problem statement. We are competing each other to deliver the best solution for our projects. To get our projects done, we do all from the system design to the code implementation from scratch. Yes, we work like a experienced full-time system engineer. But we don’t have any experience yet. There’s no step-by-step tutorial and voila, it works. Instead, we do some researches to create something new. This is how everything is done:

Iterations

Agile software development process (source : Nascenia)

To make sure our project went smoothly, we do make ourselves experienced as soon as possible by learning and doing. We are doing our projects in iteration. In each iteration, we are told to keep the to-do list small enough so we can have enough time to think and experimenting. By having more time to do an experiment, we do learn the reason behind why we’re using particular practice and know all the unexpected thing that could happen if we solve a problem in that particular practice. Having iterations really helps us to keep track of our project and learning progress.

The Kanban Board

This is the really new thing that I learned. This is a really good practice to keep track on the progress of your work, but really, almost nobody follows it. The simplest Kanban Board consists of 3 part, “to-do”, “doing”, and “done”.

The simplest Kanban Board with 3 step workflow (source : LeanKit)

When a project starts, we put every single task that necessary to get the project going on the “to-do” part. Ordering is important here, as some tasks are dependent each other. We start moving the card on the “to-do” part to the “doing” part. The rule of thumb here is, you only can do one thing at a time. In this way of organizing tasks, it will help you to keep focus on what you’re doing. The Kanban Board also can be made accessible by your team, so you can assign specific tasks on the “doing” partition to yourself, or your teammate.

Feedbacks

“I never know people that gives feedback that often!”

Yes, that’s what happened in each iteration. In each iteration, there will be a moment where your coworkers give feedbacks on what you’ve done. We listen on what other people are thinking, as they might be see the problem from the other side, or see problems that we cannot see. As feedback arrives, the opportunity of improvement is wide open. Eventually, we will reach the level when we’re doing the best practice. Making a solution that covers the problem completely as the TCP Robustness Principle said :

“ Be conservative in what you do, be liberal in what you accept from others”

But keep in mind, we are not stopping there. As the world evolves, the problems can change a little bit without us even notice. Feedback also helps us to tell in which direction the world evolves.

At first, I thought it’s a good idea to store server metrics to a RDBMS like PostgreSQL. But then after doing some exploration and experiments, I discovered the Prometheus Time Series DB is the current best database to get that done. If you’re having similar problem, try to give it a shot!

We are doing an open source project, this is our system design for Linux container scheduling. During the making of the design, we did experiment with different tech stacks, and gather feedbacks to make improvement for the design

Collaboration

We work like all engineers in a organization. We do collaborate. This is a new experience for me as an intern. We don’t code for ourselves, but we code for everyone in the organization. Doing the best practice in coding is expected here. In order to achieve that, we do pair programming. As we code, we constantly get feedbacks from our pair about our implementation, design patterns, or even the potential bug. Another engineering principles that we must follow is TDD (Test Driven Development). We write tests before we code to ensure our code is working as expected and fulfilling the requirements. Tests also help us to focus to the goal of the code we’re currently developing, even when we switch pairs.

Last but not least, be confident on what you currently have. I did notice each of us the interns have unique strength and weaknesses. Don’t be afraid to get your hands dirty on big projects, because, we always have the opportunity to learn everyday.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade