52 poin oleh spilist2 2023-08-19 | 1 komentar | Bagikan ke WhatsApp

Ini adalah tulisan yang setara dengan bagian 1 dari Panduan Praktis untuk Meningkatkan Kinerja dan Kapabilitas Engineer Frontend Junior yang dipresentasikan di Infcon 2023. Dulu saya juga pernah membagikannya di GeekNews,
Roadmap Karier Engineer Frontend: 3 Jalur Keahlian untuk Junior, dan bisa dibilang ini adalah karya penerus secara spiritual.


Seperti apa engineer yang luar biasa itu?

Dalam makalah tahun 2015 <What Makes a Great Software Engineer?>, Li Paul Luo mengusulkan 5 syarat esensial yang membentuk engineer luar biasa. Metode penelitiannya adalah sebagai berikut.

  • Analisis banyak penelitian terdahulu tentang pendidikan, kapabilitas, perilaku, dan hal lain yang dibutuhkan developer
  • Wawancara mendalam dengan 59 developer Microsoft level 2 ke atas, yaitu developer yang kemampuannya sudah cukup diakui. Dari sini diperoleh 54 kandidat karakteristik pribadi yang sebaiknya dimiliki developer, seperti kepribadian, pengetahuan, perilaku, dan sebagainya
  • Survei terhadap sekitar 2.000 developer Microsoft. (Setelah mendeskripsikan setiap karakteristik secara rinci) pertanyaannya adalah: “Jika seorang developer berpengalaman tidak memiliki karakteristik ini, apakah Anda tetap akan menilainya sebagai developer yang luar biasa?”
  • Analisis hasil survei dan wawancara lanjutan dengan para responden
  • Berdasarkan analisis survei dan hasil wawancara lanjutan, dilakukan tambahan wawancara terhadap 40 rekan kolaborasi utama para developer (artis, perencana konten, data scientist, desainer, electrical engineer, dan lain-lain)

Dengan sedikit mengubah urutan dan penafsiran atas 5 syarat esensial yang diajukan penulis, saya merangkumnya sambil menambahkan pemikiran saya sendiri.

1. Menulis kode yang bagus (Be a competent coder)

Dibandingkan “coder yang kompeten”, “kode yang bagus” terasa lebih baik untuk dijadikan tujuan.

Kemampuan coding adalah kompetensi paling penting bagi junior. Namun setelah melewati tingkat tertentu, upaya meningkatkan kompetensi lain menjadi lebih efisien. “Tingkat tertentu” ini berbeda-beda pada tiap orang dan tiap organisasi.

Saya menilai standar kemampuan coding junior dari hal-hal berikut: “1) memiliki sudut pandang yang konsisten tentang kualitas kode, 2) menulis kode yang memenuhi kebutuhan pelanggan, 3) dengan kecepatan tinggi, 4) dengan sedikit bug, dan 5) tetap mudah dibaca.”

2. Melatih pengambilan keputusan berbasis bukti (Practice informed decision-making)

Untuk mengembangkan kemampuan mengambil keputusan, lebih menguntungkan jika fokus pada perbaikan proses, bukan hasil keputusan itu sendiri. Sebab hasil bisa saja ditentukan oleh faktor di luar kehendak kita.

Dan yang dimaksud berbasis bukti adalah berlandaskan data, tetapi tanpa menafsirkan data secara bias atau menarik kesimpulan terlalu cepat. Terutama jika mendapatkan informasi baru, sebaiknya meninjau ulang penilaian sebelumnya tanpa merasionalisasi, meski hati tidak menginginkannya.

Khusus saat debugging, jika kita berpikir masalahnya ada pada library atau browser, biasanya itu salah. Kalaupun ternyata memang masalah browser, jika semua masalah serupa langsung dianggap salah browser, kita bisa saja mengabaikan masalah fatal yang sebenarnya terjadi karena kesalahan kita sendiri. Jadi perlu berhati-hati.

Salah satu cara menghindari bias dan ketergesa-gesaan adalah menerima beragam sudut pandang eksternal dengan pikiran terbuka. Ambil jeda sejenak, lalu lihat bagaimana teman, rekan kerja, pelanggan, kompetitor, atasan, dan orang lain menafsirkan situasi tersebut; dengan begitu bias pribadi lebih sulit bertahan.

