Arsitektur monolith/microservices mungkin sudah cukup untuk menyediakan layanan yang bisa dinikmati user. Namun saat perusahaan berkembang lebih jauh, para pengambil keputusan perlu mendapatkan informasi yang valid. Di sinilah ranah data science/engineering:
Walaupun setiap service menyimpan datanya ke dalam database, namun menggunakan database yang sama untuk kepentingan analitik tidaklah disarankan.
Pasalnya saat kita mengakses data dalam jumlah besar untuk kepentingan analitik, bisa jadi proses baca-tulis ke dalam database akan terganggu. Hal ini secara tidak langsung akan berdampak ke pengguna.
Oleh sebab itu, data untuk kepentingan analitik biasanya disimpan di tempat yang berbeda.
Dari sisi software engineer, kita perlu melempar semua event yang tampaknya bermanfaat. Kerap kali, kita juga perlu menyisipkan correlation-id (biasanya UUID atau random, dan dilengkapi dengan timestamp) untuk menandakan bahwa event-event tersebut berasal dari satu request yang sama.
Dari sisi data engineer, kita perlu mendengarkan event-event tersebut dan melakukan penyimpanan ke dalam data-lake/data-warehouse.
Sebenarnya teksnis data-lake/data-warehouse adalah database yang secara khusus dibuat untuk menyimpan data dalam jumlah besar. Pengaksesan datanya mungkin tidak secepat database konvensional. Proses yang terjadi di dalamnyapun kebanyakan hanyalah INSERT dan SELECT.
Secara konseptual data warehouse dan data lake memiliki paradigma yang sedikit berbeda:
Data warehouse biasanya dibutuhkan saat kita sudah tahu bagaimana data akan diolah menjadi informasi. Data lake biasanya dibutuhkan saat kita belum tahu secara detail apa yang harus kita lakukan agar data bisa berubah menjadi informasi.
Secara umum, ada dua peranan besar yang dilakukan oleh orang-orang data:
Yang pertama tentu saja lebih mudah daripada yang kedua 🙂.
Proses mengolah data masa lalu dan menyajikannnya dalam bentuk visual biasa disebut dengan istilah "business intelligence". Sederhananya seperti kita merekap data setahun belakangan, dan menyajikannya dalam bentuk grafik. Tantangannya karena data yang kita miliki bisa jadi sangat besar, maka bisa jadi proses query perlu dilakukan di banyak komputer sekaligus. Untuk keperluan ini, ada framework map-reduce/query engine yang bisa membantu (misalnya presto). Data yang sudah diolah kemudian bisa ditampilkan dalam bentuk grafik (misalnya menggunakan redash). Dari sini kita bisa mendapatkan beberapa insight, misalnya:
Secara tidak langsung, ini juga memudahkan tim bisnis untuk melancarkan promo dan membuat rekomendasi barang. Mungkin bisa juga digunakan oleh tim produk untuk memperbaiki fitur tertentu, atau sekalian menghilangkannya kalau tidak terlalu dibutuhkan tapi sering dikomplain.
Dengan mengetahui apa yang sudah terjadi, kita bisa mengukur performa dan mengambil keputusan-keputusan taktis (misal membuat promo), tapi untuk membuat keputusan strategis, kadang dibutuhkan prediksi.
Di sinilah peran machine learning.
Machine learning pada dasarnya adalah alat statistik yang membutuhkan banyak data. Data-data yang sudah kita dapatkan bisa digunakan untuk membuat/melatih dan mengevaluasi sebuah model machine learning.
Bayangkan kita bisa memprediksi data cuaca besok dengan menggunakan data cuaca dari 7 hari terakhir. Apa yang bisa kita lakukan?
Secara bertahap kita bisa menggunakan prediksi cuaca besok dan 6 hari terakhir untuk memprediksi cuaca besok lusa, dan seterusnya.
Dengan demikian, kita bahkan bisa membuat dashboard cuaca tahun depan sekalipun tahun ini belum berakhir.
Tentu saja hasilnya belum tentu seratus persen akurat. Tapi ini bisa kita pakai untuk mengambil keputusan strategik. Misalnya: Oh sepertinya tahun depan akan banyak hujan, ya sudah kita jualan payung saja, kita bisa mulai beli bahan dasarnya sekarang, mumpung masih murah dan tidak banyak permintaan.
Data science dan Machine Learning akhir-akhir ini memang sangat populer. Tapi kita perlu ingat, tanpa adanya data yang baik, kita tidak mungkin bisa membuat model machine learning yang baik. Lebih lanjut, tanpa software engineering yang baik, akan sangat susah untuk mendapatkan data yang baik.