Atau lakukan dengan benar
Jika Anda memilih satu ide yang membunuh sebagian besar produk, maka ini adalah penciptaan cadangan untuk masa depan (proofing masa depan).
Biasanya ide itu memanifestasikan dirinya dalam suatu pola.
Kita membutuhkan {X} , dan walaupun membuat {Y} jauh lebih mudah, tetapi dengan dimulainya {Z} opsi pertama akan menyederhanakan hidup kita.
Di mana
{Z} adalah peristiwa yang mungkin terjadi di masa depan yang jauh.
Berikut ini beberapa contohnya:
- Infrastruktur membutuhkan Kubernetes dan Docker , meskipun satu server besar jauh lebih sederhana, tetapi ketika Anda harus skala ke 11 server , itu akan menyederhanakan hidup kita.
- Pemrosesan data membutuhkan desain terdistribusi , meskipun solusi terpusat jauh lebih sederhana, tetapi ketika klien membutuhkan 99,999% waktu aktif dalam SLA , itu akan menyederhanakan hidup kita.
- Kita perlu merekrut tim pengembangan dan membuat perangkat lunak kita sendiri , meskipun Wordpress dan Shopify jauh lebih sederhana, tetapi ketika basis pelanggan tumbuh 100 kali , itu akan menyederhanakan hidup kita.
- Kita perlu menggunakan desain berdasarkan jenis warisan , meskipun komposisi jauh lebih sederhana , tetapi setelah 5 tahun meningkatkan basis kode, ini akan menyederhanakan hidup kita.
- Kita perlu menulis kode dalam C ++ dengan caching representasi, meskipun skrip Python dengan permintaan langsung ke Postgres jauh lebih sederhana, tetapi dengan peningkatan besar dalam jumlah data ini akan menyederhanakan hidup kita.
Baru-baru ini saya menulis sebuah artikel tentang
masalah imajiner yang orang pikirkan tentang diri mereka sendiri karena bosan, dan bukan untuk kebaikan. Penimbunan untuk masa depan biasanya termasuk dalam kategori ini. Saya bahkan akan mengatakan bahwa ini adalah kesalahan paling populer di sebagian besar perusahaan kecil.
Tetapi ini layak untuk dibahas lebih lanjut, karena menciptakan stok untuk masa depan benar-benar dapat membantu produk, ada yang harus melakukan segalanya dengan benar. Namun, kebanyakan orang membuat kesalahan dan membahayakan pekerjaan.

Sukses lebih sulit daripada hidup dengannya
Tidak peduli betapa aneh kedengarannya, saya pikir salah satu alasan utama untuk apa yang terjadi adalah kultus selebriti.
Orang memiliki obsesi aneh untuk menempatkan diri pada posisi seseorang yang lebih sukses. Kemudian mereka membuat rencana dari posisi ini, dan tidak berpikir dengan cara mereka sendiri.
Semua orang membayangkan apa yang harus dilakukan dengan kekuatan luar biasa yang tidak dia miliki. Seolah-olah dia adalah presiden negara itu, seorang miliarder, selebritis, pemain mahir atau superman dengan kemampuan manusia super.
Masalah dengan pengembang adalah mereka terlalu memanjakan fantasi ini. Setiap orang dapat menulis perangkat lunak. Facebook tidak hanya mampu menciptakan platform media yang mendukung miliaran pengguna, tetapi Anda juga membuang-buang waktu. Sihir Facebook adalah untuk menarik miliaran pengguna ini, dan meningkatkan sistem adalah bagian yang mudah.
Ada dua aspek:
- a) Untuk mencapai pertumbuhan jauh lebih sulit daripada memastikannya secara teknis.
- b) Insinyur yang paling menonjol dan terkenal bekerja pada produk yang membutuhkan skala.
Poin pertama sudah jelas, jika Anda memikirkannya. Berapa banyak perusahaan perangkat lunak yang gagal ketika mereka mencapai miliaran pendapatan atau jutaan pengguna? Mungkin 80% ... jika Anda mendefinisikan "kegagalan" dengan sangat ketat.
Namun, dari semua perusahaan perangkat lunak yang pernah dibuat, mungkin hanya 0,05% yang pernah mencapai skala itu.
Masalah dengan membuat stok adalah biasanya dibuat untuk skenario yang tidak pernah hidup. Baik itu berkembang menjadi 1.000 karyawan, 10.000.000 pengguna, atau 10 pelanggan besar dengan persyaratan kejam.
Dan sulit untuk mengabaikan rencana seperti itu, karena itu mengganggu pemikiran kesuksesan. Mencegah orang dari berfantasi bagaimana mereka mengalahkan Amazon, tetapi sebaliknya kembali ke kenyataan. Tetapi pada kenyataannya Anda memiliki 50 klien, setengahnya adalah saudara dan teman.
Poin kedua hanya memperburuk situasi. Tentu saja, programmer terbaik mendapatkan tempat terbaik di perusahaan terkemuka. Mereka baik membantu menciptakan mereka, atau mereka membayar jutaan untuk dukungan di sana.
Prinsip Pareto bertentangan dengan kita, karena para programmer terbaik menulis sebagian besar buku dan memberikan banyak kuliah. Kami terus mendengar tentang layanan terdistribusi pada ribuan mesin yang memproses petabyte data dan berjuang untuk setiap persentase kinerja. Tetapi kebanyakan dari kita tidak perlu memikirkan seberapa besar atau dapat diandalkan sistem seperti Facebook atau Google.
Jadi jika fantasi tentang masa depan tidak membantu, maka Anda tidak perlu merencanakan?
Tidak, tentu saja Memikirkan masa depan itu penting. Itu harus diletakkan pada dirinya, tetapi lakukan dengan benar.

