IF3250 · Proyek Perangkat Lunak · UAS Perbaikan (3 Juli 2026)

UAS IF3250 — Catatan Ujian Perbaikan CPMK 4

Tech StackToolsFrameworkArsitekturDSSEKonfigurasi
References: Pressman - Software Engineering, Lecture Slides IF3250, PROJECT_AUDIT.md

1. Overview — Konteks Proyek AutoSix

1. Overview — Konteks Proyek & Kontribusi Saya

AutoSix adalah platform otomasi workflow berbasis web untuk admin portal akademik ITB (Direktorat Pendidikan). Admin dapat menyusun aturan trigger + action secara visual via canvas drag-and-drop, lalu sistem mengeksekusinya di background.

Identitas & PeranM Hazim R Prajoda — 13523009 Peran: Development Team Member

Kontribusi per Sprint (dari Dokumen Scrum)

SprintTask IDDeskripsiPB
Sprint 1SB-05Membuat diagram komponen (bersama 13523037)
Sprint 1SB-07Menulis bab 1, 2, dan 3 dokumen teknis
Sprint 2SB-11Mengembangkan high-fidelity prototype dari modul workflowPB-02
Sprint 2SB-12Mengimplementasikan kode frontend katalog trigger/actionPB-02
Sprint 2SB-16Melengkapi bab 4, 5, dan 6 dokumen teknis (bersama 13523026)
Sprint 3SB-04Merancang high-fidelity prototype CRUD workflow (canvas)PB-02
Sprint 3SB-05Mengimplementasi kode frontend CRUD workflow (canvas)PB-02
Sprint 4SB-02Mengimplementasi kode frontend multiple triggerPB-02
Sprint 4SB-08Merancang high-fidelity prototype fitur logging (execution & task log)PB-04
Sprint 4SB-09Mengimplementasi kode frontend untuk menampilkan task logPB-04
Sprint 4SB-14Mengintegrasikan frontend & backend eksekusi workflow & logging (bersama 13523007)PB-04, PB-09
Sprint 5SB-05Membuat tutorial interaktif penggunaan canvas
Sprint 5SB-12Membuat logo aplikasi
Sprint 5SB-17Menambahkan indikator persyaratan password pada halaman lupa passwordPB-01
Sprint 5SB-18Melakukan unifikasi bahasa antarmuka ke Bahasa Inggris
Sprint 5SB-25Membuat video singkat proyek

Ringkasan Area Kontribusi

  • Frontend (dominan): Canvas workflow CRUD, multiple trigger UI, task log display, login prototype, tutorial interaktif, UI language unification, password indicator
  • Integrasi: Frontend ↔ backend eksekusi workflow & logging
  • Dokumentasi: Dokumen Teknis bab 1-6, diagram komponen
  • Aset: Logo aplikasi, video proyek

2. CPMK 4: Penggunaan Tools, Framework, Platform & Teknologi Data

Definisi CPMK 4 “Menggunakan alat bantu, framework, platform, data teknologi yang tepat pada proyek perangkat lunak” Artinya: dapat memilih teknologi yang sesuai, menjelaskan alasannya, dan mengevaluasi apakah pilihan tersebut tepat setelah proyek selesai.

Relevansi CPMK 4 ke Kontribusiku

Kontribusiku mayoritas di frontend — dan setiap task menuntut pemilihan & penerapan tools yang tepat:

SprintTaskTools/Framework yang Saya Gunakan
Sprint 2Hi-fi prototype modul workflowFigma untuk prototyping
Sprint 2Frontend katalog trigger/actionNext.js + TypeScript, komponen list dengan state management
Sprint 3Hi-fi prototype CRUD workflow canvasFigma — merancang UX canvas sebelum implementasi
Sprint 3Frontend CRUD workflow canvas@xyflow/react — library node-graph domain-specific
Sprint 4Frontend multiple trigger@xyflow/react, custom node types & state
Sprint 4Hi-fi prototype fitur loggingFigma
Sprint 4Frontend task log displayNext.js, tabel log dengan real-time update via SSE
Sprint 4Integrasi eksekusi workflow & loggingAxios ke FastAPI endpoint, sinkronisasi state FE-BE
Sprint 5Tutorial interaktif canvas@xyflow/react + custom step/overlay logic
Sprint 5Unifikasi bahasa antarmukaRefactoring seluruh string FE ke Bahasa Inggris
Sprint 5Password indicatorRegex validation + CSS strength indicator pada form

