Contoh yang baik dari apa yang saya coba tanyakan adalah fitur Timeline baru Facebook. Pada awalnya, hanya beberapa orang terpilih yang diizinkan mengakses garis waktu. Ketika fitur menjadi lebih solid dalam cara kerjanya dan bug diperbaiki di dalamnya, pengguna tambahan diizinkan mengakses fitur tersebut. Di kemudian hari, sekelompok besar pengguna diizinkan mengakses fitur ini dan sekarang, fitur umum untuk semua pengguna. Bagaimana cara tim pengembangan mengelola fitur jenis ini diluncurkan?
Saya telah bermain dengan gagasan untuk menggunakan pengaturan konfigurasi untuk secara selektif mengontrol akses jika ada sesuatu yang sedang dalam pengujian atau dalam produksi melalui file konfigurasi dan pernyataan kondisi jika dalam kode. Sekarang sementara ini oke untuk fitur-fitur sederhana, saya percaya bahwa jika kita mencoba mengimplementasikan ini dalam set fitur yang lebih besar itu akan menjadi tidak terkelola.
Apa cara terbaik untuk mengelola peluncuran fitur dengan cara ini?
Jawaban:
Mudah ditebak bahwa sistem seperti Facebook sebagian besar didorong oleh basis data. Semua data pengguna jelas disimpan dalam basis data, dan itu kemungkinan mencakup informasi tentang cara merender data pengguna. Mustahil untuk mengetahui dengan tepat bagaimana basis data Facebook diatur, tetapi harus menjadi kasus bahwa fitur seperti Timeline diluncurkan ke pengguna secara bertahap dengan secara berkala memilih pengguna dalam database, berdasarkan pada beberapa kriteria, dan mengubah nilainya ( s) dari beberapa bidang.
Sebagai contoh, mungkin mereka memiliki lapangan dalam tabel user seperti
timeline_status
yang memiliki nilai-nilai sepertinot offered
,offered
,preview
, danpublic
. Berdasarkan itu saja, sistem Facebook dapat memutuskan bagaimana merender halaman info pengguna. Tim FB kemudian dapat mencoba fitur Timeline dengan memilih beberapa kelompok pengguna dan mengubah nilai bidang itu.Dalam praktiknya, saya yakin ini sedikit lebih rumit dari itu, tetapi gagasan intinya adalah bahwa akun pengguna hanyalah data, dan sebagian dari data itu dapat menentukan fitur mana yang tersedia. Meluncurkan fitur baru kemudian hanya masalah memperbarui catatan pengguna dalam database.
sumber
Ya, itu cara yang salah untuk melakukannya. Apa pun fitur X jika dapat dikonfigurasi maka ia harus memperluas atau mengganti sesuatu. Lakukan ITU dalam kode. Misalnya, hal FB mungkin memiliki sesuatu seperti:
Maka Anda akan membangun pabrik yang membuat objek UserPageView ketika mengunjungi halaman pengguna berdasarkan konfigurasi. Anda akan mengaktifkan tampilan itu. Tidak ada cabang konyol.
Anda ingin melakukannya dengan cara ini karena jika seseorang meminta Anda untuk mengubahnya sekali, mereka akan memintanya lagi. Selanjutnya mereka akan meminta untuk mengubah hal lain. Teka-teki arsitektur Anda dengan kasing khusus dan jika ada di mana-mana dan Anda akan memiliki semangkok besar spaghetti berjamur yang tidak dapat dipelihara daripada produk yang kaya fitur dan matang.
sumber
Pikirkan fitur yang sama dengan yang Anda pikirkan tentang fitur administrasi di situs web.
Ketika sebuah halaman memuat periksa apakah pengguna memiliki hak yang tepat untuk fitur jika memuatnya.
Facebook tampaknya menggunakan pendekatan berbasis lokasi ketika meluncurkan fitur baru. Ini mungkin sesederhana melihat alamat IP pengguna untuk menemukan lokasi mereka.
sumber