Halo! Saya Joseph, mahasiswa Ilmu Komputer di Waterloo, dan baru saja menyelesaikan magang Teknik Perangkat Lunak di Slash dari September hingga Desember 2025. Singkatnya, saya sangat menikmati pengalaman ini dan saya pikir Anda juga sebaiknya ikut bergabung. Terima kasih telah membaca.
Oke, kali ini serius. Saya sebelumnya pernah magang di berbagai perusahaan, mulai dari startup kecil yang berhubungan dengan musik hingga perusahaan Big Tech, tetapi Slash menawarkan kombinasi unik antara intensitas dan rasa kepemilikan yang belum pernah saya temukan di tempat lain. Timnya cerdas dan solid, dan saya belajar secara mendalam tentang banyak topik kompleks, mulai dari pemeliharaan Kubernetes hingga kinerja database. Yang lebih penting, ada beberapa tantangan menarik yang harus saya selesaikan, itulah mengapa saya memutuskan untuk menulis blog tentang pengalaman saya!
Untuk memberikan ringkasan singkat tentang apa yang dilakukan Slash, mereka awalnya merupakan platform keuangan untuk orang-orang seperti pengusaha dan penjual sepatu bekas, tetapi kini telah berkembang menjadi perusahaan fintech perbankan umum yang menawarkan kartu korporat, transfer internasional, akun kripto, dan layanan lainnya. Saat pertama kali mengenal Slash, saya tidak tahu banyak tentang hal ini. Lagi pula, saya bukan penggemar sepatu, dan juga tidak terlalu mendalami fintech, jadi saya menghabiskan banyak waktu untuk mempertimbangkan apakah kesempatan ini layak atau tidak. Namun, seperti yang dapat Anda lihat dari posting blog ini, keputusan saya untuk bergabung ternyata menjadi salah satu keputusan terbaik yang pernah saya buat untuk karier awal saya.
Alasan utama mengapa saya akhirnya memilih Slash daripada perusahaan lain adalah karena:
- Itu adalah perusahaan seri B. – Saya belum pernah bekerja di startup seukuran ini, dan ingin merasakan lingkungan kerjanya.
- Pendapatan tahunan mereka mencapai 150 juta dolar, yang merupakan angka yang sangat tinggi untuk perusahaan yang berada di tahap pendanaan Seri B. – Mereka tidak hanya bertahan atau sekadar bertahan; mereka secara aktif mengembangkan bisnis mereka. Sebagai bonus tambahan, hal itu berarti mereka kemungkinan memiliki kualitas desain dan ketelitian teknik yang baik, sesuatu yang seringkali kurang dimiliki oleh banyak startup kecil.
- Mereka sedang berkembang pesat. – Mereka berhasil meningkatkan pendapatan mereka enam kali lipat dalam satu tahun dan baru-baru ini menggalang dana seri B. Perusahaan ini sedang berada di masa kejayaannya dalam hal pertumbuhan, dan saya ingin bekerja di perusahaan yang sedang mengalami momentum seperti itu.
- Ini adalah tim muda yang penuh energi. – Dari wawancara saya, saya bisa merasakan bahwa orang-orang di sini santai dan menyenangkan untuk diajak bicara. Saya sangat antusias untuk bekerja sama dengan rekan-rekan yang bisa saya pahami.
- Ini adalah perusahaan kecil dan ramping. – Apakah saya sudah menyebutkan bahwa ARR sebesar 150 juta ini dicapai oleh tim yang terdiri dari sekitar 12 insinyur? Itu setara dengan 12,5 juta ARR. per Insinyur, yang luar biasa. Jelas, orang-orang di Slash adalah talenta terbaik, dan saya akan mendapatkan kepemilikan yang tinggi serta bimbingan yang luar biasa.
- Gaji dan tunjangan untuk magang di perusahaan kecil ini termasuk yang terbaik… 🤫
TLDRSaya berpikir bahwa lingkungan, orang-orang berbakat, dan energi startup akan menciptakan tempat yang luar biasa untuk berkembang. Saya yakin akan mendapatkan kesempatan untuk mengelola proyek secara end-to-end, mulai dari membangun infrastruktur, merencanakan skalabilitas, hingga merancang sistem dan banyak lagi, jadi saya mengambil kesempatan itu!
Proyek: Pemberitahuan V2
Ini adalah hal khusus yang saya pelajari tentang Slash – mereka memberikan proyek penting kepada magang dan mempercayai mereka untuk mengelolanya. Pada minggu kedua saya, saya ditugaskan untuk memperbarui sistem pemberitahuan penolakan transaksi kartu. Tidak terlihat terlalu sulit, kan? Namun, sistem pemberitahuan yang ada memiliki beberapa masalah:
- Integrasi yang erat dengan sistem acara internal kami, dengan logika bisnis yang terintegrasi secara mendalam ke dalam inti layanan.
- Metrik email yang buruk dan tingkat pengiriman email yang lebih buruk akibat penyedia layanan yang kami gunakan.
- Pengalaman pengembang yang sulit, yang menyebabkan para insinyur mengabaikan sistem sepenuhnya dan langsung memanggil API penyedia.
Dan begitu datanglah tugas yang rumit – untuk membuat email pemberitahuan penurunan yang lebih baik, kami membutuhkan lebih dari sekadar perbaikan sementara. Kami membutuhkan sistem pemberitahuan yang sepenuhnya dirancang ulang, dan saya menjadi DRI (Design, Development, Rollout, and Scaling) untuk seluruh proyek. Itu sangat menakutkan… tapi juga kesempatan luar biasa untuk merancang sesuatu yang pada akhirnya akan menangani jutaan pemberitahuan. Saya sangat antusias untuk ikut serta.
Dari mempelajari sistem pemberitahuan sebelumnya dan berdiskusi dengan para insinyur, saya menemukan beberapa prinsip yang harus dipatuhi oleh sistem baru ini:
- Desain yang netral terhadap peristiwa – Layanan tersebut harus dapat beroperasi di mana saja, baik dalam skrip satu kali maupun pemroses acara.
- Desain yang netral terhadap penyedia – Kemampuan untuk dengan mudah menghapus dan menambahkan penyedia baru dengan usaha minimal akan sangat berharga.
- Desain yang berfokus pada pengembang – Tidak lagi mengabaikan karena frustrasi. Pengalaman pengembangan harus sesederhana dan seintuitif mungkin.
- Dapat diamati dan dapat diskalakan - Pemberitahuan harus dilengkapi dengan pelacakan siklus hidup penuh, dan kita harus dapat mendukung 3 juta email per bulan!
Dan dari sini, desain berbasis handler untuk Notifications V2 pun tercipta. Sistem ini berpusat pada handler notifikasi, yang menyediakan fungsi-fungsi handler umum, seperti mengirim notifikasi atau memproses webhook, untuk penyedia saluran eksternal tertentu (misalnya Resend untuk email, Twilio untuk SMS).