Poin CPMK 4 yang Paling Bisa Saya Pertanggungjawabkan Pemilihan @xyflow/react — saya yang langsung mengimplementasikan canvas CRUD workflow (Sprint 3) dan multiple trigger (Sprint 4) menggunakan library ini. Alasan: domain kami adalah node-graph workflow → @xyflow adalah best-in-class untuk use case ini (aktif dikembangkan, custom node/edge API matang). Ini adalah keputusan DSSE: memilih domain-specific tool yang tepat.

Formula AKB — Draf Esai Siap Pakai

[!important] Gunakan formula AKB: Alat → Kenapa → Bukti implementasi


🟢 Esai 1: Canvas Workflow — @xyflow/react

(Ini yang paling kamu kuasai — kamu yang implementasi langsung)

“Untuk membangun antarmuka canvas drag-and-drop workflow, saya menggunakan @xyflow/react (React Flow). Library ini dipilih karena fitur inti aplikasi adalah manipulasi node-graph secara interaktif — membangunnya dari nol akan sangat tidak efisien dan rentan bug. @xyflow menyediakan abstraksi domain-specific untuk node, edge, dan handle yang langsung sesuai dengan kebutuhan kami. Saya mengimplementasikan custom node types untuk trigger dan action, mengelola state graph (node + edge), dan memastikan serialisasi ke format JSON yang bisa dieksekusi oleh execution engine backend.”


🟢 Esai 2: Prototyping — Figma

(Kamu yang buat hi-fi prototype di Sprint 2, 3, 4)

“Sebelum implementasi, saya selalu membuat high-fidelity prototype menggunakan Figma terlebih dahulu (Sprint 2: workflow canvas, Sprint 3: CRUD canvas, Sprint 4: fitur logging). Tools ini dipilih karena memungkinkan validasi desain UX dengan stakeholder sebelum ada kode — mengurangi risiko rework. Dengan Figma, saya bisa iterasi layout canvas dan flow interaksi secara cepat, lalu menggunakannya sebagai acuan saat implementasi di Next.js.”


🟢 Esai 3: Frontend Stack — Next.js + TypeScript

(Semua task frontend-mu menggunakan ini)

“Untuk seluruh antarmuka pengguna, saya menggunakan Next.js dengan TypeScript. TypeScript dipilih karena tipe data yang ketat sangat krusial di sisi frontend — terutama saat memetakan struktur node/edge dari canvas ke format JSON payload yang dikirim ke backend. Kesalahan tipe data yang terdeteksi di compile-time jauh lebih mudah diperbaiki daripada runtime error yang baru muncul saat user menjalankan workflow. App Router Next.js juga memberikan routing yang terstruktur untuk halaman dashboard, katalog, dan log eksekusi.”


🟡 Esai tentang Backend/Redis/ARQ — Framing yang Aman

(Kamu tahu cara kerjanya tapi bukan yang implement — jawab dari perspektif tim)

“Sebagai bagian dari tim, kami memutuskan menggunakan Redis dan ARQ untuk background job execution. Dari sisi saya sebagai frontend developer, saya mengintegrasikan hasil eksekusi tersebut ke tampilan task log (Sprint 4 SB-09) — di mana setiap node pada canvas menampilkan status real-time dari task_log yang dipush via SSE. Ini membutuhkan pemahaman tentang kontrak API backend dan struktur data task log agar state canvas di frontend tetap sinkron dengan hasil eksekusi di backend.”

Jangan Klaim Implementasi BackendFastAPI, Redis, ARQ, Alembic, PostgreSQL — kamu tahu cara kerjanya dan bisa jelaskan keputusannya sebagai keputusan tim, tapi jangan framing seolah kamu yang coding-nya. Yang implement backend adalah 13523007 dan 13523015.


3. Tech Stack AutoSix & Justifikasi

3.a Tabel Tech Stack