Desain untuk fleksibilitas menciptakan ketidaksempurnaan
Ketika berbicara tentang memikirkan masa depan, lebih sedikit lebih baik, tetapi lebih baik.
Produk yang sangat langka persis sesuai dengan kebutuhan pengguna, sisanya disetel saat bepergian.
Hampir tidak mungkin Anda memberikan layanan
A dan 90% pengguna membutuhkan ini. Biasanya Anda memberikan layanan
A , dan 90% pengguna membutuhkan layanan
Z. Namun,
A adalah alternatif terdekat dari
Z dan tidak ada yang menyediakan
Z ... sehingga beberapa pelanggan memutuskan untuk menggunakannya.
Ini bagus. Ketika pelanggan memutuskan untuk menyetujui produk Anda, Anda dapat mengubahnya sesuai dengan kebutuhan mereka. Intinya, pengguna membantu mengidentifikasi ceruk di pasar. Begitu Anda dapat mengisi ceruk ini dengan lebih baik, Anda akan mulai tumbuh.
Ini adalah paradigma berpikir yang produktif karena mendorong pendekatan "lebih sedikit adalah lebih" untuk pengembangan di masa depan. Cadangan masa depan tidak menyiratkan peningkatan kompleksitas, tetapi penyederhanaan maksimum. Untuk bisa beradaptasi.
Semakin sederhana basis kode Anda, semakin mudah untuk mengkonfigurasinya untuk melakukan tugas lain.
"Saya benci kode dan ingin sekecil mungkin dalam produk kami." - Jack Diderich
Desain yang sempurna membutuhkan pengorbanan. Biasanya mereka dikaitkan dengan fleksibilitas.
Seringkali itu adalah perangkat lunak tidak sempurna yang memecahkan masalah dunia, karena perangkat lunak tidak sempurna lebih fleksibel. Ketidaksempurnaan, menurut definisi, menyisakan ruang untuk perbaikan.

