Kamu adalah freshgradute yang baru saja lulus wisuda beberapa minggu lalu. Dua hari setelahnya, kamu mulai bergabung dengan perusahaan yang kamu idam-idamkan selama ini.
Hari yang ditunggu-tunggu pun tiba. Hari dimana kamu melangkah ke pintu depan kantormu. Yup, your first day of work as a professional software engineer. Kamu merasa sangat bersemangat dalam melaksanakan task apapun yang diembankan ke dirimu. Kamu merasa siap. Empat tahun mengenyam bangku kuliah pasti memberikan bekal yang sangat cukup untuk menghadapi dunia kerja.
Setelah beberapa saat, percikan motivasi perlahan mulai memudar ketika kamu mengetahui bahwa banyak hal yang belum kamu kuasai. Tech stack yang kamu pelajari di kuliah jauh berbeda dengan apa yang benar-benar digunakan di perusahaan tersebut. Kamu mengajukan banyak pertanyaan sepele sehingga kamu mulai merasa bahwa seniormu menatapmu seolah-olah dia bertanya “bagaimana mungkin orang yang tidak kompeten ini diterima di sini?”.
Sebelum berpikir lebih jauh, mulai tarik nafas dalam-dalam, dan yakinkan dirimu bahwa itu semua hanya terjadi di dalam kepalamu. Tiap orang pasti pernah berada di posisimu, sebagai junior software engineer yang berstatus freshgraduate. Menjadi junior adalah kesempatan yang sangat baik untuk belajar banyak hal.
Engineering best practice
Setiap perusahaan pasti memiliki best practice nya masing-masing. Hal pertama yang wajib kita sesuaikan adalah engineering culture yang ada di perusahaan tempat kita bekerja. Pertanyaan-pertanyaan seperti “apakah menulis unit test adalah sebuah kewajiban?”, “bagaimana konvensi penulisan kode yang diterapkan?”, hingga “jika terjadi emergency, langkah-langkah apa yang harus dilakukan” harus sudah jelas.
Kita juga diharapkan untuk memahami dan berpartisipasi dalam praktik alur kerja perusahaan secara aktif dan tepat waktu. Jika perusahaan tersebut menerapkam metode agile dengan framework SCRUM, maka kita akan terbiasa dengan:
- Daily standup (termasuk jika kita sedang remote)
- Marketplace
- Sprint planning
- Retrospective
Communication
Meskipun junior, kita selalu diperbolehkan untuk speak up ketika dihadapkan dengan sesuatu yang menghambat pekerjaan kita. Sebagai contoh, kita bisa menghubungi kembali reviewer MR kita untuk segera mereview, daripada hanya diam saja menunggu reviewer mengecek kode kita.
Ketika sedang meeting, jangan melakukan asumsi ketika requirement tidak jelas. Mintalah klarifikasi supaya apa yang kita kerjakan sesuai dengan ekspektasi yang diharapkan. Berasumsi menjadikan tim kita tidak efektif dan buruk dalam berkolaborasi.
Bekerja di tim yang besar dengan berbagai macam divisi dan fungsi, akan selalu ada obstacle. Jika kita kebetulan melihat obstacle tersebut, eskalasi kan hal itu. Bisa dengan cara eskalasi ke peer, team lead, atau bahkan manager kita. Perhatikan juga bagaimana cara kita menyampaikan ide, karena cara kita menyampaikan gagasan itu penting.
Meskipun kita seorang junior, kita juga memiliki ilmu yang berharga untuk tim. Kita juga memiliki suara yang sama dengan engineer lain, dan tim berharap kita dapat berintegrasi dengan baik dan dapat menunjukkan sisi proaktif untuk membantu rekan setim kita tanpa diminta.
Own your product
Pahami produk atau fitur yang ada di tim kita dan seberapa besar dampak yang diterima oleh pelanggan. Kita juga bisa aktif menanggapi jika terjadi production issue. Dan ketika production issue tersebut berdampak ke tim, kita juga bisa membuat postmortem termasuk mengidentifikasi akar permasalahannya dan langkah-langkah pencegahannya.
Selain itu kita juga perlu memahami tech stack yang digunakan serta product metrics di tim kita.
Pragmatism
Menjadi junior berarti akan banyak task technical yang diberikan ke kita. Tujuannya adalah untuk memberikan pemahaman kepada kita bagaimana technical flow yang ada di perusahaan itu. Kita harus konsisten untuk mengerjakan task sesuai dengan prioritas yang sudah diberikan.
Gunakan waktu kita ketika junior untuk banyak belajar. Kerjakan task tersebut secepat mungkin dengan tetap menjaga kualitas kode yang kita tulis. Semakin cepat task yang kita selesaikan, maka akan semakin banyak task lain yang kita kerjakan. Bisa jadi task tersebut cukup bervariasi dan menjadikan ladang kita untuk banyak eksplorasi teknologi.
Sebagai junior, kita perlu sering melakukan code review dan mentoring untuk dapat menangkap bug sejak dini. Code review juga membantu kita dalam melalukan refactor sehingga kode kita menjadi lebih maintainable.
Jangan lupa untuk selalu menerapkan best practice dan sebisa mungkin menghindari adanya technical debt.
Strive for mastery
Kesalahan adalah suatu keniscayaan. Dan ketika itu terjadi, maka akan selalu ada ruang untuk belajar. Kita juga harus bersedia menerima feedback tanpa bersikap defensif.
Everybody makes mistakes. The difference is based on how they respond to the mistake.
Pelajari arsitektur teknologi atau service yang diterapkan di tim kita. Dan juga secara aktif memberi masukan dan menerapkannya terhadap tim kita.
Delivering results
Kita diharapkan dapat memberikan dampak yang baik oleh perusahaan. Maka kita diharapkan dapat menerapkan solusi dalam permasalahan yanf terdefinisi dengan baik.
Kita sebaiknya memiliki peer yang lebih senior supaya kita dapat diarahkan dengan baik. Bila perlu mintalah untuk melakukan praktik pair programming supaya transfer knowledge yang terjadi dapat efisien.