LayerTeknologi yang DipilihAlternatif yang DipertimbangkanAlasan Memilih
FrontendNext.js 16 + TypeScriptVite/React SPASSR-capable, App Router untuk routing terstruktur, TypeScript untuk type safety
StylingTailwind CSS v4Plain CSS, BootstrapUtility-first; semantic token system, tidak perlu naming convention CSS
Canvas/Workflow UI@xyflow/react (React Flow)Konvas manual, mxGraphBest-in-class untuk node graph UI; dikembangkan aktif, API matang
BackendFastAPI + PythonDjango, Express.jsAsync-native, auto-generate OpenAPI docs, performa tinggi, DX cepat
ORMSQLAlchemy 2.0Django ORM, Tortoise ORMType-safe queries, migrasi rapi dengan Alembic
Migrasi DBAlembicFlyway, LiquibaseTerintegrasi langsung dengan SQLAlchemy, revision auto-generate
DatabasePostgreSQLMySQL, SQLiteACID-compliant, JSON column support, battle-tested untuk production
AuthJWT (python-jose) + bcryptSession-based, OAuth onlyIndustry standard; bcrypt dipilih karena passlib sudah unmaintained
Queue/WorkerARQ + RedisCelery + RabbitMQ, SQSARQ async-native (cocok dengan FastAPI), Redis sudah dipakai untuk hal lain
Real-time NotifRedis pub/sub + SSEWebSocket, PollingSSE lebih ringan dari WebSocket untuk one-way push; Redis pub/sub efisien
Testing BEpytestunittestFramework-native Python, fixture system kuat, readability bagus
Testing FEVitestJestTerintegrasi native dengan Vite/Next.js ecosystem, sangat cepat
CI/CDGitLab CIGitHub Actions, JenkinsProyek di GitLab ITB, native integration
ContainerizationDocker + docker-composePodman, bare metalReproducible environment, mudah di-deploy di berbagai server

3.b Keputusan Penting: Menghapus n8n

[!important] Pivotal Decision — Hapus n8n Awalnya proyek menggunakan n8n sebagai execution backend (workflow orchestrator eksternal). Di sprint tengah, n8n dihapus dan diganti dengan custom Python execution engine (~400 baris di workflow_service.py).

Alasan penghapusan:

  • n8n adalah Node.js service → overhead infrastruktur tambahan
  • Kehilangan kontrol atas execution semantics (black box)
  • Tight coupling ke third-party API yang bisa berubah

Takeaway: Strategi “prototype dulu pakai tools existing, replace in-house saat requirement jelas” adalah pendekatan iteratif yang valid.


4. Evaluasi Pasca-Proyek: Apakah Tech Stack Tepat?

4.a Yang Terbukti Tepat ✅

KeputusanBukti Keberhasilan
FastAPIAuto-generate Swagger docs /docs → langsung bisa dipakai untuk testing API tanpa effort tambahan
SQLAlchemy + AlembicSchema drift terdeteksi otomatis; zero data loss pada semua migrasi sprint
Redis sebagai “glue”Satu dependency Redis menangani 3 concern: rate limiter (sorted set), pub/sub notifikasi, ARQ job queue
Strategy Pattern untuk ActionMenambah action baru = 1 file baru + 1 baris di registry. Zero perubahan di execution engine
JWT di HttpOnly CookieMitigasi XSS token theft; tidak ada kebocoran token di localStorage
ARQ + Redis untuk workerBackground eksekusi workflow tidak blocking event loop FastAPI

4.b Yang Bisa Diperbaiki ⚠️

GapDampakAlternatif yang Lebih Tepat
Tidak ada E2E test (Playwright/Cypress)Interaksi canvas (drag-drop, connect node) tidak teruji otomatisPlaywright (sudah ada di requirements.txt tapi belum digunakan untuk E2E)
ARQ worker masih in-processJika server restart, job queue hilangDedicated ARQ worker process terpisah + persistent Redis queue
SchedulingTrigger belum ada cron loopTrigger berbasis jadwal tidak berjalan saat restartAPScheduler atau celery-beat integration
Tidak ada JWT refresh tokenUser harus login ulang setiap ACCESS_TOKEN_EXPIRE_MINUTES menitSliding refresh token atau session extension
Validasi workflow_schema masih implicitJSON blob bisa corrupt tanpa terdeteksi saat savePydantic model untuk validasi graph structure on write

Jawaban Singkat untuk Ujian Secara keseluruhan, pemilihan tech stack sudah tepat. FastAPI + PostgreSQL + Redis terbukti cukup untuk skala proyek ini. Keputusan paling signifikan adalah menghapus n8n dan membangun execution engine sendiri — keputusan ini terbukti benar karena meningkatkan kontrol, transparansi debugging, dan mengurangi complexity infrastruktur. Gap yang ada (E2E test, dedicated worker) bukan kesalahan pemilihan teknologi, melainkan keterbatasan waktu sprint.


4.c Pertanyaan Jebakan CPMK 4 & Cara Menjawabnya

Framing Penting Bedakan antara yang kamu kerjakan sendiri (bisa dijawab teknis detail) vs keputusan tim (jawab dari sudut pandang tim, bukan seolah kamu yang implementasi).

