evilfactorylabsarchive / blog

blog by evilfactory team
https://blog.evilfactory.id
Creative Commons Attribution Share Alike 4.0 International
5 stars 0 forks source link

Techs stack by context #8

Open faultables opened 5 years ago

faultables commented 5 years ago

Seringkali developer sering mendapat pertanyaan seperti "framework apa yang harus kita gunakan?", "tools apa yang harus kita gunakan?", atau "infra apa yang harus kita gunakan?", dan sebagainya.

Seperti biasa, jawaban dari setiap pertanyaan, khususnya seputar programming adalah: Tergantung. Tergantung situasi, tergantung sumber daya, waktu, dan tergantung sesuatu yang sedang dibicarakan.

Technologies we choice

Karena kita 'mempromosikan' teknologi web modern, pastinya kita memilih teknologi-teknologi yang sedang hype namun tidak hanya karena mengikuti hype train. Tergantung konteks, terhadap pengetahuan & pengalaman kami, sumber daya yang kami miliki, dan situasi yang sekiranya sedang & akan terjadi.

Next.js - View Layer

Next.js merupakan universal framework yang dibuat diatas React. Meskipun Next.js merupakan view layer, karena universal inilah kita bisa menggunakan lapisan yang seharusnya berada di client, namun bisa kita bawa ke server, seperti initialState, "constructing" stylesheet (bila pakai css-in-js), dan lain-lain seperti proses yang dilakukan ketika componentDidMount lifecycle salah satunya.

Selain itu--yang mana cakupan tadi adalah kepada pengguna akhir--Next.js pun memiliki pengalaman yang bagus terhadap pengalaman pengembang; seperti build time yang cepat, convention over configuration, almost batteries-included, dan sebagainya.

Juga, well maintained, incremental features, production-ready, battle-tested, dan dipercayalah oleh brand-brand diberbagai level. Dan ya, maintainer dari Next.js pun menggunakan Next.js di situs mereka, dog fooding.

Some experiments: Kita sedang (dan selalu) ber-eksperimen dengan framework lain diluar ekosistem React, seperti Nuxt.js untuk ekosistem Vue, Sapper untuk ekosistem Svelte, atau bahkan sampai ke penerapan "Virtual DOM" di level Web Assembly.

Node.js - Application Layer

Kita menggunakan Node.js karena "universal" nya. Kita bisa membuat aplikasi baik di mobile, desktop, system, bahkan sampai iOT menggunakan JavaScript, Node.js dipilih salah satunya adalah karena "universalnya" itu. Selain itu, juga Node.js adalah non-blocking I/O model, yang bisa disimpulkan cocok untuk aplikasi web modern yang memiliki banyak interaksi yang banyak namun tanpa mengurangi pengalaman pengguna.

Juga, Node.js memiliki runtime yang cepat dari higher-level programming language lain untuk di server-side. Dan ya, memiliki ekosistem yang sangat luas, dan cocok digunakan untuk aplikasi yang menggunakan data "streaming" karena event-driven nya.

Some experiments: Kita sedang (dan selalu) ber-eksperimen dengan bahasa lain yang bisa digunakan dilapisan aplikasi, seperti Rust dan Go, bahkan Elixir. Intinya, bahasa yang bisa dicompile menjadi web assembly, demi bereksperimen dengan bagaimana bila proses ini--yang biasa dilakukan diserver--bisa dilakukan client, namun tanpa membenani UI thread sehingga rendering pipeline tidak janky?

PostgreSQL - Data Layer

Kita menggunakan Postgres karena selain reliabilitasnya yang sudah dipercaya industri, juga karena postgres lumayan strict dengan data sebelum menyisipkannya ke database. Juga, postgres mendukung JSON dan JSONB, yang membuat penyimpanan data lebih fleksibel seperti NoSQL namun tetap memiliki kapabilitas "relational".

Juga, PostgreSQL dijamin lebih efisien dari database SQL lain. Dan karena pada dasarnya sudah terbiasa dengan Postgres, kenapa tidak?

Some experiments: Kita sedang (dan selalu) ber-eksperimen dengan database lain, seperti CockroachDB (yang mana dibuat diatas Postgres dan memiliki sintak yang hampir sama dengan Postgres), CouchDB (demi menerapkan offline-first web application), atau bahkan sampai ke "graph database" dan penerapan "blockchain" terhadap "penyimpanan data".


3 Lapisan diatas merupakan lapisan yang biasanya diterapkan diterapkan di arsitektur aplikasi web. Selain di level aplikasi, kita juga memiliki pilihan di level infra seperti berksperimen dengan arsitektur serverless (yang biasanya kita menggunakan containerization dan yes, monolith (bila dicompare dengan function as a service)).

Pilihan-pilihan tersebut, diambil berdasarkan pertimbangan:

Variable yang digunakan diatas berdasarkan pertimbangan agar poin-poin diatas menjadi "lebih", seperti lebih murah; Lebih sedikit memakan sumber daya, lebih efisien, lebih efektifitas, dan lebih produktif. Hasil eksperimen pun kita ukur, agar output sebanding/lebih baik dari proses dan input.

Bila ada pertanyaan teknologi apa yang akan kita gunakan? jawabannya ada diatas. Bila jawabannya bukan salah satu diatas, mungkin kita mulai menerapkan dari hasil yang telah kita riset & eksperimen.

Sekian dan terima kasih.