Untuk grup dan beberapa merek
Beberapa perusahaan, satu instalasi, tanpa pelanggan bersama
Grup biasanya menyelesaikan ini dua kali dengan buruk: lima instalasi terpisah dan lima segalanya terpisah, atau satu instalasi dengan janji khidmat bahwa aplikasi selalu memfilter dengan benar. Yang pertama mahal. Yang kedua adalah janji, dan janji bukanlah model keamanan.
Jika Anda menjalankan lebih dari satu perusahaan — sebuah holding dengan anak usaha, sebuah waralaba, dua merek yang menyasar pasar berbeda, sebuah agensi dan hal yang dipisahkan agensi itu — Anda sudah tahu bentuk masalahnya. Merek-merek itu berbagi orang, perangkat, dan departemen keuangan. Mereka tidak berbagi pelanggan, dan tidak boleh tampak berbagi.
iKonekt menjalankan semuanya dari satu instalasi, dan pemisahan di antara mereka dijaga oleh basis data, bukan oleh kode. Perbedaan itu terdengar akademis sampai hari ketika tidak lagi.
Mengapa lapisan ini penting
Filter di tingkat aplikasi adalah satu kalimat dalam sebuah kueri. Ia bekerja selama setiap kueri yang akan pernah ditulis memuatnya — termasuk yang ditulis terburu-buru, yang ditulis oleh pengembang baru, dan yang ditulis untuk laporan yang hanya akan dipakai sekali.
Dorong batas tersebut ke dalam basis data dan aritmetikanya terbalik. Kebijakan berjalan pada setiap pembacaan dan setiap penulisan, di bawah segalanya. Kueri yang lupa pada perusahaan tidak mengembalikan baris yang salah; ia tidak mengembalikan apa pun. Mode kegagalan menjadi layar kosong dan pengembang yang bingung, dan itulah mode kegagalan yang benar.
Layar kosong adalah sebuah fitur. Kami lebih memilih menjelaskan layar kosong kepada salah satu insinyur kami sendiri daripada menjelaskan daftar pelanggan kepada dua klien yang tidak menyangka akan bertemu.
- 1Pelanggan & utasTerbatas. Penjual di merek A tidak dapat menjangkau milik merek B, karena konstruksi, bukan karena konfigurasi.
- 2Klaim atas seorang pelanggan"Kami sudah memiliki akun ini" adalah kunci yang dipegang per perusahaan — sehingga dua merek dapat sama-sama menggarap pasar yang sama tanpa saling bertabrakan.
- 3Prompt & pengaturanSetiap perusahaan mengedit miliknya sendiri. Satu-satunya tempat ini pernah dibagikan adalah sebuah bug, dan itulah bug yang paling dibanggakan sistem ini karena telah ditemukan.
- 4Program mitraSatu modul per perusahaan, bukan satu modul global yang diwarisi semua orang.
Batas ditegakkan di bawah aplikasi
Apa yang benar-benar dapat dibagikan oleh sebuah grup
Pemisahan bukanlah isolasi demi isolasi. Hal-hal yang layak dibagikan di seluruh grup dibagikan secara sengaja, dan sebagian besar adalah hal-hal yang membosankan — dan itu tepat sekali, karena pada hal-hal yang membosankan itulah biaya duplikasi berada:
- Satu instalasi untuk dijalankan dan diperbarui. Satu deployment, satu set kredensial untuk dijaga, satu hal untuk terus dipatch.
- Satu tim orang, memakai topi yang berbeda-beda. Seseorang dapat bekerja di lebih dari satu perusahaan; yang tidak dapat ia lakukan adalah melihat keduanya sekaligus melalui kueri yang lupa bertanya.
- Satu set kebiasaan. Cara prospek ditugaskan, cara catatan ditulis, cara pekerjaan menjadi faktur — dipelajari sekali, diterapkan di mana-mana, sehingga mempersingkat orientasi menjadi sekitar satu pagi.
- Satu hubungan dengan sisa keluarga. castomAPI di bawahnya, akun yang sama, konektor yang sama — dikonfigurasi per perusahaan di tempat yang penting.
Pertanyaan yang selalu diajukan grup kedua
"Bisakah kami membuat laporan lintas semuanya?" Ya — dari titik pandang milik grup sendiri, secara sengaja dan eksplisit, bukan sebagai efek samping dari batas yang bocor. Pembedaan inilah keseluruhan desainnya: melintasi garis harus menjadi tindakan yang dilakukan seseorang dengan sengaja, dengan kewenangan untuk melakukannya. Hal itu tidak boleh pernah menjadi sesuatu yang dapat dicapai oleh sebuah pengenal liar secara tidak sengaja.
Dan pertanyaan yang mereka ajukan ketiga: "apa yang terjadi jika kami menjual salah satu merek?" Batas yang dijaga basis data juga merupakan batas yang memungkinkan Anda mengangkat salinan bersih darinya. Itu bukan kebetulan — pemisahan dan portabilitas adalah properti yang sama dilihat dari dua rapat yang berbeda.
Di bawah lantai
Apa yang menjaga garis, secara spesifik
Bukan klaim, melainkan daftar. Jika sebuah pemasok tidak dapat menyajikan daftar ini tentang produk mereka sendiri, itu patut dicermati.
26
Tabel yang membawa perusahaannya, dengan pemeriksaan dipaksa aktif, bukan sekadar tersedia.
72
Kebijakan, dituliskan satu per satu sehingga masing-masing telah dibaca oleh manusia, bukan dihasilkan dalam satu putaran.
942
Pengujian, dijalankan terhadap basis data yang dibangun dari nol setiap kali ada perubahan.
0
Perusahaan bawaan. Permintaan tanpa cakupan akan gagal sebelum mencapai data — tidak ada fallback yang bisa lupa dinonaktifkan.

"Lima perusahaan, lima instalasi, lima faktur dari Anda."
Satu instalasi. Lima batas yang dijaga basis data.
Orang yang dibagikan, kebiasaan yang dibagikan, platform yang dibagikan — dan tidak satu pun pelanggan yang dibagikan. Melintasi garis itu harus menjadi sesuatu yang dilakukan seseorang dengan sengaja, tidak pernah sesuatu yang berhasil dilakukan sebuah pengenal secara tidak sengaja.
Bagaimana pemisahan dibangun →