❓ “Kenapa pilih PostgreSQL bukan MongoDB, padahal struktur workflow (node & edge) biasanya lebih cocok NoSQL?”

Jawaban: Memang struktur graph (node + edge) terlihat cocok untuk document store, tapi kami menyimpannya sebagai JSON column di PostgreSQL — yang memberi fleksibilitas NoSQL tetapi tetap dengan jaminan ACID transaksional.

Alasannya: tabel executions dan task_logs punya relasi terstruktur ke workflows dan accounts — membutuhkan foreign key integrity dan JOIN query yang hanya bisa dilakukan dengan baik di RDBMS. Kalau pakai MongoDB, integritas data antar collection harus dijaga manual di application layer → lebih rawan bug.

Kesimpulan: PostgreSQL dengan JSON column adalah trade-off yang tepat — struktur data relasional tetap terjaga, tapi definisi node/edge tetap fleksibel.


❓ “Bagaimana error handling kalau Action ‘Send Email’ gagal di tengah eksekusi workflow?”

Jawaban (dari sudut pandang kamu sebagai FE dev): Di sisi frontend yang saya kerjakan, setiap node pada canvas memiliki status yang ditampilkan secara real-time dari task_log — jadi user bisa langsung melihat node mana yang gagal dan pesan errornya.

Jawaban (tim — backend): ARQ worker mencatat setiap action ke task_logs dengan status SUCCESS/FAILED. Jika action gagal, execution engine berhenti dan mencatat error message ke log. Sprint 5 juga menambahkan timeout & retry logic (SB-08, oleh 13523007) — jika action tidak selesai dalam batas waktu, otomatis di-retry atau ditandai failed.


❓ “Kenapa pilih SSE bukan WebSocket untuk real-time notification?”

Jawaban: SSE (Server-Sent Events) dipilih karena komunikasinya one-directional (server → client) — cocok untuk kasus notifikasi status eksekusi workflow di mana client hanya perlu menerima update, bukan mengirim balik. WebSocket lebih tepat untuk komunikasi bi-directional (contoh: chat). Overhead WebSocket (full-duplex connection) tidak perlu untuk use case kami. Dari sudut pandang saya: di task log display (SB-09, Sprint 4), saya mengkonsumsi SSE stream untuk update status task secara real-time tanpa perlu polling.


❓ “Apa kontribusi spesifik Anda yang menunjukkan penerapan CPMK 4?”

Jawaban terbaik (langsung & spesifik): Kontribusi paling konkret saya ke CPMK 4 adalah implementasi canvas workflow menggunakan @xyflow/react (Sprint 3 SB-05 & Sprint 4 SB-02).

Pemilihan @xyflow bukan keputusan sembarangan — saya harus memahami API library ini, mengimplementasikan custom node types untuk trigger dan action, mengelola state graph (node + edge), dan memastikan serialisasi ke format JSON yang bisa dieksekusi backend. Ini adalah contoh langsung “menggunakan framework yang tepat” sesuai CPMK 4.

Di Sprint 4, saya juga mengintegrasikan frontend dengan backend untuk eksekusi workflow & logging (SB-14) — yang berarti saya harus memahami kontrak API FastAPI dan memastikan state di canvas sinkron dengan hasil eksekusi di backend.


5. Soal: Software Measurement (Bagian I No 2)

Pertanyaan Khas “Apa kegunaan measurement pada pengembangan software?” / “Jelaskan perbedaan Measure, Metric, dan Indicator”

5.a Mengapa Mengukur Software?

“You cannot control what you cannot measure.” — Tom DeMarco (1982) “What is not measurable, make measurable.” — Galileo

TujuanYang Diukur
Understand — pahami kondisi proyekprogress, kompleksitas kode
Control — kendalikan prosesdefect rate, velocity per sprint
Improve — tingkatkan kualitas & produktivitasusability, maintainability, reliability

5.b Measure, Metric, dan Indicator

TermDefinisiContoh UmumContoh di AutoSix
MeasurePenilaian/penetapan dengan membandingkan ke suatu standarSuhu tubuh Joe = 99°FJumlah test pass = 47 dari 50
MetricUkuran kuantitatif dari derajat suatu atribut pada elemen software — lebih bermakna karena ada konteks”2 error ditemukan customer dalam 18 bulan” (bukan sekadar “ada 2 error”)“3 bug ditemukan selama 5 sprint di fitur canvas”
IndicatorDevice/variable/metric yang menunjukkan apakah suatu state atau goal tercapai; biasanya untuk menarik perhatianBendera setengah tiang = ada yang meninggalBurndown chart naik di Day 3 = ada sprint risk

