# Low Code Programming Research
Written by: Geraldy Christanto
January, 2021
###### tags: `low code programming`, `Ms. PowerApps`, `Citizen Developer`, `lcdp`
## Definition
**Low-code programming** merupakan suatu pendekatan dalam *Application Development Lifecycle* dalam mendukung keterlibatan domain non-teknis *(Citizen Developer)*.
**Low-code Development Platform (LCDP)** merupakan Platform-as-a-service software berbasis cloud yang bertujuan membangun aplikasi tanpa memiliki pengetahuan code.
**Manual coding** --> **interaksi dengan GUI**
### Advantages
- Mempercepat pengembangan aplikasi bisnis
- Lebih banyak orang yang dapat berkontribusi dalam pengembangan aplikasi
- mengurangi biaya setup, pelatihan, deployment, dan maintenance
## Architecture Views

LCDP terdiri dari 4 layer utama:
**1. Application Layer**
Layer ini terdiri dari GUI untuk mendefinisikan aplikasi yang dilakukan oleh pengguna. TErdapat toolbox dan widgets untuk membuat suatu UI dari aplikasi. Pada layer ini juga dapat mendefinisikan autentikasi dan otorisasi pada bagian aplikasi tertentu. Pengguna dapat menspesifikasikan proses work-flow aplikasi seperti bagaimana menarik data dari sumber eksternal (e.g. Spreadsheet, database engine, kalender, sensor, etc)
**2. Service Integration Layer**
Layer yang berfungsi untuk mengintegrasikan berbagai layanan yang berbeda menggunakan API dan mekanisme autentikasi yang sesuai.
**3. Data Integration Layer**
Pada layer ini memungkinkan terjadi adanya operasi dan manipulasi data. Layer ini dapat mengintegrasikan sumber data yang berbeda
**4. Deployment Layer**
Deployment layer tergantung pada LCDP yang digunakan. Aplikasi yang dikembangkan dapat digunakan pada infrastruktur cloud atau local
## Development Process in LCDP
Secara umum proses pengembangan aplikasi pada LCDP yaitu sebagai berikut:
**1. Pemodelan data**
Pendefinisian skema data dari aplikasi yang akan dikembangkan. Pemodelan data yang dibuat dapat berupa entitas, relasi, *constraint*, *dependencies* yang secara umum disediakan oleh platform dengan drag-and-drop.
**2. Pendefinisian User Interface (UI)**
Pengguna dapat melakukan konfigurasi tampilan aplikasi dengan menggunakan form dan halaman. Pada tahap ini, pengguna nantinya perlu mendefinisikan dan mengelola peran pengguna dan mekanisme keamanan berdasarkan entitas, komponen, dan halaman. Dengan fitur drag-and-drop, tahap ini dapat mempercepat pengembangan dan menampilkan tampilan dengan cepat.
**3. Membuat proses workflow dan aturan *business logic***
Pengguna perlu mengelola workflows dan menyesuaikan dengan form atau halaman yang memerlukan operasi berbeda pada interface. Business logic dapat divisualisasikan dengan notasi yang dapat saling terasosiasi dan diimplementasikan.
**4. Integrasi dengan layanan eksternal**
Dengan bantuan API, LCDP menyediakan kemampuan integrasi dengan 3rd parties Apps. Sehingga pada tahap ini diperlukan dokumentasi untuk memahami struktur data dan form yang akan diadopsi oleh layanan eksternal.
**5. Deployment**
Hampir semua platform menyediakan pengembangan aplikasi dan deployment app dengan mudah.
## Platform Examples

