Alasan Greg Foster, pengembang Graphite, tertarik pada hal ini
- Ia memulai proyek Graphite dengan terinspirasi dari alat internal Facebook
- Setelah rekan-rekannya yang berasal dari Facebook memperkenalkan Mercurial dan alur kerja "stacked diffs", ia memutuskan untuk menghadirkannya bagi para pengembang GitHub, dan pada akhirnya membuat CLI yang menggabungkan ide-ide dari Hg ke dalam Git
- Mengapa Facebook mengadopsi Mercurial alih-alih Git dan membangun alur kerja kustom di atasnya?
- Google juga tidak menggunakan Git, tetapi itu karena engineering Google sudah lebih dari 5 tahun lebih maju dibanding Git
- Sebaliknya, Facebook didirikan pada 2004, kira-kira pada masa yang sama saat Git dibuat, dan ketika Facebook mulai secara serius mengevaluasi alat source control, Git lebih populer daripada Mercurial
- Lalu mengapa Facebook tidak menggunakan Git?
- Menurutnya, jika Facebook mengadopsi Git dan berkontribusi padanya pada awal 2010-an, dunia engineering mungkin akan berbeda
- Git mungkin menjadi lebih ramah pengguna dan bisa mendukung Stacked Changes secara native
- Perusahaan seperti Uber dan Pinterest, yang didirikan oleh karyawan awal Facebook, juga mungkin akan menggunakan Git dan GitHub sebagai source control alih-alih Mercurial, sehingga menciptakan ekosistem yang lebih sedikit terfragmentasi selama 10 tahun terakhir
- Namun Facebook tidak bertahan dengan Git (untuk monorepo utamanya). Sebaliknya, mereka mengadopsi Mercurial untuk version control dan secara bertahap menambahkan alat kustom di atasnya
- Ia menemukan artikel Facebook Scaling Mercurial at Facebook
- Itu adalah tulisan dari 10 tahun lalu, dan setelah menonton beberapa video YouTube sesudahnya, ia mendapatkan jawaban "karena performa"
- Namun ia ingin menggali lebih dalam dan mendengar pemikiran para pengambil keputusan saat itu, lalu bertanya kepada dua engineer yang pernah terlibat dalam proyek migrasi Mercurial
- Ia merangkum isi ini berdasarkan percakapan informal dengan mereka
Mengapa Facebook meninggalkan Git dan bermigrasi ke Mercurial
- Facebook awalnya menggunakan Git, tetapi sekitar 2012 mulai mengalami masalah performa ketika skala codebase membesar
- Proses file "stat-ing" di Git menjadi bottleneck, dan waktu eksekusi perintah dasar Git memakan lebih dari 45 menit
- Para maintainer Git tidak kooperatif terhadap masalah repository berskala besar yang dihadapi Facebook, dan justru menyarankan pemecahan repository
Alternatif yang dipertimbangkan
- Pada 2012 tidak banyak alternatif untuk Git, dan Facebook sempat mempertimbangkan solusi closed-source seperti Perforce, tetapi ada kendala teknis
- Mercurial memiliki performa yang mirip dengan Git, tetapi arsitekturnya lebih rapi dan lebih mudah diperluas
- Tim Facebook ikut serta dalam hackathon Mercurial dan terkesan oleh ekstensibilitas Mercurial serta keterbukaan komunitasnya
Migrasi seluruh organisasi engineering
- Untuk meyakinkan bagian perusahaan lainnya, tim Facebook memetakan perintah dan alur kerja antara Git dan Mercurial, serta meluangkan waktu untuk mendengarkan kekhawatiran para pengembang
- Proses migrasi dilakukan dengan hati-hati, dan pada akhirnya Facebook beralih ke Mercurial
- Facebook juga berkontribusi dengan meningkatkan performa Mercurial dan memungkinkan paralelisasi code review melalui "stacked diffs"
Pemikiran penutup
- Kisah ini mengingatkan bahwa "banyak keputusan teknis besar tidak digerakkan oleh teknologi, melainkan oleh manusia"
- Facebook memilih Mercurial bukan karena performanya lebih unggul daripada Git, tetapi karena kolaborasi dengan para maintainer Mercurial lebih terbuka
- Dalam proses meyakinkan seluruh organisasi engineering, yang penting bukanlah bahwa satu teknologi lebih unggul dari yang lain, melainkan "komunikasi yang penuh pertimbangan"
- Ini menegaskan bahwa "komunikasi dan kebaikan hati" adalah nilai penting dalam dunia alat pengembang
2 komentar
Saya jadi teringat ucapan seorang kenalan, "untuk meyakinkan pelanggan, kita harus menjadi penggaruk punggung".
Tidak perlu terlalu tajam, tidak perlu terlalu cepat, tidak perlu terlalu nyaman, dan tidak perlu terlalu mahal; asalkan bisa menggaruk tepat di tempat yang diinginkan, itulah layanan yang diinginkan pelanggan wkwk
Saya rasa, karena Git dibuat oleh Linus Torvalds untuk mengelola kode sumber Linux, pasti ada beberapa bagian yang sampai batas tertentu tidak bisa dikompromikan.
Inti pemikiran penutupnya terdengar seolah-olah Git buruk karena tidak mendengarkan kebutuhan Facebook sendiri dan tidak mengutamakan komunikasi serta keramahan, tetapi menurut saya, pada akhirnya hanya preferensi keduanya yang berbeda dalam berbagai aspek.
Sebaliknya, jika dipikirkan dari arah lain, Facebook juga sebenarnya masih punya pilihan untuk menerima pemisahan repositori yang direkomendasikan Git dan menerapkannya. Hanya saja itu bukan jenis "keramahan" yang mereka inginkan.