[!important] Jebakan Ujian Metric ≠ Measure — Measure sekadar pengukuran vs standar. Metric lebih bermakna karena mengandung konteks atribut yang diukur dan tujuan pengukurannya. Indicator adalah sinyal dari metric/variable untuk mencapai goal.

5.c Skala Pengukuran

Dari paling lemah ke paling kuat (bisa turun, tidak bisa naik):

SkalaSifatContoh
NominalKategori, tidak ada urutanJenis bug: UI / Logic / Performance
OrdinalAda urutan, jarak tidak bermaknaPrioritas: Low / Medium / High
IntervalAda jarak bermakna, tidak ada nol mutlakTanggal kalender
RatioAda nol mutlak, semua operasi validLOC, jumlah defect, waktu eksekusi

Most powerful analysis → Ratio → Interval → Ordinal → Nominal → Least powerful

5.d Direct vs Indirect Measures

TipeCara UkurContoh UmumContoh di AutoSix
Direct (internal)Diukur langsung dari atribut, biasanya dengan menghitungLOC, durasi proses, jumlah defectJumlah endpoint API: 24, jumlah sprint: 5
Indirect (external)Dihitung dari measure lainModule Defect Density = defect / LOCBug rate = bug per sprint = 3 bug / 5 sprint

5.e Properti Metrik yang Baik

Metrik yang baik harus: Valid (mengukur yang seharusnya diukur) + Reliable (konsisten).

Analogi dartboard:

  • Reliable tapi not valid → titik berkumpul rapat tapi jauh dari pusat
  • Valid tapi not reliable → titik tersebar tapi rata-rata di pusat
  • Valid & reliable → titik rapat di pusat ✅

Properti lengkap: valid, reliable, objective, precise, intuitive, robust, automatable, economical.

5.f Pengukuran di Proyek AutoSix

Metric yang Kami GunakanTipeKegunaan
Burndown chart per sprintIndicatorMenunjukkan apakah sprint goal akan tercapai
Jumlah test pass/fail (pytest, Vitest)Direct measureMengukur correctness implementasi
Jumlah MR di-rejectIndirect metricProxy untuk code quality
Sprint velocity (story point selesai)MetricKontrol kapasitas tim per sprint
Jumlah bug ditemukan saat UATDirect measureEvaluasi kesiapan release

Koneksi ke CPMK 4 Measurement termasuk CPMK 4 jika framing-nya: “alat bantu pengukuran yang kamu gunakan” — pytest (unit test), Vitest, GitLab CI pipeline (automation), dan burndown chart adalah tools pengukuran yang kami pilih dan gunakan dalam proyek.


6. Soal: Alat Bantu Konfigurasi Perangkat Lunak (No 3 Tahun Lalu)

Pertanyaan “Bagaimana kelompok Anda memanfaatkan alat bantu dalam mengelola konfigurasi perangkat lunak yang dibangun? Menurut Anda, apa yang perlu diperbaiki dalam pemanfaatan alat bantu tersebut?“

5.a Alat Bantu Konfigurasi yang Digunakan

Version Control:

  • GitLab (gitlab-edu.itb.ac.id) — semua kode di-track, branching per fitur/sprint
  • Branch strategy: main (production), feature branches per issue
  • Merge Request dengan review sebelum merge ke main

CI/CD Pipeline (.gitlab-ci.yml):

  • Auto-lint dan test pada setiap push ke MR
  • Build dan deploy otomatis ke staging saat merge ke main
  • Pipeline mencegah kode broken masuk ke main branch

Manajemen Environment:

  • .env.example di-commit, .env di-gitignore → credentials tidak pernah masuk VCS
  • Konfigurasi berbeda untuk dev/staging/production via environment variables
  • pydantic-settings di backend untuk type-safe config loading

Containerization:

  • Dockerfile untuk backend dan frontend
  • docker-compose.prod.yml untuk production deployment
  • docker-compose.worker.yml untuk ARQ worker terpisah

Database Migration:

  • Alembic dengan alembic revision --autogenerate → schema drift terdeteksi otomatis
  • run_migrations.py dengan auto-stamp logic untuk fresh DB

Dependency Management:

  • requirements.txt (semua) dan requirements-prod.txt (production only) — memisahkan dev tools dari prod
  • package-lock.json di-commit untuk reproducible installs di frontend