Desain dengan optimis, masa depan mungkin akan mengejutkan Anda
Penting juga untuk diingat bahwa dunia sekitar tidak statis.
Masalah di masa depan perlu ditangani oleh teknologi masa depan.
Banyak orang tidak hanya tidak memikirkan alat masa depan, tetapi umumnya menggunakan alat satu dekade yang lalu. Mereka memberlakukan batasan yang telah lama dicabut.
Biarkan saya menjelaskan masalah khusus: desain perangkat lunak terdistribusi. Salah satu alasan umum mengapa perangkat lunak tersebut sedang dikembangkan adalah karena satu server tidak dapat mengukur dengan spesifikasi yang diperlukan. Meskipun ini benar dalam beberapa situasi, sulit untuk percaya pada perspektif sebagian besar proyek, terutama startup yang hampir tidak memiliki klien.
Saya pikir sebagian alasannya adalah bahwa sebagian besar pengembang pada 2018 masih memikirkan server 2005. Tetapi komputer membaik setiap tahun, dan banyak penyedia menjual server berdedikasi murah.
Sebagai contoh, berikut ini adalah server besar yang murah:
- Dua Xeon E5-2680v4 (28 core, 56 utas, kecepatan clock dari 2,4 GHz hingga 3,3 GHz)
- RAM 512 gigabyte DDR4-2400
- 2 NVMe SSDs dari 1,2 TB (masing-masing ~ 3 GB / s dibaca, ~ 1,5 GB / s tulis)
Saya yakin sebagian besar
perangkat lunak terdistribusi membutuhkan kurang dari setengah beban kerja server amatir ini.
Biaya server semacam itu dari ~ 800 hingga $ 1300 per bulan tergantung pada lokasinya. Anda dapat mengambil selusin untuk gaji seorang insinyur DevOps yang berpengalaman di London.
Lebih menyenangkan, server akan menjadi lebih murah dalam setengah dalam dua atau tiga tahun.
Komputer terus meningkat, dan mereka akan melakukannya secara linear hingga akhir tahun 2020-an. Siapa tahu penemuan apa yang akan muncul. Pada saat itu, kita bahkan dapat melihat revolusi
besi terbuka .
Namun, orang terus mengembangkan perangkat lunak untuk spesifikasi dan harga perangkat keras pada awal 2000-an, meskipun pada 2018 perlu mengembangkan perangkat lunak untuk mesin pada 2019.
Ini tidak hanya berlaku untuk server. Jika Anda ingin memikirkan masa depan, pikirkan semua periferal masa depan. Saya yakin bahwa orang-orang yang menyediakan antarmuka suara untuk perangkat mereka pada tahun 2016 cukup senang di tahun 2018.
Periferal apa yang harus Anda siapkan pada tahun 2018? Iblis mengenalnya. Tetapi saya tahu bahwa dia belum menjadi populer. Ketika menjadi populer, itu akan membantu Anda menduduki posisi monopoli di pasar, karena Anda telah menyesuaikan perangkat lunak Anda untuk itu.
Dan ini bukan hanya tentang perangkat keras, kemajuan dalam perangkat lunak sangat menakjubkan. Dengan munculnya WASM, browser menjadi mesin virtual universal. Setelah dua tahun, Anda dapat membangun aplikasi berkinerja tinggi dengan mengompilasinya untuk satu platform: WebAssembly.
Meskipun demikian, orang masih membuat perangkat lunak untuk komputer rumah dari model 2012. Mereka menggunakan Babel, meskipun 99% + pengguna memiliki browser yang mengaktifkan ES6.
Bahasa baru terus muncul, dan beberapa di antaranya sangat bagus. Hanya dalam 8 tahun terakhir, Go, Rust, Scala, dan D muncul yang benar-benar mengubah paradigma pemrograman sistem. Dalam dua tahun ke depan, bagi saya tampaknya Julia akan membuat revolusi yang sama dalam komputasi ilmiah ... dan ini hanya bidang-bidang yang secara pribadi saya tangani, dan jumlah total hal menakjubkan di masa depan benar-benar tidak dapat dipercaya.
Tapi saya ngelantur ...
Sangat mudah untuk menikmati masa depan. Tetapi tidak ada yang benar-benar tahu apa yang akan terjadi dalam satu tahun, dua atau lima tahun. Ada beberapa prediksi, tetapi tentu saja itu tidak ideal.
Namun, jika Anda benar-benar ingin membuat cadangan untuk masa depan, maka pahami dulu apa yang ditawarkan saat ini. Selain itu, dengan cara ini Anda akan membuat perkiraan konservatif yang lebih akurat berdasarkan data nyata.
Perangkat lunak dengan cadangan untuk tahun 2020, dibuat dengan semangat awal tahun 2000-an, tidak akan membantu Anda.
Jadi jangan berhenti memikirkan masa depan
Mulai saja perencanaan dengan benar.
Desain tidak hanya memperhitungkan produk Anda, tetapi seluruh ekosistem di sekitarnya.
Desain untuk fleksibilitas, bukan kesempurnaan. Fleksibilitas pada akhirnya akan membantu mengadaptasi perangkat lunak untuk masa depan. Ini membantu untuk memenuhi tantangan baru, dan tidak melindungi terhadap imajiner.