Tentu saja saat seseorang berada di bawah stres, sulit untuk bertindak rasional. Hal yang sama berlaku pada organisasi. Karena itu, organisasi yang bijak sengaja menyediakan kelonggaran dalam jadwal dan sumber daya, dan individu yang bijak mempelajari cara mengelola stres melalui meditasi dan sebagainya.

Untuk melatih pengambilan keputusan berbasis bukti dalam keseharian, kita perlu memiliki banyak bukti yang baik. Akan bagus jika membangun sistem yang membuat beragam informasi berkualitas terus lewat di sekitar kita, misalnya dengan berlangganan newsletter, bergabung dengan komunitas, dan ikut kelompok studi.

3. Membantu rekan mengambil keputusan secara efektif (Enable others to make decisions efficiently)

Developer yang luar biasa membantu rekan berkembang dengan berbagi informasi dan pengalaman, meningkatkan produktivitas tim, dan pada akhirnya membantu organisasi mengambil keputusan yang lebih baik.

Lalu bagaimana dengan junior? Bagi junior, alih-alih buru-buru menghasilkan performa langsung, bertumbuh dengan cara bertanya justru merupakan bentuk membantu rekan dan organisasi. Atasilah ketakutan akan diremehkan, ditolak, atau dianggap merepotkan, lalu ajukan pertanyaan berkonteks tinggi. Biasanya orang berpikir kepercayaan harus dibangun lebih dulu agar bisa menunjukkan kerentanan semacam ini, tetapi penelitian justru menunjukkan kebalikannya. Ketika saling menunjukkan kelemahan dan berani mengambil risiko, fondasi kepercayaan justru terbentuk lebih cepat.

Ada juga cara yang baik untuk menunjukkan kerentanan. Konteks harus disertakan dengan baik. Junior biasanya punya masalah A, lalu mencoba B, dan ketika C tidak berjalan baik di dalamnya, mereka hanya menanyakan C. Jika begitu, biasanya yang didapat hanya jawaban yang sangat sempit, dan bahkan setelah mendapat jawaban itu pun masalah sering tetap tidak terselesaikan. Sebaliknya, saya sering melihat bahwa jika A didefinisikan dengan benar, maka B muncul dengan sendirinya sehingga C tidak lagi diperlukan.

Untuk mendorong budaya bertanya, perlu dibangun budaya organisasi yang sangat menghargai kerentanan dan transparansi. Di sini, pengaturan default dalam organisasi sangat penting, karena default sangat memengaruhi kognisi dan perilaku manusia.

Dari sisi ini, alat Public by Default seperti Slack dan Notion, yang mengharuskan kita bertindak jika ingin menyembunyikan sesuatu, lebih baik daripada alat Private by Default seperti Email dan Google Docs, yang mengharuskan kita bertindak jika ingin berbagi. “Silakan hubungi saya kapan saja, kecuali pada saat ini (Do Not Disturb)” lebih baik daripada “pada jam ini Anda boleh datang dan berbicara dengan bebas (Open Hours)”.

4. Memaksimalkan nilai saat ini dari pekerjaan kita (Maximize current value of your work)

Developer yang luar biasa dituntut memiliki keduanya: pemikiran sistemik (mengimplementasikan dengan perspektif jangka panjang dengan memprediksi bagian yang bisa menjadi masalah nanti atau bagaimana requirement akan berubah) dan kemampuan untuk segera bergerak (tidak diam karena terlalu lama menganalisis, tetapi tetap terjun mengeksekusi dan menerima feedback meski takut pada ketidakpastian).

Terutama di startup, yang kedua lebih menguntungkan, tetapi menjadi tidak baik jika condong ke ekstrem. Fokuslah pada eksekusi cepat, sambil membiasakan tindakan yang hanya butuh sedikit usaha tetapi memberi manfaat besar. Contoh mikronya: meski hanya ada satu nilai, jangan hardcode dan pisahkan ke variabel; atau meski saat ini hanya ada dua nilai, jika itu adalah jenis opsi yang melampaui satu komponen, gunakan Mode alih-alih nilai Boolean. Contoh makronya: biasakan memikirkan hipotesis apa yang sedang ingin diuji melalui tindakan ini, lalu data apa yang akan dipakai untuk memvalidasinya, kemudian jalankan.