5.b Yang Perlu Diperbaiki

  1. Tidak ada semantic versioning — aplikasi tidak punya version tag (v1.0.0, dll). Sulit melacak release.
  2. Belum ada E2E automated test di pipeline — CI hanya menjalankan unit/integration test, interaksi UI canvas tidak teruji otomatis.
  3. Secrets management masih manual.env file di-manage manual. Idealnya menggunakan GitLab CI/CD Variables atau HashiCorp Vault.
  4. Monitoring & observability belum ada — tidak ada logging aggregation (ELK/Loki) atau alerting. Sulit mendeteksi masalah production.

6. Soal: DSSE — Domain-Specific Software Engineering

6.a Definisi & Motivasi DSSE

DefinitionDSSE (Domain-Specific Software Engineering) adalah pendekatan software engineering yang dicirikan oleh pemanfaatan ekstensif existing domain knowledge (leveraging existing domain knowledge).

Logika dasarnya: Similar problem → Similar solution → Similar software. Begitu kita membangun sejumlah sistem yang melakukan hal serupa, kita memperoleh pengetahuan untuk mengeksploitasi solusi umum. Secara teori, kita cukup membangun “the difference” antara sistem target baru dan sistem sebelumnya.

Mengapa DSSE? Pandangan tradisional mengajarkan solusi de novo (dari nol) — tidak feasible karena akan banyak “menemukan ulang roda”.

6.b Spektrum Pendekatan SE

PendekatanCara Kerja
Traditional SE1 masalah → tak terhitung cara (“too many choices”)
Architecture-Based SE1 masalah → pilih dari segelintir architectural styles → implementasi spesifik
Domain-Specific SERegion problem space (domain) → DSSA → application-specific arch → implementasi

Alur DSSE: Which domain? → Reference architecture → Application-specific arch → How to implement?

6.c Tiga Faktor Kunci DSSE (“Three Lampposts”)

[!important] Tiga Faktor DSSE berada di irisan tiga faktor: Domain · Business · Technology

FaktorPenjelasan
DomainHarus ada domain untuk membatasi problem space dan memfokuskan pengembangan
BusinessMotivasi bisnis: minimizing costs (reuse aset) dan maximize market (banyak aplikasi terkait untuk berbagai end user)
TechnologyHarus ada beragam solusi teknologi (tools, patterns, architectures & styles) untuk diterapkan pada domain

Kombinasi irisan:

KombinasiHasil
Domain + BusinessCorporate Core Competencies — keahlian domain diperkuat business acumen & pengetahuan pasar
Domain + TechnologyApplication Family Architectures — semua solusi teknologi untuk masalah dalam domain
Business + TechnologyDomain Independent Infrastructure — tools & teknik lepas dari domain (UML, compiler, word processor)
Domain + Business + Technology→ Domain-Specific Software Engineering

6.d Jenis Domain & Konsep Pendukung

  • Domain Vertikal (industry-specific): Perbankan, Pertambangan, Pendidikan, Airline
  • Domain Horizontal: Office Automation, ERP, CRM, CASE Tools, Compiler bahasa pemrograman
  • Product-Line Architecture — sekumpulan solusi spesifik yang terkait; fokus pada commonalities dan variability antar solusi individual
  • Domain-Specific Tools / DSL — memberi pengembangan lebih cepat, menyatukan native problem concepts dengan programming concepts. Contoh: Unity3D untuk game, SQL, HTML, Actulus Modeling Language

6.e DSSE dalam Proyek AutoSix

Elemen DSSEImplementasi di AutoSix
DomainOtomasi workflow akademik ITB — domain vertikal (pendidikan)
DSL-like abstractionCanvas trigger/action = vocabulary domain-specific (bukan general programming)
Domain-specific framework@xyflow/react — dipilih karena domain = node-graph workflow
VariabilityStrategy Pattern untuk action/trigger → variasi tanpa ubah engine
CommonalitySemua workflow: node + edge + execution context
Catalog = feature modelKatalog trigger/action = representasi variabilities yang tersedia

6.f Kapan DSSE Cocok ✅ dan Kurang Tepat ❌

Cocok ✅Kurang Tepat ❌
Domain sudah matang & stabilDomain baru / masih berubah
Banyak produk terkait (product line)Proyek one-off, tidak ada rencana replikasi
User = domain expert, bukan programmerReference arch dibuat terlalu awal (not too-early, not too-late)
Kebutuhan reuse tinggi antar produkOverhead membangun framework > benefit