Di inti sistem ini terdapat Intent Pemberitahuan, objek sementara generik yang digunakan untuk mengangkut semua data untuk pemberitahuan, seperti penyedia, saluran, dan argumen payload. Setiap penangan mendefinisikan bentuk intent-nya sendiri, dan objek-objek ini bersifat bertipe kuat, sehingga mendukung pemeriksaan tipe statis dan introspeksi. Hal ini berarti pengembang tidak perlu mengetahui semua detail rumit dari setiap penyedia – mereka dapat memanfaatkan fitur auto-complete IDE dan mempercayai bahwa pemeriksaan tipe akan memastikan semuanya berjalan lancar.
Untuk memastikan bahwa logika bisnis, seperti memeriksa preferensi pengguna, diimplementasikan dengan cara yang terpisah, setelah seorang pengembang memanggil fungsi kirim, niat-niat tersebut melewati sebuah Perantara Pemberitahuan Pipeline terlebih dahulu. Middleware notifikasi adalah fungsi tingkat tinggi yang memiliki langkah pra-pemrosesan untuk memungkinkan pencarian basis data bersama, dan fungsi pemrosesan yang memungkinkan kita untuk mengizinkan, mengubah, atau menghapus niat notifikasi. Dengan desain ini, kita sekarang dapat mendefinisikan fungsi pengiriman yang berbeda yang menggunakan satu sistem dasar untuk mendefinisikan dan berbagi logika validasi. Misalnya:
- Kita dapat mendefinisikan fungsi dasar "kirim notifikasi" yang memiliki alur intent melalui sebuah
Penerima DiblokirMiddleware yang akan membatalkan intent jika informasi penerima (email, nomor telepon) terdapat dalam daftar blokir kustom. - Kita dapat mendefinisikan fungsi "kirim ke pengguna" yang lebih kompleks yang memungkinkan alur intent melewati jalur yang sama.
Penerima Diblokirperangkat lunak perantara serta sebuahHormati Preferensi PenggunaMiddleware yang menghapus intent jika pengguna telah memilih untuk tidak menerima notifikasi di saluran tersebut.
Sebagai keuntungan tambahan, pengembang di masa depan dapat dengan mudah menambahkan, menghapus, atau memodifikasi fungsi pengiriman baru tanpa perlu menelusuri labirin fungsi.