Pada akhirnya, nilai pekerjaan dimaksimalkan ketika kita bisa bergerak fleksibel antara pemikiran sistemik dan tindakan segera atas kehendak sendiri.

5. Belajar secara efektif dan konsisten (Continuously learn)

Mempelajari cara belajar secara efektif adalah awal dari semua pertumbuhan. Semakin cepat dilakukan, semakin baik, karena ini adalah tindakan yang memberi manfaat majemuk.

Belajar pada akhirnya adalah tentang memperluas pengetahuan kita untuk mengubah hidup. Namun tidak ada jaminan bahwa pengetahuan lama masih berlaku sekarang, jadi kita selalu perlu berusaha memperbaruinya dengan informasi baru.

Namun banyaknya informasi tidak selalu berarti baik. Seperti big data yang tidak tersaring, ada informasi yang justru hanya mengganggu. Karena itu, kita perlu meningkatkan proporsi “sinyal” dibanding “noise” yang tidak akurat atau tidak relevan dengan masalah kita. Contoh sinyal yang baik adalah wawasan yang membangun titik sambung dengan pengetahuan saya yang sudah ada di domain di luar keahlian saya, atau bukti bahwa saya mungkin salah dalam kondisi tertentu.

Pembelajaran yang efektif bisa diringkas dalam pertanyaan: “Bagaimana saya bisa tumbuh sedikit demi sedikit dengan lebih efektif setiap hari?” Jawabannya adalah mengulang siklus berikut: 1) mencari tahu apa yang benar-benar saya butuhkan saat ini dalam dunia nyata, 2) mempelajari landasan teoretis yang relevan secukupnya saja, dan 3) langsung mempraktikkannya begitu dipelajari untuk mendapatkan feedback dari diri sendiri.

Lalu bagaimana mengetahui apa yang saya butuhkan saat ini dalam kenyataan? Kita bisa menulis jurnal untuk menemukan masalah yang kita alami sehari-hari, atau berusaha menjadi lebih baik dalam aktivitas yang paling banyak menyita waktu selama seminggu terakhir. Misalnya, jika Anda sedang mencari kerja, Anda mungkin sering mengikuti kelompok studi, sehingga meneliti cara melakukan studi secara efektif akan membantu. Semakin sering suatu hal dilakukan, semakin banyak juga peluang belajar darinya, dan semakin besar pula peningkatan kualitas hidup jika berhasil diperbaiki.

Bagaimana memanfaatkannya - sudut pandang junior dan senior

Junior sebaiknya memeriksa satu per satu tujuan ini, terutama pengetahuan dan perilaku yang dideskripsikan dalam “menulis kode yang bagus” dan “belajar secara efektif dan konsisten”, lalu melihat sejauh mana dirinya sudah sesuai dengannya. Setelah itu, fokus mengembangkan kompetensi yang masih kurang.

Sementara jika Anda seorang senior, hal-hal ini bisa dipakai dalam evaluasi rekrutmen dan evaluasi kinerja. Coba pikirkan sinyal apa yang bisa digunakan untuk menilai apakah kandidat memiliki kompetensi ini dengan cukup. Saat memimpin untuk meningkatkan kapabilitas junior, ini pun bisa digunakan dengan cara serupa.

Selain itu, kompetensi-kompetensi ini juga menjadi kriteria yang baik untuk menilai peran apa pun, asalkan “menulis kode yang bagus” diganti dengan keahlian domain spesifik dari peran tersebut. Karena itu, di XL8, baik untuk PM, desainer, maupun developer, saat merekrut, onboarding, dan memberikan feedback, kami berusaha semaksimal mungkin memakai ini sebagai dasar evaluasi kapabilitas, dan hasilnya sangat besar.

Hal yang perlu diperhatikan saat memanfaatkannya

Kelima kompetensi ini semuanya saling melengkapi. Karena semuanya saling terkait, menjadikannya target untuk hanya mengembangkan satu saja mungkin tidak terlalu efektif. Sebaliknya, bisa juga dikatakan bahwa jika satu saja berkembang dengan baik, menjadi lebih mudah untuk meningkatkan yang lain.

Dan penelitian ini, seperti penelitian lain pada umumnya, bukanlah kebenaran mutlak. Tentu ada keterbatasan, dan perlu diingat juga bahwa ini sudah melalui interpretasi penulis makalah dan interpretasi saya.