Jawaban Singkat DSSE = leveraging existing domain knowledge (similar problem → similar solution, bangun “the difference”). Tiga faktor: Domain × Business × Technology. Cocok untuk domain matang dengan banyak produk terkait. Kurang tepat untuk domain baru atau proyek one-off. Di AutoSix: kami menggunakan DSSE → tools domain-specific (@xyflow, ARQ) + vocabulary trigger/action sebagai DSL informal untuk otomasi workflow akademik.


7. Soal: Arsitektur UML (No 4 Tahun Lalu)

7.a Arsitektur Backend (3-Layer)

┌─────────────────────────────────────────┐
│              CLIENT (Browser)            │
│           Next.js 16 Frontend            │
└────────────────────┬────────────────────┘
                     │ HTTP / SSE
┌────────────────────▼────────────────────┐
│           FastAPI Backend               │
│  ┌──────────────────────────────────┐   │
│  │  Routers (app/api/)              │   │  ← thin HTTP handlers
│  │  auth, workflow, webhook, notif  │   │
│  └──────────────────┬───────────────┘   │
│  ┌──────────────────▼───────────────┐   │
│  │  Services (app/services/)        │   │  ← all business logic
│  │  WorkflowService, AuthService    │   │
│  │  NotificationService, etc.       │   │
│  └──────────────────┬───────────────┘   │
│  ┌──────────────────▼───────────────┐   │
│  │  Models (app/models/)            │   │  ← SQLAlchemy ORM
│  │  Account, Workflow, Execution    │   │
│  └──────────────────────────────────┘   │
└────────────┬──────────────┬─────────────┘
             │              │
    ┌─────────▼──┐    ┌─────▼──────┐
    │ PostgreSQL  │    │   Redis     │
    │  (data)     │    │ (queue/pub) │
    └────────────┘    └────────────┘

                    ┌────────▼───────┐
                    │  ARQ Worker     │
                    │ (background     │
                    │  execution)     │
                    └────────────────┘

7.b Workflow Execution Flow (Sequence)

User/System         WebhookController    WorkflowService      ARQ Worker
    │                      │                   │                  │
    │── POST /webhook/{id}─►│                   │                  │
    │                      │─ validate ────────►│                  │
    │                      │                   │─ create Execution │
    │                      │                   │─ enqueue job ────►│
    │◄── 202 Accepted ──────│                   │                  │
    │                      │                   │                  │─ DFS traverse nodes
    │                      │                   │                  │─ execute each Action
    │                      │                   │                  │─ write TaskLog per node
    │                      │                   │◄─ update status ──│

7.c Strategy Pattern untuk Extensibility

ActionStrategy (abstract)
├── SendEmailAction
├── CompressImageAction
├── ConditionalAction
├── DelayAction
├── WebhookCallbackAction
└── [tambah action baru = 1 file baru]

Registry:
action_key → Class (dinamis, tidak ada hardcode di engine)

8. Soal: Perencanaan Evaluasi (Bagian II No 2)

8.a Strategi Pengujian AutoSix

Backend — pytest:

  • tests/unit/services/ → 10 test file, testing service layer secara isolated (mock DB)
    • test_actions.py, test_auth_service.py, test_workflow_engine.py, dll.
  • tests/unit/core/test_security.py → pengujian JWT & security utils
  • tests/integration/test_api_routes.py → integration test endpoint dengan DB nyata

Frontend — Vitest:

  • test/unit/api.test.ts → API client utilities
  • test/unit/auth.test.ts → autentikasi dan session management
  • test/unit/components.test.tsx → React component rendering
  • test/unit/itbSso.test.ts → SSO ITB integration logic
  • test/unit/useProfile.test.ts → custom hooks

Manual Testing:

  • User Acceptance Testing (UAT) dengan user Direktorat Pendidikan
  • Pengujian tiap product backlog sebelum sprint review

Gap dalam Evaluasi:

  • Belum ada E2E test untuk alur canvas (drag-drop, connect node, eksekusi)
  • Belum ada load/stress testing untuk concurrent workflow execution
  • Code coverage belum diukur secara formal

9. Soal: Large Scale Software Development (Bagian I No 1)

Pertanyaan “Karakteristik utama large scale software development dan efeknya ke manajemen proyek”

9.a “Bukan Sekadar Ukuran Besar”

[!important] Poin Inti dari Materi Kuliah “Development in a large scale software is not just the issue of the large size software application.” Tantangan utama bukan hanya jumlah baris kode, melainkan kompleksitas interaksi, koordinasi, lokasi, platform, dan politik organisasi.

9.b Dimensi Kompleksitas

