Things i’ve learned from my 2-month Internship at GO-JEK
TL;DR I’m so grateful that i chose GO-JEK as my place to learn, because the Engineers here are not only great at coding, but also their soft-skills are the best amongst the Indonesia’s Engineers. And here i’m talking about things that i’ve learned from technical and non-technical side.
My 2-month journey as an intern at fastest-growing startup in Indonesia has finally come to an end, the cultures that we have created within the squad, are on their way to extinction, and soon to be a myth. I got this mixed feeling thinking about the goodbyes and the cries on our last showcase, but hey, life goes on. So, to start over, my first step here is to tell the world about what i did at GO-JEK and what i have really learned from them. So, here we go!
Life After the Bootcamp
So, the day after the bootcamp ends, we the interns were placed in GO-PAY System Division and 12 of us were separated into 2 teams, and each team got the same 3 projects. GO-JEK is one of those startups that use pair programming as a way to develop products, so because there were 6 people on each team, every projects will be handled by 2 people with pair programming way, and will do the pair rotation every 2 weeks(just for the interns), and also the development is using trunk-based development.
So, what are the projects? And what have i learned from these projects?
The 3 projects that were given to us are open source projects that are pretty aw-mazing(this is my way of telling you there’s no words that fits the awesomeness of these projects, at least for interns). So here are the list:
A. Stream Processing for GO-JEK’s Logs,
B. LXC Scheduling,
C. Centralized Configuration Management for Microservices.
Stream Processing for GO-JEK’s Logs
Previously, our senior engineers in GO-PAY already created a log management system called BaritoLog that is aimed for service discovery, log forwarding, and provisioning. So here is the system design of BaritoLog.
As we see here, the BaritoLog is just forwarding all the logs to ElasticSearch through Kafka. Like, the raw logs. So it becomes meaningless right? Thats where our project A come in handy. A stream processing.
So where is this stream processing located at on the diagram above? Yup, the orange ones. What we do here basically was ‘just’ creating another consumer-like worker, that do the logs aggregation and analytics, and then store it to the database.
Here is our tech stack and simple design for project A.
The stack here are Golang for worker, InfluxDB for the database, and rails for the visualization. And actually this design did not cover the whole project, because there are still things that we havent mention such as traffic prediction, so you can see more here.
And for the record, this was the first design that me and my peer used. But as the time goes by, we saw some flaws to this design, mostly about the database and visualization, so the next pair that rotate to this project changed the design to using mongoDB and vue js, and also isolate every services by using docker container.
LXC Scheduling
I actually didnt have the chance to rotate to this project, so you can just directly see the wiki here. But, basically this project is about automating the linux container scheduling, like which LXD should we deploy the LXC to. And we do this by checking the free capacity of the memory of every LXD.
Centralized Configuration Management for Microservices
These project is about dynamic configuration management that can be used to define microservices’ configuration easily, just by subscribing the agent to specific service and use the service token. So here’s the design that the first pair created and still be used till the very end of the development.
There are 4 core components of this project, the server, UI, CLI, and App Client(Agent). And these 4 components cover up about Authentication and Authorization with oAuth2 style(access token and refresh token) that we implement by ourself, docker, postgres, Cobra for our CLI, redis for PubSub between server and agent, golang for the server, and vue js for the UI.
You can read the gitbook here if you are curious about this one.
Pretty great stacks for an intern right? but we don’t actually just learn tech from the projects that are given, we also like to ask the mentors — that sometimes be everyone-joins kind of talk — about anything, like docker, kubernetes, and idempotency of HTTP Request Methods, and also about how to write a good resume.
And what about the non-technical side?
Aside from the technical craziness, we also have another learning plan called LAP(Learning Action Plan) with our non-tech mentors from Go-Academy for every 2 weeks. So, GO-JEK don’t want us to be just good at technical skill, but we also have to hone our mindset and soft-skills.
Here on LAP, we can talk about everything, your personal issues, asking for feedback, talking about GO-JEK, and more importantly, you are given tasks that can help you achieve soft-skills that you want to have or maybe just to improve the ones that you already have. And my previous post actually was one of the tasks from my LAP.
In general, 2 things that i have learned both in tech and non-tech, and i also told Ajey(GO-JEK CTO) about this too at my very last showcase, are:
Don’t be afraid to speak up about your thoughts or ideas, even at GO-JEK level, because everybody has different metrics on measurement. Things that are“just good” for you, can be “brilliant” for others. So, speak up!
Every decision is right, at the time it is made.
The ends.
So, thank you so much GO-JEK for everything you have done for me. Thanks to the Go-Academy team that have made a great program for us. Also for the Mentors, it was a nice experience to really meet and sharing knowledge with you guys, and thank you for teaching us about things that we cant get at college. Last but not least, thank you so much and what a truly amazing journey that we have got for this past 2 months, my fellow interns. Lets keep on learning, together!