Sudah lama tidak menulis tulisan non-teknis, pada tulisan ini saya akan mencoba untuk share sedikit pengalaman dalam membangun sebuah team. Tulisan ini berdasarkan pengalaman saya dan team dalam 2 tahun terakhir ini dalam proses membangun sebuah engineering team.
Background
Bermula pada tahun 2019 saya bergabung dengan salah satu perusahaan startup sebagai Backend Engineer, diamanahkan untuk membangun sebuah produk yang baru dengan formasi 4 orang, gambarannya kurang lebih seperti ini ketika kita memulai :
Kami membangun bersama dalam kurun waktu setengah tahun dengan disertai suka dan duka, tapi banyak sukanyaa alhamdulillah..😎
Alhamdulillah setelah beberapa bulan akhirnya produk yang kami bangun bersama rilis ke production, good job kawan-kawan.. 🚀 👨🚀
Team & Product Growth
Seiring berkembangnya produk yang kami kembangkan bersama, team pun ikut berkembang, sebagai gambaran saat ini sebagai berikut :
Dalam kurang lebih 2 tahun (+- 700 hari) dari 4 orang menjadi 12 orang yang membangun produk ini, mungkin ini belum terlalu banyak, tapi menurut kami pribadi dengan jumlah team ini cukup menumbuhkan beberapa challenge tersendiri untuk kami 😄
Challenge & Cases Study
Setelah produk berkembang dengan cukup baik, challenge dan cases yang dihadapi pun semakin berfariasi, disini saya coba share beberapa challenge, cases yang kami hadapi dan cara yang kami lakukan untuk solving challenge tersebut.
Saya coba menjelaskan gambaran besarnya saja yah :))
TL:DR 📝
- Hiring
- Mentoring & Knowledge Transfer
- Task Assignment
- Collaboration
- Handover
- Continous Learning
1. Hiring
Kami mulai melakukan hiring untuk menambah personil team, interview merupakan tahap yang cukup penting untuk menentukan orang yang pas dan cocok sesuai kebutuhan team saat ini.
Beberapa mekanisme interview yang kami coba, mekanisme ini dijalankan secara berurutan :
(tahap 1) — Problem Statement Assingment
: Memberikan soal untuk dikerjakan sebelum proses Interview User bisa digunakan untuk melihat kemampuan kandidat, beberapa tools yang bisa digunakan untuk tahap ini Leetcode , Hackerrank di tahap ini kita bisa sambil menyaring kandidat yang akan masuk.(tahap 2) — Interview User
: mengetahui background kandidat yang akan join, dengan interview user bisa membuat kita lebih mengetahui background kandidat tersebut apakah cocok dengan kondisi dan culture team. Beberapa referensi untuk pertanyaan kamu bisa melihat disini.(tahap 3) — Live Coding & Pair Programming
: Sebagai penulis kode kita ingin melihat bagaimana kandidat tersebut ketika melakukkan problem solving dan pair programming, karena kedepannya kandidat tersebut akan bekerja bersama kita dalam beberapa waktu kedepan. Live coding bisa menggunakan berbagai cara, salah satunya dengan google meet dan share screen ketika mengerjakan soal.(tahap 4) — Final Interview
: Final interview ini biasanya dilakukan untuk validasi akhir jika di tahap sebelumnya sudah passed, biasanya akan dilakukkan oleh Head of Engineer.
2. Mentoring & Knowledge Transfer
Ketika ada new joiner ke dalam team, kita harus memastikan new joiner tersebut memiliki pemahaman yang cukup dan baik terkait produk yang dikembangkan bersama beserta culture team, knowledge transfer bisa dilakukkan dengan banyak cara, beberapa diantaranya yang kami lakukan :
Pair Programming
: menulis kode dan melakukkan problem solving bersama new joiner merupakan cara yang cukup baik, disamping kita bisa sambil menjelaskan kita bisa juga membantu new joiner tersebut untuk problem solving dengan menulis kode bersama jika ada kendala.Write Good Documentation
: melengkapi dokumentasi terkait produk (system design, product requirement dan lain-lain), biasanya kami menggunakan tools seperti draw.io, google docs, confluence untuk membuat dokumentasi, dokumentasi yang baik akan sangat memudahkan new joiner untuk memahami terkait apa yang akan/harus dia kerjakan.Learning Task
: untuk kandidat yang benar-benar baru khususnya untuk technology yang baru untuk kandidat tersebut, kita bisa memberikan task untuk belajar terlebih dahulu semisal sample project sebelum kandidat tersebut ready untuk mengerjakan task yang sesungguhnya 😬
3. Task Assignment
Memulai bekerja dengan team mengharuskan kita untuk melakukkan task assignment, agar masing-masing personil mengetahui tentang apa yang harus dikerjakan dan bagaimana cara mengerjakan task tersebut.
Untuk task assignment kita bisa menggunakan JIRA atau tools serupa lainnya seperti Gitlab Board, Github Board, Trello dan masih banyak lagi, tapi kurang lebih fungsi setiap tool ini hampir sama dan ini bertujuan untuk mengetahui Task yang akan dikerjakan dan status Task tersebut. Kurang lebih terlihat seperti ini.
4. Collaboration
Sebagai Engineering Team yang bekerja secara berkolaborasi. Kita biasa menggunakan Git dan Bitbucket untuk mengerjakan sebuah repository kode sumber program yang kita kembangkan bersama.
Akan lebih efektif lagi jika kita menerapkan Gitflow ketika sedang berkolaborasi, gitflow ini akan membantu kita dalam penggunaan git agar lebih rapi dan baik termasuk dalam mengatur branching, commit, pull request dan lain-lain :
Note : gitflow ini mungkin akan berbeda-beda di setiap perusahaan/team, tergantung pada kompleksitas produk, environment atau kebijakan perusahaan masing-masing.
Code Review
Ketika bekerja secara berkolaborasi(lebih dari 1 orang) dengan menggunakan git pada sebuah kode sumber, menurut saya akan sangat baik jika kita menerapkan code review. Code Review ini bertujuan untuk saling me-review kode yang sudah ditulis sesama personil team.
Beberapa contoh checklist yang bisa kita terapkan ketika melakukkan code review :
Validate Logic
: apakah logika kode program yang ditulis sudah sesuai dan optimal ?Syntax
: apakah syntax dan cara menulis kode program sudah cukup baik, readable dan mudah dimengerti ?Security
: kadang kita perlu memastikan juga apakah kode program yang ditulis akan menyebabkan vulnerability atau issue terkait keamanan program.Testing
: apakah kode sudah mencakup test coverage untuk memvalidate logic yang sudah ditulis ?
5. Handover
Setiap pertemuan pasti akan ada perpisahan 😃
Dalam sebuah team ada kalanya kita mendapat new joiner tapi juga sebaliknyaa cepat atau lambat akan ada juga personil 1 team yang resign. Disini proses handover task akan menjadi sangat penting ketika team member datang dan pergi.
Beberapa checklist yang bisa digunakan ketika ada member team yang resign dan dibutuhkan handover pekerjaan :
Remove Access
: remove semua akses terhadap project untuk personil yang sudah resign.Backup Data
: masing-masing team member mempunyai penyimpanan di gdrive maupun laptop masing-masing, ketika akun dihapus harap dipastikan data-data ini sudah di backup dan di transfer ke account perusahaan agar jika ada dokument yang penting tidak ikut hilang.Pairing Before Last Day
: sya rasa ini adalah hal yang cukup penting, kita harus memastikan bahwa fitur yang ditulis personil yang akan resign ini sudah dipahami oleh personil satu team yang lainnya, jangan sampai setelah resign kita juga bingung akan legacy fitur/code yang ditinggalkan tersebut.. 😃
6. Continous Learning & Improvement
Produk, Team, Technology akan berkembang seiring berjalannya waktu, tidak menutup kemungkinan akan dibutuhkan penyesuain untuk ke 3 elemen ini kedepannya, beberapa cara yang biasa kami lakukan :
Weekly Sharing Session
: Sharing session yang dilakukkan bergantian oleh setiap individu di dalam team, untuk menshare hal /pemahaman yang diketahui masing-masing individu, selain meningkatkan keilmuan setiap individu ini juga menjadi salah satu jalan yang baik untuk meningkatkan keakraban antar individu didalam team.Ideation
: berdiskusi dengan orang-orang yang berkepentingan dengan produk yang dikembangkan untuk melihat perkembangan produk kedepan.Learning platform
: Learning platform ini lebih kepada platform untuk belajar setiap personil dalam 1 team, banyak sekali learning platform yang bisa digunakan, diantaranyaa : Udemy(video course), Oreily (reading book), dan lain-lain
Kesimpulan
Dalam membangun sebuah team yang baik, pasti akan memiliki banyak challenge dan case yang berbeda-beda tergantung pada team seperti apa yang ingin kita bangun bersama.
Dari tulisan singkat ini saya coba membagikan beberapa challenge yang kami hadapi, jika pembaca mempunyai saran atau insight lain dalam membangun sebuah team mungkin kita bisa berdiskusi di kolom komentar :))
Terimakasih sudah meluangkan waktu untuk membaca, semoga bermanfaat :))