1. [Mendix](https://www.mendix.com/)
Mendix mendukung platform web, mobile, dan IoT. Memiliki dua pendekatan yaitu drag&drop web-based studio yang menyediakan reusable components. Pendekatan kedua yaitu dengan IDE untuk developer berpengelaman untuk dapat mengintegrasikan model dengan penulisan code manual.
2. [Power Apps](https://https://powerapps.microsoft.com/)
Power apps dikembangkan oleh Microsoft sebagai layanan LCDP untuk pengembangan aplikasi Web dan Mobile, menggunakan serangkaian platform aplikasi, layanan, connectors, dan data.
Pendekatan design PowerApps:
* **Canvas-based**
Melalui drag&drop pada canvas yang menjadi tempat mendesain aplikasi. Logic seperti yang ada di excel dan data bisnis dapat diintegrasikan dengan aplikasi Microsoft lain atau 3rd parties app.
* **Model-driven**
Ini adalah komponen framework yang dapat digunakan bagi pengembang profesional untuk membuat custom component dan menggunakannya untuk pengembangan aplikasi
3. [OutSystem](https://www.outsystem.com)
OutSystem dikembangkan untuk solusi enterprise yang menyediakan layanan dengan konteks manajemen, bisnis proses, dan bisnis operasi. Pada platform ini, mode data, business logic, work-flow, dan UI harus didefinisikan oleh model yang akan dibuat pada produk akhir. Beberapa tools dan teknik yang paling penting pada OutSystem:
* Test framework:
TErdiri dari 3 framework yang mendukung software testing pada level yang berbeda (unit, integrasi, sistem)
* Performance Analyzer:
Menyediakan laporan detail untuk memantau kinerja aplikasi secara real-time
* Automated UI testing:
UI test merupakan perekaman interaksi pengguna dengan halaman UI. FItur yang tersedia pada OutSystem menggunakan script yang dapat ditulis pada IDE Selenium dengan PL seperti Java, JS, etc.
4. Google App Maker
App maker dikembangkan oleh Google yang memungkinkan organisasi atay perusahaan untuk membuat dan mempublikasikan aplikasi perusahaan khusus. Google app maker menggunakan infrastruktur pengembangan berbasis cloud dengan fitur-fitur seperti template bawaan, interface drag-and-drop, editor database, dan fasilitas manajemen file yang digunakan saat membangun aplikasi.
5. Salesforce
Salesforce membantuk pengembang untuk membangun dan mempulikasikan aplikasi berbasis cloud yang aman dan scalable tanpa perlu mempertimbangkan pengembangan teknologi. Salesforce menyediakan tools dan operasi otomasi dengan mengintegrasikan dengan layanan eksternal.
###### Tabel Perbandingan LCDP
Taksonomi perbandingan:
* GUI:
Fungsionalitas tampilan yang dapat mendukung interaksi dengan pengguna. Contoh fitur seperti drag-n-drop, form, dan pembuatan laporan
* Dukungan Interoperabilitas debngan layanan eksternal dan sumber data
Dukungan dengan layanan aplikasi eksternal, seperti office 365, dropbox, sharepoint dan sumber data lain seperti SQL, NoSQL, Excel, etc.
* Keamanan
Dukungan dalam aspek keamanan, seperti mekanisme autentikasi, protokol keamanan, dan access control
* Dukungan kolaborasi dalam pengembangan
Berhubungan dengan model kolaborasi (online/offline)
* Reusability
Berhubungan dengan mekanisme penggunaan kembali resource yang telah dibuat. Misal ketika sudah membuat template tertentu, maka developer dapat menggunakan kembali template tersebut untuk keperluan bisnis proses lain.
* Skalabilitas
Fitur yang memungkinkan pengguna untuk scale up aplikasi berdasarkan beberapa dimensi, seperti jumlah pengguna aktif, data traffic, dan penyimpanan yang dapat diatasi oleh aplikasi
* Mekanisme spesifikasi business logic
Berhubungan dengan mekanisme pemodelan business logic dari aplikasi seperti editor workflow dan dukungan API yang memungkinkan satu aplikasi dapat berkomunikasi dengan aplikasi lain, sehingga business logic dapat diimplementasikan menggunakan lebih dari satu API
* Mekanisme untuk membangun aplikasi
Berhubungan dengan metode dalam menspesifikasikan aplikasi yang dibuat. Mekanisme ini dapat berupa teknik menghasilkan code dari model yang telah dibuat atau melalui pendekatan pengelolaan run-time eksekusi aplikasi.
* Deployment
Fitur ini berhubungan dengan ketersedian metode deploy aplikasi.

Aspek-aspek yang dapat menjadi pertimbangan dalam menggunakan LCDP:
* Fitur dan kapabilitas
* Jenis solusi yang dikembangkan (B2B/B2C)
* Jumlah pengguna:
* Small (<50 orang)
* Medium (50-1000)
* Large(>1000)
* Biaya dan waktu untuk mempeleajari
* Pricing (Jumlah aplikasi yang akan dikembangkan dan lokasi penyimpanan data)
### References:
1. Faezeh Khorram, Jean-Marie Mottu, and Gerson Sunyé. 2020. Challenges &
Opportunities in Low-Code Testing. In ACM/IEEE 23rd International Conference on Model Driven Engineering Languages and Systems (MODELS ’20 Companion), October 18–23, 2020, Virtual Event, Canada. ACM, New York, NY, USA, 10 pages. https://doi.org/10.1145/3417990.3420204
2. Sahay, Apurvanand & Indamutsa, Arsene & Di Ruscio, Davide & Pierantonio, Alfonso. (2020). Supporting the understanding and comparison of low-code development platforms. 10.1109/SEAA51224.2020.00036.
3. Microsoft. 2020. The world needs great solutions, Build yours faster. https://powerapps.microsoft.com/
4. https://appexchange.salesforce.com
5. https://salesforce.com/it/
6. https://www.mendix.com/solutions
7. https://www.youtube.com/watch?v=4s_mZcKrnGE&feature=youtu.be