Sunday, September 18, 2016

Lesson Learn #2 : menjadi software engineer

Disclaimer : ini adalah pendapat pribadi penulis, penulis bukan expert engineer, masih junior dan butuh banyak masukan *pray*

Permasalahan

  • Engineer yang baru bergabung dengan tim, meski sangat pintar, namun kadang tidak bisa mengimbangi tim nya. Hal ini bukan melulu hal yang buruk, permasalahan-permasalahan yang terjadi misalnya
  • Tempat yang baru cukup santai, namun bertanggung jawab, dimana bisa work from home (WFH) kapan saja asal deliver. Si anak baru belum terbiasa dengan hal ini, karena mungkin butuh diskusi langsung, pair programming untuk bisa familiar dengan codebase yang ada.
  • Tempat yang baru sangat fleksibel dan realistis dengan apa yang harus di achieve di tiap sprint, si anak terlalu pintar dan memikirkan semua hal, sehingga achivement nya hanya setengah dari apa yang ada.
  • Tempat yang baru tidak peduli dengan anak baru atau anak lama, ketika ada yang masuk silahkan tenggelam atau berenang (dengan inisiatif sendiri).

Uraian di atas merupakan sedikit dari banyak permasalahan-permasalahan yang terjadi dalam dunia software engineering. Kali ini saya akan membahas dari satu sisi, yaitu sudut pandang engineer baru.

Saya belum lama-lama banget berkecimpung di dunia software engineering, namun pernah bekerja di beberapa perusahaan dengan latar belakang yang berbeda membuat saya banyak mengambil hikmah, dan membuat saya bersyukur dipertemukan dengan orang-orang hebat di masing-masing perusahaan tersebut sampai dengan saya yang sekarang. *maaf jadi melow :(

Attitude, habit, and culture come first before code quality

Attitude

Why? Menurut saya ini tidak hanya tentang menjadi seorang engineer, namun menjadi seorang manusia.
Di atas langit masih ada langit, apa yang kita tanam pasti akan kita tuai nanti (malah jd berpepatah ria :D). Sebagai seorang manusia, apalagi engineer di dunia IT yang perkembangan nya nggak akan ada habisnya jelas, pepatan diatas langit masih ada langit, pas banget buat saya, yang serba pas-pas an dan cupu untuk masalah teknologi yang kekinian.
Hubungan nya dengan attitude jelas, yang pertama kita harus bisa menerima feedback apa pun, ketika mereka memberikan kritik, marah, apapun, itu berarti masih ada kepedulian terhadap kita. They want us to run together with them, so they give us feedback and we can run faster with them.
Yang ke dua, do as best as I can (ada hubungan nya sama pepatah apa yang kita tanam, pasti akan kita tuai nanti :D). YOLO lah alias you only live once, jangan sampe menyesal karena kita nggak berusaha semaksimal mungkin sampe titik darah penghabisan. Sebagai engineer, ketika malas sudah merajai (ibarat nya googling aja males) please just leave. Kasar nya, perusahaan sudah membayar untuk bekerja 8 jam sehari, jika tiap hari cuma ngeluh, males-males an, facebookan, youtube an, nge-game, banyak alasan, ke laut aja dah.
Kenapa saya bilang ke laut aja, karena di perusahaan manapun dengan metal produktifitas yang rendah, pasti tidak akan bertahan lama juga (kecuali di perusahaan-perusahaan yang habit nya memang demikian).
Mental ini, jelas akan menghambat tim, sebagai seorang engineer, ekspektasi nya adalah dia bisa menyelesaikan masalah yang ada, namun jika berusaha saja dia tidak mau :( bisa jadi blocker buat tim, masih berjalan ketika tim sudah berlari.
Saran saya jika memang menemukan sebuah permasalahan yang pelik, jangan langsung bertanya ini bagaimana solved nya? (karena jelas yang ditanya juga belum tentu tahu jawaban nya, sesama engineer :|) namun dicari dulu, dicoba, kalau memang sudah dicoba dan masih tidak bisa, baru di diskusikan, ya DISKUSI, bukan minta jawaban :)

Sebenernya attitude ini luas banget, namun ini menurut saya paling penting jelas selain menjunjung kode etik engineer :)

Habit

Saya menyadari ini penting waktu menghadiri workshop ThoughtWorks di Binus beberapa tahun lalu, disitu mereka menceritakan how they work, menjadi lebih baik, menemukan proses bekerja yang lebih efektif adalah keseharian mereka.
Disitu juga saya pertama kali memahami tentang agile dan scrum. Implementasi agile di setiap tempat mungkin berbeda-beda, disini saya akan menceritakan pengalaman saya dengan tim saya yang sekarang.
Baru 3 bulan terakhir (semenjak 1 tahun tim dibentuk) kami menemukan ritme kerja yang lebih baik dan lebih produktif (meski belum sempurna dan masih banyak kekurangan sana sini). Dan ketika kami melakukan obrolan kecil (yang mungkin bisa dibilang evaluasi) ada beberapa hal mengapa hal ini bisa kami capai. Mungkin beberapa hal yang akan saya jelaskan di bawah ini sudah biasa dilakukan :D, namun ini hal baru bagi tim kami hehehe ^^v

