Baik, atau mulai melakukannya dengan benar.
Jika saya diminta untuk menunjukkan satu masalah spesifik yang membunuh sebagian besar produk perangkat lunak, maka saya pasti akan memanggil keinginan para pengembang untuk meramalkan masa depan yang jauh. Ini dapat diungkapkan dalam banyak cara, tetapi skema umumnya kira-kira sebagai berikut:
“Kita perlu mengimplementasikan solusi {X}, meskipun ada fakta bahwa ada solusi yang lebih sederhana dan lebih cocok untuk kita {Y}, karena ketika {Z} terjadi di masa depan, maka {X} akan bekerja jauh lebih baik daripada {Y}” .Selain itu, tidak ada dan tidak dapat informasi yang pasti tentang probabilitas terjadinya peristiwa {Z}.
Berikut adalah beberapa contoh:
- Kita perlu menggunakan kubernet dan buruh pelabuhan! Ya, satu server mengatasi beban saat ini dan mudah untuk mengkonfigurasi dan memelihara, tetapi ketika kita membutuhkan selusin server, akan lebih mudah untuk menyebarkannya dengan kubernet dan buruh pelabuhan.
- Kami membutuhkan arsitektur pemrosesan data terdistribusi! Ya, sejauh ini satu PC rata-rata berurusan dengan segalanya, tetapi ketika kami memiliki solusi tingkat industri dan pelanggan menuntut uptime lima sembilan dalam SLA, kami akan siap untuk ini.
- Kita perlu merekrut tim pengembang dan membuat situs dari awal, meskipun faktanya akan lebih cepat untuk menggunakan sesuatu berdasarkan wordpress, karena ketika kita memiliki 100 kali lebih banyak pelanggan daripada sekarang, maka wordpress tidak akan begitu nyaman.
- Kita perlu menggunakan pewarisan alih-alih komposisi, karena setelah 5 tahun basis kode akan tumbuh sehingga tanpanya tidak akan ada jalan.
- Kita perlu menulis kode ini dalam C ++, terlepas dari kenyataan bahwa dalam Python akan beberapa kali lebih cepat, karena setelah bertahun-tahun akan memproses terabyte data dan Python mungkin tidak dapat mengatasinya di sini.
Baru-baru ini saya menulis
sebuah artikel tentang masalah imajiner - mereka yang solusinya menghibur orang, karena memecahkannya lebih menarik daripada yang nyata. Ini juga termasuk upaya-upaya ini untuk meramalkan masa depan. Anda bahkan dapat mengatakan lebih banyak - ini adalah masalah imajiner favorit kebanyakan perusahaan kecil yang baru berdiri.
Tapi jangan menyatukan semuanya: mencoba bersiap untuk masa depan bisa berguna jika Anda mendekati ini dengan bijak. Tetapi hanya sedikit orang yang muncul dengan bijak - orang memiliki fantasi, ketakutan, emosi dan perasaan manusia lainnya.
Mencapai kesuksesan lebih sulit daripada hidup dengan kesuksesan yang sudah dicapai
Setiap orang terkadang berfantasi tentang bagaimana jadinya jika dia adalah orang lain. Seseorang yang kaya, terkenal, kuat, diberkahi dengan kekuatan. Memikirkannya cukup menarik, dan itu terjadi dengan sendirinya, tanpa sadar. Jadi Anda melihat foto di sampul majalah - dan Anda berpikir, apa yang akan saya lakukan di tempat selebriti ini? Oh, jadi saya akan menghabiskan uang untuk ini, dan jika saya akan melakukannya. Dan juga itu. Dan jika Anda masih bisa terbang dan memiliki kekuatan super! Ya, itu akan luar biasa!
Pengembang perangkat lunak juga manusia, dan mereka juga setuju dengan fantasi. Jadi, itu berarti bahwa Facebook membangun platformnya di atas teknologi ini dan itu dan skala ke satu miliar pengguna ... Yah, kita tidak lebih buruk, dan teknologi tersedia, mari kita lakukan semuanya dengan baik, dengan simpanan satu miliar pengguna (meskipun sejauh ini ada seratus dari mereka). Tetapi Facebook magic tidak dalam teknologi penskalaan untuk satu miliar pengguna. Dia mampu memberi orang produk yang tepat di waktu dan tempat yang tepat. Perangkat lunak, yang mampu meningkatkan hingga satu miliar pengguna, adalah bagian sekunder dan kurang penting dari perusahaan. Itu diciptakan hanya ketika dibutuhkan dan hanya saat dibutuhkan.
Medali itu memiliki dua sisi:
a) Mencapai pertumbuhan lebih menantang daripada mempertahankan skala.
b) Kebanyakan programmer yang berkualitas dan berbakat bekerja pada produk yang membutuhkan skalabilitas yang baik.
Poin
"a" mudah dikenali. Pikirkan sendiri - dari semua perusahaan perangkat lunak yang pernah dibuat, hanya, mungkin, sekitar 0,05% mencapai tingkat jutaan pengguna dan miliaran laba. Sisanya jatuh lebih awal atau kurang.
Jadi, sebagian besar fantasi tentang fitur-fitur yang diperlukan di masa depan untuk perangkat lunak biasanya datang untuk mencoba memecahkan masalah-masalah 0,05% dari perusahaan ini. "Di sini kami memiliki tim yang terdiri dari 1000 pengembang, 10 juta pengguna, dan selusin klien korporat besar dengan persyaratan kompleks mereka, dan kemudian kami akan membutuhkan ..." Tidak, kamu tidak perlu. Dengan probabilitas 99,95%.
Tetapi mengatakan TIDAK untuk ide-ide yang menggoda seperti itu sulit - karena itu menghancurkan kepercayaan pada sebagian kecil dari persentase kemungkinan sukses. Kami harus berhenti memperkenalkan diri sebagai pemilik Amazon baru dan kembali ke masalah hari ini. Dan hari ini Anda memiliki 50 pengguna, 30 di antaranya adalah keluarga dan teman. Ya, kesadaran akan keadaan saat ini dapat mendemotivasi.
Butir
"b" juga tidak membantu mengatasi obsesi. Jelas bahwa programmer terbaik bekerja di perusahaan papan atas. Entah karena mereka diciptakan berkat bakat mereka, atau karena perusahaan papan atas mampu merekrut programmer terbaik. Prinsip Pareto bekerja di sini melawan kita: lebih baik bagi programmer untuk menulis buku, membuat presentasi, dan merancang sistem yang lebih baik. Masing-masing dari kami mendengar dari mereka kisah-kisah menarik tentang kelompok-kelompok toleran-kesalahan yang didistribusikan di ribuan titik, memproses petabyte data menggunakan perangkat lunak yang dioptimalkan untuk beberapa angka kinerja luar biasa. Tetapi kebanyakan dari kita tidak perlu memikirkan bagaimana membangun cluster seperti itu di perusahaan kita di sini dan sekarang. Dia hanya tidak dibutuhkan.
Jadi, memejamkan mata dan mewakili perusahaan Anda dalam 5 tahun adalah besar - apakah itu tidak membantu? Apakah benar-benar perlu untuk berhenti memikirkan masa depan?
Tentu saja tidak. Berpikir tentang masa depan itu baik. Dan merancang perangkat lunak dengan fondasi untuk masa depan juga berguna, tetapi Anda harus melakukannya dengan benar.
Desain fleksibel, implementasi tidak sempurna
Lebih baik berbuat lebih sedikit, tapi bagus. Sangat sedikit produk yang benar-benar memuaskan kebutuhan pelanggan mereka. Sehingga Anda melakukan
A dan 90% dari pengguna Anda membutuhkan tepat
A - tidak akan pernah ada. 90% dari pengguna potensial Anda memerlukan beberapa jenis
B , dan
A Anda
adalah alternatif terdekat dari
B , dan tidak ada yang menjual atau menjual
B sendiri, sehingga beberapa pembeli akan puas dengan tit di tangan mereka.
Apa yang baik dalam skenario ini? Setelah Anda mendapatkan pembeli, Anda masih dapat mencoba memahami apa yang sebenarnya mereka butuhkan dan akhirnya menyadari hal ini. Nah, atau alternatif yang sedikit lebih baik untuk ini. Basis pengguna membantu Anda mempelajari pasar, menemukan ceruk pasar dan mengisinya. Segera setelah Anda meraba-raba untuk niche ini, mulailah bekerja di dalamnya - di sini pertumbuhan Anda dimulai.
Dan pendekatan ini sangat produktif. Anda menerapkan sesuatu yang kecil, tetapi bekerja dengan baik, memberikannya kepada pengguna - dan kemudian mendengarkan pemikiran mereka tentang produk Anda. Anda tidak lagi menebak, jangan menyelesaikan masalah imajiner, jangan tambahkan kompleksitas yang tidak perlu. Anda beradaptasi, menambahkan sesuatu, menghapus sesuatu. Dan ini menciptakan produk unik Anda.
Dan dengan cara ini - semakin kecil basis kode Anda, semakin mudah untuk menyesuaikannya dengan sesuatu yang baru.
“Saya benci kode dan ingin melihatnya dalam produk kami” - Jack Diederich
Jika Anda membuat sesuatu bekerja dengan sempurna, Anda salah melakukannya. Anda harus membuat pengorbanan terlalu besar di sepanjang jalan. Mungkin itu buang-buang waktu atau uang, mungkin Anda memberikan fleksibilitas, mungkin sesuatu yang lain. Yang ideal tidak tercapai secara gratis.
Bukan perangkat lunak ideal yang lebih layak. Dimungkinkan untuk membuatnya dalam waktu yang wajar dan dengan harga yang wajar. Cukup sering melakukan segalanya atau hampir semua yang diperlukan. Karena tidak sempurna, menurut definisi menyisakan ruang untuk pengembangan dan kebebasan manuvernya.
Desain arsitektur perangkat lunak yang optimis - masa depan dapat dengan senang hati dibangunkan
Penting untuk diingat bahwa dunia di sekitar Anda tidak statis. Masalah yang muncul sebelum Anda setelah beberapa tahun mungkin dapat dengan mudah diselesaikan dengan bantuan teknologi yang tersedia setelah beberapa tahun. Banyak orang merancang sesuatu, tidak hanya tidak memperhitungkan peluang masa depan, tetapi umumnya hanya mengandalkan alat yang sudah berusia puluhan tahun. Mereka membatasi diri bahkan bukan hari ini, tetapi kemarin.
Biarkan saya berbicara tentang satu contoh spesifik: merancang sistem terdistribusi dengan harapan siap untuk pertumbuhan apa pun. Salah satu ketakutan umum yang mengarah pada penciptaan sistem seperti itu adalah ketakutan bahwa pada suatu titik server Anda tidak akan dapat melayani semua pengguna Anda. Dan itu benar-benar terjadi. Terkadang. Tetapi tidak di perusahaan kecil, tidak di startup. Selain itu, kebanyakan orang yang menulis perangkat lunak pada tahun 2018, karena alasan tertentu, yakin bahwa itu akan berfungsi pada server yang dibuat pada tahun 2005. Komputer menjadi lebih baik setiap tahun dan server yang baik bisa disewa tidak begitu mahal.
Biarkan saya menggambarkan server "nyata" awal:
- Two Xeons E5-2680v4 (28cores & 56 thread, cloking pada 2,4GHz ke 3,3GHz)
- 512 Gigabytes dari DDR4-2400 RAM
- 2 NVMe SSD masing-masing 1,2TB (masing-masing ~ 3GB / s dibaca dan ~ 1,5GB / s).
Ya, saya bertaruh bahwa setengah dari sistem terdistribusi yang ada di dunia akan berjalan di server ini sepenuhnya, dengan semua komponen dan dependensinya, berfungsi seperti biasa semua basis pengguna yang ada. Dan ini jauh dari server paling keren hingga saat ini. Ini bisa diambil dengan harga 800 hingga 1.300 dolar per bulan (tergantung di mana mendapatkannya). Anda dapat menyewa selusin ini untuk gaji seorang insinyur yang berkualifikasi di London.
Apa yang masih bagus di server ini adalah bahwa harga sewanya dalam 2 tahun akan turun 2 kali lipat.
Komputer berevolusi, berkembang sangat linier dan dapat diprediksi dan akan terus berkembang seperti yang diperkirakan, di suatu tempat hingga akhir tahun 2020-an. Sulit ditebak lebih lanjut, tetapi tidak mungkin manusia akan datang dengan sesuatu yang baru. Dan orang-orang masih ingat besi awal abad ini dan takut bahwa itu tidak akan cukup bagi mereka untuk melayani beberapa ribu permintaan per hari.
Tetapi kita berbicara tentang besi. Dan pikirkan semua perangkat lunak yang muncul dan berkembang. Hanya sedikit orang yang serius memikirkan kontrol suara 20 tahun yang lalu. Dan lihat dunia hari ini - "OK Google," "Halo, Alexa," "seperti apa cuacanya sekarang, Siri?" Siapa pun yang mulai menulis frontend suara di tahun 2016 - hanya berhasil ke 2018.
Apa yang harus mulai ditulis pada tahun 2018? Ah, kalau saya tahu :) Ini adalah sesuatu yang sudah muncul di cakrawala, tetapi belum menjadi terlalu besar untuk menaungi matahari. Lihatlah ke sekeliling, mungkin Anda memperhatikan sesuatu seperti itu?
Kemajuan dalam perangkat lunak luar biasa. Benar-benar tanpa disadari, dengan munculnya WASM, browser telah menjadi mesin virtual universal. Setelah 2 tahun, Anda dapat membangun aplikasi yang serbaguna, kompleks dan berkinerja tinggi dengan mengompilasinya untuk satu platform: perakitan web. Dan itu akan mulai di mana-mana.
Tetapi orang masih tinggal di suatu tempat di 2012. Mereka menggunakan Babel, meskipun 99% pengguna memiliki setidaknya satu browser dengan dukungan ES6.
Bahasa pemrograman baru muncul secara konstan. Dan beberapa dari mereka cukup bagus. Hanya dalam 8 tahun terakhir, kami mendapatkan Go, Rust, Scale, dan D - semuanya menemukan ceruk pasar mereka. Dalam 2 tahun ke depan, saya berharap untuk melihat bagaimana Julia akan berkontribusi pada pemrograman ilmiah. Dan inilah yang membuat saya khawatir secara pribadi dan apa yang saya ikuti. Jumlah total teknologi dan pengetahuan luar biasa.
Tapi saya ngelantur ...
Menginspirasi masa depan relatif mudah. Tetapi terus terang, selain kemajuan linear dari pertumbuhan produktivitas, sulit untuk membayangkan apa yang akan terjadi dalam 2 atau 5 tahun. Beberapa ide melayang di udara, tim bekerja pada berbagai proyek perangkat lunak dan perangkat keras, tetapi apa yang akan "menembak" dari ini?
Namun demikian, jika Anda ingin menyiapkan perangkat lunak Anda untuk masa depan, Anda harus terlebih dahulu memahami masa kini. Apa yang baik di masa kini adalah bahwa hal itu sudah ada, dapat diamati, diukur. Dan itu masih bertahan untuk sementara waktu. Membuat perangkat lunak Anda setidaknya relevan hari ini adalah ide yang bagus. Anda tidak akan siap untuk realitas 2020 menggunakan pendekatan tahun 2000. Tetapi perangkat lunak yang ditulis dengan pendekatan yang relevan untuk 2018 dapat bekerja dengan baik untuk dirinya sendiri pada tahun 2020.
Jadi jangan menyangkal kesenangan diri mengembangkan perangkat lunak dengan fondasi untuk masa depan. Lakukan saja dengan lebih benar. Pertimbangkan tidak hanya pengembangan produk masa depan Anda, tetapi juga pengembangan ekosistem di sekitarnya. Segala sesuatu yang dapat dirancang secara fleksibel harus dirancang secara fleksibel. Ini akan memberi Anda kesempatan untuk bermanuver pada saat Anda menemukan cara manuver mana yang harus diselesaikan. Dan ini akan menyelamatkan Anda dari menghabiskan waktu mempersiapkan sesuatu yang tidak akan pernah terjadi.