Setelah langkah middleware, layanan tersebut membuat Pemberitahuan Objek siklus hidup sebelum memulai alur kerja Temporal. Temporal sangat berguna karena menyediakan retry otomatis untuk kegagalan alur kerja, penyimpanan data yang tahan lama, dan jaminan orkestrasi. Semua ini penting untuk memastikan pengiriman notifikasi. Alur kerja mengantre notifikasi, mengatur kecepatan pengiriman untuk mematuhi batas kecepatan penyedia, sehingga kita tidak mengganggu pengguna, lalu mengirimkan batch ke penangan penyedia. Penangan tersebut bertanggung jawab untuk mengirimkan notifikasi ke penyedia, dan layanan memperbarui siklus hidup sesuai dengan itu.
Setelah penyedia eksternal mengirimkan respons webhook kepada kami, handler akan mengonversinya menjadi tipe data standar dan menghasilkan tindakan bertipe. Tindakan ini memberikan cara yang terstruktur dan aman secara tipe untuk merespons peristiwa saat menerima notifikasi, sambil menjaga layanan tetap sesederhana mungkin. Misalnya,
- Kami memiliki tindakan untuk memperbarui penerima – Dengan cara ini, pengelola dapat memperbarui status penerima sebagai "dilarang secara permanen" atau tidak, tergantung pada apa yang ditentukan oleh penyedia dan saluran sebagai "dilarang".
- Kami memiliki tindakan untuk mencoba kembali pengiriman notifikasi – misalnya, jika email sementara tidak terkirim, kami ingin mencoba mengirim ulang email tersebut secara eksponensial. Jika penangan menentukan bahwa respons penyedia email adalah "tidak terkirim", tindakan ini dapat dipicu.
Whew! Itu sebagian besar alurnya. Sepanjang perjalanan, saya menemui beberapa tantangan teknik menarik lainnya, seperti
- Mendukung percobaan ulang eksponensial – Kami menjadwalkan tugas percobaan ulang di masa depan di dalam Temporal berdasarkan jumlah percobaan ulang yang telah dilakukan.
- Pelacakan yang baik – Misalnya, kami menyimpan ID pelacakan, serta pemberitahuan dan upaya ulang mereka, dalam sebuah
Set Pemberitahuanentitas - Pengelompokan – Dengan menggabungkan pengiriman individu dan pengelompokan, kami dapat menghindari melebihi batas kuota penyedia dan memberikan pengembang kendali atas cara mereka ingin notifikasi dikirim.
Saya akan membiarkan para insinyur baru yang berpotensi menemukan detailnya dalam kode, setelah mereka bergabung 😉
Proyek: Peremajaan
Proyek Facelift adalah desain ulang end-to-end tim kami untuk pengalaman web Slash (lihat blog teknik) Di sini oleh Albert Tian, bapak dari facelift.). Sekarang saya tidak akan terlalu mendalam membahas apa itu Facelift (lagi, lihat blog teknik yang luar biasa), tetapi pada dasarnya, ini adalah pengenalan perpustakaan komponen baru + Tailwind ke seluruh frontend kami yang besar. Untuk mempersiapkan peluncuran, tim teknik memutuskan untuk bersenang-senang dan mengadakan hackweek yang terfokus! Ini bukan hackweek biasa di kantor – kami naik beberapa mobil, berkendara tiga jam ke kabin di Bass Lake di samping Yosemite, dan menghabiskan seminggu untuk membangun, merestrukturisasi, dan benar-benar bersenang-senang bersama.