Kami selalu melakukan diskusi di awal sprint apa yang akan akan kami lakukan setelah sprint planning. Diskusi teknikal dan pembagian task untuk masing-masing. Disini kami sudah tahu apa yang akan harus dilakukan, jika masih belum jelas, maka diskusi akan terus berlanjut :D atau kami break untuk memikirkan nya, dan membahas nya kembali esok hari (ini lebih sering sik hahhahaa)

Dalam proses development, kesulitan pasti ada, karena kita berhubungan dengan teknologi yang baru, namun kita tahu porsi masing-masing, dan kami ada di level yang sama (semuanya juga masih belajar :D) google, try, and discuss :)

Pull request, karena engineer juga tidak luput dari khilaf, bisa belajar dari code engineer lain, dan mendapat feedback yang membangun. Secara pribadi saya merasakan manfaatnya, bisa mempercepat learning curve, ketika ada code yang salah atau tidak efektif, maka engineer lain akan mengomentari dan memberikan feedback, saya akan bertanya kenapa dan akan berlanjut dengan diskusi, ilmu baru dari hanya sebaris code :)
Tim kami belum mempunyai QA, namun masing-masing dari kami tahu bahwa test itu penting, penting banget. Kami sadar akan hal tersebut dan memastikan code yang kami deploy sudah well tested. Plus, kami melakukan regression bersama-sama sebelum naik production, meski belum sempat melakukan test-test yang lain T_T

Meski kadang kami melakukan WFH, namun kami punya pengertian yang sama bahwa WFH means work from home, yang artinya selama jam kerja harus bisa dihubungi via slack atau apapun, dan tidak boleh menjadikan blocker buat tim.

Kesimpulan nya adalah menurut saya agile itu habit, kebiasaan, lebih bagaimana kita bekerja, dan berubah menjadi lebih baik setiap harinya. Bagaimana kita tahu apa tanggung jawab kita, dan apa yang harus dilakukan, untuk menjadi lebih baik untuk tim dan pribadi :)
Tanpa scrum master pun kita bisa :D

Engineering culture

Engineering culture disini ada hubungan nya dengan poin-poin yang sudah saya sebutkan di atas, attitude dan habit. Pull request and pair programming is a must. Pull request selain bisa meng-improve code kita, juga membiasakan dengan habit git flow, bahwa ketika bekerja dengan banyak engineer harus memikirkan engineer yang lain, jangan sampai code yang kita push menjadi blocker dan mengganggu engineer yang lain. Pair programming bisa sangat membantu engineer yang baru bergabung untuk mempercepat familiar dengan codebase yang ada.
Saya termasuk orang yang tidak mendukung lembur (saya pernah lembur btw). Beberapa engineer mungkin bependapat bahwa kalau nggak lembur nggak asik, bekerja di hari libur adalah hal biasa. Buat saya ketika kita harus lembur, it means there’s something wrong. Entah dengan estimasi yang salah, atau engineer nya tidah bekerja dengan produktif di waktu yang dijadwalkan, atau ada hal-hal yang lupa dikomunikasikan dan baru diketahui pada proses development.
Lembur membuat engineer kelelahan yang tidak wajar bahkan burn out, di situasi yang seperti ini, engineer bekerja dengan kurang maksimal. Jadi daripada lembur, kita harus mekakukan estimasi dengan baik, dan mengkomunikasikan segala permasalahan di awal sprint, dan tentu saja bekerja dengan produktif.
Salah satu keuntungan sprint yang pendek adalah kita bisa melakukan iterasi dengan cepat, meng evaluasi nya, dan menentukan apa yang harus dilakukan selanjutnya dengan melihat evaluasi sprint sebelum nya.

Point penting yang perlu saya garis bawahi adalah, diskusi teknikal setelah sprint planning, pull request, pair programming, dan bekerja produktif :)


Code quality is a must

Sebagai engineer jelas code quality is a must. Visi nya adalah bahwa kita menulis code bukan untuk mesin, namun untuk engineer lain (yang mungkin akan melanjutkan code kita) *kata-kata ini adalah kutipan, namun saya lupa darimana :|

Kesimpulan

Dari permasalahan-permasalahan diatas dapat disimpulkan bahwa sebagai engineer baru
  • Harus explore sendiri ketika memang tidak ada support, tidak sungkan bertanya, meminta waktu untuk diskusi, karena tim adalah yang nomor satu :)
  • Idealist itu penting namun realistis itu harus, solusinya saat sprint planning harus di sampaikan ideliasme nya, sehingga apa yang di achieve memang itulah yang diharapkan.
  • engineer come to solved problems, so don’t make any other problems :)

Thank you :)
#ilearnnewthingseveryday

Buku yang harus dibaca ^^v :
The Effective Engineer Book

No comments:

Post a Comment