Selain itu, karena judul makalahnya adalah “Apa yang Membuat Seorang Developer Menjadi Luar Biasa?”, orang bisa berpikir bahwa dengan memiliki kelima kompetensi ini seseorang akan menjadi developer yang luar biasa, yaitu sebagai syarat yang cukup. Namun yang sebenarnya diteliti adalah “tanpa ini seseorang tidak bisa disebut developer yang luar biasa”, yaitu syarat yang perlu. Jadi tidak masalah menjadikannya tujuan yang baik, arah yang ingin dituju, atau titik singgah, tetapi tidak perlu menganggapnya sebagai tujuan akhir.

Bagaimana memanfaatkannya - sudut pandang developer frontend

Untuk menerapkan 5 kompetensi ini dalam konteks pengembangan frontend, kita bisa mengajukan pertanyaan-pertanyaan seperti ini.

  • Dalam domain frontend, seperti apa kode yang bagus itu? Bagaimana menulis kode yang lebih baik?
  • Untuk mengambil keputusan yang lebih baik dalam domain frontend, bukti seperti apa yang perlu dikumpulkan, dan bagaimana cara mengumpulkannya?
  • Apa arti membantu rekan mengambil keputusan secara efektif dalam domain frontend?
  • Bagaimana mengukur nilai saat ini dari pekerjaan saya dalam domain frontend? Bagaimana memaksimalkannya?
  • Bagaimana cara belajar pengetahuan domain frontend secara konsisten dan efektif?

Dari upaya memikirkan cara menjawab pertanyaan-pertanyaan ini, lahirlah Roadmap Karier Engineer Frontend. Roadmap ini membagi peran yang diharapkan organisasi dari developer frontend ke dalam track spesialisasi web/produk/operasi, lalu menjelaskan karakteristik utama serta kelebihan dan kekurangan masing-masing track. (Dalam presentasi Infcon, bagian ini sepenuhnya dihilangkan, dan saya berencana melengkapinya lebih lanjut dalam tulisan terpisah.)

Roadmap ini juga bisa dimanfaatkan dalam konteks junior dan senior.

Sebagai contoh, junior frontend bisa memahami kondisi perusahaan lewat riset awal atau pertanyaan saat wawancara, lalu menggunakannya saat mencari kerja seperti ini: “Jadi organisasi yang ingin saya masuki menginginkan keahlian seperti ini. Jika saya mengembangkan dan menunjukkan keahlian ini dengan baik, peluang saya untuk diterima akan lebih tinggi.”

Sementara senior bisa memanfaatkannya seperti ini: “Organisasi kita sedang kekurangan orang dengan keahlian seperti ini. Jadi mari bantu orang ini mengembangkan keahlian tersebut. Dan mari rekrut orang yang bisa kita identifikasi dengan baik memiliki keahlian ini.” Dengan begitu, ini bisa dipakai saat mengembangkan anggota tim dan saat merekrut.

Tentu saja, seperti makalah di atas, perlu diingat bahwa 3 track ini saling melengkapi, bukan kebenaran mutlak, dan juga bukan tujuan akhir.

Menjadi developer senior yang luar biasa

Dalam Roadmap Karier Engineer Frontend, saya juga sempat menyinggung secara singkat pemikiran saya tentang cara menjadi developer senior yang luar biasa.

  • Orang yang menjadi senior yang baik adalah mereka yang setia pada dasar-dasar dan terus mengembangkan 5 kompetensi esensial ini.
  • Terkadang, satu tindakan teladan dari rekan kerja memberi dampak lebih besar daripada banyak kata dari pemimpin formal. Bahkan saat bukan berperan sebagai pemimpin, orang yang menunjukkan kepemimpinan pada akhirnya akan diberi peran pemimpin.
  • Dalam situasi apa pun, dan sekecil apa pun tugas yang diambil, orang yang mampu menciptakan dampak besar pada akhirnya akan diberi tugas yang lebih besar.

1 komentar

 
spilist2 2023-08-19

Karena saya langsung memindahkannya dari Notion, tautan 'Roadmap Karier Frontend Engineer' di bagian belakang masuk sebagai tautan Notion ya. Aduh. https://steady-study.super.site/frontend-engineer-career-roadmap Yang ini.