DimensiContoh
Complexity in SoftwareHigh LOC, banyak data access, banyak elemen komputasi
Complexity in RequirementsUkuran requirement besar, sering berubah, kadang konflik
Complexity in LocationTim lintas lokasi / zona waktu
Complexity in PlatformMultiple hardware, OS, programming language
Complexity in PoliticsPerbedaan aturan dan kebijakan antar pihak
Complexity in ResourcesAlokasi SDM, budget, waktu

9.c Ciri Khas Large-Scale Software

  • Source code jutaan baris (contoh: OTHR radar ±3 juta LOC)
  • Ratusan developer, sering tersebar geografis
  • Kompleksitas interaksi antar komponen tinggi
  • Penggunaan komponen off-the-shelf ekstensif
  • Multiple programming languages dan multiple persistence mechanisms
  • Concurrency tinggi

9.d Masalah Teknis Khas

MasalahPenjelasan
MemoryHarus dikelola hati-hati karena terbatas hardware
Time (rebuild)Compile time mahal — sekali build menghabiskan banyak waktu
PerformanceBahasa interpreted tidak menyamai compiled; ada beban GC
ThreadsRace condition, deadlock — jauh lebih kompleks dari sequential
Safety”The bigger the problem is, the riskier it becomes”
PortabilityThread scheduling beda antar platform, non-standard API

9.e Estimasi Effort & Implikasinya

Estimasi Effort (dari slide kuliah) Sistem 5 juta LOC × 22 lines/day → ±947 person-years → butuh ±380 developer untuk selesai dalam 2,5 tahun.

Dua implikasi:

  1. Sistem harus dipartisi menjadi komponen kecil yang relatif independen
  2. Jauh lebih baik reuse komponen yang ada — sisakan kode baru hanya untuk requirement baru (prinsip yang sama dengan DSSE!)

9.f Prinsip & Relevansi ke AutoSix

Prinsip Large-ScaleImplementasi di AutoSix
ReproducibilityDocker + docker-compose → reproducible di semua environment
AutomationGitLab CI/CD pipeline → automate test, lint, deploy
Continuous IntegrationSetiap MR auto-trigger pipeline, branch strategy ketat
Koordinasi (3C)Communication (MR + daily), Capacity (Scrum sprint), Cooperation (shared repo)

Akar Kesulitan = KOORDINASI3C: Communication · Capacity · Cooperation


10. Quick Reference — Jawaban Singkat Untuk Ujian

Bullet Points Kunci

Tech Stack — Apakah Tepat?

  • Ya, secara keseluruhan tepat. FastAPI + PostgreSQL + Redis cukup untuk skala ini.
  • Keputusan terbaik: menghapus n8n → custom engine lebih transparan & controllable.
  • Gap: E2E test belum ada, dedicated ARQ worker belum fully deployed.

Alat bantu konfigurasi:

  • GitLab (VCS + CI/CD), Docker (containerization), Alembic (DB migration), .env management, pydantic-settings.
  • Yang perlu diperbaiki: secrets management (masih manual), belum ada monitoring/observability.

DSSE — Three Lampposts:

  • Domain × Business × Technology
  • Irisan: Corporate Core Competencies | Application Family Arch | Domain Independent Infra
  • Cocok: domain matang, banyak produk terkait, user = domain expert
  • Kurang tepat: domain baru, proyek one-off, reference arch terlalu dini
  • ⚠️ Jebakan kecuali: Kelebihan GPL = banyak dukungan IDE (bukan DSL); Komponen DSSA ≠ reference model

Large Scale:

  • Bukan sekadar ukuran kode → 6 dimensi kompleksitas
  • Akar masalah = KOORDINASI (3C: Communication, Capacity, Cooperation)
  • Prinsip: Reproducibility, Automation, CI, Policy enforcement

Arsitektur AutoSix:

  • 3-layer backend: Router → Service → Model
  • Strategy pattern untuk Action/Trigger: extensible tanpa ubah engine
  • Redis sebagai single dependency untuk 3 concerns: rate limit, pub/sub, ARQ

References

  • Pressman, R.S. (2014) - Software Engineering: A Practitioner’s Approach, 8th Ed.
  • Sommerville, I. (2016) - Software Engineering, 10th Ed.
  • if-notes.naufarrel.dev — Catatan IF3250 PPL (DSSE, Large Scale, Measurement, UAS)
  • PROJECT_AUDIT.md — AutoSix internal retrospective (June 2026)
  • FastAPI Documentation — fastapi.tiangolo.com