Menjadi Expat Senior Software Engineer!

Ditengah siang bolong di hari yang cerah, sewaktu makan siang bersama tim, manager gue tiba-tiba mengucapkan satu kalimat yang cukup membuat gue tersedak: “Today is a special day because I decided to expedite Ayyub’s probation end date today”. Dan, ya, setelah one-on-one meeting bersama reporting manager (dan menyelesaikan e-course tentunya), gue secara resmi menyelesaikan masa probation.
- Chapter I - Awalnya gimana?
- Chapter II - Apa yang Beda?
- Chapter III - Gimana adaptasinya?
- Chapter IV and beyond - What’s next?
Ditengah siang bolong di hari yang cerah, sewaktu makan siang bersama tim, manager gue tiba-tiba mengucapkan satu kalimat yang cukup membuat gue tersedak: “Today is a special day because I decided to expedite Ayyub’s probation end date today”. Dan, ya, setelah one-on-one meeting bersama reporting manager (dan menyelesaikan e-course tentunya), gue secara resmi menyelesaikan masa probation.
and that’s my cue to continue writing my career journey, as it was last updated last year. Shall we start?
(grab some snack, this is quite long)
===
Chapter I - Awalnya gimana?
Pertengahan tahun lalu, seorang talent sourcer mengirim gue pesan lewat linkedin: “We’re currently looking for Senior up to Staff level Back-end Software Engineering. Would you be interested in a quick introductory call to exploring a role in travel space during this exciting time?”. Dua kalimat ini terdengar menyeramkan, tapi menarik dalam waktu bersamaan. Menyeramkan karena gue jelas ga punya persiapan apa-apa waktu itu. Gue emang berencana untuk pindah perusahaan, tapi ini kayanya terlalu extreme. Pertama, gue bukan senior-to-staff level dan gapunya kualifikasinya, apalagi buat perusahaan segede ini. Kedua, gue udah lama ga interview, apalagi dalam bahasa inggris, dan jelas persiapan gue nihil. Tapi ini menarik karena: kapan lagi punya kesempatan kaya gini?
1 hari berselang, akhirnya gue balas dengan dua kalimat: “Here is my CV. Looking forward to discussing this opportunity further!”
===
Setelah introductory call, gue diberitahu bahwa ada beberapa tahapan buat interview. Ada 4 technical interview: coding interview -> platform interview -> system design interview -> behavioral interview. Sebagai gambaran, coding interview adalah fase dimana gue harus menyelesaikan beberapa (biasanya 2-3) soal coding. Platform interview dan system design interview agak mirip, tapi platform interview lebih berfokus pada pengetahuan tentang sistem backend, sedangkan system design lebih berfokus pada pilihan arsitektur kita. Sedangkan behavioral interview adalah fase untuk mengecek bagaimana sikap kita terhadap kultur perusahaan.
Sebagai insan yang rendah hati dan sadar diri, gue punya satu jurus jitu: memilih jadwal interview terjauh untuk persiapan. Rata-rata jarak antar interview gue adalah 1 bulan setelahnya (diapproach pertama bulan agustus, interview terakhir januari). Gap antar interview ini gue pergunakan sebagai persiapan, entah belajar, mock interview, atau bahkan interview beneran di perusahaan lain. (hehe maaf g***k)
Yang unik dalam perjalanan interview ini adalah gue merasa bahwa perjalanan interview ini sifatnya dua arah. Mungkin karena gue selalu milih jadwal paling sore, semua yang menginterview gue sangat santai dan gue punya waktu untuk ngobrol beberapa hal terutama tentang company dan tech culture mereka. Bersama interviewer pertama gue, gue ngobrolin tentang pengalaman dia ngebenerin workflow culture disuatu perusahaan, sampe produk yang awalnya kacau dan banyak bug, bisa dibuat ulang dan launch jauh lebih cepat dari tim lain yang berusaha ngebenerin productnya. Dia bahkan memberi gue rekomendasi bacaan buku: “The Phoenix Project”. Interviewer terakhir gue (yang jadi reporting manager gue sekarang) bahkan lebih ekstrim. He literrally said: “We already know enough about you, it’s your time to know more about us” dan we end up talking for almost two hour, sampe gue sendiri yang berhentiin interviewnya gara-gara gaenakan karena kemaleman.
And this part is enough to convince me to take part of the company :)
Chapter II - Apa yang Beda?
Pertama kali datang ke acara orientasi karyawan baru, gue mengalami sedikit culture shock. Gue duduk disuatu ruangan bersama 4 orang lainnya -satu blaster italia/spanyol, 2 orang india, dan 1 orang thai-. Yang membuat culture shock bukan cuma seberapa diverse latar kebudayaan orang yang ada disana, tapi juga how curious and well prepared orang-orang disana. Awalnya, gue mengganggap acara new hire akan jadi acara yang “yaudah”, kita dikenalin sama perusahaan, aturan, value, bla-bla-bla. But turns out, di acara yang gue anggap “boring” ini, semua orang do they own homework dan punya pertanyaan yang cukup bagus. Salah satu orang sampe bisa tahu CEO sekarang adalah dulunya CEO dari perusahaan yang diacquire Agoda (kayanya gue yang kurang baca aja sih) dan pertanyaan-pertanyaan yang mereka tanya sampe bikin gue mikir: “kok bisa ya orang kepikiran buat nanya ini?” (in a good way, tentunya). Nuansa ruangannya bahkan cukup buat bikin gue ikut-ikutan nanya 1 pertanyaan (biar ga malu-maluin diri sendiri sih)
![]()
===
Pertama kali masuk dan mulai bekerja, culture shock adalah makanan sehari-hari gue. Kalo ditanya apa yang beda, gue bisa jawab dengan satu kata: semuanya. Pertama, produknya beda. Sebelumnya, gue megang games, which is customer first. Kelancaran game adalah prioritas. Sedangkan sekarang gue ada di tim fraud, which is the opposite. We exist to check and prevent customer to do fraud. Perbedaan ini bikin banyak hal jadi jauh berbeda. Di games, kita menggunakan waterfall approach, dimana semua hal harus kelar dulu baru bisa dirilis ke production. Kita kerjain project satu demi satu. Disini, kita pakai scrum approach, dimana kelar satu task bisa langsung dirilis ke production. Kita kerjain beberapa project sekaligus. Tech stack yang digunakan juga beda. Games lebih banyak menggunakan memory-based storage (kaya redis) dan simple SQL, dimana memang fungsi sistemnya cuma buat nyimpen data pengguna dan kita ga banyak berinteraksi dengan sistem lain. Sedangkan di fraud lebih banyak pakai stored procedure dan message broker, karena kita berinteraksi antar sistem dan data pengguna mesti diolah juga. Bahasa pemrograman juga berbeda. Sebelumnya, gue menggunakan golang, yang paradigmanya procedural. Sedangkan sekarang banyak menggunakan Scala, yang paradigmanya functional. Perbedaan bahasa ini juga cukup bikin gue kagok, karena gak terbiasa menelusuri kodenya.
Perbedaan lainnya adalah scope pekerjaannya. Kalau digames, we are independent, small project, kalau di fraud we are a part of a system. Kalau digames kita kerja di satu-our own repository, kalau difraud kita kerja dengan entah berapa banyak repository. Di games, kita jarang butuh sesuatu dari pihak lain dan kalaupun butuh, kita bisa minta feature request yang akan dikerjakan sama tim sebelah. Sedangkan sekarang, kalau kita butuh sesuatu, kita harus nambahin sendiri apa yang kita mau di repository tim terkait. Ini ngebuat game yang dimainkan berbeda. Di games, who knows it all is more valued. Yang bisa ngejelasin fitur game yang dibuat 3 tahun lalu dianggap sepuh. Disini, it’s impossible to know everything. how fast you can understand and act matters more. Ini juga ngebuat standar penulisan kode harus lebih strict. Di Shopee, yang baca kode adalah orang itu-itu aja, sehingga code review dianggap cukup asal timnya ngerti. Disini, penulisan kode tidak boleh punya style, semua kode harus seolah ditulis oleh satu orang agar kode lebih cepat dimengerti.
Perbedaan lain adalah kultur pekerjaan. Pertama, tim di agoda datang dari lebih dari 90 negara berbeda, yang punya kebiasaan dan kultur berbeda. Beberapa orang mungkin akan lebih blunt dari orang lain. Beberapa sangat on-time. Beberapa lebih ramah dari yang lain. Dan yang mungkin paling berpengaruh, they have their own english accent :). Kedua, Agoda is a hybrid workplace. Kita WFO 2 hari dan sisanya WFH. Kaya yang sebelumnya gue bilang, WFH punya beberapa kelebihan dan kekurangan. Kelebihannya jelas, kerja jadi lebih santai. Gue bisa kerja sambil ngejemur baju, masak mie instan dan bersihin apart. Tapi, kalau lo butuh sesuatu/pengen tahu sesuatu, jelas lebih susah karena lo harus nge-chat orang terkait, yang mana belum tentu dia bisa jawab saat itu juga. Ini jelas bikin sulit sebagai anak baru karena gue gatau apa-apa.
Chapter III - Gimana adaptasinya?
Beberapa minggu pertama jelas cukup menantang. Anak baru yang gangerti apa-apa dihadapkan dengan bahasa pemrograman yang baru dua hari dia pelajari (dia bahkan gabisa nelusurin dan baca kodenya) dan tools-tools baru yang dia baru pertama liat, diminta ngerjain sesuatu yang dia bahkan gatau itu apa. Di beberapa task pertama, gue sangat mengandalkan kolega-kolega gue untuk menjelaskan ke gue ini apa dan apa yang harus gue lakukan. Gue juga cenderung memilih pekerjaan-pekerjaan yang sudah jelas apa yang harus dilakukan dan/atau ga berkaitan dengan business flow.
Cara ini jelas gak sustainable. Pertama, kolega gue gak selalu ada. They are supportive, but they had their own task. Most of the time, mereka sibuk dengan tugasnya masing-masing. Gue harus bisa liat situasi, apakah mereka sibuk atau engga untuk bisa nanya di kantor, dan biasanya gue nanya sore-sore buat pertanyaan-pertanyaan aneh/ ga penting. Dan ya, ini jelas lebih susah dilakuin kalau WFH. Kalau dikantor, gue bisa nanya pertanyaan-pertanyaan ga penting, tapi untuk WFH gue harus bisa se-efisien mungkin untuk bertanya. Tak jarang, gue ngelist pertanyaan buat ditanyain waktu ketemu di kantor. Dan ya, gue gak bisa nunggu kolega gue available dulu baru kerjaan gue jalan. “You are not a junior software engineer that had to be spoonfed”. Kedua, bahasa inggris gue belum sebagus itu buat memahami bahasa inggris business level + aksen beda-beda. Di meeting pertama tim, gue ga ngerti mereka bahas apa :). Kadang, gue ga bisa ngikutin omongan mereka jadi gue sering minta ulang atau kalau pasrah cuma bisa bilang thank you. Ketiga, gue gak bisa milih pekerjaan yang gampang terus-terusan. Akan ada masanya dimana gue harus berani ngambil pekerjaan yang bersinggungan dengan business flow, cepat atau lambat. Gak semua sprint punya task yang gampang, dan di sprint yang sibuk, jelas pekerjaan yang “gampang” ini prioritasnya lebih rendah/dibuang. I had to step up my game.
Awalnya, gue kira bahwa ini cuma fase awal-awal kerja dimana gue masih belum tau apa-apa, dan akan membaik seiring semakin lama gue bekerja. Tapi, makin lama gue bekerja, bukannya gue makin tahu semua hal, malah semakin gue sadar bahwa kolega gue juga ga tahu semua hal. Ada yang udah kerja lebih dari 5 tahun, dan masih perlu bertanya ke kolega yang lain. Banyak task yang merupakan barang baru, yang ga pernah dipegang sama semua orang. No one knows everything, really. And my mindset shifted. The goal is not to know-it-all, the goal is to figure out how to know what you need, just enough to do your task properly. Do lean learning, learning just enough, just in time to move forward efficiently.
Dan ya, setelah gue menyadari hal tersebut, goal gue berubah. Alih alih bertanya ini apa, gue mulai bertanya gimana caranya gue bisa tau hal ini. Gue mulai mengusahakan mencari tahu terlebih dahulu, bertanya ke kolega diusahakan menjadi opsi last resort ketika gue udah muak dan gapunya waktu. Perubahan mindset ini membuat gue mulai kreatif. Gue menyadari bahwa sesuatu harus didiskusikan dulu disuatu tempat sebelum jadi suatu action item. Sebelum gue mulai ngelakuin sebuah task, gue membiasakan mengubek-ubek slack untuk mencari tahu background dari suatu task. Turns out, fitur search di slack cukup powerful. Gue juga jadi tau gunanya fitur “Show History” di Git, karena gue sering pakai buat nyari tau kenapa suatu kode ditulis. Membaca pull request lampau dan komen-komennya kadang berguna untuk mengetahui konteks suatu kode.
Gue juga mulai sadar bahwa ga semua hal didunia ini baru. Fitur search di pull request git ternyata cukup membantu buat mencari task-task yang mirip, dan bahkan terkadang bisa jadi referensi. Alih alih membuat suatu hal yang baru, kadang penting untuk menoleh kebelakang dan melihat bagaimana pendahulu melakukannya. Bisa jadi, ada sesuatu yang bisa kita pakai yang justru membuat semua hal jauh lebih cepat.
Gue juga mulai sadar bahwa AI bisa membuat lo 10x more efficient. First of all, ChatGPT sangat membantu dalam everyday task, mulai dari menjelaskan tools, bahkan menulis kode buat gue. Agoda juga cukup update dengan AI. Kita berlangganan AI company bernama glean, yang surprisingly cukup membantu buat mengetahui business context / how things work diperusahaan. Dan ya, semua orang bisa memilih antara github copilot/cursor, yang selain kita bisa nanya AI ini tentang kode kita, kalau kita cukup jago, kita cukup jadi mandor buat AI-AI ini nyelesaiin task kita.
Chapter IV and beyond - What’s next?
Well, buat gue, passing the bar is just a start, for sure. Gue masih punya banyak pekerjaan rumah. Gue masih harus belajar lebih banyak, mengalami lebih banyak, mencoba lebih banyak, dan gagal lebih banyak. Tujuan selanjutnya adalah mengakumulasi pengetahuan dan pengalaman agar bisa memberi lebih banyak; kontribusi yang lebih bernilai, lebih berdampak, that brings me beyond.
Udah sih gitu aja, bye!