Buku Panduan CTO Startup
(github.com/ZachGoldberg)Buku Panduan CTO Startup
Keterampilan Esensial dan Praktik Terbaik untuk Tim Engineering Berkinerja Tinggi
Pengantar
- Selalu belajar: Penulis memiliki ketertarikan pada komputer dan pemrograman perangkat lunak sejak kecil, dan melalui hal itu menyadari pentingnya pembelajaran berkelanjutan. Untuk berhasil sebagai pemimpin teknologi, penting untuk terus belajar dan berkembang.
- Dilema pemimpin teknologi startup: Sebagian besar startup memiliki co-founder teknis, dan merekalah yang menulis codebase awal serta merekrut engineer pertama. Namun, seiring tim bertumbuh, pemimpin teknologi harus beralih ke peran manajerial, dan dalam proses ini mereka mungkin kekurangan keterampilan kepemimpinan.
Tentang penulis
- Penulis telah mengumpulkan pengalaman di berbagai startup dan menjalankan peran sebagai pemimpin teknologi. Melalui pengalaman di beragam startup, ia memahami berbagai keterampilan dan tantangan yang diperlukan dalam kepemimpinan teknologi.
Cara menggunakan buku ini
- Buku ini adalah referensi bagi pemimpin yang mengelola tim software engineering, dan membahas berbagai topik sebagai bab-bab yang berdiri sendiri. Setiap bab memperkenalkan topik, memberikan gambaran umum, dan menyajikan praktik terbaik.
Proses bisnis
- Buku ini menjelaskan proses bisnis untuk memberikan titik awal dalam pemecahan masalah. Proses tersebut perlu disesuaikan dan diskalakan menurut ukuran tim dan perusahaan.
Orang dan budaya
Prinsip dasar manajemen
- Aturan emas manajemen: Kinerja tim adalah tolok ukur untuk menilai kinerja manajer. Manajer harus mendukung anggota tim agar mereka dapat memberikan yang terbaik.
- Pohon keterampilan profesional: Untuk kepemimpinan teknologi, perlu berinvestasi bukan hanya pada keterampilan teknis tetapi juga pada keterampilan manajerial.
Perbaikan berkelanjutan
- Kaizen: Baik tim maupun individu harus mengejar perbaikan berkelanjutan. Kesalahan harus dijadikan peluang untuk melakukan perbaikan.
Coaching
- Manajer harus berperan sebagai coach yang membantu anggota tim agar dapat memberikan performa terbaik.
Mencari mentor manajemen
- Mencari mentor manajemen penting untuk transisi menuju kepemimpinan. Dengan mentor yang tepat, keterampilan kepemimpinan dapat ditingkatkan.
Pertemuan 1:1
- Pertemuan 1:1 adalah kesempatan untuk membangun hubungan dengan anggota tim, memahami kekuatan dan kelemahan mereka, serta membantu mereka memberikan yang terbaik.
Pertemuan skip-level
- Dengan secara rutin mengadakan pertemuan dengan bawahan langsung dari para manajer, kita dapat mengumpulkan berbagai sudut pandang dan menggunakannya untuk meningkatkan bisnis.
Coaching untuk manajer
- Kinerja manajer menengah sangat penting bagi kinerja organisasi. Manajer perlu dibina melalui pelatihan dan dukungan yang berkelanjutan.
Pertemuan 1:1 dengan engineer
- Pertemuan 1:1 dengan engineer adalah kesempatan untuk mendengarkan masalah yang mereka hadapi dan membantu mereka menemukan solusi. Tujuan pertemuan harus jelas, dan percakapan perlu diarahkan agar produktif.
1 komentar
Pendapat di Hacker News
Saat membaca dokumen seperti ini, saya biasanya pergi dulu ke bagian yang saya pahami mendalam untuk melihat apa yang dikatakannya. Di sini disebutkan bahwa menyiapkan dan menjalani audit PCI DSS atau SOC 2 biasanya memakan waktu 6–12 bulan, jadi jangan mencoba mendapatkan sertifikasi di saat-saat terakhir. Namun untuk startup, saya cenderung memberi saran yang hampir sebaliknya
Khususnya atestasi SOC 2 mudah didapat, dan mengeluarkan uang secara proaktif sebelum ada purchase order yang bergantung padanya adalah pemborosan. Tentu saja hal-hal yang nantinya menjadi dasar atestasi, seperti pengaturan single sign-on atau branch Git yang dilindungi, sebaiknya dilakukan sejak awal, tetapi itu lebih dekat ke praktik terbaik dasar yang memang harus dilakukan meski tidak berencana mendapatkan SOC 2. Menurut saya, jika pelanggan besar tidak memintanya, tidak perlu melakukan SOC 2. Akan bagus kalau ada yang memeriksa bagian lain dari dokumen ini juga
Dengan read replica untuk BI dan alat visualisasi yang layak, itu bisa bertahan cukup lama, dan sudah cukup sebelum menghabiskan angka 5–6 digit untuk sesuatu seperti Snowflake
Bergantung pada kondisi pendanaan, biaya menggunakan layanan checklist kepatuhan SOC 2 otomatis seperti Secureframe bisa berada di kisaran beberapa ribu dolar. Layanan itu bukan hanya membantu mengikuti praktik terbaik, tetapi juga menata semuanya dengan cara khas yang sesuai SOC 2 sehingga audit menjadi lebih mudah. Dibandingkan waktu pengembangan dan manajemen proyek yang dibutuhkan untuk membawa organisasi yang proses nonpatuhnya sudah tertanam dalam ke jalur SOC 2, itu bukan investasi besar
Pernyataan bahwa atestasi SOC 2 mudah didapat juga bertolak belakang dengan yang saya dengar dari orang lain tentang topik ini. Biasanya saya dengar itu sangat sulit dan memakan banyak waktu, jadi saya penasaran apa yang saya lewatkan. Kalau memang benar mudah, saya berharap saya keliru
Saya sering melihat orang mengatakan bahwa ketika menjadi VP atau CTO, Anda berhenti coding. Saya paham bahwa kemampuan manajemen bukan kemampuan coding, tetapi sulit memahami mengapa orang meletakkan keyboard dan menyia-nyiakan superpower pertama mereka
Anda bisa tetap menjadi CTO yang teknis dari awal sampai akhir. Perlakukan tim dan perusahaan seperti layanan yang membutuhkan kontribusi aktif, pemeliharaan, dan dukungan on-call, sambil tetap ikut turun tangan membangun, baik sendiri maupun bersama tim
Masalah sebenarnya adalah mengambil peran yang tidak memberi waktu untuk coding terlalu awal dalam karier. Misalnya menerima peran arsitek yang hanya menggambar kotak di whiteboard dan berpindah dari rapat ke rapat, atau peran yang pada dasarnya manajerial tetapi diberi label “tech lead”. Anda menjadi terbiasa tidak menulis kode, lalu beberapa tahun kemudian saat harus mencari pekerjaan baru, Anda harus menghadapi wawancara untuk posisi coding sambil menyadari bahwa sebagian besar karier pemrograman Anda dihabiskan tanpa menulis kode. Bagi banyak orang, insting itu tidak cepat kembali
Waktu saya jauh lebih baik digunakan untuk menyelesaikan masalah yang tidak bisa diselesaikan orang lain. Sesekali saya mengambil perubahan yang sangat sederhana untuk menjalani sendiri proses kami dan melihat bagian mana yang bisa diperbaiki. Saya tetap coding pada malam hari atau akhir pekan, tetapi rasanya tidak sama, dan seiring waktu pasti sedikit berkarat. Meski begitu, selama masa sabatikal, sangat menyenangkan bisa coding seharian penuh dan benar-benar turun tangan
Review atau rapat desain masih bisa dilakukan, tetapi jika mengambil pekerjaan inti, pada akhirnya akan menimbulkan masalah
Kode yang bisa ditulis VP/CTO juga bisa ditulis oleh orang lain di tim, dan mungkin bahkan lebih baik. Sebaliknya, hal-hal lain yang disebutkan tadi kemungkinan besar paling baik dilakukan oleh VP/CTO di perusahaan. Melepaskan sebagian besar pekerjaan teknis langsung demi hal yang lebih penting bagi tim dan perusahaan adalah keputusan yang cukup masuk akal
Gagasan untuk terus coding itu bagus, tetapi biasanya bukan itu alasan Anda dibayar. Saya menganggap diri saya developer yang sangat kuat, tetapi developer seperti itu bisa didapat dengan biaya lebih rendah daripada gaji CTO. Tidak efisien jika CTO yang lebih mahal mengerjakan hal itu. Sebagai catatan, beberapa tahun kemudian saya kembali menjadi kontributor individu, dan saya berencana menjalani sisa karier saya seperti itu
Saya ingin mengatakan bahwa tidak ada yang namanya chat sinkron
Jika sesuatu harus sinkron, jangan lakukan di jendela chat. Setidaknya kecuali sudah sepakat untuk “fokus pada chat real-time selama beberapa menit”. Jika remote, teleponlah; jika di tempat yang sama, bicaralah langsung. Jangan melempar pesan ke chat lalu mengharapkan jawaban instan
Saya penasaran apakah ada contoh sistem “dua tim” yang tidak menimbulkan rasa kesal. Saya juga tidak tahu apakah ada kasus ketika orang secara alami tidak ingin pindah ke tim masa depan
Di atas kertas terdengar seperti ide bagus, tetapi sulit dipercaya bahwa ini benar-benar akan berjalan baik dalam praktik. Bentuk terdekat yang pernah saya lihat adalah semacam tim library yang membuat layanan seperti design system dan komponen agar dipakai tim lain
Selama tanggung jawab itu terpenuhi, di sisa waktunya mereka bebas mengerjakan hal yang mereka anggap bernilai bagi perusahaan. Itu kesepakatan yang cukup bagus. Orang lain berterima kasih karena tim kecil itu mau menangani pekerjaan kotor, dan tim maintenance senang karena di waktu luang mereka bisa memperbaiki hal-hal yang selama ini mengganggu atau melakukan riset. Saya lupa detailnya, tetapi saya ingat ada beberapa peningkatan dan hasil riset yang cukup keren. Fakta bahwa orang-orang di tim itu sangat hebat dan mandiri juga membantu keberhasilannya, meski biayanya juga lebih besar
Saya pernah mengalami beberapa tempat di mana tim yang benar-benar terpisah berjalan baik. Dalam game, bayangkan tim engine dan tim game. Di salah satu peran lama saya, bahkan di dalam tim game kami mengerjakan fitur yang memakan waktu 6–12 minggu lalu merilisnya, kemudian menangani maintenance, update, dan technical debt. Hal yang baru dirilis menjadi fokus utama, tetapi masih ada waktu untuk kembali ke pekerjaan sebelumnya; tim lain juga berada dalam siklus yang sama, lalu 6–8 minggu kemudian onboarding ke fitur baru, dan begitu seterusnya
Kami tidak memperlakukannya sebagai tim tetap, melainkan sebagai alur kerja tempat orang berpindah setiap sprint, yaitu tiap 2 minggu. Selama sekitar 3 bulan berjalan baik, tetapi setelah itu tidak lagi cocok, dan sekitar saat itu organisasi membesar sehingga tim direorganisasi berdasarkan kapabilitas bisnis atau domain
Materi seperti ini bagus bukan untuk dipakai seperti kitab suci, melainkan karena memberi gambaran luas tentang tanggung jawab dan hal-hal yang perlu diperhatikan
Kecuali Anda punya penasihat yang hebat atau pernah bekerja di bawah orang yang benar-benar luar biasa, ketika sampai di posisi ini tidak ada orang yang duduk di samping Anda dan memberi daftar hal-hal yang harus diperhatikan. Ini membantu karena tiap bagian membuat kita bertanya, “Apa jawaban kita?”, “Apakah kita setuju?”, “Apakah proses kita lebih baik?”, “Apa yang saya lewatkan?”
Menarik juga bahwa pemisahan “dua tim” dituliskan sejelas ini. Itu cara yang fantastis untuk terus merilis sampai biaya untuk merilis sesuatu yang layak menjadi terlalu besar
Jika Anda memutus feedback loop yang kembali ke orang-orang yang pertama kali membuat software itu, mereka akan sedikit lebih bahagia untuk sementara, dan orang lain sedikit lebih sengsara untuk sementara. Lalu tim fitur tidak akan pernah mau diganggu lagi, dan tim pelanggan tidak akan pernah mendapat sumber daya untuk benar-benar memperbaiki apa pun
Yang lebih buruk, tim fitur tidak belajar apa pun selain cara mengirim baris kode. Seiring waktu semuanya menjadi lebih lambat dan lebih mahal karena satu-satunya fungsi kecocokan dalam pengembangan software yang baik—yaitu mengintegrasikan kembali feedback negatif sebagai sumber pengembangan—telah dihilangkan. Handbook kepemimpinan CTO yang sungguhan seharusnya menyatakan dengan jelas: “Membantu developer menjadi lebih baik bahkan saat mereka merilis adalah tanggung jawab Anda, dan developer tidak selalu akan menyukainya”
Akan muncul juga konflik merge antara tim fitur yang didorong sales dan tim maintenance yang didorong pihak pelanggan. Selama “tim pelanggan” digambarkan sebagai tahap yang nantinya dilewati, sudah jelas pihak mana yang akan menang dalam perebutan prioritas. Ungkapan “jalur lain bagi engineer individu, terutama junior, untuk belajar dan berkembang” pada akhirnya terdengar seperti “senior tidak mau membersihkan kotoran, jadi diserahkan ke junior”
Tim seperti ini cenderung menarik orang-orang yang memandang rendah pekerjaan merilis fitur dan memperbaiki bug, serta ingin mengabstraksikan masalah secara berlebihan. Alih-alih memperbaiki bug, mereka membuat abstraksi yang makin rumit dengan alasan agar bug tidak muncul sejak awal, dan hasilnya mudah ditebak
Pelanggan, terutama pelanggan nonteknis, tidak memiliki visi produk yang konsisten, dan sering kali hanya menginginkan perbaikan langsung tanpa memedulikan rencana lain. Pelanggan juga tidak saling berkomunikasi sehingga feedback bisa bertentangan. Jika beban ini diletakkan pada developer, developer harus mengelola semua komunikasi selain memiliki kompetensi teknis untuk memahami dan memelihara codebase dengan baik, dan semua developer harus memiliki visi konsisten yang sama agar bisa mengambil keputusan yang bijaksana. Dalam peran developer sekarang yang juga mengelola infrastruktur, itu pada dasarnya berarti satu orang melakukan dua atau tiga pekerjaan
Sepertinya orang-orang jauh lebih menyukai cara ini. Mereka tidak lelah karena selalu hanya memperbaiki bug, dan pemutusan feedback yang Anda sebutkan dengan tajam itu juga bisa dihindari
Pada titik ini, saya sudah tidak bisa menghitung berapa kali melakukan wawancara, jadi agak sulit untuk sepenuhnya setuju. Salah satu kesulitannya adalah pada tahap penerimaan lamaran, jumlah pelamar bisa sangat banyak atau berpotensi sangat banyak, dan pada tahap ini biasanya tim rekrutmenlah yang berinteraksi dengan pelamar
Menambahkan pertanyaan seperti contoh itu tidak masalah, tetapi untuk menyaring kandidat yang tidak memenuhi syarat, diperlukan pertanyaan yang bukan sekadar ya/tidak atau berbentuk skala. Saya lebih suka pertanyaan yang sangat sederhana dengan jawaban yang jelas. Ada begitu banyak orang yang menjawab “sangat nyaman” dengan JavaScript tetapi ternyata tidak tahu apa itu
===. Jadi saya menanyakan hal seperti “apa operator strict equality di JavaScript?” Programmer JavaScript mana pun akan tahu, tetapi satu pertanyaan seperti ini saja bisa menyaring 50% dari kumpulan pelamar dan menghemat sangat banyak waktu organisasiAda banyak pembahasan tentang kecocokan budaya, tetapi sebagian besarnya terlihat seperti mengangkat lapisan diskriminasi terselubung yang merugikan perusahaan. Menurut saya, keterbukaan budaya adalah faktor keberhasilan, sementara diskriminasi membawa ke arah sebaliknya
Saat membaca kalimat “Pemimpin terbaik melacak tingkat keberhasilan, tidak takut mengakui kesalahan perekrutan, serta merekrut perlahan dan memecat dengan cepat”, saya jadi ingin mengunggah gambar yang ditampilkan JWZ (Jamie Zawinski) ketika ia mendeteksi header referrer yang mengarah ke situs ini. Cari saja di Google apa yang dikatakan Jamie Zawinski tentang Y Combinator. Ia juga orang yang berjasa atas keputusan Netscape untuk merilis Netscape Navigator sebagai open source, serta sebagian besar pekerjaan yang kemudian menjadi engine rendering browser tersebut. Karena itulah Firefox ada
Di salah satu tempat kerja awal saya, perusahaan mencoba melarang semua hal yang bisa disebut kecocokan budaya dalam kriteria perekrutan. Akibatnya, beberapa orang langsung membenci perusahaan begitu bergabung dan berhenti dalam hitungan minggu atau bulan. Seorang kandidat menekankan perencanaan dan prediktabilitas, serta mengeluhkan perusahaan-perusahaan sebelumnya yang bergerak terlalu cepat. Kami adalah startup, dan seperti yang diperkirakan, ia membenci perusahaan. Namun dalam proses pengambilan keputusan perekrutan, kekhawatiran seperti itu tidak boleh disampaikan. Alasannya, itu dianggap “kecocokan budaya” dan bisa mengarah pada diskriminasi. Setelah kejadian serupa terjadi beberapa kali lagi, kebijakan itu diam-diam menghilang, dan kami kembali bisa menilai kompatibilitas dengan budaya engineering
“Kecocokan budaya” pada dasarnya adalah pertukaran: mendapatkan efisiensi komunikasi dan kepercayaan tinggi dengan mengorbankan sebagian keberagaman pemikiran. Karena orang-orang sudah tahu bagaimana seharusnya bertindak dan apa yang harus diharapkan satu sama lain, tidak perlu membuat banyak panduan, tetapi mereka menjadi lebih rentan terhadap groupthink dan bias kognitif terkait. Kira-kira seperti “di kapal ini ada semua warna pelangi, tetapi bahkan orang Klingon kami pun berpikir bahwa Klingon itu jahat”
Saya tidak yakin apakah saran “buat library video penjelasan” itu bagus. Untuk hal-hal tertentu seperti UI atau animasi, itu bisa masuk akal
Namun secara umum, membaca teks lebih efisien daripada menonton video. Saat sedang terburu-buru, melompat ke bagian penting dalam teks juga jauh lebih mudah daripada di video