Selama minggu ini, saya sepenuhnya beralih dari pekerjaan backend untuk membantu memperbarui alur transaksi dan sengketa. Ini sebagian besar merupakan pekerjaan frontend, yang merupakan perubahan yang menyegarkan dari pekerjaan sebelumnya, dan juga berarti saya dapat bekerja di berbagai aspek infrastruktur desain frontend kami, seperti:
- Primitif intiMisalnya, bagaimana kami membuat panel samping, modal, dan popup.
- Komponen yang dapat digunakan kembali dan dapat disusun: misalnya,
Pencarian yang Dapat Dipilih - Manajer tabelKomponen kustom kami untuk membuat tabel dengan fitur penyortiran, penyaringan, paginasi, dan pencarian yang mudah.
- Validasi subform yang andalMenggunakan Arktype, formulir Tanstack, dan sistem pembangkitan model kami sendiri.
Facelifting lebih sedikit tentang logika produk yang kompleks dan lebih banyak tentang menyaksikan seberapa cepat tim kami dapat bergerak ketika fokus dan bersatu dalam satu proyek bersama. Menyaksikan seluruh situs berubah selama seminggu, sambil membangun dan mempererat hubungan dengan rekan-rekan kerja di kabin tersebut, tentu menjadi salah satu momen terbaik selama magang saya. Pekerjaan facelift tidak berakhir pada minggu itu – selama beberapa minggu berikutnya, kami memastikan peluncuran berjalan lancar dengan bekerja sama dengan tim dukungan untuk mengatasi masalah kecil di sekitar produk!

