Kerangka Kerja untuk Desain Sistem¶
Anda baru saja mendapatkan wawancara langsung yang didambakan di perusahaan impian Anda. Koordinator perekrutan mengirimkan jadwal untuk hari itu. Setelah membaca daftarnya, Anda merasa cukup puas hingga akhirnya Anda menemukan sesi wawancara ini - Wawancara Desain Sistem.
Wawancara desain sistem seringkali terasa mengintimidasi. Wawancara ini bisa sekabur "merancang produk terkenal X?". Pertanyaannya ambigu dan terkesan terlalu luas. Kelelahan Anda bisa dimaklumi. Lagipula, bagaimana mungkin seseorang merancang produk populer dalam satu jam yang telah dikerjakan oleh ratusan, bahkan ribuan, insinyur?
Kabar baiknya adalah tidak ada yang mengharapkan Anda melakukannya. Desain sistem di dunia nyata sangatlah rumit. Misalnya, pencarian Google tampak sederhana; namun, jumlah teknologi yang mendasari kesederhanaan itu sungguh menakjubkan. Jika tidak ada yang mengharapkan Anda merancang sistem di dunia nyata dalam satu jam, apa manfaat wawancara desain sistem?
Wawancara desain sistem mensimulasikan pemecahan masalah di dunia nyata, di mana dua rekan kerja berkolaborasi dalam masalah yang ambigu dan menghasilkan solusi yang memenuhi tujuan mereka. Masalah ini bersifat terbuka, dan tidak ada jawaban yang sempurna. Desain akhir kurang penting dibandingkan dengan pekerjaan yang Anda lakukan dalam proses desain. Hal ini memungkinkan Anda untuk menunjukkan keahlian desain Anda, mempertahankan pilihan desain Anda, dan menanggapi umpan balik secara konstruktif.
Mari kita balikkan meja dan pertimbangkan apa yang terlintas di benak pewawancara saat ia memasuki ruang konferensi untuk bertemu Anda. Tujuan utama pewawancara adalah menilai kemampuan Anda secara akurat. Hal terakhir yang ia inginkan adalah memberikan evaluasi yang tidak meyakinkan karena sesi berjalan buruk dan tidak ada cukup sinyal. Apa yang dicari pewawancara dalam wawancara desain sistem?
Banyak yang berpikir bahwa wawancara desain sistem hanya tentang keterampilan desain teknis seseorang. Padahal, lebih dari itu. Wawancara desain sistem yang efektif memberikan sinyal kuat tentang kemampuan seseorang untuk berkolaborasi, bekerja di bawah tekanan, dan menyelesaikan ambiguitas secara konstruktif. Kemampuan mengajukan pertanyaan yang baik juga merupakan keterampilan penting, dan banyak pewawancara secara khusus mencari keterampilan ini.
Pewawancara yang baik juga mencari tanda-tanda bahaya. Rekayasa berlebihan adalah penyakit nyata bagi banyak insinyur karena mereka senang dengan kemurnian desain dan mengabaikan kompromi. Mereka seringkali tidak menyadari biaya gabungan dari sistem yang direkayasa secara berlebihan, dan banyak perusahaan membayar mahal untuk ketidaktahuan tersebut. Anda tentu tidak ingin menunjukkan kecenderungan ini dalam wawancara desain sistem. Tanda-tanda bahaya lainnya termasuk berpikiran sempit, keras kepala, dll.
Dalam bab ini, kita akan membahas beberapa kiat bermanfaat dan memperkenalkan kerangka kerja yang sederhana dan efektif untuk memecahkan masalah wawancara desain sistem.
Proses 4 langkah untuk wawancara desain sistem yang efektif¶
Setiap wawancara desain sistem berbeda. Wawancara desain sistem yang baik bersifat terbuka dan tidak ada solusi yang cocok untuk semua. Namun, ada langkah-langkah dan kesamaan yang perlu dibahas dalam setiap wawancara desain sistem.
Langkah 1 - Pahami masalah dan tetapkan ruang lingkup desain¶
"Mengapa harimau itu mengaum?"
Sebuah tangan terangkat di belakang kelas.
"Ya, Jimmy?", jawab guru itu.
"Karena dia LAPAR".
"Bagus sekali, Jimmy."
Sepanjang masa kecilnya, Jimmy selalu menjadi yang pertama menjawab pertanyaan di kelas. Setiap kali guru mengajukan pertanyaan, selalu ada anak di kelas yang suka mencoba menjawabnya, terlepas dari apakah dia tahu jawabannya atau tidak. Itulah Jimmy.
Jimmy adalah siswa yang hebat. Dia bangga mengetahui semua jawaban dengan cepat. Dalam ujian, dia biasanya menjadi orang pertama yang menyelesaikan soal. Dia adalah pilihan utama guru untuk setiap kompetisi akademik.
JANGAN seperti Jimmy.
Dalam wawancara desain sistem, memberikan jawaban dengan cepat tanpa berpikir tidak akan memberi Anda poin bonus. Menjawab tanpa memahami persyaratan secara menyeluruh adalah tanda bahaya besar karena wawancara bukanlah kontes trivia. Tidak ada jawaban yang benar.
Jadi, jangan langsung memberikan solusi. Pelan-pelan saja. Berpikirlah secara mendalam dan ajukan pertanyaan untuk memperjelas persyaratan dan asumsi. Ini sangat penting.
Sebagai seorang insinyur, kita senang memecahkan masalah yang sulit dan langsung terjun ke desain akhir; namun, pendekatan ini kemungkinan besar akan mengarahkan Anda untuk merancang sistem yang salah. Salah satu keterampilan terpenting sebagai seorang insinyur adalah mengajukan pertanyaan yang tepat, membuat asumsi yang tepat, dan mengumpulkan semua informasi yang dibutuhkan untuk membangun sebuah sistem. Jadi, jangan takut untuk bertanya.
Saat Anda mengajukan pertanyaan, pewawancara akan menjawab pertanyaan Anda secara langsung atau meminta Anda untuk membuat asumsi. Jika yang terakhir terjadi, tuliskan asumsi Anda di papan tulis atau kertas. Anda mungkin akan membutuhkannya nanti.
Pertanyaan seperti apa yang harus diajukan? Ajukan pertanyaan untuk memahami persyaratan yang tepat. Berikut adalah daftar pertanyaan untuk membantu Anda memulai:
Fitur spesifik apa yang akan kita bangun?
Berapa banyak pengguna yang dimiliki produk ini?
Seberapa cepat perusahaan mengantisipasi peningkatan skala? Berapa skala yang diantisipasi dalam 3 bulan, 6 bulan, dan satu tahun?
Apa saja tumpukan teknologi perusahaan? Layanan apa yang sudah ada yang dapat Anda manfaatkan untuk menyederhanakan desain?
Contoh¶
Jika Anda diminta untuk merancang sistem umpan berita, Anda ingin mengajukan pertanyaan yang membantu Anda mengklarifikasi persyaratan. Percakapan antara Anda dan pewawancara mungkin terlihat seperti ini:
Kandidat: Apakah ini aplikasi seluler? Atau aplikasi web? Atau keduanya?
Pewawancara: Keduanya.
Kandidat: Apa saja fitur terpenting untuk produk ini?
Pewawancara: Kemampuan untuk membuat postingan dan melihat umpan berita teman.
Kandidat: Apakah umpan berita diurutkan dalam urutan kronologis terbalik atau urutan tertentu? Urutan tertentu berarti setiap postingan diberi bobot yang berbeda. Misalnya, postingan dari teman dekat Anda lebih penting daripada postingan dari grup.
Pewawancara: Untuk menyederhanakannya, mari kita asumsikan umpan diurutkan dalam urutan kronologis terbalik.
Kandidat: Berapa banyak teman yang dapat dimiliki pengguna?
Pewawancara: 5000
Kandidat: Berapa volume lalu lintasnya?
Pewawancara: 10 juta pengguna aktif harian (DAU)
Kandidat: Bisakah umpan berisi gambar, video, atau hanya teks?
Pewawancara: Dapat berisi berkas media, termasuk gambar dan video.
Di atas adalah beberapa contoh pertanyaan yang dapat Anda ajukan kepada pewawancara. Penting untuk memahami persyaratan dan mengklarifikasi ambiguitas.
Langkah 2 - Usulkan desain tingkat tinggi dan dapatkan persetujuan¶
Pada langkah ini, kami bertujuan untuk mengembangkan desain tingkat tinggi dan mencapai kesepakatan dengan pewawancara mengenai desain tersebut. Berkolaborasi dengan pewawancara selama proses ini merupakan ide yang bagus.
Buatlah cetak biru awal untuk desain tersebut. Mintalah umpan balik. Perlakukan pewawancara Anda sebagai rekan satu tim dan bekerjalah bersama. Banyak pewawancara yang baik senang berbicara dan terlibat.
Gambarlah diagram kotak dengan komponen-komponen utama di papan tulis atau kertas. Ini mungkin termasuk klien (seluler/web), API, server web, penyimpanan data, cache, CDN, antrean pesan, dll.
Lakukan perhitungan perkiraan untuk mengevaluasi apakah cetak biru Anda sesuai dengan batasan skala. Berpikirlah dengan lantang. Komunikasikan dengan pewawancara Anda jika perkiraan diperlukan sebelum mendalaminya.
Jika memungkinkan, bahas beberapa kasus penggunaan yang konkret. Ini akan membantu Anda menyusun desain tingkat tinggi. Kemungkinan besar kasus penggunaan ini juga akan membantu Anda menemukan kasus-kasus khusus yang belum Anda pertimbangkan.
Haruskah kita menyertakan titik akhir API dan skema basis data di sini? Hal ini tergantung pada masalahnya. Untuk masalah desain yang besar seperti "Desain mesin pencari Google", hal ini agak terlalu rendah. Untuk masalah seperti mendesain backend untuk permainan poker multipemain, hal ini wajar saja. Komunikasikan dengan pewawancara Anda.
Contoh¶
Mari kita gunakan "Merancang Sistem Umpan Berita" untuk mendemonstrasikan cara mendekati desain tingkat tinggi. Di sini, Anda tidak diharuskan memahami cara kerja sistem sebenarnya. Semua detail akan dijelaskan di bab "Merancang Sistem Umpan Berita".
Pada tingkat tinggi, desain dibagi menjadi dua alur: penerbitan umpan dan pembuatan umpan berita.
Penerbitan umpan: ketika pengguna menerbitkan sebuah postingan, data terkait ditulis ke dalam cache/basis data, dan postingan tersebut akan ditambahkan ke umpan berita teman.
Pembuatan umpan berita: umpan berita dibuat dengan menggabungkan postingan teman dalam urutan kronologis terbalik.
Gambar 1 dan Gambar 2 masing-masing menyajikan desain tingkat tinggi untuk alur penerbitan umpan dan pembuatan umpan berita.
Gambar 1¶
Gambar 2¶
Langkah 3 - Pendalaman Desain¶
Pada langkah ini, Anda dan pewawancara seharusnya telah mencapai tujuan berikut:
Menyepakati tujuan keseluruhan dan cakupan fitur
Menyusun cetak biru tingkat tinggi untuk keseluruhan desain
Mendapatkan umpan balik dari pewawancara Anda mengenai desain tingkat tinggi
Memiliki beberapa ide awal tentang area yang akan difokuskan dalam pendalaman berdasarkan umpan baliknya
Anda harus bekerja sama dengan pewawancara untuk mengidentifikasi dan memprioritaskan komponen dalam arsitektur. Perlu ditekankan bahwa setiap wawancara berbeda. Terkadang, pewawancara mungkin memberikan petunjuk bahwa ia suka berfokus pada desain tingkat tinggi. Terkadang, untuk wawancara kandidat senior, diskusi dapat berkisar pada karakteristik kinerja sistem, kemungkinan berfokus pada hambatan dan estimasi sumber daya. Dalam kebanyakan kasus, pewawancara mungkin ingin Anda menggali detail beberapa komponen sistem. Untuk pemendek URL, menarik untuk mendalami desain fungsi hash yang mengubah URL panjang menjadi pendek. Untuk sistem obrolan, cara mengurangi latensi dan cara mendukung status online/offline adalah dua topik yang menarik.
Manajemen waktu sangat penting karena Anda mudah terhanyut oleh detail-detail kecil yang tidak menunjukkan kemampuan Anda. Anda harus siap dengan sinyal-sinyal yang akan ditunjukkan kepada pewawancara. Usahakan untuk tidak membahas detail yang tidak perlu. Misalnya, membahas algoritma EdgeRank untuk pemeringkatan umpan Facebook secara detail bukanlah hal yang ideal selama wawancara desain sistem karena hal ini menghabiskan banyak waktu berharga dan tidak membuktikan kemampuan Anda dalam merancang sistem yang skalabel.
Contoh¶
Pada titik ini, kita telah membahas desain tingkat tinggi untuk sistem umpan berita, dan pewawancara puas dengan proposal Anda. Selanjutnya, kita akan menyelidiki dua kasus penggunaan yang paling penting:
Penerbitan umpan
Pengambilan umpan berita
Gambar 3 dan Gambar 4 menunjukkan desain detail untuk kedua kasus penggunaan tersebut, yang akan dijelaskan secara rinci dalam bab "Merancang Sistem Umpan Berita".
Gambar 3¶
Gambar 4¶
Langkah 4 - Penutup¶
Pada langkah terakhir ini, pewawancara mungkin akan mengajukan beberapa pertanyaan lanjutan atau memberi Anda kebebasan untuk membahas poin-poin tambahan lainnya. Berikut beberapa arahan yang dapat diikuti:
Pewawancara mungkin ingin Anda mengidentifikasi hambatan sistem dan membahas potensi perbaikan. Jangan pernah mengatakan desain Anda sempurna dan tidak ada yang bisa diperbaiki. Selalu ada hal yang perlu ditingkatkan. Ini adalah kesempatan yang baik untuk menunjukkan pemikiran kritis Anda dan meninggalkan kesan akhir yang baik.
Memberikan pewawancara ringkasan desain Anda dapat bermanfaat. Hal ini terutama penting jika Anda menyarankan beberapa solusi. Menyegarkan ingatan pewawancara dapat membantu setelah sesi yang panjang.
Kasus kesalahan (kegagalan server, kehilangan jaringan, dll.) menarik untuk dibahas.
Masalah operasional juga perlu dibahas. Bagaimana Anda memantau metrik dan log kesalahan? Bagaimana cara meluncurkan sistem?
Bagaimana menangani kurva skala berikutnya juga merupakan topik yang menarik. Misalnya, jika desain Anda saat ini mendukung 1 juta pengguna, perubahan apa yang perlu Anda lakukan untuk mendukung 10 juta pengguna?
Usulkan penyempurnaan lain yang Anda perlukan jika Anda memiliki lebih banyak waktu.
Sebagai penutup, kami merangkum daftar hal yang boleh dan tidak boleh dilakukan.
Yang Harus Dilakukan¶
Selalu minta klarifikasi. Jangan berasumsi bahwa asumsi Anda benar.
Pahami persyaratan masalahnya.
Tidak ada jawaban yang benar maupun jawaban terbaik. Solusi yang dirancang untuk memecahkan masalah startup muda berbeda dengan solusi perusahaan mapan dengan jutaan pengguna. Pastikan Anda memahami persyaratannya.
Beri tahu pewawancara apa yang Anda pikirkan. Berkomunikasilah dengan pewawancara Anda.
Sarankan beberapa pendekatan jika memungkinkan.
Setelah Anda menyetujui cetak biru dengan pewawancara, jelaskan detail setiap komponen. Rancang komponen yang paling penting terlebih dahulu.
Sampaikan ide kepada pewawancara. Pewawancara yang baik bekerja dengan Anda sebagai rekan satu tim.
Jangan pernah menyerah.
Larangan¶
Jangan lengah menghadapi pertanyaan wawancara yang umum.
Jangan langsung memberikan solusi tanpa mengklarifikasi persyaratan dan asumsi.
Jangan terlalu detail pada satu komponen di awal. Berikan desain tingkat tinggi terlebih dahulu, lalu lanjutkan dengan detail.
Jika Anda mengalami kesulitan, jangan ragu untuk meminta petunjuk.
Sekali lagi, komunikasikan. Jangan berpikir dalam diam.
Jangan berpikir wawancara Anda sudah selesai setelah Anda memberikan desain. Anda belum selesai sampai pewawancara mengatakan Anda sudah selesai. Mintalah umpan balik sedini mungkin dan sesering mungkin.
Alokasi waktu untuk setiap langkah¶
Pertanyaan wawancara desain sistem biasanya sangat luas, dan 45 menit atau satu jam tidak cukup untuk membahas keseluruhan desain. Manajemen waktu sangatlah penting. Berapa banyak waktu yang seharusnya Anda luangkan untuk setiap langkah? Berikut ini adalah panduan singkat tentang alokasi waktu Anda dalam sesi wawancara 45 menit. Harap diingat bahwa ini hanyalah perkiraan kasar, dan alokasi waktu yang sebenarnya bergantung pada cakupan masalah dan persyaratan dari pewawancara.
Langkah 1: Memahami masalah dan menetapkan cakupan desain: 3-10 menit
Langkah 2: Mengusulkan desain tingkat tinggi dan mendapatkan persetujuan: 10-15 menit
Langkah 3: Mendalami desain: 10-25 menit
Langkah 4: Penutup: 3-5 menit