Proyek: Template
Di akhir setiap periode kerja, universitas saya suka mengirimkan formulir kecil yang berisi pertanyaan sederhana – “Seberapa relevan materi perkuliahan Anda dengan pekerjaan Anda?”. Nah, selama saya bekerja di Slash, saya sebenarnya bisa menerapkan beberapa konsep yang saya pelajari di kelas secara langsung! Jadi, kami ingin email transaksional kami sesuai dengan desain Facelift baru kami, jadi masuk akal bagi sistem notifikasi kami untuk mendukung templat kustom. Untuk memastikan kami menggunakan warna dan spasi yang sama dengan frontend kami, kami akhirnya membangun templat ini dalam kode menggunakan React Email, perpustakaan templat email yang memungkinkan kami menggunakan JSX untuk templat ini. Ini sempurna bagi kami; karena tim kami sangat familiar dengan React JSX, kami dapat memastikan konsistensi merek dengan menggunakan sistem desain Tailwind CSS v4 yang sama di both web dan email.
Namun, ada satu hal yang perlu diperhatikan – salah satu keunggulan utama TailwindCSS 4 adalah kemampuannya untuk menggunakan file CSS kustom alih-alih objek konfigurasi JS tradisional, yang dimanfaatkan oleh tim kami. Namun, komponen Tailwind dari React Email sebenarnya... diperlukan Objek konfigurasi JS.
Ini berarti saya bisa membuat transpiler!
Untuk menjelaskan dengan lebih tepat, selama tahap pembangunan, saya menambahkan skrip untuk membangun Pohon Sintaksis Abstrak (AST) dari berkas CSS sistem desain. AST ini memberikan representasi terstruktur dari aturan CSS, dan memungkinkan saya untuk dengan mudah memproses berkas tersebut untuk:
- Saring kelas CSS yang tidak didukungMisalnya, gaya hover dan utilitas penunjuk tidak berfungsi di sebagian besar klien email.
- Konversikan ke sistem warna yang kompatibelKami menggunakan OKLCH untuk mendefinisikan warna kami, tetapi klien email tidak dapat menampilkan format tersebut, jadi warna-warna ini dikonversi ke HEX.
- Bangun objek konfigurasi TSIni dikompilasi menjadi JavaScript, dan kemudian dapat dengan mudah diimpor di mana saja dalam basis kode.
Langkah transpilation ini merupakan cara cepat untuk menerapkan satu sumber kebenaran tunggal untuk sistem desain kami. Jika warna diubah, perubahan tersebut akan konsisten di semua platform kami – baik web maupun email – karena akan langsung ditranspilasi saat dibangun ulang. Selain itu, klien lain, seperti aplikasi seluler kami, dapat menggunakan objek yang telah ditranspilasi ini sesuai kebutuhan. Dengan objek konfigurasi yang dihasilkan, saya dapat membangun serangkaian komponen React umum untuk email kami yang mencerminkan komponen web kami, seperti Tipografi dan Tombol Komponen, dengan properti yang hampir identik. Semua ini membantu meningkatkan pengalaman pengembang, sehingga pembuatan templat menjadi lebih mudah!
Sebagai catatan terakhir, saya juga membuat templat pemberitahuan memanfaatkan kerangka kerja registri internal kami, struktur data khusus yang kami bangun (lihat postingan blog iniSebagai ringkasan singkat, registri memberikan cara yang aman tipe untuk mendefinisikan templat, menserialisasi dan mendeserialisasi templat dari basis data, serta menjaga logika bisnis tetap terdefinisi bersama. Misalnya, Template Pemberitahuan Otorisasi Kartu.tsx Kode ini terletak tepat di samping kode pemroses peristiwa otorisasi kartu, yang sangat berguna untuk dengan cepat melihat peristiwa mana yang memiliki notifikasi! Sangat bagus bisa menggunakan registri dalam proyek ini – hal ini benar-benar menunjukkan komitmen tim untuk menulis kode yang baik dan dapat digunakan kembali.
Apa yang saya dapatkan?
Saya datang dengan harapan ini akan menjadi pengalaman yang unik, dan saya senang telah memutuskan untuk bergabung – Slash telah mengajarkan saya lebih banyak tentang kepemilikan, desain platform, dan kecepatan pengembangan daripada peran apa pun yang pernah saya jalani sebelumnya. Beberapa poin penting yang saya dapatkan adalah:
- Kepercayaan adalah hal yang tak ternilai harganya. – Slash tidak memiliki rapat harian. Slash tidak memiliki sprint mingguan atau pemeliharaan backlog. Kami memiliki satu pertemuan seminggu, dan itu hanya untuk mendemonstrasikan hal-hal yang telah kami bangun kepada seluruh tim. Ini berhasil karena tim secara keseluruhan memiliki komunikasi yang kuat dan keterampilan kepemilikan yang mengesankan. Itu bukan berarti tidak ada bimbingan – saya memiliki pertemuan satu lawan satu mingguan untuk mengatasi hambatan – tetapi sebaliknya, Slash mempercayai Anda untuk melakukan pekerjaan terbaik Anda dan menciptakan lingkungan di mana Anda dapat fokus sepenuhnya.
- Tim ini luar biasa. – Di tempat kerja saya yang lain, rekan-rekan kerja saya profesional, tetapi di sini, rekan-rekan kerja saya orang-orangkuJelas bahwa Slash memiliki budaya kerja yang luar biasa dengan orang-orang yang menyenangkan, mendukung, dan mudah diajak bekerja sama – tidak ada satu pun orang yang tidak saya nikmati bekerja sama dengannya atau yang membuat saya merasa terintimidasi, dan mereka memperlakukan Anda seperti karyawan tetap. Selain itu, Anda bisa bermain basket bersama mereka di akhir pekan 😃
- Sebagai magang, Anda akan berkembang pesat di sini dibandingkan dengan tempat lain. – Di perusahaan lain, magang tidak akan diberi sistem pemberitahuan inti sebagai proyek. Masalah-masalah sulit yang mendorong pertumbuhan biasanya sudah diselesaikan atau sedang diselesaikan oleh insinyur senior. Yang membuat Slash unik adalah kombinasi tim yang ramping, masalah bisnis kritis yang nyata, dan budaya yang mempercayai bahkan magang untuk menangani pekerjaan penting.
Berikut ini beberapa kenangan seru lainnya dari magang ini:
- Kami mengonsumsi sekitar 20 pon steak dalam seminggu… terima kasih Hack Week!
- Saya mengalahkan rekan magang saya dalam kompetisi renang, tetapi kemudian langsung dikalahkan oleh seorang karyawan tetap.
- Akhirnya saya berhasil mengangkat satu plat!
- Saya adalah salah satu kontributor utama dalam "kebiasaan makan berlebihan di kantor" (dan mungkin terkait, saya baru tahu bahwa saya suka Shake Shack).

Empat bulan ini berlalu lebih cepat dari yang saya duga, dan saya bersyukur atas pengalaman yang saya dapatkan di Slash. Saya akan segera lulus, dan terlepas dari apa yang akan terjadi dalam hidup saya sebulan, setahun, atau sepuluh tahun ke depan, saya tahu bahwa magang di Slash telah memberi saya pengetahuan dan kepercayaan diri untuk sukses di mana pun saya pergi.
Jika Anda tertarik untuk berbincang lebih lanjut, Silakan hubungi saya di LinkedIn! Siap menjawab pertanyaan apa pun yang Anda miliki.