Skip to main content

Software Design Document

Template & Panduan Penulisan

Untuk Technical Lead, Software Architect, Backend Developer, Frontend Developer, DevOps Engineer, Business Analyst, Quality Assurance, dan Security Reviewer

Versi 2.0 | 2026


Panduan Penggunaan Template​

Template ini dirancang untuk membantu tim teknis dalam mendokumentasikan desain arsitektur dan detail teknis sistem sebelum dan selama proses pengembangan. Disusun berdasarkan IEEE 1016, ISO/IEC/IEEE 42010, NIST SSDF, OWASP ASVS, dan praktik industri terbaik.

Tujuan Dokumen Ini​

  • Menerjemahkan kebutuhan fungsional (dari PRD) menjadi desain teknis yang dapat diimplementasi
  • Mendokumentasikan keputusan arsitektur dan alasan di baliknya (Architecture Decision Records)
  • Menjadi acuan tunggal untuk desain komponen, data model, dan kontrak antar-layer
  • Memfasilitasi onboarding developer baru dengan pemahaman sistem yang komprehensif
  • Menjadi dasar untuk code review, testing strategy, dan validasi implementasi
  • Mendukung audit, handover, dan pemeliharaan sistem jangka panjang

Perbedaan SDD dengan Dokumen Lain​

AspekBRDPRDSDD
FokusKebutuhan bisnisKebutuhan produk & fiturDesain teknis & arsitektur
AudiensStakeholder bisnisPM, BA, QA, DevDeveloper, Tech Lead, DevOps
Pertanyaan"Apa yang dibutuhkan bisnis?""Apa yang harus dibangun?""Bagaimana sistem dibangun?"
WaktuSebelum PRDSetelah BRDSetelah PRD
DetailProses bisnis, ROIFitur, AC, flowArsitektur, komponen, data model

Kapan Menggunakan SDD​

  • Proyek baru yang memerlukan arsitektur dari nol
  • Fitur besar yang mengubah arsitektur existing (cross-module, cross-service)
  • Integrasi dengan sistem eksternal yang kompleks
  • Migrasi atau refactoring arsitektur

Untuk fitur kecil yang tidak mengubah arsitektur, cukup gunakan development plan per-backlog.

Cara Menggunakan Template​

  1. Baca seluruh template untuk memahami struktur SDD
  2. Isi setiap bagian sesuai kebutuhan proyek -- hapus bagian yang tidak relevan dengan mencatat alasan di tabel tailoring (Bagian 1.6)
  3. Gunakan tanda [ISI DI SINI] sebagai penanda bagian yang perlu diisi
  4. Sertakan diagram (dapat berupa link ke diagram tool atau deskripsi tekstual)
  5. Perbarui SDD jika ada perubahan arsitektur signifikan selama development
  6. Dapatkan review dan persetujuan dari reviewer yang ditentukan sebelum implementasi dimulai

Alur Penulisan yang Direkomendasikan​

TahapOutput UtamaReview
1. Establish controlMetadata, pemilik, repositori, riwayat revisi, tailoringDocument owner
2. Definisikan batasanTujuan, ruang lingkup, aktor, asumsiPM + Architect
3. Identifikasi driverKapabilitas, skenario NFR, constraint, regulasi, risikoArchitecture workshop
4. Buat context & viewsContext, container, data, deployment, security viewsArchitecture review
5. Dekomposisi komponenTanggung jawab, interface, data ownership, dependensiEngineering review
6. Spesifikasi kontrak & dataAPI/event/file contracts, ERD, data dictionary, migrasiIntegration + data review
7. Tambahkan behavioral designSequence, state, rules, algoritma, failure pathEngineering + QA
8. Tambahkan security & NFRThreat model, kontrol, budget, resiliensi, DRSecurity + NFR review
9. Tambahkan deployment & operationsEnvironment, topologi, pipeline, observability, runbookOperational readiness
10. Trace & approveRTM, temuan, evidence, approval, baselineFormal gates

Panduan Peran Tim​

PeranFokus AreaKontribusi UtamaReview/Approval
Technical Lead / ArchitectKeseluruhan desain, keputusan arsitekturMendefinisikan arsitektur, review komponen, approve perubahanArchitecture approval
Backend DeveloperAPI design, service layer, data accessMendetailkan desain backend, query, business logic flowImplementation readiness
Frontend DeveloperComponent architecture, state managementMendetailkan desain frontend, component tree, data flowImplementation readiness
DevOps / SREInfrastructure, deployment, networkingMendetailkan desain deployment, scaling, monitoring, runbookOperational readiness
Security ReviewerThreat model, authn/authz, data protectionValidasi kontrol keamanan, trust boundary, auditSecurity approval
Business AnalystValidasi terhadap requirementMemastikan desain mencakup semua kebutuhan dari PRDBusiness acceptance
Quality AssuranceTestability, observability, traceabilityMemastikan desain dapat diuji, RTM lengkapTest readiness
Project ManagerScope, timeline, risikoValidasi kelengkapan scope, risiko, dan dependensiBusiness acceptance

Notasi dan Format​

  • TIPS: Panduan atau penjelasan tambahan untuk membantu pengisian.
  • [ISI DI SINI] menunjukkan bagian yang harus diisi sesuai konteks proyek.
  • Tag peran menunjukkan bagian yang paling relevan:
    • DEV Developer (Backend/Frontend/DevOps)
    • BA Business Analyst
    • QA Quality Assurance
    • PM Project Manager
    • SEC Security Reviewer

Kualitas SDD yang Baik​

KualitasSDD yang BaikSDD yang Lemah
SpesifikMenyebut nama komponen, protokol, data, aturan, perilaku gagal, threshold, dan pemilikPernyataan samar seperti "aman dan scalable"
KonsistenDiagram, tabel, struktur kode, kontrak, dan deployment menggunakan nama dan batasan yang samaNama komponen berbeda di diagram yang berbeda
TestableNFR dan kontrol memiliki kriteria pass yang terukur dan metode verifikasiTarget subjektif atau tidak ada
TraceableRequirements dan risiko terhubung ke keputusan, komponen, kontrol, tes, dan evidenceKeputusan desain tidak bisa ditelusuri ke driver
OperableMonitoring, alert, recovery, backup, runbook, dan ownership yang actionableDesain berhenti di struktur kode saja
MaintainableSDD mereferensi artefak yang terkontrol dan memiliki proses updateDokumen langsung usang begitu ditulis

Dokumen Masukan yang Direkomendasikan​

DEV PM Technical Lead dan Project Manager bertanggung jawab mengumpulkan dokumen masukan berikut sebelum penyusunan SDD dimulai.

NoDokumen MasukanDeskripsiWajib / Opsional
1PRD yang telah disetujuiProduct Requirements Document sebagai dasar utama desain teknisWajib
2BRD yang telah disetujuiBusiness Requirements Document untuk konteks bisnis dan aturan bisnisWajib
3Dokumentasi infrastruktur / topologi jaringanArsitektur infrastruktur existing (server, network, firewall, load balancer)Wajib
4Akses ke repository kode (jika sistem existing)Source code dan struktur proyek untuk memahami arsitektur yang sudah adaWajib (jika ada sistem existing)
5Database schema existingERD, tabel, kolom, dan relasi dari database yang sudah berjalanWajib (jika ada DB existing)
6Dokumentasi API sistem eksternalSpesifikasi API dari sistem yang akan diintegrasikan (Swagger, Postman, WSDL)Wajib (jika ada integrasi)
7Standar keamanan / compliance checklistKebijakan keamanan organisasi, standar enkripsi, regulasi (ISO 27001, OWASP, dll.)Wajib
8Wireframe / desain UI finalRancangan antarmuka dari tim UI/UX sebagai acuan desain frontendWajib (jika ada frontend)
9Standar validasi form (TSG)Aturan umum validasi form isian TSGWajib
10Standar audit trail (TSG)Panduan pencatatan audit trail, activity log, dan history TSGWajib
11Daftar fitur utilitas sistem (TSG)Standar fitur monitoring, notifikasi, health check TSGWajib
12Kategori temuan major SIT (TSG)14 kategori temuan major untuk kesiapan System Integration TestingWajib
13Hasil load test / benchmark (jika ada)Data performa sistem existing untuk baseline NFROpsional
14Runbook / SOP operasional existingProsedur deployment, backup, recovery, monitoring yang sudah berjalanOpsional
15Architecture Decision Records (ADR) sebelumnyaKeputusan arsitektur yang sudah dibuat di fase sebelumnyaOpsional

TIPS: SDD tidak boleh dimulai sebelum PRD disetujui (no. 1). Untuk proyek greenfield, dokumen no. 4-5 tidak diperlukan. Untuk proyek dengan integrasi kompleks, pastikan no. 6 tersedia sebelum memulai desain API.


1. Document Control​

1.1 Informasi Dokumen​

AtributDetail
Nama DokumenSoftware Design Document (SDD)
Kode DokumenTSG-SDD-[KODE PROYEK]-[NOMOR URUT]
Proyek / Produk[ISI DI SINI]
System Release[ISI DI SINI]
Versi Dokumen[ISI DI SINI — contoh: 1.0]
StatusDraft / In Review / Approved / Superseded
KlasifikasiInternal / Confidential / Restricted
Tanggal Dibuat[ISI DI SINI]
Tanggal Diperbarui[ISI DI SINI]
Pemilik Dokumen[ISI DI SINI -- Technical Lead / Architect]
Lokasi Repositori[ISI DI SINI -- URL atau path terkontrol]
Siklus Review[ISI DI SINI -- Per release / Per quarter / Lainnya]

1.2 Riwayat Versi​

VersiTanggalPenulisDeskripsi PerubahanStatus
0.1[ISI DI SINI][ISI DI SINI]Draft awal arsitekturDraft
0.2[ISI DI SINI][ISI DI SINI][ISI DI SINI]In Review
1.0[ISI DI SINI][ISI DI SINI]Approved baseline untuk [RELEASE]Approved

1.3 Review dan Persetujuan​

PeranNamaScope ReviewKeputusanTanggal
Technical Lead / Architect[ISI DI SINI]Kelengkapan dan konsistensi arsitekturApprove / Rework[ISI DI SINI]
Engineering Lead[ISI DI SINI]Kesiapan implementasiApprove / Rework[ISI DI SINI]
Security Reviewer[ISI DI SINI]Desain keamanan dan privasiApprove / Rework[ISI DI SINI]
QA / Test Lead[ISI DI SINI]Verifiabilitas dan traceabilityApprove / Rework[ISI DI SINI]
DevOps / SRE[ISI DI SINI]Deployment dan operational readinessApprove / Rework[ISI DI SINI]
Project Manager[ISI DI SINI]Business alignment dan limitasiApprove / Rework[ISI DI SINI]

1.4 Identifikasi Sistem​

AtributValue
Nama Sistem / Aplikasi[ISI DI SINI]
Akronim[ISI DI SINI]
Business Owner[ISI DI SINI]
Technical Owner[ISI DI SINI]
Service Criticality[ISI DI SINI -- Tier / Classification]
Data Classification[ISI DI SINI -- Internal / Confidential / Restricted]
Primary Repository[ISI DI SINI -- URL / Path]

1.5 Dokumen Referensi​

Kode DokumenJudul DokumenVersiLokasi / PemilikRelevansi
TSG-BRD-[KODE]Business Requirements Document[ISI DI SINI][ISI DI SINI]Kebutuhan bisnis yang menjadi dasar desain
TSG-PRD-[KODE]Product Requirements Document[ISI DI SINI][ISI DI SINI]Kebutuhan fungsional yang diterjemahkan ke desain
TSG-STD-VALIDASIAturan Umum Validasi Form[ISI DI SINI][ISI DI SINI]Standar validasi input
TSG-STD-AUDITStandar Audit Trail[ISI DI SINI][ISI DI SINI]Standar logging dan audit
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

1.6 Tailoring (Penyesuaian Template)​

TIPS: Catat setiap bagian yang dihilangkan, digabung, atau diganti. Bagian yang dihilangkan hanya diperbolehkan dengan alasan dan persetujuan yang jelas.

BagianKeputusanAlasanApprover
[ISI DI SINI]Included / Omitted / Combined / External Ref[ISI DI SINI][ISI DI SINI]

2. Executive Summary​

PM BA -- Bagian ini ditulis TERAKHIR setelah seluruh desain selesai. Rangkum arsitektur yang disetujui, keputusan utama, risiko kritis, dan batasan release dalam 1-2 halaman.

2.1 Ringkasan Desain Sistem​

ItemRingkasan
Tujuan sistem[ISI DI SINI -- satu paragraf]
Pengguna utama & channel[ISI DI SINI -- grup user, web, mobile, API, batch, dll.]
Gaya arsitektur[ISI DI SINI -- Modular Monolith / Microservices / Event-Driven / Layered / Lainnya]
Technology stack utama[ISI DI SINI -- Frontend, Backend, Data, Integration, Platform]
Model deployment[ISI DI SINI -- Cloud / On-premises / Hybrid; Region / Data Center]
Model keamanan[ISI DI SINI -- Identity Provider, Authorization Model, Trust Boundaries]
Target availability[ISI DI SINI -- SLO / SLA]
Dependensi utama[ISI DI SINI -- sistem / provider eksternal]
Batasan release[ISI DI SINI -- apa yang di-approve oleh SDD ini]

CONTOH:

ItemRingkasan
Tujuan sistemPlatform pengelolaan keuangan internal end-to-end: pengajuan pembayaran, approval, pencairan, pelaporan
Pengguna utama & channel5.000 karyawan via web browser (intranet + VPN), 40+ cabang
Gaya arsitekturModular Monolith dengan Clean Architecture (Handler → Service → Repository)
Technology stack utamaGo (Fiber), React (TypeScript), SQL Server, Redis, MinIO
Model deploymentOn-premises, Kubernetes, 3 environment (Dev/Staging/Production)
Model keamananOAuth 2.0 + JWT via UIM Next-G, Casbin RBAC, MFA untuk approver
Target availability99.5% uptime, RTO 4 jam, RPO 1 jam
Dependensi utamaUIM Next-G (SSO), HCS (data karyawan), DWH (reporting), Core Banking (fase 2)
Batasan releaseRelease 1.0: Modul Auth, Payment, Dashboard, Admin. Excludes: Mobile, Escrow, Core Banking integration

2.2 Keputusan Arsitektur Utama​

ADR IDKeputusanAlasanTrade-off Utama
ADR-001[ISI DI SINI][ISI DI SINI][ISI DI SINI]
ADR-002[ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

ADR IDKeputusanAlasanTrade-off Utama
ADR-001Modular Monolith, bukan MicroservicesTim kecil (8 dev), deployment sederhana, shared DB mengurangi kompleksitas integrasiScaling terbatas per-modul; harus refactor jika perlu independent scaling
ADR-002SQL Server, bukan PostgreSQLKlien sudah memiliki lisensi dan DBA expertise untuk SQL ServerVendor lock-in, fitur JSON/full-text search lebih terbatas
ADR-003Casbin RBAC, bukan custom permissionMature library, policy-as-config, mendukung multi-tenant di masa depanLearning curve, policy debugging lebih kompleks
ADR-004Server-side rendering OFF, SPA onlyTim frontend lebih familiar React SPA; SEO tidak relevan (intranet)Initial load lebih lambat; mitigasi: code splitting + lazy loading

2.3 Risiko dan Asumsi Kritis​

IDRisiko / AsumsiDampakResponse / Validasi
R-001[ISI DI SINI][ISI DI SINI][ISI DI SINI]
A-001[ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

IDRisiko / AsumsiDampakResponse / Validasi
R-001Integrasi UIM Next-G tidak stabil / API berubah tanpa notifikasiLogin gagal, seluruh sistem tidak bisa diaksesMock API untuk parallel dev, integration test di sprint 1, fallback endpoint
R-002Performa SQL Server menurun pada query kompleks (report/dashboard)Dashboard timeout, user frustrationMaterialized views, Redis cache, query optimization review per sprint
R-003Tim tidak familiar dengan Casbin RBACDelay implementasi authorization, bug permissionTraining internal minggu 1, POC sebelum sprint 2, pair programming
A-001Infrastruktur klien (server, network, K8s) sudah tersedia sebelum SITJika tidak valid: SIT tertunda, deployment terhambatValidasi di sprint 3, fallback: cloud staging sementara
A-002UIM Next-G mendukung OAuth 2.0 + JWT sesuai dokumentasi yang diberikanJika tidak valid: custom auth layer diperlukanAPI exploration sprint 1, validasi dengan tim IT klien
A-003Data master vendor dan karyawan akan disediakan klien dalam format yang disepakatiJika tidak valid: delay seeding, modul payment belum bisa ditestTemplate format dikirim di kickoff, deadline data sprint 2

3. Introduction​

DEV BA -- Bagian ini memberikan konteks proyek dari perspektif teknis. Developer yang baru bergabung harus bisa memahami sistem dari bagian ini.

3.1 Tujuan Dokumen​

[ISI DI SINI -- Jelaskan tujuan spesifik dokumen ini dalam konteks proyek. Contoh: "Dokumen ini mendeskripsikan arsitektur dan desain teknis Sistem Manajemen Dokumen (SMD) yang akan dikembangkan untuk PT. Tristar Surya Gemilang. SDD ini mendukung implementasi, pengujian, deployment, dan pemeliharaan untuk Release 1.0."]

3.2 Ruang Lingkup Sistem​

[ISI DI SINI -- Deskripsikan batasan sistem secara teknis: apa yang termasuk dan tidak termasuk dalam desain ini.]

AspekIn ScopeOut of Scope
Modul/Service[ISI DI SINI][ISI DI SINI]
Integrasi[ISI DI SINI][ISI DI SINI]
Platform[ISI DI SINI][ISI DI SINI]
Data[ISI DI SINI][ISI DI SINI]
Environment[ISI DI SINI][ISI DI SINI]

CONTOH:

AspekIn ScopeOut of Scope
Modul/ServiceAuth, Payment, Reporting, Admin, Notification, Audit, File ServiceEscrow, integrasi Core Banking, aplikasi mobile
IntegrasiUIM Next-G (SSO), HCS (data karyawan), Email SMTP, MinIO (file)Core Banking API, DWH (ditunda ke Fase 2)
PlatformAplikasi web (SPA + REST API)Aplikasi mobile native (Android/iOS), aplikasi desktop
DataData transaksi, master data, audit log, dokumen yang diunggahMigrasi data historis dari sistem legacy
EnvironmentDev, Staging, Production (on-premises K8s)Setup DR site (Fase 2)

3.3 Audiens dan Cara Membaca​

AudiensBagian RelevanTujuan
Technical Lead / ArchitectSemua bagianValidasi keseluruhan desain
Backend DeveloperBagian 5, 6, 7, 8, 9Implementasi backend
Frontend DeveloperBagian 5, 6, 9, 10Implementasi frontend
DevOps / SREBagian 5, 12, 13, 14Setup infrastructure, deployment, monitoring
Security ReviewerBagian 5, 9, 11, 14Validasi threat model dan kontrol keamanan
QABagian 7, 9, 10, 16Strategi testing dan traceability
BA / PMBagian 2, 3, 4, 16, 17Validasi kelengkapan requirement dan risiko

3.4 Asumsi, Constraint, dan Dependensi​

TIPS: Daftar kondisi teknis, regulasi, budget, jadwal, legacy, vendor, dan organisasi yang mempengaruhi desain.

IDTipePernyataanOwnerValidasi / Due DateStatus
ACD-001Assumption[ISI DI SINI][ISI DI SINI][ISI DI SINI]Validated / Pending
ACD-002Constraint[ISI DI SINI][ISI DI SINI][ISI DI SINI]—
ACD-003Dependency[ISI DI SINI][ISI DI SINI][ISI DI SINI]Pending

CONTOH:

IDTipePernyataanOwnerValidasi / Due DateStatus
ACD-001AssumptionUIM Next-G mendukung OAuth 2.0 + JWT sesuai dokumentasiTech LeadSprint 1 — API explorationValidated
ACD-002ConstraintData tidak boleh disimpan di cloud publik — on-premises onlyPMKontrak klien—
ACD-003ConstraintTim development maksimal 8 orang (4 BE, 2 FE, 1 DevOps, 1 QA)PMResource planning—
ACD-004DependencySQL Server lisensi dan DBA disediakan oleh klienPMKickoff meetingPending
ACD-005DependencyDesain UI/UX (Figma) difinalisasi sebelum sprint 2UI/UX LeadMinggu ke-4Pending

3.5 Stakeholders, Concerns, dan Viewpoints​

TIPS: Identifikasi stakeholder arsitektur dan concern mereka untuk memastikan setiap viewpoint dalam SDD menjawab kebutuhan audiens yang tepat.

StakeholderConcern UtamaViewpoint / Bagian SDD yang Relevan
[ISI DI SINI][ISI DI SINI -- contoh: Scalability, performance under load][ISI DI SINI -- contoh: §5.7, §12.1, §12.2]
[ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

StakeholderConcern UtamaViewpoint / Bagian SDD
Solution ArchitectKonsistensi arsitektur, pemisahan tanggung jawab, extensibility§5 System Architecture, §6 High-Level Design
Backend DeveloperKontrak API, data model, alur business logic, penanganan error§7 Data Design, §8 API Design, §9 Component Design
Frontend DeveloperStruktur komponen, state management, integrasi API§10 Frontend Architecture, §8.2-8.4
DevOps / SRETopologi deployment, scaling, monitoring, recovery§13 Infrastructure, §14 Observability
Security ReviewerThreat model, autentikasi, perlindungan data, audit§11 Security Design
QA LeadTestability, traceability, kriteria penerimaan§16 Verification & Traceability
Product OwnerKeselarasan bisnis, cakupan scope, limitasi yang diterima§2 Executive Summary, §3.2 Scope, §18 Risks

3.6 Definisi dan Akronim​

IstilahDefinisi
ADRArchitecture Decision Record -- catatan keputusan arsitektur
DTOData Transfer Object -- objek untuk transfer data antar layer
ERDEntity Relationship Diagram -- diagram relasi antar entitas
NFRNon-Functional Requirement -- kebutuhan non-fungsional
RBACRole-Based Access Control -- kontrol akses berbasis peran
SDDSoftware Design Document -- dokumen desain perangkat lunak
SLOService Level Objective -- target tingkat layanan
[ISI DI SINI][ISI DI SINI]

4. Architecture Drivers​

DEV BA SEC -- Identifikasi set kecil dari tujuan, kebutuhan, quality attributes, constraint, kebijakan, dan risiko yang secara material membentuk arsitektur. Setiap driver harus terhubung ke setidaknya satu keputusan desain atau ADR.

4.1 Tujuan Bisnis dan Produk​

Objective IDTujuanUkuran KeberhasilanDampak ke Arsitektur
OBJ-001[ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Objective IDTujuanUkuran KeberhasilanDampak ke Arsitektur
OBJ-001Digitalisasi approval pembayaranSiklus approval < 4 jam (dari 2-4 hari)Multi-level approval engine, notification service, real-time status
OBJ-002Real-time financial visibilityDashboard refresh < 5 detik, data delay < 1 menitEvent-driven aggregation, materialized views, WebSocket/polling
OBJ-003Audit compliance OJK100% transaksi audited, zero manual reconciliationImmutable audit log, append-only storage, hash chain

4.2 Ringkasan Kapabilitas Fungsional​

Capability IDKapabilitas / EpicPrimary ActorOwning ComponentPrioritas
CAP-001[ISI DI SINI][ISI DI SINI][ISI DI SINI]MUST / SHOULD / MAY

CONTOH:

Capability IDKapabilitas / EpicPrimary ActorOwning ComponentPrioritas
CAP-001Submit & track pengajuan pembayaranOperatorPayment ModuleMUST
CAP-002Multi-level approval dengan thresholdApproverApproval EngineMUST
CAP-003Dashboard keuangan real-timeManagementReporting ModuleMUST
CAP-004Manajemen master data (vendor, GL, unit kerja)AdminAdmin ModuleMUST
CAP-005Export laporan PDF/ExcelFinance ManagerReporting ModuleSHOULD
CAP-006Integrasi Core Banking (posting jurnal)SystemIntegration LayerMAY (Fase 2)

4.3 Quality Attribute Scenarios​

TIPS: Terjemahkan NFR yang samar menjadi skenario quality-attribute yang terukur. Contoh: "Pada 2.000 concurrent session saat jam sibuk, search API harus mengembalikan 95% request valid dalam 800ms dengan CPU utilization di bawah 70%."

QA IDAtributSkenarioResponse MeasureVerifikasi
QA-001Performance[ISI DI SINI]p95 <= [ISI DI SINI] ms pada [ISI DI SINI] req/sLoad test
QA-002Availability[ISI DI SINI]Traffic shift dengan <= [ISI DI SINI] detik interupsiFailover test
QA-003Security[ISI DI SINI]Akses ditolak, di-log, tidak mengekspos detail sensitifSecurity test

CONTOH:

QA IDAtributSkenarioResponse MeasureVerifikasi
QA-001PerformancePada 500 concurrent users saat jam sibuk, submit pengajuanp95 <= 500ms, CPU < 70%k6 load test, 10 menit sustained
QA-002AvailabilityDatabase primary down, traffic shift ke replicaFailover <= 30 detik interupsi, zero data lossChaos test — kill primary, measure recovery
QA-003SecurityUser tanpa permission mencoba akses endpoint /admin403 Forbidden, event logged, response tidak mengekspos stack trace atau internal detailDAST scan + manual security test
QA-004ScalabilityConcurrent users naik dari 500 ke 1.000Auto-scale tambah pod dalam 2 menit, p95 tetap < 800msk6 ramp-up test
Driver IDRegulasi / KebijakanRequirement yang BerlakuResponse di DesainEvidence
REG-001[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Driver IDRegulasi / KebijakanRequirement yang BerlakuResponse di DesainEvidence
REG-001UU PDP No. 27/2022Data pribadi harus terenkripsi, consent tercatat, breach notification 72 jamAES-256 at rest, consent table, breach detection alert§11.5 Data Protection, §11.9 Privacy
REG-002POJK Manajemen Risiko TIAudit trail lengkap, penetration testing, business continuity planImmutable audit log, annual pentest, DR plan§11.8 Audit, §12.4 DR
REG-003Kebijakan Internal KlienSegregation of duty untuk approval, data on-premises onlyCasbin SoD policy, on-prem K8s deployment§11.4 Authorization, §13.1 Environment

4.5 Architecture Principles dan Guardrails​

Principle IDPrinsipAturan / GuardrailProses Exception
PR-001API-first integrationInterface yang dipublikasi HARUS didefinisikan kontraknya dan di-versioningADR + Architect approval
PR-002Least privilegeSetiap identity HARUS menerima permission minimum yang dibutuhkanSecurity exception
PR-003Observable by designSetiap production service HARUS emit structured log, metrics, traces, dan health statusOps approval
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

5. System Architecture​

DEV -- Bagian ini adalah gambaran besar sistem. Semua keputusan di bagian selanjutnya harus konsisten dengan arsitektur yang didefinisikan di sini. Setiap diagram HARUS memiliki judul, scope, legend, versi, dan penjelasan naratif.

5.1 System Context Diagram​

TIPS: Diagram konteks menunjukkan sistem sebagai satu kotak dan semua aktor/sistem eksternal yang berinteraksi dengannya. Jangan tampilkan internal classes.

[ISI DI SINI -- Gambarkan atau deskripsikan diagram konteks]

Contoh:
+---------------+ +-------------------+ +---------------+
| End User |---->| Sistem Utama |<----| Admin User |
| (Browser) | | (Aplikasi) | | (Browser) |
+---------------+ +---------+---------+ +---------------+
|
+--------+--------+
v v v
+-----------+ +-----+ +----------+
| Email SMTP| | SSO | | Storage |
| (External)| |(Ext)| | (MinIO) |
+-----------+ +-----+ +----------+

5.2 Container / Subsystem View​

TIPS: Tampilkan unit-unit yang deployable (aplikasi, service, data store) dan relasi antar-mereka. Pastikan nama konsisten dengan component inventory dan deployment view.

[ISI DI SINI -- Container diagram (C4 Level 2 atau equivalent)]

CONTOH:

+------------------+                    +------------------+
| Browser (SPA) |-- HTTPS/REST ----->| Backend API |
| React + TS |&lt;-- JSON ----------| Go (Fiber) |
+------------------+ +--------+---------+
|
+----------+------------+------------+-----------+
| | | | |
v v v v v
+---------+ +--------+ +----------+ +---------+ +---------+
|SQL Server| | Redis | | MinIO | | SMTP | |UIM Next-G|
|(Primary | |(Cache +| |(Object | |(Email) | |(SSO/Auth)|
| Data) | |Session)| | Storage) | | | | |
+---------+ +--------+ +----------+ +---------+ +---------+

Legend:
[Rectangle] = Deployable container (application / store / external)
--> = Synchronous call (protocol labeled)
ContainerTeknologiTanggung JawabPortOwner
Frontend SPAReact 18, ViteRendering UI, penanganan form, konsumsi API8080 (dev) / Nginx staticFE Team
Backend APIGo 1.22, Fiber v2Business logic, API endpoint, auth middleware3000BE Team
SQL ServerSQL Server 2019Penyimpanan data utama — transaksi, master data, audit1433DBA / DevOps
RedisRedis 7.xPenyimpanan session, query cache, rate limit counter6379DevOps
MinIOMinIO (latest)Penyimpanan objek — dokumen yang diunggah, PDF laporan9000DevOps
SMTP (External)Mailhog (dev) / SMTP klien (prod)Pengiriman notifikasi email1025 (dev) / 587 (prod)DevOps
UIM Next-G (External)OAuth 2.0 + JWTAutentikasi SSO, validasi tokenHTTPSIT Klien

5.3 Logical / Component View​

TIPS: Tampilkan struktur internal untuk service/modul yang kompleks. Pastikan nama konsisten dengan inventory dan interface catalog.

[ISI DI SINI -- Component diagram (C4 Level 3 atau UML Component)]

Contoh (Modular Monolith):
+-----------------------------------------------------+
| API Gateway / Router |
+---------+---------+---------+---------+--------------+
| Module | Module | Module | Module | Shared |
| Auth | User | Forum | Report | Services |
| | Mgmt | Teknis | | (Email, |
| | | | | Storage, |
| | | | | Audit) |
+---------+---------+---------+---------+--------------+
| Data Access Layer |
+-----------------------------------------------------+
| Database |
+-----------------------------------------------------+

5.4 Runtime / Process View​

TIPS: Tampilkan bagaimana sistem beroperasi saat runtime: proses yang berjalan, komunikasi antar-proses, thread pool, dan pemrosesan asynchronous.

[ISI DI SINI -- Runtime / process view diagram]

CONTOH:

Proses Backend API (single binary, multiple goroutines)
+---------------------------------------------------------------+
| Proses Utama (Go binary) |
| |
| +-- HTTP Server (Fiber) |
| | +-- Worker Pool (GOMAXPROCS * goroutines) |
| | | +-- Request goroutine 1 (Handler → Service → Repo) |
| | | +-- Request goroutine 2 |
| | | +-- ... |
| | |
| +-- Worker Latar Belakang |
| | +-- Audit Logger (buffered channel, tulis batch) |
| | +-- Pengirim Notifikasi (channel, email async) |
| | +-- Cache Invalidator (Redis pub/sub listener) |
| | |
| +-- Pekerjaan Terjadwal (cron) |
| | +-- Cek SLA (setiap 30 menit) |
| | +-- Pembersihan Session (setiap 1 jam) |
| | |
| +-- Pool Koneksi |
| +-- SQL Server pool (maks 50 koneksi) |
| +-- Redis pool (maks 20 koneksi) |
+---------------------------------------------------------------+

5.5 Data Architecture View​

TIPS: Tampilkan kepemilikan data, aliran data antar-komponen, dan system of record untuk setiap domain data.

[ISI DI SINI -- High-level data flow / data ownership view]

CONTOH:

Peta Kepemilikan Data:

+------------------+ +------------------+ +------------------+
| Payment Module | | Admin Module | | Auth Service |
| (Pemilik data: | | (Pemilik data: | | (Baca dari |
| - Payments | | - Vendors | | eksternal: |
| - Approvals | | - GL Codes | | - UIM Next-G) |
| - Documents) | | - Unit Kerja) | | |
+--------+---------+ +--------+---------+ | Milik lokal: |
| | | - Sessions |
v v | - Casbin Policy)|
+-----+------------------------+------------+--+--------+--------+
| SQL Server (DB Utama) |
+-----+---------------------------------------------------------+
|
v (async, post-commit)
+-----+--------+ +------------------+
| Audit Service | | MinIO |
| (Pemilik data:| | (Pemilik data: |
| - Audit Log) | | - File/Dokumen) |
+---------------+ +------------------+

5.6 Security and Trust Boundary View​

TIPS: Tampilkan trust boundary, aset sensitif, dan aliran data yang melewati boundary. Digunakan sebagai dasar threat modeling.

[ISI DI SINI -- Trust boundary / security data flow diagram]

CONTOH:

Trust Boundaries:

╔══════════════════════════════════════════════════════════════════╗
║ UNTRUSTED ZONE (Internet / User Device) ║
║ +------------------+ ║
║ | Browser (User) | ── user input (untrusted) ──┐ ║
║ +------------------+ │ ║
╠═════════════════════════════════════════════════════╪═══════════╣
║ DMZ (Reverse Proxy) │ ║
║ +------------------+ │ ║
║ | Nginx | ◄─ HTTPS/TLS 1.3 ───────────┘ ║
║ | (WAF, rate limit)| ║
║ +--------+---------+ ║
╠═══════════╪════════════════════════════════════════════════════╣
║ TRUSTED ZONE (Internal Network) │ ║
║ │ ║
║ +--------v---------+ +---------+ +----------+ ║
║ | Backend API |────>| Redis | | MinIO | ║
║ | (Auth middleware, | | (Session| | (Files) | ║
║ | Casbin RBAC) | | Cache) | +----------+ ║
║ +--------+---------+ +---------+ ║
║ │ ║
║ +--------v---------+ +---------+ ║
║ | SQL Server | | Audit DB| ║
║ | (Encrypted PII) | |(Append | ║
║ +------------------+ | Only) | ║
║ +---------+ ║
╠════════════════════════════════════════════════════════════════╣
║ EXTERNAL ZONE (Third-party) ║
║ +------------------+ +------------------+ ║
║ | UIM Next-G (SSO) | | SMTP (Email) | ║
║ | ◄── HTTPS ──────────── Backend API ────────► ║
║ +------------------+ +------------------+ ║
╚════════════════════════════════════════════════════════════════╝

Aset Sensitif: PII di SQL Server (terenkripsi), JWT token (httpOnly cookie),
Casbin policy, audit log (immutable), dokumen yang diunggah (MinIO, terenkripsi at rest)

5.7 Architecture Style dan Rationale​

Pola Arsitektur: [ISI DI SINI -- contoh: Monolith / Modular Monolith / Microservices / Serverless / Event-Driven]

Gaya yang DipilihAlasan PemilihanAlternatif yang DipertimbangkanTrade-off
[ISI DI SINI][ISI DI SINI -- hubungkan ke driver][ISI DI SINI][ISI DI SINI]

CONTOH:

Gaya yang DipilihAlasan PemilihanAlternatif yang DipertimbangkanTrade-off
Modular Monolith (Clean Architecture)Tim kecil (8 dev), deployment sederhana, shared DB mengurangi kompleksitas. Mendukung OBJ-001 (digitalisasi) tanpa overhead microservices.Microservices: independent scaling per modul tapi overhead infra + observability terlalu tinggi untuk tim 8 orang. Monolith tanpa modularity: lebih cepat tapi sulit di-scale dan di-maintain.Scaling terbatas per-modul (mitigasi: K8s HPA per replica set). Refactor ke microservices jika volume > 50K txn/hari.

5.8 Technology Stack​

5.8.1 Backend​

LayerTeknologiVersiTujuanAlasan Pemilihan
Bahasa[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Framework[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Database[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Cache[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Message Queue[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Object Storage[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Identity[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Observability[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

LayerTeknologiVersiTujuanAlasan Pemilihan
BahasaGo1.22+Backend languagePerforma tinggi, concurrency native, static binary, tim sudah berpengalaman
FrameworkFiber (v2)2.52+HTTP frameworkExpress-like API, performa tinggi (fasthttp), middleware ecosystem
DatabaseSQL Server2019+Primary data storeKlien sudah memiliki lisensi dan DBA; mendukung transaction isolation dan JSON
CacheRedis7.xSession store, query cacheIn-memory, pub/sub untuk invalidation, cluster-ready
Message Queue— (Fase 1)—Async processingFase 1: goroutine-based async. Fase 2: RabbitMQ/NATS jika volume meningkat
Object StorageMinIOlatestFile/document storageS3-compatible, on-premises, no cloud dependency
IdentityUIM Next-G (external)—SSO, authenticationKlien's existing identity provider; OAuth 2.0 + JWT
ObservabilityELK Stack + Prometheus—Logging + metricsCentralized logging (ELK), metrics/alerting (Prometheus + Grafana)

5.8.2 Frontend​

LayerTeknologiVersiTujuanAlasan Pemilihan
Framework[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
State Management[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
UI Library[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
HTTP Client[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Build Tool[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

LayerTeknologiVersiTujuanAlasan Pemilihan
FrameworkReact18.xUI frameworkComponent-based, ecosystem matang, tim berpengalaman
State ManagementReact Query + Zustand5.x / 4.xServer state + client stateReact Query untuk API caching/sync; Zustand untuk UI state minimal
UI Libraryshadcn/ui + Tailwind CSSlatestComponent library + stylingCustomizable, accessible, utility-first CSS
HTTP ClientAxios1.xAPI callsInterceptors untuk auth token, timeout, retry
Build ToolVite5.xBuild & dev serverHMR cepat, ESBuild-based, tree-shaking

5.8.3 Infrastructure​

LayerTeknologiVersiTujuanKeterangan
Server / Cloud[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Container[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Reverse Proxy[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
CI/CD[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Monitoring[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

LayerTeknologiVersiTujuanKeterangan
ServerOn-premises (VM)—Application hostingKlien requirement: data tidak boleh di cloud publik
ContainerDocker + Kubernetes1.28+Orchestration, scalingHPA untuk auto-scale, rolling update zero-downtime
Reverse ProxyNginx1.25+SSL termination, routing, rate limitingReverse proxy + static file serving untuk FE
CI/CDGitLab CI—Build, test, deploy pipelineSelf-hosted GitLab, Docker-in-Docker runners
MonitoringPrometheus + Grafana—Metrics, alerting, dashboardsPrometheus scrape, Grafana visualization, AlertManager

5.9 Architecture Decision Records (ADR)​

TIPS: Setiap keputusan arsitektur signifikan harus dicatat. ADR membantu tim memahami MENGAPA suatu keputusan dibuat, bukan hanya APA yang diputuskan.

ADR Index​

ADR IDJudulStatusTanggalLokasi
ADR-001[ISI DI SINI]Proposed / Accepted / Superseded[ISI DI SINI][ISI DI SINI]

CONTOH:

ADR IDJudulStatusTanggalLokasi
ADR-001Modular Monolith over MicroservicesAccepted15/01/2026§5.9 / /docs/adr/001-modular-monolith.md
ADR-002SQL Server over PostgreSQLAccepted15/01/2026§5.9 / /docs/adr/002-sql-server.md
ADR-003Casbin RBAC over custom permissionAccepted20/01/2026§5.9 / /docs/adr/003-casbin-rbac.md
ADR-004SPA only, no SSRAccepted20/01/2026§5.9 / /docs/adr/004-spa-no-ssr.md
ADR-005Goroutine async over message queue (Fase 1)Accepted22/01/2026§5.9 / /docs/adr/005-goroutine-async.md

ADR-001: [ISI DI SINI -- Judul Keputusan]​

AspekDetail
StatusProposed / Accepted / Deprecated / Superseded / Rejected
Tanggal[ISI DI SINI]
Konteks[ISI DI SINI -- Masalah, driver, dan constraint yang memerlukan keputusan]
Keputusan[ISI DI SINI -- Keputusan yang diambil]
Opsi yang Dipertimbangkan[ISI DI SINI -- Opsi lain dan evaluasinya]
Konsekuensi[ISI DI SINI -- Positif, negatif, risiko, dan follow-up]
Dampak Compliance / Security[ISI DI SINI -- Dampak terhadap kepatuhan dan keamanan]
Diputuskan Oleh[ISI DI SINI]
Supersedes / Superseded By[ISI DI SINI -- ADR ID terkait, jika ada]

[Tambahkan ADR sesuai kebutuhan.]

CONTOH:

ADR-001: Modular Monolith over Microservices​

AspekDetail
StatusAccepted
Tanggal15/01/2026
KonteksTim 8 developer, timeline 6 bulan, klien belum punya container orchestration matang. Perlu arsitektur yang scalable tapi deployable sederhana.
KeputusanModular Monolith dengan Clean Architecture (Handler → Service → Repository). Setiap modul memiliki boundary yang jelas, tapi di-deploy sebagai satu binary.
Opsi yang Dipertimbangkan(1) Pure Microservices: independent scaling, independent deploy. Ditolak: overhead infra terlalu tinggi untuk tim kecil, observability kompleks. (2) Monolith tanpa modularity: lebih cepat tapi sulit dimaintain dan di-refactor.
Konsekuensi(+) Deploy sederhana, shared DB, debugging lebih mudah. (-) Scaling per-modul tidak bisa independen. (-) Harus refactor jika volume > 50K txn/hari.
Dampak Compliance / SecurityTidak ada dampak negatif — security controls (auth, RBAC, audit) tetap bisa diterapkan di module boundary.
Diputuskan OlehTech Lead + Architect
Supersedes / Superseded By—

6. High-Level Design​

DEV -- Bagian ini mendeskripsikan bagaimana sistem dipecah menjadi komponen/modul dan bagaimana mereka berinteraksi.

6.1 Component Inventory​

Component IDNamaTipeOwnerTanggung Jawab UtamaCriticality
CMP-001[ISI DI SINI]Service / Module / Job / Client[ISI DI SINI][ISI DI SINI]H / M / L
CMP-002[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Component IDNamaTipeOwnerTanggung Jawab UtamaCriticality
CMP-001Auth ServiceModuleBackend TeamLogin, logout, refresh token, manajemen sessionH
CMP-002Payment ModuleModuleBackend TeamPengajuan, approval workflow, pencairanH
CMP-003Reporting ModuleModuleBackend TeamAgregasi dashboard, pembuatan laporan, export PDFH
CMP-004Admin ModuleModuleBackend TeamCRUD master data, manajemen user, penugasan roleM
CMP-005Notification ServiceShared ServiceBackend TeamNotifikasi email, notifikasi in-appM
CMP-006Audit ServiceShared ServiceBackend TeamPencatatan audit immutable, query audit trailH
CMP-007File ServiceShared ServiceBackend TeamUpload, download, scan virus, integrasi MinIOM
CMP-008Frontend SPAClientFrontend TeamRendering UI, penanganan form, konsumsi APIH

6.2 Dependency Matrix​

ConsumerProviderTipe DependensiStartup RequiredEfek KegagalanFallback
[ISI DI SINI][ISI DI SINI]Sync / Async / Data / LibraryY/N[ISI DI SINI][ISI DI SINI]

CONTOH:

ConsumerProviderTipe DependensiStartup RequiredEfek KegagalanFallback
Payment ModuleAuth ServiceSync (middleware)YaSemua request gagal 401— (blocking)
Payment ModuleNotification ServiceAsync (goroutine)TidakNotifikasi tidak terkirimAntrikan + retry 3x
Payment ModuleAudit ServiceAsync (goroutine)TidakAudit log tertundaBuffer + tulis batch
Reporting ModuleDatabaseSync (query)YaDashboard kosongSajikan cache stale 5 menit
Auth ServiceUIM Next-G (eksternal)Sync (HTTP)YaLogin tidak bisa— (blocking, kritis)
File ServiceMinIO (eksternal)Sync (S3 API)TidakUpload/download gagalPesan error + retry
Frontend SPABackend APISync (HTTP)YaUI tidak berfungsiTampilan error + indikator offline

6.3 Layer Architecture​

TIPS: Definisikan layer dan aturan dependensi antar-layer. Aturan ini harus dipatuhi selama implementasi.

LayerTanggung JawabBoleh MengaksesTidak Boleh Mengakses
Presentation (Handler/Controller)Parsing request, response formattingServiceRepository, Database langsung
Service (Business Logic)Validasi bisnis, orkestrasiRepository, HelperDatabase langsung, HTTP framework
Repository (Data Access)Query database, mapping dataDatabaseService, Handler
Domain (Entity/Model)Definisi struktur data--Semua (entity adalah data, bukan logic)

Aturan Dependensi:

  • Dependensi mengalir satu arah: Presentation -> Service -> Repository -> Database
  • Layer yang lebih tinggi TIDAK BOLEH diimpor oleh layer yang lebih rendah
  • Shared utilities (helper, constants) boleh diakses oleh semua layer
  • Cross-module communication: melalui service layer, BUKAN langsung ke repository module lain

6.4 Cross-Cutting Concerns​

Aspek yang melintas semua module/layer:

ConcernPendekatanImplementasi
Authentication[ISI DI SINI -- contoh: Middleware JWT][ISI DI SINI]
Authorization[ISI DI SINI -- contoh: Casbin RBAC][ISI DI SINI]
Logging[ISI DI SINI -- contoh: Structured JSON log][ISI DI SINI]
Error Handling[ISI DI SINI -- contoh: Centralized error response][ISI DI SINI]
Validation[ISI DI SINI -- contoh: DTO validation + business rule][ISI DI SINI]
Audit Trail[ISI DI SINI -- contoh: Async goroutine post-commit][ISI DI SINI]
Caching[ISI DI SINI -- contoh: Redis/in-memory per endpoint][ISI DI SINI]
Correlation/Tracing[ISI DI SINI -- contoh: X-Correlation-ID header propagation][ISI DI SINI]

CONTOH:

ConcernPendekatanImplementasi
AuthenticationJWT middleware — validasi token di setiap requestmiddleware/auth.go — ekstrak token dari httpOnly cookie, verifikasi dengan UIM public key
AuthorizationCasbin RBAC — policy-as-config, diterapkan di level handlermiddleware/casbin.go — cek (user, resource, action) sebelum handler dieksekusi
LoggingStructured JSON log dengan correlation IDpkg/logger/logger.go — zerolog, auto-inject request_id, user_id, latency
Error HandlingErrorHandler terpusat di konfigurasi Fibermain.go ErrorHandler — 4xx diteruskan, 5xx disanitasi + di-log, format RFC 9457
ValidationValidasi DTO (struct tags) + validasi business rule (service layer)Handler: validator.Struct(dto). Service: pengecekan business rule
Audit TrailAsync goroutine post-commit — fire-and-forget dengan retrypkg/audit/audit.go — buffered channel, tulis batch setiap 5 detik atau 100 event
CachingRedis — cache per-endpoint dengan invalidasi saat mutasipkg/cache/cache.go — cache key = {module}:{entity}:{id}, TTL 5 menit, invalidasi saat CUD
Correlation/TracingHeader X-Correlation-ID — di-generate jika belum ada, dipropagasi ke semua panggilan downstreamMiddleware generate UUID, inject ke context, semua log/panggilan eksternal menyertakannya

7. Data Design​

DEV BA -- Data model adalah fondasi sistem. Perubahan di sini berdampak luas. Review dengan teliti.

7.1 Data Domain dan Ownership​

Data DomainSystem of RecordOwnerStewardConsumersClassification
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Data DomainSystem of RecordOwnerStewardConsumersClassification
Payment TransactionsPayment Module (DB)FinanceTech LeadReporting, Audit, DWHConfidential
Employee DataHCS (external)HRIT KlienAuth, Payment (lookup)Restricted
Master Data (Vendor, GL)Admin Module (DB)FinanceBAPayment, ReportingInternal
Audit LogsAudit Service (DB)ComplianceSecurity LeadAuditor, SecurityRestricted
Uploaded DocumentsMinIO (object store)FinanceDevOpsPayment, ReportingConfidential

7.2 Entity Relationship Diagram​

[ISI DI SINI -- Sertakan ERD (link ke diagram tool, Mermaid syntax, atau deskripsi tekstual). ERD harus mencakup seluruh entitas utama dan relasinya.]

Contoh (Mermaid syntax):
erDiagram
User ||--o{ Document : creates
User ||--o{ Permission : has
Document ||--o{ DocumentVersion : has
Document }o--|| Category : belongs_to

7.3 Physical Data Model​

TIPS: Untuk setiap tabel, dokumentasikan: nama kolom, tipe data, constraint, dan keterangan. Ini menjadi referensi utama saat development.

7.3.1 [ISI DI SINI -- Nama Tabel 1]​

Tujuan: [ISI DI SINI] Estimated Volume: [ISI DI SINI -- jumlah rows / growth rate] Partitioning: [ISI DI SINI -- strategy jika diperlukan]

KolomTipe DataNullableDefaultConstraintKeterangan
IdUNIQUEIDENTIFIERNONEWID()PKPrimary key
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
CreatedAtDATETIME2NOSYSDATETIME()--Waktu pembuatan
CreatedByUNIQUEIDENTIFIERNO--FK -> User.IdPembuat record
UpdatedAtDATETIME2YESNULL--Waktu terakhir diubah
UpdatedByUNIQUEIDENTIFIERYESNULLFK -> User.IdPengubah terakhir
DeletedAtDATETIME2YESNULL--Soft delete marker

Index:

Nama IndexKolomTipeKeterangan
IX_[Tabel]_[Kolom][ISI DI SINI]Non-clustered[ISI DI SINI]
UQ_[Tabel]_[Kolom][ISI DI SINI]Unique[ISI DI SINI]

[Ulangi untuk setiap tabel.]

CONTOH:

7.3.1 Payments​

Tujuan: Menyimpan data pengajuan pembayaran operasional Estimated Volume: 10.000 rows/tahun, ~50 rows/hari kerja, growth 30%/tahun Partitioning: Tidak diperlukan di Fase 1 (volume < 100K). Evaluasi partitioning by CreatedAt jika > 500K rows.

KolomTipe DataNullableDefaultConstraintKeterangan
IdUNIQUEIDENTIFIERNONEWID()PKPrimary key
NomorPengajuanVARCHAR(20)NO—UNIQUEFormat: PAY-[UNIT]-[YYYY]-[NNNN]
PemohonIdUNIQUEIDENTIFIERNO—FK → Users.IdUser yang membuat pengajuan
VendorIdUNIQUEIDENTIFIERNO—FK → Vendors.IdVendor penerima pembayaran
NominalDECIMAL(15,2)NO—CHECK > 0Dalam IDR
KategoriVARCHAR(50)NO——Kategori biaya (Operasional, Perjalanan Dinas, dll.)
StatusVARCHAR(20)NO'Draft'—Draft / Submitted / Approved / Rejected / Paid / Cancelled
TanggalJatuhTempoDATENO——Batas waktu pembayaran
CreatedAtDATETIME2NOSYSDATETIME()—Waktu pembuatan
CreatedByUNIQUEIDENTIFIERNO—FK → Users.IdPembuat record
UpdatedAtDATETIME2YESNULL—Waktu terakhir diubah
DeletedAtDATETIME2YESNULL—Soft delete marker

Index:

Nama IndexKolomTipeKeterangan
IX_Payments_Status_CreatedAtStatus, CreatedAt DESCNon-clusteredList query: filter by status, sort by newest
IX_Payments_PemohonIdPemohonIdNon-clustered"Pengajuan Saya" query
IX_Payments_VendorIdVendorIdNon-clusteredLookup by vendor
UQ_Payments_NomorPengajuanNomorPengajuanUniqueEnforce uniqueness

7.4 Data Dictionary​

TIPS: Berikan definisi bisnis untuk setiap field penting. Field tanpa definisi menyebabkan asumsi yang berbeda di tim.

Entity.FieldTipe / LengthRequiredDefinisi BisnisValidasi / DomainSensitif
[ISI DI SINI][ISI DI SINI]Y/N[ISI DI SINI][ISI DI SINI]Y/N + Class

CONTOH:

Entity.FieldTipe / LengthRequiredDefinisi BisnisValidasi / DomainSensitif
Payment.NomorPengajuanVARCHAR(20)YNomor unik pengajuan, auto-generated format PAY-[UNIT]-[YYYY]-[NNNN]Unique, auto-increment per tahun per unitN
Payment.NominalDECIMAL(15,2)YJumlah pembayaran yang diajukan dalam IDR> 0, max 999.999.999.999,99. Tidak boleh > sisa anggaranN
Payment.StatusVARCHAR(20)YStatus lifecycle pengajuanDomain: Draft, Submitted, Approved, Rejected, Paid, CancelledN
Vendor.NPWPVARCHAR(20)YNomor Pokok Wajib Pajak vendorFormat 15 digit, validasi check digitY (PII)
User.EmailVARCHAR(255)YAlamat email karyawan, digunakan untuk login dan notifikasiRFC 5322 format, uniqueY (PII)
AuditLog.OldValueNVARCHAR(MAX)NSnapshot data sebelum perubahan (JSON)JSON validY (may contain PII)

7.5 Data Integrity, Transaksi, dan Concurrency​

ConcernKeputusan Desain
Transaction boundaries[ISI DI SINI -- Unit of work / distributed transaction avoidance]
Referential integrity[ISI DI SINI -- Database constraints / application enforcement]
Optimistic / pessimistic concurrency[ISI DI SINI -- Strategy + version field / lock]
Idempotency[ISI DI SINI -- Key / unique constraint / deduplication window]
Consistency model[ISI DI SINI -- Strong / eventual / read-your-writes]
Time handling[ISI DI SINI -- UTC storage, timezone display, clock source]

CONTOH:

ConcernKeputusan Desain
Transaction boundariesSatu transaksi per HTTP request (unit of work pattern). Distributed transaction dihindari — gunakan saga/compensating action jika lintas service.
Referential integrityFK constraint di database level untuk data kritis (User, Payment). Application-level check untuk soft-reference (audit log ke entity).
Optimistic concurrencyUpdatedAt field sebagai version — UPDATE WHERE UpdatedAt = @expected. 409 Conflict jika stale.
IdempotencyPOST /payments: Idempotency-Key header (UUID), dedup window 24 jam, stored in Redis.
Consistency modelStrong consistency untuk transactional data (ACID). Eventual consistency untuk audit log dan notification (async goroutine).
Time handlingUTC storage di semua kolom DATETIME2. Display di frontend dalam WIB (UTC+7). Server clock sync via NTP.

7.6 Data Flow​

TIPS: Dokumentasikan bagaimana data mengalir melalui sistem untuk flow utama.

Flow: [ISI DI SINI -- Nama Flow, contoh: "Create Document"]​

User Input (Browser)
|
v
Frontend (Form -> API call)
| Body: { title, category, files[] }
v
Backend Handler (Parse + Validate)
|
v
Service (Business Logic)
| - Generate UUID
| - Validate permission
| - Begin transaction
v
Repository (SQL Insert)
| INSERT INTO Document (Id, Title, ...)
v
Database (Persist)
|
v (post-commit)
Side Effects
+-- Notification (async)
+-- Audit Trail (async)
+-- File Upload to Storage (sync within tx)

7.7 Data Migration dan Conversion​

ObjectSourceTargetTransformationValidasi / RekonsiliasiRollback / Re-run
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

ObjectSourceTargetTransformationValidasi / RekonsiliasiRollback / Re-run
Master VendorCSV export dari sistem legacyVendors table (SQL Server)Map legacy vendor_code → UUID, normalize NPWP format, trim whitespaceRow count match, NPWP format validation, no duplicate namesTruncate + re-import (idempotent, no FK dependents at migration time)
Master GL CodesExcel dari FinanceGLCodes tableMap legacy GL number → new format, validate against chart of accountsRow count + GL sum validationTruncate + re-import
User accountsHCS API (employee data)Users tableMap NIP → UserId, extract KodeUnitKerja, assign default role (Operator)NIP uniqueness check, unit kerja exists in SPGUnitOrganisasiSoft delete all + re-sync (preserves audit trail)
Historical transactionsNot migrated (Fase 1)———N/A — legacy system remains accessible for historical queries

Aturan Migrasi:

  • Setiap perubahan schema dalam bentuk migration file bernomor urut
  • Migration yang sudah di-apply di production TIDAK BOLEH diubah
  • Rollback script wajib di-test di staging sebelum apply ke production
  • Data migration (transform data) terpisah dari schema migration (alter table)
  • Tools: [ISI DI SINI -- contoh: Manual SQL scripts / Flyway / golang-migrate]
  • Naming: [ISI DI SINI -- contoh: YYYYMMDD_HHMMSS_description.sql]

7.8 Data Lifecycle, Retention, dan Disposal​

Data SetSumberRetensi AktifArchiveDeletion / AnonymizationLegal Hold
Transactional data[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Audit logs[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
User data[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Uploaded files[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Data SetSumberRetensi AktifArchiveDeletion / AnonymizationLegal Hold
Payment transactionsPayment Module2 tahunCold storage 5 tahunHapus setelah 7 tahunSuspend deletion jika ada audit/litigasi aktif
Audit logsAudit Service3 tahun (Elasticsearch)S3/MinIO cold 5 tahunHapus setelah 8 tahunTidak boleh dihapus selama legal hold
User data (PII)Auth + HCS syncSelama akun aktif1 tahun setelah nonaktifAnonymize setelah 2 tahun nonaktif (UU PDP)Suspend jika data subject request pending
Uploaded filesMinIO2 tahunCompressed archive 5 tahunHapus setelah 7 tahunIkut parent transaction hold

7.9 Cache, Search, dan Derived Data​

StoreDataSource of TruthTTL / RefreshInvalidationConsistency Risk
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

StoreDataSource of TruthTTL / RefreshInvalidationConsistency Risk
Redis (query cache)Daftar payment per unit kerjaSQL Server (tabel Payment)TTL 5 menitInvalidasi saat CREATE/UPDATE/DELETE paymentData basi hingga 5 menit — dapat diterima untuk tampilan daftar
Redis (session)Session user + JWT claimsUIM Next-G (token)15 menit (access), 7 hari (refresh)Invalidasi saat logout, ganti password, ganti roleSession valid hingga TTL habis meskipun dicabut di IdP — mitigasi: TTL pendek
In-memory (lookup)Master data (vendor, kode GL)SQL Server (MasterData)30 menit, refresh saat startupReload penuh saat admin updateBasi hingga 30 menit — dapat diterima untuk data referensi

8. API & Interface Design​

DEV QA -- API contract adalah perjanjian antara frontend dan backend serta antar-service. Perubahan HARUS dikomunikasikan dan disetujui semua pihak.

8.1 API Standards​

AspekStandar
Style[ISI DI SINI -- REST / GraphQL / gRPC]
Versioning[ISI DI SINI -- contoh: URL path /api/v1/]
Authentication[ISI DI SINI -- contoh: JWT in httpOnly cookie]
Authorization[ISI DI SINI -- contoh: Scope / Role / Policy]
Content-Type[ISI DI SINI -- contoh: application/json]
Naming[ISI DI SINI -- contoh: kebab-case, plural nouns]
Correlation[ISI DI SINI -- contoh: X-Correlation-ID / traceparent]
Idempotency[ISI DI SINI -- aturan untuk mutating operations]
Error Model[ISI DI SINI -- contoh: RFC 9457 Problem Details / custom standard]
Rate Limiting[ISI DI SINI -- limits, headers, 429 behavior]
Timeout[ISI DI SINI -- client dan server timeout]

CONTOH:

AspekStandar
StyleRESTful (resource-oriented), payload JSON
VersioningURL path: /api/v1/payments, /api/v2/payments
AuthenticationJWT di httpOnly cookie (access token 15 menit, refresh 7 hari)
AuthorizationCasbin RBAC — middleware cek (user, resource, action) sebelum handler
Content-Typeapplication/json (request + response), multipart/form-data (upload file)
NamingURL kebab-case (/api/v1/payment-requests), field JSON camelCase
CorrelationHeader X-Correlation-ID — di-generate oleh Nginx jika belum ada, dipropagasi ke semua service
IdempotencyMutasi POST: header Idempotency-Key (UUID), deduplikasi via Redis (jendela 24 jam)
Error ModelStandar custom (lihat §8.2): { success, error: { code, message, details[] } }
Rate Limiting100 req/menit per user (API key), 1000 req/menit per IP. Respons 429 dengan header Retry-After
TimeoutClient: 10 dtk default, 30 dtk untuk laporan. Server: 30 dtk request timeout, 60 dtk untuk upload file

8.2 Standard Response Format​

Success (single resource):

{
"success": true,
"data": { ... }
}

Success (collection with pagination):

{
"success": true,
"data": [ ... ],
"meta": {
"page": 1,
"perPage": 10,
"total": 100,
"totalPages": 10
}
}

Error:

{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Deskripsi error yang user-friendly",
"details": [
{ "field": "email", "message": "Format email tidak valid" }
]
}
}

8.3 Endpoint Inventory​

TIPS: Daftar semua endpoint yang akan dibangun. Detail per-endpoint (request/response body) didokumentasikan di section 8.4 atau di API documentation tool (Swagger/Postman).

Module: [ISI DI SINI]​

MethodEndpointDeskripsiAuthPermissionPerformance Target
GET/api/v1/[resource]List allYesread[ISI DI SINI]
GET/api/v1/[resource]/:idGet by IDYesread[ISI DI SINI]
POST/api/v1/[resource]CreateYescreate[ISI DI SINI]
PUT/api/v1/[resource]/:idUpdateYesupdate[ISI DI SINI]
DELETE/api/v1/[resource]/:idDelete (soft)Yesdelete[ISI DI SINI]

[Ulangi untuk setiap module.]

CONTOH:

Module: Payment​

MethodEndpointDeskripsiAuthPermissionPerformance Target
GET/api/v1/paymentsList pengajuan (filter, pagination)Yespayment:readp95 < 500ms
GET/api/v1/payments/:idDetail pengajuan + approval historyYespayment:readp95 < 300ms
POST/api/v1/paymentsSubmit pengajuan baruYespayment:createp95 < 500ms
PUT/api/v1/payments/:idUpdate draft pengajuanYespayment:updatep95 < 500ms
DELETE/api/v1/payments/:idCancel pengajuan (soft delete)Yespayment:deletep95 < 300ms
POST/api/v1/payments/:id/approveApprove pengajuanYespayment:approvep95 < 400ms
POST/api/v1/payments/:id/rejectReject pengajuanYespayment:approvep95 < 400ms

Module: Admin​

MethodEndpointDeskripsiAuthPermissionPerformance Target
GET/api/v1/vendorsList vendor aktifYesadmin:readp95 < 300ms
POST/api/v1/vendorsCreate vendor baruYesadmin:createp95 < 300ms
GET/api/v1/usersList users + rolesYesadmin:userp95 < 300ms
PUT/api/v1/users/:id/roleAssign/change roleYesadmin:userp95 < 300ms

8.4 API Contract Detail​

TIPS: Untuk setiap endpoint yang kompleks, dokumentasikan contract detail di sini. Endpoint sederhana (CRUD standar) cukup di inventory di atas.

[METHOD] /api/v1/[endpoint]​

FieldSpecification
Operation ID[ISI DI SINI]
Purpose[ISI DI SINI]
Caller(s)[ISI DI SINI]
Authorization[ISI DI SINI]
Idempotency[ISI DI SINI]
Transaction Boundary[ISI DI SINI]
Side Effects / Events[ISI DI SINI]
Performance Target[ISI DI SINI]

Request:

ParameterLokasiTipeRequiredValidasiKeterangan
[ISI DI SINI]body/path/query/header[ISI DI SINI]Yes/No[ISI DI SINI][ISI DI SINI]

Response Success (200/201):

{
"success": true,
"data": {
"[field]": "[type] -- [keterangan]"
}
}

Response Error:

KondisiHTTP CodeError CodeMessage
[ISI DI SINI]400VALIDATION_ERROR[ISI DI SINI]
[ISI DI SINI]403FORBIDDEN[ISI DI SINI]
[ISI DI SINI]404NOT_FOUND[ISI DI SINI]
[ISI DI SINI]409CONFLICT[ISI DI SINI]
[ISI DI SINI]429RATE_LIMITED[ISI DI SINI]
[ISI DI SINI]503SERVICE_UNAVAILABLE[ISI DI SINI]

CONTOH:

POST /api/v1/payments​

FieldSpecification
Operation IDcreatePayment
PurposeSubmit pengajuan pembayaran operasional baru
Caller(s)Frontend SPA (halaman PaymentCreate)
AuthorizationRole: Operator. Casbin check: (user, payment, create)
IdempotencyHeader Idempotency-Key (UUID). Deduplikasi via Redis, jendela 24 jam. Duplikat mengembalikan 200 dengan payment yang sudah ada.
Transaction BoundarySatu transaksi DB: insert Payment + insert DocumentAttachment. Upload file ke MinIO di luar transaksi.
Side Effects / EventsPost-commit async: (1) Email notifikasi ke Approver L1, (2) Entri audit log
Performance Targetp95 < 500ms

Request:

ParameterLokasiTipeRequiredValidasiKeterangan
vendorIdbodyUUIDYaHarus ada di tabel Vendors (aktif)Vendor penerima
nominalbodynumberYa> 0, maks 999999999999.99Dalam IDR
kategoribodystringYaEnum: Operasional, PerjalananDinas, LainnyaKategori biaya
tanggalJatuhTempobodydate (YYYY-MM-DD)Ya>= hari ini + 3 hariBatas waktu
keteranganbodystringTidakMaks 500 karakterCatatan tambahan
filesbodyFile[]YaPDF/JPG/PNG, maks 10MB per file, maks 5 fileDokumen pendukung
Idempotency-KeyheaderUUIDYaFormat UUID validKunci deduplikasi

Response Success (201):

{
"success": true,
"data": {
"id": "uuid",
"nomorPengajuan": "PAY-PKU-2026-0042",
"status": "Submitted",
"createdAt": "2026-08-08T12:00:00Z"
}
}

Response Error:

KondisiHTTP CodeError CodeMessage
Nominal > sisa anggaran400BUDGET_EXCEEDED"Nominal melebihi sisa anggaran (sisa: Rp 50.000.000)"
User tidak punya permission create403FORBIDDEN"Anda tidak memiliki akses untuk membuat pengajuan"
Vendor tidak ditemukan / nonaktif404VENDOR_NOT_FOUND"Vendor tidak ditemukan atau sudah nonaktif"
Duplikat Idempotency-Key200—Mengembalikan payment yang sudah ada (idempotent)
Rate limit terlampaui429RATE_LIMITED"Terlalu banyak request. Coba lagi dalam 60 detik."
DB / MinIO tidak tersedia503SERVICE_UNAVAILABLE"Layanan sedang tidak tersedia. Silakan coba beberapa saat lagi."

8.5 Event dan Messaging Design​

TIPS: Untuk sistem yang menggunakan event-driven / message queue. Skip jika tidak relevan.

Event / TopicProducerConsumer(s)SchemaDeliveryRetention / DLQ
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]At-least-once / Lainnya[ISI DI SINI]

CONTOH:

Event / TopicProducerConsumer(s)SchemaDeliveryRetention / DLQ
payment.submittedPayment Service (goroutine post-commit)Notification Service, Audit Service{ paymentId, nomorPengajuan, pemohonId, nominal, approverId, timestamp }At-least-once (goroutine + retry)Buffer in-memory, retry 3x, kemudian log + alert
payment.approvedApproval ServiceNotification Service, Audit Service, Accounting Service{ paymentId, approverId, level, decision, timestamp }At-least-onceSama seperti di atas
user.role_changedAdmin ServiceAuth Service (invalidasi session), Audit Service{ userId, oldRole, newRole, changedBy, timestamp }At-least-onceSama seperti di atas

8.6 File, Batch, dan Data Exchange Interfaces​

InterfaceSchedule / TriggerTransportFormatValidasiRekonsiliasi
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

InterfaceSchedule / TriggerTransportFormatValidasiRekonsiliasi
Ekspor Harian DWHSetiap malam 02:00 WIB (cron)SFTP push ke server DWHCSV (UTF-8, comma-delimited, baris header)Cocokkan jumlah baris, file checksum, validasi schemaTim DWH konfirmasi penerimaan + jumlah baris sebelum 06:00 WIB
Impor Master VendorOn-demand (Admin memicu via UI)Upload file (CSV) → API endpointCSV (NamaVendor, NPWP, Alamat, Rekening, Bank)Validasi format, cek duplikat NPWP, cek field wajibLaporan impor: jumlah berhasil, dilewati, baris error
Laporan Bulanan PDFTanggal 1 setiap bulan 05:00 WIB (cron)Di-generate internal → MinIO → lampiran emailPDF (A4, landscape untuk tabel)Validasi template, cek kelengkapan dataFinance konfirmasi penerimaan dan review

8.7 External Integration Resilience​

DependencyTimeoutRetryCircuit BreakerFallbackRekonsiliasi
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

DependencyTimeoutRetryCircuit BreakerFallbackRekonsiliasi
UIM Next-G (SSO)5 dtk koneksi, 10 dtk baca2x dengan 1 dtk backoffBuka setelah 5 kegagalan dalam 30 dtk, half-open setelah 60 dtkKembalikan 503 "Layanan autentikasi tidak tersedia"Health check setiap 30 dtk
HCS (Data Karyawan)5 dtk koneksi, 10 dtk baca3x dengan exponential backoffBuka setelah 3 kegagalanSajikan dari cache lokal (basi 1 jam)Sinkronisasi penuh setiap malam
Email SMTP3 dtk koneksi, 10 dtk baca3x dengan interval 5 dtkTanpa circuit breakerAntrikan ke tabel retry, proses setiap 5 menitLaporan harian email gagal kirim
MinIO (Penyimpanan File)5 dtk koneksi, 30 dtk baca2xBuka setelah 5 kegagalanKembalikan error, jangan blokir transaksiHealth check endpoint
DWH (Data Warehouse)10 dtk koneksi, 60 dtk bacaTanpa retry (batch job)N/ALewati batch, retry jadwal berikutnyaRekonsiliasi jumlah baris

9. Detailed Component & Behavioral Design​

DEV -- Bagian ini mendetailkan desain internal setiap komponen/module dan behavioral design untuk flow kritis.

9.1 Critical Flow Inventory​

Flow IDFlow NameTriggerComponentsDiagram TypeRequirement IDs
FLOW-001[ISI DI SINI][ISI DI SINI][ISI DI SINI]Sequence / Activity / State[ISI DI SINI]

CONTOH:

Flow IDFlow NameTriggerComponentsDiagram TypeRequirement IDs
FLOW-001Submit Pengajuan PembayaranUser clicks SubmitFE → Auth middleware → Payment Handler → Payment Service → Repository → DB → Audit (async) → Notification (async)SequenceFR-PAY-001, FR-PAY-002
FLOW-002Multi-Level ApprovalApprover clicks Approve/RejectFE → Auth → Approval Handler → Approval Service → State Machine → Notification → AuditSequence + StateFR-PAY-003, BR-002, BR-003
FLOW-003User Login (SSO)User visits /loginFE → Backend → UIM Next-G (OAuth) → JWT issue → Redis sessionSequenceFR-AUTH-001
FLOW-004Dashboard Data LoadUser opens /dashboardFE → Backend → Redis cache check → DB aggregation query (if miss) → ResponseSequenceFR-RPT-001, NFR-PERF-001

9.2 Module: [ISI DI SINI -- Nama Module]​

9.2.1 Tanggung Jawab​

AspekDeskripsi
Purpose[ISI DI SINI -- Mengapa komponen ini ada]
Responsibilities[ISI DI SINI -- Tanggung jawab yang dimiliki]
Non-responsibilities[ISI DI SINI -- Batasan eksplisit, apa yang TIDAK dilakukan]
Deployment Unit[ISI DI SINI -- Process / Container / Function / Library]
Data Owned[ISI DI SINI -- Entity / tabel / topic / file yang dimiliki]

CONTOH:

AspekDeskripsi
PurposeMengelola seluruh lifecycle pengajuan pembayaran — dari draft hingga pencairan
ResponsibilitiesSubmit pengajuan, validasi budget, approval workflow (state machine), pencairan, tracking status, history
Non-responsibilitiesTIDAK mengelola master vendor (Admin Module). TIDAK mengirim notifikasi langsung (delegasi ke Notification Service). TIDAK menulis audit log langsung (delegasi ke Audit Service).
Deployment UnitModule dalam monolith binary — services/payment/
Data OwnedTables: Payments, PaymentApprovals, PaymentDocuments. Files: uploaded invoices di MinIO (/payments/{id}/)

9.2.2 Internal Structure​

[module-name]/
+-- handler.go <- HTTP handler (presentation layer)
+-- service.go <- Business logic
+-- repository.go <- Data access
+-- models.go <- Request/Response DTOs
+-- entities.go <- Domain entities
+-- constants.go <- Module-specific constants

9.2.3 Key Functions​

FunctionLayerInputOutputDeskripsi
[ISI DI SINI]Handler[ISI DI SINI][ISI DI SINI][ISI DI SINI]
[ISI DI SINI]Service[ISI DI SINI][ISI DI SINI][ISI DI SINI]
[ISI DI SINI]Repository[ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

FunctionLayerInputOutputDeskripsi
CreatePaymentHandler*fiber.Ctx (POST body: CreatePaymentDTO)201 + PaymentResponse / 4xx errorParsing request, validasi DTO, panggil service, kembalikan response
CreatePaymentServiceCreatePaymentDTO, userIdPayment, errorValidasi anggaran, generate nomor pengajuan, mulai TX, simpan, trigger async (audit + notifikasi)
ValidateBudgetServiceunitKerjaId, nominalerror (nil jika OK)Cek sisa anggaran unit kerja. Kembalikan error jika nominal > sisa anggaran.
ProcessApprovalServicepaymentId, approverId, decision, commentPayment (updated), errorTransisi state machine (Submitted→Approved/Rejected), validasi SoD, trigger notifikasi
InsertPaymentRepositoryPayment entityerrorINSERT INTO Payments (...) dalam transaksi
GetPaymentsByUnitRepositoryunitKerjaId, filters, pagination[]Payment, totalCount, errorSELECT terparameterisasi dengan filter + pagination

9.2.4 Processing Logic​

TIPS: Gunakan pseudocode hanya untuk logika yang tidak obvious. Jangan duplikasi source code standar.

[ISI DI SINI -- Pseudocode untuk business logic yang kompleks]

Contoh:
function processCommand(command):
validate(command)
ensureIdempotency(command.idempotencyKey)
begin transaction
load aggregate
apply business rules
persist changes
write outbox event
commit transaction
return result

9.2.5 State Transitions (jika ada)​

[State 1] --[trigger]--> [State 2] --[trigger]--> [State 3]
--[trigger]--> [State 4]
Current StateEvent / ConditionNext StateActionInvalid Transition Handling
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]Error / Ignore / Escalate

CONTOH (Payment State Machine):

Draft --[Submit]--> Submitted --[Approve L1]--> Approved_L1 --[Approve L2]--> Approved --[Disburse]--> Paid
| | |
+--[Reject]---> Rejected +--[Reject]---> Rejected +--[Cancel]--> Cancelled
|
+--[Cancel]---> Cancelled
Current StateEvent / ConditionNext StateActionInvalid Transition Handling
DraftUser klik Submit + validasi lolosSubmittedNotifikasi Approver L1, audit logError 400 jika validasi gagal
SubmittedApprover L1 menyetujuiApproved_L1Notifikasi Approver L2 (jika threshold), audit logError 403 jika bukan approver berwenang
SubmittedApprover menolakRejectedNotifikasi pemohon, audit logAbaikan jika sudah ditolak
Approved_L1Approver L2 menyetujuiApprovedNotifikasi Finance untuk pencairan, audit logError 403 jika bukan approver L2
ApprovedFinance mencairkanPaidCatat bukti pembayaran, audit logError jika sudah dibayar
Any (kecuali Paid)User membatalkanCancelledAudit logError jika status = Paid (tidak dapat dibatalkan)

9.2.6 Error Handling dan Recovery​

Failure ModeDetectionCaller ResponseRetry / RecoveryAlert
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Failure ModeDetectionCaller ResponseRetry / RecoveryAlert
Timeout koneksi DBSQL timeout error di repository503 "Layanan sementara tidak tersedia"Auto-retry 1x (refresh connection pool). Jika masih gagal, kembalikan 503.Alert jika > 3 kegagalan dalam 5 menit
Upload MinIO gagalS3 client error500 "Upload file gagal" — transaksi di-rollback (payment tidak tersimpan)Retry 2x dengan 1 dtk backoff. Jika masih gagal, kembalikan error.Alert jika > 5 kegagalan dalam 10 menit
Validasi token UIM gagalJWT verification error401 "Session berakhir"Tanpa retry — redirect ke loginAlert jika > 10 kegagalan auth per user dalam 30 menit (brute force)
Cek anggaran — tidak cukupBusiness rule: nominal > sisa anggaran400 "Nominal melebihi sisa anggaran"Tanpa retry — user harus mengurangi nominalTanpa alert (alur bisnis normal)
Pengiriman email notifikasi gagalSMTP errorPayment tetap tersimpan (side effect async). Email diantrikan untuk retry.Retry 3x dengan interval 5 dtk. Jika masih gagal, catat ke tabel failed_notifications.Alert jika > 10 email gagal kirim

9.2.7 Observability dan Acceptance Criteria​

Signal / CriterionName / StatementRequired ContextPurpose / VerificationRetention
Log[ISI DI SINI]Correlation ID, Actor, Result, LatencyTroubleshooting / Audit[ISI DI SINI]
Metric[ISI DI SINI]LabelsSLO / CapacityDashboard
Trace[ISI DI SINI]AttributesDependency analysisPlatform
Acceptance[ISI DI SINI]PreconditionTest / Analysis / ReviewTest ID

CONTOH:

Signal / CriterionName / StatementRequired ContextPurpose / VerificationRetention
Logpayment.createdcorrelation_id, user_id, payment_id, nominal, vendor_id, latency_msTroubleshooting + Audit trail3 tahun
Logpayment.approval.decidedcorrelation_id, approver_id, payment_id, decision (approve/reject), levelAudit trail5 tahun
Metricpayment_submissions_total (counter)Labels: status (success/error), unit_kerjaSLO tracking, capacity planningDashboard (Grafana)
Metricpayment_submission_duration_seconds (histogram)Labels: quantile (p50/p95/p99)Latency SLO verificationDashboard
TraceCreatePayment spanservice=payment, http.method=POST, http.status, db.durationDependency analysis, bottleneck identification7 hari
AcceptanceOperator dapat submit pengajuan lengkap dalam < 5 menitUser logged in, vendor exists, budget availableFunctional testTC-PAY-001

9.2.8 Dependencies​

Depends OnTipeUntuk Apa
[Module/Service lain]Internal[ISI DI SINI]
[External service]External[ISI DI SINI]

CONTOH:

Depends OnTipeUntuk Apa
Auth Service (middleware)InternalJWT validation, user context extraction
Admin Module (service call)InternalLookup vendor data, GL codes
Notification ServiceInternalSend approval notification email (async)
Audit ServiceInternalWrite audit trail entry (async)
File ServiceInternalUpload/download dokumen pendukung
UIM Next-GExternalToken validation (via Auth middleware)
MinIOExternalStore uploaded files (via File Service)

[Ulangi Bagian 9.X untuk setiap module.]

9.3 Business Rules dan Decision Tables​

Rule IDConditionDecision / ActionPrioritasError / Message
BR-001[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Rule IDConditionDecision / ActionPrioritasError / Message
BR-001Nominal pengajuan > sisa anggaran unit kerjaTolak submissionH"Nominal melebihi sisa anggaran (sisa: Rp X)"
BR-002Nominal > Rp 100 jutaRequire approval level 3 (Director)H— (routing rule)
BR-003Submitter == Approver (same user)Tolak — segregation of dutyH"Pemohon tidak boleh menjadi approver"
BR-004Approval pending > 2 hari kerjaAuto-escalate ke approver level berikutnya + alertMNotifikasi "Approval SLA terlewati"
BR-005Dokumen pendukung tidak di-uploadTolak submissionH"Dokumen pendukung wajib di-upload"

9.4 Algorithm Specification​

TIPS: Hanya untuk algoritma yang non-trivial. Tidak perlu untuk CRUD standar.

AtributSpesifikasi
Algoritma / Function[ISI DI SINI]
Purpose[ISI DI SINI]
Inputs[ISI DI SINI -- + preconditions]
Outputs[ISI DI SINI -- + postconditions]
Complexity target[ISI DI SINI -- Time / Space]
Edge cases[ISI DI SINI]
Fallback[ISI DI SINI]

CONTOH:

AtributSpesifikasi
Algoritma / FunctionDetermineApprovalRoute(payment) — menentukan chain approval berdasarkan nominal dan unit kerja
PurposeRouting pengajuan ke approver yang tepat berdasarkan threshold nominal dan hierarki organisasi
Inputspayment.Nominal, payment.UnitKerjaId, payment.KategoriId. Precondition: payment status = Submitted.
Outputs[]ApprovalStep { Level, ApproverId, Threshold }. Postcondition: minimal 1 step, maksimal 3 steps.
Complexity targetO(1) — lookup table, bukan iterasi. Max 3 levels hardcoded.
Edge cases(1) Nominal = 0 → reject sebelum routing. (2) Unit kerja tidak punya approver → escalate ke Admin. (3) Approver yang sama di L1 dan L2 → skip L2, langsung ke L3. (4) Approver sedang cuti → fallback ke backup approver.
FallbackJika routing gagal (approver tidak ditemukan untuk level manapun): reject submission dengan error "Tidak dapat menentukan approver. Hubungi administrator."

9.5 Scheduled dan Background Jobs​

JobSchedule / TriggerInputOutputIdempotencyFailure HandlingOwner
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

JobSchedule / TriggerInputOutputIdempotencyFailure HandlingOwner
DWH Data SyncNightly 02:00 WIBTransaksi hari ini dari DBCSV push ke DWH SFTPDedup by transaction_id + dateRetry 3x, alert jika gagal, skip hari iniDevOps
Approval SLA CheckEvery 30 min (cron)Pending approvals > SLA thresholdEscalation notificationIdempotent — skip jika sudah escalatedLog error, continue to nextBackend Team
Backup VerificationDaily 04:00 WIBLatest backup fileRestore test report (pass/fail)N/A — always runsAlert Security Lead jika restore failDevOps
Inactive Session CleanupEvery 1 hourSessions older than 8 hoursDeleted sessionsSafe — deletes by timestampLog count, continueBackend Team

9.6 Sequence Diagrams​

DEV QA -- Sequence diagram menunjukkan URUTAN interaksi antar-komponen untuk flow tertentu. Prioritaskan: critical journeys, multi-system flows, complex rules, security decisions, transactions, async processing, recovery paths.

Flow: [ISI DI SINI -- Nama Flow]​

[ISI DI SINI -- Sequence diagram dalam format teks/Mermaid, termasuk success, alternative, dan failure paths]

Contoh:
Browser Frontend Backend Database External
| | | | |
|-- Click ------>| | | |
| |-- POST /api -->| | |
| | |-- BEGIN TX --->| |
| | |-- INSERT ----->| |
| | |<-- OK ---------| |
| | |-- COMMIT ----->| |
| | | | |
| | |-- Send Email ---------------------->|
| | | | |
| |<-- 201 --------| | |
|<-- Toast ------| | | |

[Tambahkan sequence diagram untuk setiap flow kritis.]


10. Frontend Architecture​

DEV -- Bagian ini khusus untuk desain frontend. Skip jika proyek tidak memiliki frontend.

10.1 Application Structure​

src/
+-- components/
| +-- common/ <- Shared/reusable components
| +-- [module]/ <- Module-specific components
+-- pages/ <- Route-level components
+-- hooks/ <- Custom hooks
+-- services/ <- API call functions
+-- store/ <- State management
+-- types/ <- TypeScript definitions
+-- utils/ <- Pure utility functions
+-- constants/ <- App constants

10.2 Component Hierarchy​

TIPS: Dokumentasikan component tree untuk halaman/flow yang kompleks.

Contoh:
PageComponent
+-- HeaderSection
+-- FilterBar
| +-- SearchInput
| +-- DateRangePicker
| +-- StatusFilter
+-- DataTable
| +-- TableHeader
| +-- TableRow (per item)
| | +-- ActionButtons
| +-- Pagination
+-- CreateModal
+-- FormFields
+-- SubmitButton

10.3 State Management Design​

StateScopeStorageUpdate Trigger
User sessionGlobal[ISI DI SINI]Login/Logout
Server data (lists)Per-page[ISI DI SINI -- contoh: React Query]API fetch, mutation invalidation
Form stateLocal[ISI DI SINI -- contoh: React Hook Form]User input
UI state (modal, tab)LocaluseStateUser interaction

CONTOH:

StateScopeStorageUpdate Trigger
Session user (auth, profil)GlobalZustand store + httpOnly cookieLogin/Logout, refresh token
Daftar paymentPer-halamanReact Query (useQuery('payments'))Saat halaman dimuat, invalidasi setelah mutasi (create/update/delete payment)
Form paymentLocalReact Hook Form (useForm)Input user, reset saat submit/cancel
Buka/tutup modalLocaluseState(false)Klik tombol, tekan Escape
Tab aktifLocaluseState('details')Klik tab, sinkronisasi URL param

10.4 Routing Design​

RouteComponentAuth RequiredPermissionStates / Errors
/DashboardYes--[ISI DI SINI]
/[module][Module]ListYesreadLoading / Empty / Error / Success
/[module]/:id[Module]DetailYesread[ISI DI SINI]
/[module]/create[Module]CreateYescreate[ISI DI SINI]
/loginLoginNo--[ISI DI SINI]

CONTOH:

RouteComponentAuth RequiredPermissionStates / Errors
/DashboardYes—Loading (skeleton), Error (retry button), Success (widgets)
/paymentsPaymentListYespayment:readLoading, Empty ("Belum ada pengajuan"), Error, Success (table)
/payments/:idPaymentDetailYespayment:readLoading, 404 ("Pengajuan tidak ditemukan"), Success (detail + approval history)
/payments/createPaymentCreateYespayment:createForm (validation errors inline), Submitting (disabled button), Success (redirect to list)
/admin/usersUserManagementYesadmin:userLoading, Empty, Error, Success. 403 if no admin permission.
/loginLoginNo—Form, Submitting, Error ("Username atau password salah"), MFA prompt

10.5 UI Design References​

TIPS: Referensikan artefak UI/UX yang di-approve. Dokumentasikan behavior yang mempengaruhi desain teknis: validasi, state, navigasi, error, permission, accessibility, dan telemetry.

Screen / RoutePurposeRolesKey ComponentsAPI DependenciesStates / Errors
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]Loading / Empty / Error / Success

CONTOH:

Screen / RoutePurposeRolesKey ComponentsAPI DependenciesStates / Errors
/paymentsDaftar pengajuan pembayaran dengan filter dan paginationOperator, Approver, AdminFilterBar, DataTable, Pagination, CreateButtonGET /api/v1/payments (list), DELETE /api/v1/payments/:idLoading (skeleton table), Empty ("Belum ada pengajuan"), Error (retry), Success
/payments/createForm pengajuan pembayaran baruOperatorPaymentForm (wizard 4 step), VendorSelector, FileUpload, SubmitButtonPOST /api/v1/payments, GET /api/v1/vendors, GET /api/v1/gl-codesForm (inline validation), Submitting (disabled), Budget exceeded (error), Success (redirect)
/dashboardDashboard KPI keuanganManagement, AdminWidgetGrid (6 widgets), DateRangePicker, UnitKerjaFilterGET /api/v1/dashboard/summary, GET /api/v1/dashboard/chartsLoading (skeleton widgets), Error (per-widget retry), Success

11. Security & Privacy Design​

DEV QA SEC -- Security by design, bukan by afterthought. Desain kontrol keamanan yang threat-informed dan testable.

11.1 Security Context dan Trust Boundaries​

[ISI DI SINI -- Security data flow diagram dengan trust boundaries]

CONTOH:

Trust Boundaries:

╔═══════════════════════════════════════════════════════════╗
║ UNTRUSTED (Internet / User Device) ║
║ [Browser] ── user input, auth cookie ──┐ ║
╠═════════════════════════════════════════╪═══════════════╣
║ DMZ │ ║
║ [Nginx] ◄── HTTPS/TLS 1.3 ────────────┘ ║
║ WAF rules, rate limiting, SSL termination ║
╠═════════════════════════════════════════════════════════╣
║ TRUSTED (Internal Network / K8s cluster) ║
║ [Backend API] ── JWT validation, Casbin RBAC ║
║ │── [SQL Server] (TDE encrypted, PII fields) ║
║ │── [Redis] (sessions, cache — requirepass) ║
║ │── [MinIO] (files — SSE-S3 encrypted) ║
║ └── [Audit DB] (append-only, hash chain) ║
╠═════════════════════════════════════════════════════════╣
║ EXTERNAL (Third-party systems) ║
║ [UIM Next-G] ◄── HTTPS ── Backend (OAuth token flow) ║
║ [HCS] ◄── HTTPS ── Backend (employee lookup) ║
║ [SMTP] ◄── STARTTLS ── Backend (email notification) ║
╚═════════════════════════════════════════════════════════╝

Aset sensitif yang melintas boundary:
- Kredensial user: UNTRUSTED → DMZ (HTTPS) → TRUSTED (JWT cookie, tidak pernah di URL/log)
- PII (NIP, NPWP): hanya di TRUSTED (terenkripsi at rest, di-masking di log)
- Data audit: TRUSTED → TRUSTED (DB append-only, tidak pernah keluar ke UNTRUSTED)
- File: UNTRUSTED → DMZ → TRUSTED (scan virus sebelum disimpan, signed URL untuk download)

11.2 Threat Model​

TIPS: Identifikasi aset, penyerang, abuse case, dan threat menggunakan metode yang disetujui (STRIDE, dll).

Threat IDAsset / FlowSkenario ThreatImpact (C/I/A)Control(s)Residual Risk
THR-001[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Threat IDAsset / FlowSkenario ThreatImpact (C/I/A)Control(s)Residual Risk
THR-001Alur loginSerangan brute force passwordC: kredensial terkompromiRate limiting (5 percobaan/30 menit), account lockout, MFARendah — dimitigasi oleh lockout + MFA
THR-002API endpointAkses tidak sah melalui pencurian tokenC/I: kebocoran data, manipulasi datahttpOnly cookie, JWT berumur pendek (15 menit), rotasi refreshSedang — jendela session hijack masih ada
THR-003Upload fileUpload file berbahaya (webshell, virus)I/A: server terkompromiWhitelist tipe file, scan AV, penyimpanan terisolasi, tanpa permission eksekusiRendah
THR-004Audit logManipulasi catatan auditI: kegagalan kepatuhanPenyimpanan append-only, hash chain, kredensial DB terpisah, tanpa permission DELETERendah
THR-005DatabaseSQL injectionC/I: pencurian data, manipulasi dataHanya parameterized query (tanpa string concatenation), scan SASTRendah

11.3 Authentication Design​

Identity TypeAuthentication MethodCredential / TokenLifetimeRevocationMFA
End user[ISI DI SINI -- OIDC / SAML / Local][ISI DI SINI][ISI DI SINI][ISI DI SINI]Required / Conditional
Service[ISI DI SINI -- mTLS / Client Credentials][ISI DI SINI][ISI DI SINI][ISI DI SINI]N/A

CONTOH:

Identity TypeAuthentication MethodCredential / TokenLifetimeRevocationMFA
End userOAuth 2.0 via UIM Next-GJWT access token (httpOnly cookie) + refresh tokenAccess: 15 menit, Refresh: 7 hariEndpoint logout menghapus cookie + session Redis. Rotasi refresh setiap penggunaan.Wajib untuk role Approver + Admin
Service-to-serviceAPI key di header (X-API-Key)API key statis per serviceTanpa expiry (dirotasi manual)Pencabutan key via update konfigurasi + restartN/A
Batch jobService account dengan permission terbatasJWT diterbitkan saat job dimulaiSelama durasi eksekusi jobAuto-expire setelah job selesaiN/A

11.4 Authorization Design​

Role / PolicyPermitted ActionsData ScopeEnforcement PointApproval / Provisioning
Admin[ISI DI SINI][ISI DI SINI]UI / API / DB[ISI DI SINI]
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

Permission Matrix:

RoleModule AModule BModule C
AdminCRUDCRUDCRUD
ManagerCRURCRU
UserRRCR

CONTOH:

Role / PolicyPermitted ActionsData ScopeEnforcement PointApproval / Provisioning
System AdminCRUD semua modul, manajemen user, penugasan role, konfigurasiGlobal (semua data)API middleware (Casbin) + UI route guardPersetujuan IT Manager, review Security Lead
ApproverLihat + Setujui/Tolak payment di unit sendiriJurisdiksi: unit kerja sendiri (filter KodeUnitKerja)API (Casbin policy) + tombol disabled di UIPenunjukan VP/Kepala Divisi
OperatorBuat + Edit payment sendiri, Lihat payment sendiri + unitData sendiri (CreatedBy) + data unit (KodeUnitKerja)API (Casbin + cek kepemilikan di service)Penunjukan manajer unit
AuditorLihat semua data + audit log (read-only)Global read-onlyAPI (Casbin read-only policy)Penunjukan komite audit

Permission Matrix:

RolePaymentAdmin / Master DataReportingAudit LogUser Management
System AdminCRUDCRUDCRUDRCRUD
ApproverR + ApproveRR (own unit)——
OperatorCR (own) + R (unit)RR (own unit)——
AuditorR (all)R (all)R (all)R (all)—

11.5 Data Protection dan Cryptography​

Data StateProtectionAlgorithm / ProtocolKey OwnershipRotationException
In transit[ISI DI SINI -- TLS / mTLS][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
At rest[ISI DI SINI -- Encryption][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Application fields[ISI DI SINI -- Tokenization / Field Encryption][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

Data Protection per Kategori:

Data KategoriPerlindunganImplementasi
PasswordHash (irreversible)[ISI DI SINI -- bcrypt/argon2]
PII (nama, email, NIP)[ISI DI SINI][ISI DI SINI]
Token/Secret[ISI DI SINI][ISI DI SINI]
File upload[ISI DI SINI][ISI DI SINI]

CONTOH:

Data StateProtectionAlgorithm / ProtocolKey OwnershipRotationException
In transitEnkripsi TLSTLS 1.3 (min 1.2)Let's Encrypt / CA KlienAuto-renew (LE) / Tahunan (klien)Internal service-to-service: plain HTTP dalam K8s pod network (node yang sama)
At rest (DB)Transparent Data EncryptionAES-256 (SQL Server TDE)Hierarki key SQL ServerMaster key dirotasi tahunanTabel non-sensitif: TDE mencakup semua, tanpa exception field-level
Application fieldsEnkripsi field-levelAES-256-GCM via Go cryptoDikelola aplikasi, disimpan di K8s SecretDirotasi semi-tahunan dengan migrasi re-encryptionHanya diterapkan pada: NIK, NPWP, nomor rekening

Data Protection per Kategori:

Data KategoriPerlindunganImplementasi
PasswordHash (irreversible)bcrypt cost 12. Tidak pernah disimpan plaintext. Tidak pernah di-log.
PII (nama, email, NIP)Terenkripsi at rest (TDE) + di-masking di logMasking log: ir***@gmail.com. Respons API: nilai lengkap hanya untuk role berwenang.
Token/SecretTidak pernah disimpan di DB — hanya di Redis dengan TTLhttpOnly cookie (JWT), session Redis dengan TTL 15 menit. Refresh token: TTL 7 hari dengan rotasi.
File uploadTerenkripsi at rest di MinIOMinIO server-side encryption (SSE-S3). Scan virus sebelum disimpan. Download via signed URL (expiry 30 menit).

11.6 Secure Input, Output, dan File Handling​

Control AreaKeputusan DesainEnforcement PointVerifikasi
Input validation[ISI DI SINI -- Allowlist, type, length, range, format]Client + ServerTest / Scan
Output encoding[ISI DI SINI -- Context-specific encoding]Template / FrameworkTest
File upload[ISI DI SINI -- Type, size, AV scan, storage, download headers]Gateway / ServiceTest
Injection prevention[ISI DI SINI -- Parameterized query / safe API]Data accessSAST / Test

CONTOH:

Control AreaKeputusan DesainEnforcement PointVerifikasi
Validasi inputPendekatan allowlist: tipe terdefinisi, panjang maksimum, pola regex per field. Tolak field yang tidak dikenal.FE: Zod schema. BE Handler: validator.Struct(dto). BE Service: business rules.Unit test per aturan validasi + DAST scan
Output encodingReact otomatis escape output JSX (perlindungan XSS). Respons API: hanya JSON, tanpa rendering HTML.React framework (default). BE: hanya c.JSON(), tidak pernah c.SendString() dengan data user.SAST scan untuk output string mentah
Upload fileWhitelist: hanya PDF, JPG, PNG. Maks 10MB. Scan ClamAV sebelum disimpan. Content-Disposition: attachment saat download. Disimpan di MinIO (terisolasi, tanpa permission eksekusi).BE Handler: cek tipe + ukuran. File Service: scan AV. Nginx: download headers.Uji upload dengan file berbahaya (EICAR, polyglot)
Pencegahan injectionSemua query DB via parameterized statement (sqlx.NamedQuery / db.Query dengan ? params). Tanpa string concatenation. Tanpa raw SQL dari input user.Hanya di repository layer. Item checklist code review.SAST scan (gosec), code review manual

Mengacu pada TSG Aturan Umum Validasi Form (TSG-STD-VALIDASI).

LayerTujuanContoh
FrontendUX (immediate feedback)Required fields, format check, max length
Backend HandlerRequest integrityType parsing, required check, max size
Backend ServiceBusiness rulesPermission check, state validation, uniqueness
DatabaseData integrityNOT NULL, FK constraint, UNIQUE constraint

11.7 Secrets dan Configuration Security​

Secret / CredentialStorageAccessRotationExposure Prevention
[ISI DI SINI][ISI DI SINI -- Vault / KMS / Secret Manager][ISI DI SINI][ISI DI SINI]No code / log / image

CONTOH:

Secret / CredentialStorageAccessRotationExposure Prevention
DB connection stringK8s Secret (terenkripsi at rest)Di-mount sebagai env var di podDirotasi triwulananTidak di source code, tidak di log, tidak di container image
JWT signing keyK8s SecretDi-inject saat startupDirotasi semi-tahunan dengan overlap windowAsimetris (public key didistribusikan, private key dibatasi)
UIM Next-G API keyK8s SecretEnv varDikoordinasikan dengan IT klienTidak pernah di-log, di-masking di debug output
MinIO access keyK8s SecretEnv varDirotasi triwulananKredensial terpisah per environment
Redis passwordK8s SecretEnv varDirotasi triwulananrequirepass diaktifkan, tanpa default password

11.8 Security Logging dan Audit​

Audit EventActorObjectOutcomeRequired ContextRetention
[ISI DI SINI]User / Service[ISI DI SINI]Success / FailureIP, Correlation, Before/After[ISI DI SINI]

CONTOH:

Audit EventActorObjectOutcomeRequired ContextRetention
LoginUserSessionSuccess / FailureIP, user agent, MFA used, failure reason3 tahun
Create PaymentUserPayment #{id}SuccessIP, correlation ID, nominal, vendor5 tahun
Approve PaymentUserPayment #{id}Success / RejectIP, approval level, komentar, before/after status5 tahun
Change RoleAdminUser #{id}SuccessIP, old role, new role, approved by5 tahun
Export ReportUserReport #{type}SuccessIP, report type, date range, row count3 tahun
Delete RecordAdminEntity #{id}SuccessIP, entity type, full record snapshot (before)5 tahun

11.9 Privacy dan Personal Data​

Processing ActivityPersonal DataPurpose / Legal BasisAccessRetentionData Subject Rights
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Processing ActivityPersonal DataPurpose / Legal BasisAccessRetentionData Subject Rights
Employee authenticationEmail, NIPSystem access — legitimate interest + employment contractAuth Service onlyActive employment + 2 tahunAccess, correction
Payment processingNama pemohon, NIP, unit kerjaOperational necessity — internal financial processPayment Module, Reporting, Audit7 tahun (regulatory)Access, correction (not deletion — regulatory hold)
Audit loggingUser ID, IP, action, timestampsLegal obligation (POJK) + legitimate interestAudit Service, Security team8 tahunAccess only (no modification/deletion allowed)
Vendor data managementNama PIC vendor, email, NPWPContract performanceAdmin Module, Payment ModuleDuration of vendor relationship + 2 tahunAccess, correction, deletion (after retention)

11.10 Security Control Traceability​

Control IDSource StandardControl RequirementDesign SectionVerification Evidence
SEC-001[ISI DI SINI -- OWASP / Policy / NIST][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Control IDSource StandardControl RequirementDesign SectionVerification Evidence
SEC-001OWASP A03:2021 (Injection)Semua query DB harus menggunakan parameterized statement§6.4 (Validation), §7.5 (Integrity)Laporan SAST scan, checklist code review
SEC-002OWASP A07:2021 (Auth Failures)Account lockout setelah 5 percobaan gagal, MFA untuk role privileged§11.3 (Authentication)Functional test TC-AUTH-005
SEC-003UU PDP Art. 16Data pribadi terenkripsi at rest§11.5 (Data Protection)Verifikasi konfigurasi TDE, uji field encryption
SEC-004POJK Manajemen Risiko TIAudit trail immutable untuk semua transaksi keuangan§11.8 (Security Logging)Uji append-only storage, verifikasi hash chain
SEC-005ISO 27001 A.9.4Akses least privilege — RBAC diterapkan di API layer§11.4 (Authorization)Casbin policy test suite, penetration test

12. Non-Functional Requirements Design​

DEV QA -- Setiap NFR HARUS mengandung angka, kondisi, scope, dan metode pengukuran. NFR tanpa angka bukan NFR.

12.1 Performance dan Latency Budget​

TIPS: Untuk target end-to-end, alokasikan budget per komponen. Contoh: Untuk target 1 detik end-to-end, alokasikan 150ms client/network, 300ms API, 350ms database, 200ms contingency.

Transaksi / OperasiLoadTargetBudget AllocationTest Method
[ISI DI SINI][ISI DI SINI -- RPS / Users / Data Size]p50/p95/p99: [ISI DI SINI]Client: [X]ms, API: [X]ms, DB: [X]ms[ISI DI SINI]

CONTOH:

Transaksi / OperasiLoadTargetBudget AllocationTest Method
Submit pengajuan50 req/s peakp50: 200ms, p95: 500ms, p99: 1sClient: 50ms, API handler: 100ms, Service: 150ms, DB: 150ms, Contingency: 50msk6 load test
Dashboard load100 req/s peakp50: 500ms, p95: 2sClient: 100ms, API: 200ms, Aggregation query: 1.2s, Contingency: 500msk6 + Lighthouse
Approval action20 req/s peakp50: 150ms, p95: 400msClient: 30ms, API: 70ms, Service: 100ms, DB: 150ms, Contingency: 50msk6 load test
Report PDF export5 req/minp50: 5s, p95: 15sAPI: 500ms, Query: 3s, PDF render: 8s, Contingency: 3.5sManual + timer

12.2 Capacity dan Scalability​

Resource / DimensionBaselinePeakGrowthScaling TriggerScaling Method
Requests[ISI DI SINI][ISI DI SINI][ISI DI SINI] % / year[ISI DI SINI]Horizontal / Vertical
Data[ISI DI SINI][ISI DI SINI][ISI DI SINI] % / year[ISI DI SINI]Partition / Archive / Scale
Frontend[ISI DI SINI][ISI DI SINI]----CDN / Static hosting

CONTOH:

Resource / DimensionBaselinePeakGrowthScaling TriggerScaling Method
Requests (API)50 req/s200 req/s (akhir bulan closing)30% / yearHPA: CPU > 70% for 2 minHorizontal — add pods (max 6)
Data (DB)50 GB100 GB (2 tahun)~25 GB / yearStorage > 80% alertVertical — expand disk. Archive data > 2 tahun.
Data (MinIO files)100 GB500 GB (2 tahun)~200 GB / yearStorage > 70% alertExpand MinIO storage. Compress archived files.
FrontendStatic assets ~50 MBN/AMinimalN/ANginx serves static files. CDN jika perlu (future).

12.3 Availability, Reliability, dan Resilience​

Service / CapabilityAvailability SLOFailure ModeRedundancyRecoveryDegraded Mode
[ISI DI SINI][ISI DI SINI -- % / window][ISI DI SINI][ISI DI SINI]RTO: [ISI DI SINI][ISI DI SINI]

CONTOH:

Service / CapabilityAvailability SLOFailure ModeRedundancyRecoveryDegraded Mode
Backend API99.5% (jendela 30 hari)Pod crash, OOM3 replika, K8s auto-restartRTO: 30 dtk (auto-restart)Pod tersisa menangani traffic, HPA scale up
SQL Server99.5%Kegagalan disk, korupsiPrimary + read replicaRTO: 4 jam (failover), RPO: 1 jamRead replica melayani query baca, tulis diantrikan
Redis99% (dapat lebih rendah)Proses crashPrimary + replicaRTO: 5 menit (auto-restart, warm-up)Cache miss → fallback ke DB, sedikit lebih lambat
Login (UIM Next-G)Tergantung SLA eksternalUIM down— (eksternal)Tunggu pemulihanTampilkan "Login sementara tidak tersedia", session yang ada tetap valid

12.4 Business Continuity dan Disaster Recovery​

Asset / ServiceRTORPODR StrategyTest FrequencyOwner
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI -- Backup / Replica / Multi-site][ISI DI SINI][ISI DI SINI]

CONTOH:

Asset / ServiceRTORPODR StrategyTest FrequencyOwner
Backend API1 jam0 (stateless)K8s auto-restart + rolling deploy. Multi-replica.Chaos test triwulananDevOps
SQL Server4 jam1 jamPrimary-replica, incremental backup setiap 1 jam, full backup harianUji restore bulanan, uji failover triwulananDBA
Redis30 menitKehilangan dapat diterima (cache)Auto-restart, data dapat direkonstruksi dari DBUji restart bulananDevOps
MinIO4 jam24 jamBackup harian ke offsite storageUji restore triwulananDevOps
Sistem keseluruhan4 jam1 jamRunbook terdokumentasi RB-003, contact tree, matriks otoritas keputusanDR drill semi-tahunanPM + DevOps

12.5 Accessibility, Usability, dan Localization​

ConcernTarget / StandardKeputusan DesainVerifikasi
Accessibility[ISI DI SINI -- WCAG level / org standard][ISI DI SINI]Automated + Manual
Localization[ISI DI SINI -- Languages / Locales][ISI DI SINI]Test
Usability[ISI DI SINI -- Target / Heuristics][ISI DI SINI]Test

CONTOH:

ConcernTarget / StandardKeputusan DesainVerifikasi
AccessibilityWCAG 2.1 Level AAARIA labels, keyboard navigation, contrast >= 4.5:1, semantic HTMLaxe-core automated scan + manual screen reader test
LocalizationBahasa Indonesia (primary), English (reports/dashboard)i18n via react-intl, locale files per language, fallback to IDQA checklist per language
Usability80% pengguna baru dapat submit pengajuan tanpa pelatihanForm berbasis wizard, validasi inline, tooltip bantuan kontekstual, layout konsistenObservasi UAT, survei SUS (System Usability Scale) pasca-UAT

12.6 Maintainability dan Supportability​

KualitasMekanisme DesainMetric / ThresholdEvidence
Maintainability[ISI DI SINI -- Modularity, code quality, test coverage][ISI DI SINI]Pipeline / Review
Supportability[ISI DI SINI -- Diagnostics, runbooks, feature flags][ISI DI SINI]ORR
Portability[ISI DI SINI -- Container / standard runtime / abstraction][ISI DI SINI]Deployment test

CONTOH:

KualitasMekanisme DesainMetric / ThresholdEvidence
MaintainabilityModular monolith (batasan modul jelas), Clean Architecture layers, penamaan konsistenCyclomatic complexity < 15 per fungsi, test coverage >= 70%Laporan golangci-lint, laporan coverage di CI
SupportabilityStructured logging (JSON), health endpoint (/health/live, /health/ready), feature flag untuk rollout bertahapMTTR < 4 jam untuk SEV1, cakupan runbook 100% untuk flow kritisRunbook index (§14.7), incident post-mortem
PortabilityDocker container, tanpa dependensi host-specific, konfigurasi via env varDeploy ke K8s cluster manapun dengan manifest yang samaDiuji di dev + staging + production (3 environment berbeda)

13. Infrastructure & Deployment Design​

DEV -- Bagian ini mendeskripsikan bagaimana sistem di-deploy dan dioperasikan.

13.1 Environment Strategy​

EnvironmentPurposeData ClassTopologyDeployment TriggerAccess
DevelopmentPengembangan harianSynthetic / Masked[ISI DI SINI]On commit / ManualDev team
Test / SITIntegration testingSynthetic / Masked[ISI DI SINI]PipelineQA team
UATUser acceptance testingMasked / Approved[ISI DI SINI]Release candidateBusiness + QA
ProductionLive systemProduction[ISI DI SINI -- HA topology]Approval gateLeast privilege

13.2 Deployment Topology​

[ISI DI SINI -- Deployment diagram dengan network zones, nodes, ports, dan data stores.]

Contoh:
+-----------------------------------------------------+
| Internet |
+------------------------+----------------------------+
v
+-----------------+
| Reverse Proxy | (Nginx)
| + SSL Term |
+--------+--------+
|
+------------+------------+
v v v
+------------+ +--------+ +----------+
| Frontend | |Backend | | AI |
| (Static) | | API | | Service |
+------------+ +---+----+ +----+-----+
| |
v v
+-----------+ +----------+
| Database | | pgvector |
| (MSSQL) | | |
+-----------+ +----------+

13.3 Network dan Connectivity Matrix​

SourceDestinationProtocol / PortDirectionPurposeSecurity Control
[ISI DI SINI][ISI DI SINI][ISI DI SINI]Inbound / Outbound[ISI DI SINI]Firewall / mTLS / Private Link

CONTOH:

SourceDestinationProtocol / PortDirectionPurposeSecurity Control
Browser (User)Nginx (Reverse Proxy)HTTPS / 443InboundWeb application accessTLS 1.3, WAF rules
NginxBackend APIHTTP / 3000InternalRoute API requestsPrivate network, no external exposure
NginxFrontend StaticHTTP / 8080InternalServe SPA assetsPrivate network
Backend APISQL ServerTCP / 1433InternalDatabase queriesPrivate network, DB firewall, credential rotation
Backend APIRedisTCP / 6379InternalCache + sessionPrivate network, requirepass
Backend APIMinIOHTTP / 9000InternalFile storagePrivate network, access key + secret key
Backend APIUIM Next-GHTTPS / 443OutboundSSO token validationTLS 1.3, API key
Backend APISMTP ServerTCP / 587OutboundEmail notificationSTARTTLS, SMTP auth

13.4 Infrastructure Resource Specification​

ResourceEnvironmentSizing (CPU/Memory)HA / ReplicasStorageAutoscaling
[ISI DI SINI]Production[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

ResourceEnvironmentSizing (CPU/Memory)HA / ReplicasStorageAutoscaling
Backend APIProduction4 vCPU, 8GB RAM3 replicas (min 2)—HPA: CPU > 70% → scale up, max 6
Frontend (Nginx)Production1 vCPU, 1GB RAM2 replicas10GB (static assets)—
SQL ServerProduction8 vCPU, 32GB RAMPrimary + 1 read replica500GB SSD (RAID 10)Vertical only
RedisProduction2 vCPU, 4GB RAMPrimary + 1 replica10GB—
MinIOProduction2 vCPU, 4GB RAM1 instance1TBMonitor, manual expand
ELK StackProduction4 vCPU, 16GB RAM (ES x3)3-node cluster500GB—
Prometheus + GrafanaProduction2 vCPU, 4GB RAM1 instance100GB—

13.5 Configuration Management​

Configuration ItemSource of TruthScopeSecretChange MethodValidation
[ISI DI SINI][ISI DI SINI -- Repo / Config Service]Env / Tenant / GlobalY/NPR / PipelineSchema / Test

CONTOH:

Configuration ItemSource of TruthScopeSecretChange MethodValidation
DB connection stringK8s SecretPer-envYPR DevOps + pipeline deployUji koneksi saat startup
Feature flagFile konfigurasi di repo (config/features.json)Per-envNPR + merge ke branchValidasi schema di CI
CORS allowed originsKonfigurasi NginxPer-envNPR DevOpsSmoke test pasca-deploy
Threshold rate limitFile konfigurasi (config/rate-limit.json)GlobalNPR + mergeUnit test
Casbin policyFile CSV di repo (config/casbin_policy.csv)GlobalNPR + review oleh Security LeadPolicy test suite
Log levelEnv var (LOG_LEVEL)Per-envNUpdate K8s ConfigMapPerubahan runtime, tanpa restart

13.6 Deployment dan Release Strategy​

StageEntry CriteriaActivityExit CriteriaRollback Trigger
Build[ISI DI SINI]Compile, test, package, signArtifact + evidenceFailure
Deploy[ISI DI SINI][ISI DI SINI -- Blue/Green / Canary / Rolling]HealthySLO / Error rate
VerifyDeployedSmoke / Synthetic / ObserveAcceptedThreshold breach

CONTOH:

StageEntry CriteriaActivityExit CriteriaRollback Trigger
BuildKode sudah merge ke branch staging, CI pipeline hijaugo build, npm run build, build Docker image + tag (git SHA), push ke registryImage di registry, artefak build ditandatanganiBuild gagal → perbaiki kode
Deploy ke StagingBuild berhasil, environment staging tersediaRolling update via kubectl apply — 1 pod per waktu, cek readiness probeSemua pod sehat, /health/ready mengembalikan 200Pod gagal readiness selama > 2 menit
Verifikasi StagingSudah di-deploy ke stagingSuite smoke test otomatis (10 flow kritis), pengujian manual QA (3 hari)Smoke test 100% pass, sign-off QASmoke test gagal → rollback staging
Deploy ke ProductionStaging terverifikasi, persetujuan PM + Tech LeadRolling update — sama dengan staging. Pantau error rate + latency selama 30 menit pasca-deployError rate < 0.5%, latency p95 < 500ms selama 30 menitError rate > 2% atau latency p95 > 1 dtk selama 5 menit → rollback otomatis

13.7 Database Deployment dan Schema Change​

Change TypeMethodCompatibility RuleRollback / Roll-forwardValidation
Additive schema[ISI DI SINI -- Migration tool]Backward compatible[ISI DI SINI]Test
Breaking change[ISI DI SINI -- Expand / Migrate / Contract]No single-step break[ISI DI SINI]Test

CONTOH:

Change TypeMethodCompatibility RuleRollback / Roll-forwardValidation
Tambah kolom (nullable)File SQL migration: YYYYMMDD_add_column.up.sql + .down.sqlBackward compatible — kode lama mengabaikan kolom baruDown migration: ALTER TABLE DROP COLUMNJalankan up+down+up di staging sebelum production
Tambah indexFile SQL migrationBackward compatible — transparan terhadap queryDown migration: DROP INDEXUji performa query sebelum/sesudah di staging
Rename kolomExpand-Migrate-Contract: (1) Tambah kolom baru, (2) Backfill + dual-write, (3) Ganti kode ke kolom baru, (4) Hapus kolom lamaSetiap langkah dapat di-deploy independenRevert ke langkah sebelumnyaSetiap langkah diuji independen
Hapus kolomHanya setelah semua referensi kode dihapus (diverifikasi dengan grep + build)Harus menjadi langkah terakhir Expand-Migrate-ContractTidak dapat di-rollback — pastikan tidak ada kode yang bergantung sebelum menghapusPencarian kode + verifikasi build

13.8 CI/CD Pipeline​

[Push] -> [Build] -> [Lint + SAST] -> [Unit Test] -> [Deploy Staging] -> [Smoke Test] -> [Manual Approval] -> [Deploy Prod]

[ISI DI SINI -- Detailkan setiap stage jika perlu.]


14. Observability & Operational Design​

DEV QA -- Membuat sistem diagnosable, recoverable, dan supportable di setiap environment.

14.1 Logging Standard​

KategoriAturan
FormatStructured logs dalam [ISI DI SINI -- JSON / standard format]
CorrelationSetiap request dan async flow HARUS membawa correlation dan trace identifier
Sensitive dataCredentials, tokens, secrets, dan PII TIDAK BOLEH di-log
Levels[ISI DI SINI -- DEBUG / INFO / WARN / ERROR usage rules]
Retention[ISI DI SINI -- per log type dan environment]
Access[ISI DI SINI -- Role-based access dan audit]

CONTOH:

KategoriAturan
FormatStructured JSON: {"timestamp", "level", "message", "request_id", "user_id", "module", "action", "latency_ms"}
CorrelationSetiap HTTP request mendapat X-Correlation-ID (UUID). Async job mewarisi correlation ID induk.
Sensitive dataTIDAK boleh di-log: password, token, NIK, nomor rekening. Masking: email → ir***@gmail.com
LevelsDEBUG: hanya development. INFO: lifecycle request, event bisnis. WARN: masalah yang dapat dipulihkan. ERROR: kegagalan yang tidak dapat dipulihkan.
RetentionProduction: 30 hari hot (Elasticsearch), 1 tahun cold (S3/MinIO). Non-production: 7 hari.
AccessPenampil log: Dev + Ops. Audit log: Auditor + Security. Log yang mengandung PII: akses terbatas + persetujuan DPO.

14.2 Metrics dan Service Level Indicators​

Metric / SLITypeDefinitionTarget / ThresholdDashboard / Alert
AvailabilitySLI[ISI DI SINI -- Successful valid requests / Valid requests][ISI DI SINI][ISI DI SINI]
LatencySLI[ISI DI SINI -- P95 for key transaction][ISI DI SINI][ISI DI SINI]
[ISI DI SINI]Counter / Gauge / Histogram[ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Metric / SLITypeDefinitionTarget / ThresholdDashboard / Alert
AvailabilitySLIRequest berhasil (2xx+3xx) / Total request valid (excl. 4xx client error)>= 99.5% dalam jendela 30 hariGrafana SLO dashboard, alert < 99%
Latency (p95)SLIPersentil ke-95 response time untuk submit pengajuanp95 <= 500msGrafana, alert > 800ms selama 5 menit
Error rateSLIRespons 5xx / Total respons< 0.5%Grafana, alert > 1% selama 5 menit
Request rateCounterTotal HTTP request per detikBaseline: 50 rps, alert > 200 rps (lonjakan tidak terduga)Grafana
Penggunaan pool koneksi DBGaugeKoneksi aktif / Ukuran pool maksWarning > 70%, Critical > 90%Grafana + AlertManager
Throughput audit logCounterEvent audit yang ditulis per menitBaseline: 100/menit, alert jika 0 selama > 10 menitGrafana

14.3 Distributed Tracing​

Span / OperationRequired AttributesSamplingSensitive Data Rule
[ISI DI SINI]Service, Route, Result, Tenant (as allowed)[ISI DI SINI][ISI DI SINI]

CONTOH:

Span / OperationRequired AttributesSamplingSensitive Data Rule
HTTP Request (inbound)service, http.method, http.route, http.status_code, latency_ms, correlation_id100% untuk error, 10% untuk sukses (dapat disesuaikan)JANGAN sertakan: request body, auth token, field PII
DB Queryservice, db.system (mssql), db.operation (SELECT/INSERT/UPDATE), latency_msSama dengan parent spanJANGAN sertakan: parameter query yang mengandung PII
External HTTP Callservice, http.url (host saja, tanpa query params), http.status_code, latency_msSama dengan parent spanJANGAN sertakan: API key, auth header
Redis Operationservice, db.system (redis), db.operation (GET/SET/DEL), key_prefix, latency_msSama dengan parent spanJANGAN sertakan: nilai key

14.4 Health Checks​

Endpoint / CheckPurposeDependencies TestedFailure BehaviorConsumer
/health/liveProcess livenessNone / MinimalRestart instanceOrchestrator
/health/readyTraffic readiness[ISI DI SINI -- Critical dependencies]Remove from trafficLoad balancer

14.5 Alert dan Response Matrix​

AlertConditionSeverityOwnerImmediate ActionRunbook
[ISI DI SINI][ISI DI SINI -- Condition + window]SEV1-4[ISI DI SINI][ISI DI SINI][ISI DI SINI -- Link / ID]

CONTOH:

AlertConditionSeverityOwnerImmediate ActionRunbook
Error Rate API TinggiError rate > 2% selama 5 menitSEV1Backend TeamCek log, identifikasi endpoint yang gagal, rollback jika perluRB-004
Pool Koneksi DB PenuhPenggunaan pool > 90% selama 2 menitSEV1DevOpsScale koneksi DB, cek slow query, hentikan query yang berjalan lamaRB-005
Penggunaan Disk KritisDisk > 90% di node manapunSEV2DevOpsIdentifikasi file/log besar, arsipkan data lama, perluas storageRB-006
UIM Next-G Tidak TerjangkauHealth check gagal 3x berturut-turutSEV1DevOps + IT KlienCek jaringan, hubungi IT klien, pantau pemulihanRB-007
Gap Audit Log TerdeteksiTidak ada event audit selama > 10 menit pada jam kerjaSEV2Security LeadCek kesehatan audit service, verifikasi buffer, rekonsiliasi manualRB-008

14.6 Backup, Restore, dan Recovery​

AssetBackup MethodFrequencyRetentionRestore TestEncryption
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI -- Frequency + last result][ISI DI SINI]

CONTOH:

AssetBackup MethodFrequencyRetentionRestore TestEncryption
SQL Server (full)Full backup via SQL AgentHarian 02:00 WIB30 hariUji restore bulanan ke staging — terakhir: Pass (01/07/2026)AES-256 (TDE + backup encryption)
SQL Server (log)Transaction log backupSetiap 1 jam7 hariTermasuk dalam uji full restoreAES-256
MinIO (file)rsync ke offsite NASHarian 03:00 WIB90 hariUji restore file acak triwulanan — terakhir: Pass (15/06/2026)At rest (SSE-S3)
RedisRDB snapshotSetiap 6 jam3 hariUji load snapshot bulananTidak terenkripsi (tanpa data sensitif — hanya cache)
Konfigurasi K8sGitOps (repo infra-config)Setiap commitGit history (tidak terbatas)DR drill restore dari repo — semi-tahunanSecret terenkripsi via K8s encryption provider

14.7 Operational Runbook Index​

Runbook IDSkenarioTriggerOwnerLocationLast Tested
RB-001Service startup / shutdown[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
RB-002Rollback[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
RB-003Disaster recovery[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Runbook IDSkenarioTriggerOwnerLocationLast Tested
RB-001Startup / shutdown serviceDeploy manual atau restartDevOps/docs/runbooks/RB-001-startup.md01/07/2026
RB-002Rollback ke versi sebelumnyaError rate > 2% pasca-deployDevOps/docs/runbooks/RB-002-rollback.md01/07/2026
RB-003Disaster recoveryKegagalan production yang tidak dapat dipulihkanDevOps + PM/docs/runbooks/RB-003-dr.md15/06/2026 (DR drill)
RB-004Error rate API tinggiAlert: error rate > 2% selama 5 menitBackend Team/docs/runbooks/RB-004-api-errors.md20/06/2026
RB-005Pool koneksi DB penuhAlert: pool > 90% selama 2 menitDevOps/docs/runbooks/RB-005-db-pool.md25/06/2026

15. DevSecOps & Engineering Controls​

DEV SEC -- Hubungkan desain ke kontrol engineering, verifikasi otomatis, evidence release, dan software supply chain.

15.1 Repository dan Code Organization​

RepositoryContentsOwnerBranching ModelProtection Rules
[ISI DI SINI]Source / Infra / Contract / Docs[ISI DI SINI]Trunk / Gitflow / LainnyaReview / Checks / Signing

CONTOH:

RepositoryContentsOwnerBranching ModelProtection Rules
tim2-backendSource Go backend, migration, API docsBackend TeamFeature branch → staging → production. staging = sudah diuji QA. production = release yang disetujui.MR wajib, minimal 1 reviewer, CI pipeline harus pass
tim2-frontendSource React SPA, component libraryFrontend TeamSama dengan backendMR wajib, 1 reviewer, build + lint harus pass
infra-configManifest K8s, konfigurasi Nginx, skrip CI/CDDevOpsTrunk-based, MR ke mainPersetujuan DevOps wajib

15.2 Coding dan Design Standards​

AreaStandard / ToolEnforcement
Language style[ISI DI SINI -- Style guide / Linter / Formatter]Pre-commit / CI
Architecture boundaries[ISI DI SINI -- Rules / Static analysis]CI / Review
Dependency policy[ISI DI SINI -- Approved sources / Versions]SCA / Lockfile
Documentation[ISI DI SINI -- Public API / Comments / ADR / Changelog]Review
Testing[ISI DI SINI -- Unit / Integration / Contract / Coverage]CI gate

CONTOH:

AreaStandard / ToolEnforcement
Language styleGo: gofmt + golangci-lint. React: ESLint + PrettierPre-commit hook + CI pipeline
Batasan arsitekturAturan layer: Handler tidak boleh import Repository. Lintas modul hanya melalui Service.Checklist code review + custom linter rule
Kebijakan dependensiGo: lockfile go.sum, tanpa replace directive di production. JS: package-lock.json, alert DependabotSCA scan di CI, Dependabot auto-PR
DokumentasiPublic API: Swagger/OpenAPI auto-generate dari code comment. ADR: markdown di repo /docs/adr/Checklist review
TestingTest coverage unit >= 70%. Integration test untuk setiap API endpoint. Tanpa mocking DB di integration test.CI gate: laporan coverage, test harus pass

15.3 CI/CD Pipeline Controls​

StageControlTool / MethodFailure PolicyEvidence
Commit / PRFormatting, linting, unit tests, secret scan[ISI DI SINI]Block mergePipeline
BuildReproducible build, dependency lock, artifact signing[ISI DI SINI]Fail buildArtifact
SecuritySAST, SCA, container/IaC scan[ISI DI SINI][ISI DI SINI -- Severity gate]Report
DeployApproval, provenance, environment policy[ISI DI SINI]Block deploymentAudit

CONTOH:

StageControlTool / MethodFailure PolicyEvidence
Commit / PRPengecekan format, lint, unit test, scan secretgofmt + golangci-lint (BE), ESLint + Prettier (FE), gitleaks (secrets)Blokir merge jika ada check gagalStatus pipeline GitLab CI
BuildBuild reproducible, dependency lock, tag Docker image berdasarkan git SHAgo build dengan go.sum, npm ci dengan lockfile, docker build --tag sha-abc123Build gagal → artefak tidak dipublikasiDocker image di registry + build log
SecuritySAST, SCA, scan containergosec (SAST), npm audit (SCA), trivy (container)Blokir jika ada temuan Critical/High. Medium → tiket, lanjutkan.Laporan scan dilampirkan ke pipeline
DeployPersetujuan PM + Tech Lead untuk productionGitLab manual approval gateBlokir deployment tanpa persetujuanLog audit persetujuan

15.4 Software Supply Chain​

ControlDesign / Policy
Dependency source[ISI DI SINI -- Approved registries / Mirrors]
SBOM[ISI DI SINI -- Format, generation, storage, delivery]
Artifact integrity[ISI DI SINI -- Signing / Hash / Provenance]
Vulnerability response[ISI DI SINI -- SLA by severity / Exception process]
Base images[ISI DI SINI -- Approved, minimal, patched, pinned]
Third-party licenses[ISI DI SINI -- Scan / Approval / Attribution]

CONTOH:

ControlDesign / Policy
Sumber dependensiGo: proxy.golang.org (default). JS: npmjs.com. Tanpa private registry di Fase 1.
SBOMDi-generate per build via syft (format CycloneDX). Disimpan bersama Docker image di registry.
Integritas artefakDocker image di-tag berdasarkan git SHA. Digest image diverifikasi saat deploy.
Respons kerentananCritical: patch dalam 48 jam. High: patch dalam 1 minggu. Medium/Low: sprint berikutnya. Exception: ADR + persetujuan Security Lead.
Base imageGo: golang:1.22-alpine (pinned digest). Node: node:20-alpine (pinned). Di-update bulanan.
Lisensi pihak ketigaScan go-licenses di CI. Copyleft (GPL) diblokir. MIT/Apache/BSD diizinkan. Dependensi baru memerlukan review Tech Lead.

15.5 Feature Flags dan Runtime Controls​

Flag / ControlPurposeDefaultScopeOwnerRemoval Date
[ISI DI SINI][ISI DI SINI]On/OffEnv / Tenant / User[ISI DI SINI][ISI DI SINI]

CONTOH:

Flag / ControlPurposeDefaultScopeOwnerRemoval Date
ENABLE_DASHBOARD_V2Rollout bertahap UI dashboard baruOffPer-env (aktif di staging, mati di prod)FE LeadSprint 8 (setelah persetujuan UAT)
ENABLE_CORE_BANKING_INTEGRATIONGerbang integrasi Core Banking Fase 2OffGlobalTech LeadRelease 2.0
MAINTENANCE_MODEBlokir semua mutasi, izinkan akses read-onlyOffGlobal (toggle runtime)DevOpsPermanen (kontrol operasional)
MAX_UPLOAD_SIZE_MBBatas ukuran upload file yang dapat dikonfigurasi saat runtime10GlobalDevOpsPermanen (kontrol operasional)

16. Verification, Validation, & Traceability​

BA QA -- Bagian ini menghubungkan requirement ke desain dan ke evidence verifikasi.

16.1 Design Verification Strategy​

Design AreaVerification MethodOwnerEnvironmentEvidence
ArchitectureReview / Prototype / Analysis[ISI DI SINI]N/A / POCRecord
API contractsContract test / Schema validation[ISI DI SINI]CI / SITReport
PerformanceLoad / Stress / Soak[ISI DI SINI]Perf envReport
SecurityThreat review / SAST / DAST / Pen test[ISI DI SINI][ISI DI SINI]Report
RecoveryRestore / Failover / DR exercise[ISI DI SINI][ISI DI SINI]Report

16.2 Requirements Traceability Matrix (RTM)​

Requirement IDDeskripsi RequirementSDD Section / ComponentVerifikasiTest / EvidenceStatus
FR-001[ISI DI SINI][ISI DI SINI]Test / Review / Analysis[ISI DI SINI]Open / Pass
FR-002[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
NFR-001[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Requirement IDDeskripsi RequirementSDD Section / ComponentVerifikasiTest / EvidenceStatus
FR-PAY-001Submit pengajuan pembayaran§9.2 Payment Module, §8.4 POST /api/v1/paymentsFunctional testTC-PAY-001Pass
FR-PAY-003Multi-level approval dengan threshold§9.2 Payment Module (state machine), §9.3 BR-002Functional testTC-PAY-003Pass
FR-AUTH-001SSO login via UIM Next-G§11.3 Authentication, §6.4 Auth middlewareIntegration testTC-AUTH-001Pass
NFR-PERF-001Submit pengajuan p95 < 500ms at 500 users§12.1 Latency BudgetLoad test (k6)LT-PERF-001Open
NFR-SEC-001Audit trail immutable, append-only§11.8 Security Logging, §6.4 Audit TrailSecurity review + testSR-SEC-001Pass

16.3 Non-Functional Verification Matrix​

NFR IDTargetTest ScenarioData Volume / LoadPass CriteriaEvidence
NFR-001[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

NFR IDTargetTest ScenarioData Volume / LoadPass CriteriaEvidence
NFR-PERF-001Submit payment p95 < 500ms500 concurrent user submit pengajuan selama 10 menit50 req/s sustainedp95 <= 500ms, error rate < 0.1%, CPU < 70%Laporan k6 LT-PERF-001.html
NFR-PERF-002Dashboard load p95 < 2 dtk100 concurrent user memuat dashboard dengan 6 widget100 req/s sustainedp95 <= 2 dtk, semua widget ter-renderLaporan k6 + Lighthouse
NFR-AVAIL-00199.5% uptime selama 30 hariSimulasi pod crash saat peak load3 replika, matikan 1 podTraffic berpindah < 30 dtk, tanpa 5xx selama failoverLaporan chaos test
NFR-SEC-001Audit log immutablePercobaan UPDATE/DELETE record audit via SQL dan APIN/ASemua percobaan ditolak, alert terpicuLaporan security test

16.4 Design Review Findings​

Finding IDReview TypeFindingSeverityOwnerResolution / Status
F-001Arch / Sec / QA / Ops[ISI DI SINI]H / M / L[ISI DI SINI][ISI DI SINI]

CONTOH:

Finding IDReview TypeFindingSeverityOwnerResolution / Status
F-001ArchitecturePayment Module dan Reporting Module berbagi tabel DB secara langsung — melanggar batasan modulMTech LeadResolved: Reporting membaca via API, bukan akses DB langsung. ADR-005 dibuat.
F-002SecurityJWT secret key disimpan di file .env yang ter-commit ke repoHSecurity LeadResolved: Dipindahkan ke K8s Secret, .env dihapus dari repo, git history dibersihkan.
F-003QATidak ada test coverage untuk edge case state machine approval (reject setelah partial approval)MQA LeadResolved: 5 test case ditambahkan untuk transisi state machine.
F-004OpsTidak ada alert yang didefinisikan untuk gap audit log — risiko kepatuhan jika tidak terdeteksiHDevOpsResolved: Alert RB-008 ditambahkan (§14.5). Sudah diuji.

16.5 Definition of Design Complete​

TIPS: Checklist ini mendefinisikan kapan desain dianggap selesai dan siap untuk implementasi. Seluruh item harus "Pass" sebelum development dimulai.

NoKriteriaStatusEvidence
1Semua architecture views konsisten (context, component, data, deployment, security)Pass / FailReview record
2Semua interface contracts terdefinisi dan disetujui oleh consumer dan providerPass / FailContract docs
3Data model lengkap dengan dictionary, integrity rules, dan migration planPass / FailERD + dictionary
4Threat model dan security controls terdokumentasi dan di-reviewPass / FailSecurity review
5NFR memiliki target terukur dan metode verifikasiPass / FailNFR matrix
6Deployment dan operational design (monitoring, alerting, runbook) lengkapPass / FailOps review
7RTM menghubungkan semua requirement ke design elementsPass / FailRTM document

17. Migration, Cutover, & Transition​

DEV PM -- Bagian ini relevan untuk migrasi, modernisasi, atau transisi dari sistem lama. Skip jika tidak relevan (catat di tabel tailoring).

17.1 Transition Scope​

Transition ItemCurrent StateTarget StateOwnerDependency
[ISI DI SINI -- Application / Data / Interface / User][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Transition ItemCurrent StateTarget StateOwnerDependency
AplikasiSpreadsheet legacy + approval berbasis emailAplikasi web New bjb GIFTTSG Dev TeamInfrastruktur siap, sign-off UAT
Master Data (Vendor)File CSV di shared driveTabel Vendors di SQL ServerBA + FinancePembersihan data oleh Finance sebelum impor
Master Data (GL Codes)Excel dari AccountingTabel GLCodes di SQL ServerBA + AccountingPemetaan format disepakati
Akun UserDaftar user manual di ExcelTabel Users yang disinkronkan dari HCSDevOps + IT KlienAkses API HCS tersedia
Proses ApprovalRantai email + tanda tangan fisikApproval digital multi-level dalam sistemPM + VP FinanceBusiness rules final, role sudah ditugaskan
Data HistorisTetap di sistem legacyTIDAK dimigrasikan — legacy tetap dapat diakses read-onlyIT KlienSistem legacy dipertahankan 12 bulan pasca go-live

17.2 Cutover Plan​

StepActivityOwnerStart / DurationEntry CriteriaBackout Point
1[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

StepActivityOwnerStart / DurationEntry CriteriaBackout Point
1Bekukan sistem legacy (mode read-only)IT KlienD-Day 18:00 / 30 menitSemua user sudah diberitahu 1 minggu sebelumnyaBuka kembali legacy, batalkan cutover
2Jalankan migrasi data final (vendor + GL + user)DevOps + BAD-Day 18:30 / 2 jamLegacy sudah dibekukan, skrip migrasi sudah diuji di stagingRollback migrasi (down script), buka kembali legacy
3Rekonsiliasi data — verifikasi jumlah baris + checksumQA + BAD-Day 20:30 / 1 jamMigrasi selesaiJika rekonsiliasi gagal: rollback langkah 2
4Smoke test — 10 flow kritis di productionQAD-Day 21:30 / 1 jamRekonsiliasi berhasilJika smoke test gagal: rollback langkah 2
5Switch DNS / cutover URL ke sistem baruDevOpsD-Day 22:30 / 15 menitSmoke test berhasil, persetujuan PMKembalikan DNS ke legacy
6Pemantauan — periode observasi 24 jamDevOps + BackendD-Day 22:45 / 24 jamTraffic live di sistem baruKembalikan DNS jika ditemukan masalah kritis dalam 24 jam
7Go-Live dikonfirmasi — legacy masuk mode arsip read-onlyPMD+1 22:45Observasi 24 jam berhasil, zero masalah kritisN/A — cutover selesai

17.3 Data Reconciliation dan Acceptance​

ControlSource Count / TotalTarget Count / TotalToleranceResultOwner
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]Pass / Fail[ISI DI SINI]

CONTOH:

ControlSource Count / TotalTarget Count / TotalToleranceResultOwner
Vendor records1.245 rows (legacy CSV)1.245 rows (Vendors table)0 (exact match)PassBA
GL Codes387 rows (Excel)387 rows (GLCodes table)0 (exact match)PassBA
User accounts5.012 (HCS API)5.012 (Users table)0PassDevOps
NPWP format validation—1.245 records, all 15-digit valid0 invalidPassQA
Duplicate vendor check—0 duplicates by NPWP0PassQA

17.4 Rollback dan Contingency​

TriggerDecision AuthorityRollback ActionMaximum Decision TimeCommunication
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

TriggerDecision AuthorityRollback ActionMaximum Decision TimeCommunication
Rekonsiliasi data gagal (selisih jumlah baris > 0)Tech LeadJalankan down migration, buka kembali legacy, kembalikan DNS30 menit dari deteksiEmail ke daftar stakeholder + grup WA
Smoke test gagal di flow kritis (submit pengajuan atau login)Tech Lead + PMJalankan down migration, buka kembali legacy, kembalikan DNS30 menitEmail + WA + telepon ke PM
Error rate > 5% dalam 4 jam pertama pasca-cutoverTech LeadKembalikan DNS ke legacy, investigasi root cause15 menit dari alertAuto-alert via PagerDuty + WA
User melaporkan kerusakan data / record hilangPM (eskalasi dari support)Bekukan sistem baru, investigasi, kemungkinan revert1 jam dari laporan terkonfirmasiUpdate status page + komunikasi langsung ke stakeholder

18. Risks, Limitations, & Open Issues​

PM DEV -- Dokumentasikan risiko, limitasi, dan item yang masih terbuka. Setiap item HARUS punya owner dan status.

18.1 Design Risk Register​

Risk IDRisikoLikelihoodImpactMitigasiOwnerStatus
R-001[ISI DI SINI]L / M / HL / M / H[ISI DI SINI][ISI DI SINI]Open / Accepted / Closed

CONTOH:

Risk IDRisikoLikelihoodImpactMitigasiOwnerStatus
R-001UIM Next-G API tidak stabil, menyebabkan login failuresMHMock API untuk dev, circuit breaker, health monitoringTech LeadOpen
R-002SQL Server performa menurun pada aggregation query besarMMMaterialized views, Redis cache layer, query review per sprintBackend LeadOpen
R-003Casbin policy complexity menyebabkan authorization bugsMHPOC di sprint 1, unit test coverage > 90% untuk policy, pair reviewBackend LeadOpen
R-004Data migration dari legacy mengganggu go-live timelineLHMigration di-scope out dari SDD ini; terpisah oleh tim DBAPMAccepted

18.2 Known Limitations dan Technical Debt​

IDLimitation / DebtAlasanImpactRemediation PlanTarget Release
TD-001[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

IDLimitation / DebtAlasanImpactRemediation PlanTarget Release
TD-001No message queue — async processing via goroutines onlyTim belum berpengalaman dengan MQ; volume Fase 1 masih rendahJika volume > 10K txn/hari, goroutine bisa overwhelmEvaluasi RabbitMQ/NATS di Fase 2Release 2.0
TD-002Monolith — semua modul dalam satu binaryFase 1 prioritas speed-to-marketScaling per-modul tidak bisa independenRefactor ke modular boundaries, evaluate split di Fase 3Release 3.0
TD-003Report generation synchronous (blocking request)PDF library tidak mendukung asyncReport besar (>50 halaman) bisa timeoutMove to background job + download link notificationRelease 1.1

18.3 Open Questions dan TBD Items​

IDQuestion / TBDDecision Needed FromOwnerDue DateStatus
TBD-001[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]Open / Closed

CONTOH:

IDQuestion / TBDDecision Needed FromOwnerDue DateStatus
TBD-001Format API Core Banking — REST atau SOAP?IT Klien (tim Core Banking)Tech LeadSprint 2Open
TBD-002Push DWH — event stream real-time atau batch malam hari?VP Finance + IT KlienBASprint 3Open
TBD-003Metode MFA — hanya TOTP atau juga SMS OTP?Security Lead + IT KlienSecurity LeadSprint 1Closed (hanya TOTP)
TBD-004Template PDF laporan — custom atau menggunakan template korporat yang sudah ada?Tim FinanceBASprint 4Open

19. Maintenance, Evolution, & Decommissioning​

DEV PM -- Bagian ini mendokumentasikan model support, versioning, strategi upgrade, dan rencana decommissioning.

19.1 Support dan Ownership Model​

AreaPrimary OwnerBackup OwnerSupport WindowEscalation
Application[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Infrastructure[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Database[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]
Security[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

AreaPrimary OwnerBackup OwnerSupport WindowEscalation
Aplikasi (BE + FE)TSG Backend TeamTSG FE Team (cross-trained)Sen-Jum 08:00-17:00 WIB. On-call: 24/7 untuk SEV1.SEV1: Tech Lead → PM → Steering Committee
Infrastruktur (K8s, Nginx, Redis)TSG DevOpsIT Klien (hanya infra)Sen-Jum 08:00-17:00 WIB. On-call: 24/7 untuk SEV1.SEV1: DevOps → Tech Lead → IT Klien
Database (SQL Server)IT Klien DBATSG Backend (level query)Sen-Jum 08:00-17:00 WIBSEV1: DBA → IT Manager → Steering Committee
Security (insiden, kepatuhan)TSG Security LeadIT Klien Security24/7 untuk insiden keamananSEV1: Security Lead → CTO → Steering Committee

19.2 Versioning dan Compatibility​

ArtifactVersioning RuleCompatibility WindowDeprecation Process
API[ISI DI SINI -- Semantic / Date / Org rule][ISI DI SINI][ISI DI SINI]
Events / Schemas[ISI DI SINI][ISI DI SINI][ISI DI SINI]
Database[ISI DI SINI -- Migration version][ISI DI SINI][ISI DI SINI]
Client applications[ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

ArtifactVersioning RuleCompatibility WindowDeprecation Process
APISemantic versioning (v1, v2). Breaking change = versi major baru.Minimal 2 versi didukung bersamaan (v1 + v2) selama 6 bulanHeader deprecation di respons → pemberitahuan 3 bulan → sunset
DatabaseVersi file migration: YYYYMMDD_HHMMSS_description.sqlSetiap migration backward-compatible dengan versi kode sebelumnyaExpand-Migrate-Contract untuk breaking change
Frontend SPAGit tag per release. Tanpa versioning API — selalu terbaru.N/A (single deployment, auto-updated)Feature flag untuk rollout bertahap

19.3 Upgrade dan Patch Strategy​

Technology / DependencyCurrent VersionUpgrade CadenceEnd-of-Support DateOwner
[ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI][ISI DI SINI]

CONTOH:

Technology / DependencyCurrent VersionUpgrade CadenceEnd-of-Support DateOwner
Go1.22Setiap 6 bulan (ikuti siklus release Go, lewati release .0)N/A (Go memelihara 2 versi major terbaru)Backend Team
SQL Server2019Major: evaluasi setiap 3 tahun. Patch: bulanan (Patch Tuesday)Jul 2030 (extended support)DBA / IT Klien
React18.xMajor: evaluasi saat 19+ stabil. Minor: per sprint jika bermanfaat.N/A (didukung komunitas)Frontend Team
Kubernetes1.28Setiap 6 bulan (ikuti jendela dukungan K8s: N, N-1, N-2)~Apr 2025 (1.28 EOL) → rencanakan upgrade ke 1.30DevOps
Node.js (build saja)20 LTSIkuti jadwal LTS. Upgrade saat LTS saat ini memasuki maintenance.Apr 2026 (Node 20 mulai maintenance)Frontend Team

19.4 Decommissioning dan Data Exit​

ConcernDesign / Plan
Trigger for decommissioning[ISI DI SINI]
Data export[ISI DI SINI -- Format, scope, validation, recipient]
Data retention dan disposal[ISI DI SINI -- Rule / evidence]
Integration shutdown[ISI DI SINI -- Sequence / notification]
Credential dan access revocation[ISI DI SINI]
Infrastructure destruction[ISI DI SINI -- Process / evidence]
Final audit dan archive[ISI DI SINI -- Owner / retention]

CONTOH:

ConcernDesign / Plan
Pemicu decommissioningPenggantian sistem oleh versi baru, atau klien memutuskan kontrak. Keputusan oleh Steering Committee.
Ekspor dataFormat: CSV + SQL dump. Cakupan: semua data transaksi + audit log. Validasi: jumlah baris + checksum. Penerima: IT Klien (transfer terenkripsi via SFTP).
Retensi dan pembuangan dataData transaksi: pertahankan 7 tahun (sesuai regulasi). Audit log: pertahankan 8 tahun. PII: anonymize setelah periode retensi. Bukti: sertifikat penghapusan.
Penonaktifan integrasiUrutan: (1) Nonaktifkan akses API inbound, (2) Selesaikan async job yang pending, (3) Kirim ekspor DWH final, (4) Beritahu sistem eksternal (UIM, HCS, SMTP), (5) Cabut registrasi OAuth client.
Pencabutan kredensial dan aksesCabut: API key, service account, kredensial DB, access key MinIO, password Redis. Timeline: dalam 24 jam dari keputusan decommissioning.
Penghancuran infrastrukturHapus K8s namespace, decommission VM, wipe volume storage. Proses: DevOps mengeksekusi, IT Klien memverifikasi, PM menandatangani. Bukti: log audit infrastruktur.
Audit final dan arsipSDD + semua artefak diarsipkan ke DMS klien. Retensi: permanen (kebijakan klien). Pemilik: PM. Rapat serah terima final + dokumen sign-off.

Appendix​

A. Glossary​

IstilahDefinisi
ADRArchitecture Decision Record -- catatan keputusan arsitektur
DTOData Transfer Object -- objek untuk transfer data antar layer
ERDEntity Relationship Diagram -- diagram relasi antar entitas
NFRNon-Functional Requirement -- kebutuhan non-fungsional
RBACRole-Based Access Control -- kontrol akses berbasis peran
SDDSoftware Design Document -- dokumen desain perangkat lunak
SLIService Level Indicator -- indikator tingkat layanan
SLOService Level Objective -- target tingkat layanan
RTMRequirements Traceability Matrix -- matriks keterlacakan kebutuhan
[ISI DI SINI][ISI DI SINI]

B. Diagram References​

DiagramToolLink
System Context[ISI DI SINI][ISI DI SINI]
Container / Subsystem[ISI DI SINI][ISI DI SINI]
ERD[ISI DI SINI][ISI DI SINI]
Component Diagram[ISI DI SINI][ISI DI SINI]
Sequence Diagrams[ISI DI SINI][ISI DI SINI]
Deployment Diagram[ISI DI SINI][ISI DI SINI]
Security DFD[ISI DI SINI][ISI DI SINI]

CONTOH:

DiagramToolLink
System ContextDraw.io (exported SVG)/docs/diagrams/01-system-context.svg
Container / SubsystemDraw.io/docs/diagrams/02-container-view.svg
ERDDBeaver ERD export/docs/diagrams/03-erd.svg
Component DiagramDraw.io/docs/diagrams/04-component-view.svg
Sequence DiagramsMermaid (in SDD §9.6)Inline in document
Deployment DiagramDraw.io/docs/diagrams/05-deployment-topology.svg
Security DFDDraw.io/docs/diagrams/06-trust-boundaries.svg
KodeDokumenRelevansi
TSG-STD-VALIDASIAturan Umum Validasi FormInput validation rules
TSG-STD-AUDITStandar Audit TrailAudit logging design
TSG-STD-SITKategori Temuan Major SITTesting against this design
TSG-STD-UTILITYSystem Utility FeaturesShared system features

D. End-to-End Review Checklist​

AreaAcceptance CheckStatusReviewer Notes
GovernanceMetadata, revision history, tailoring, repositori, dan approval lengkapPass / Fail / N/A[ISI DI SINI]
ScopeBatasan eksplisit dan konsisten dengan requirementsPass / Fail / N/A[ISI DI SINI]
DriversDriver fungsional, quality, regulatory, dan operational teridentifikasiPass / Fail / N/A[ISI DI SINI]
ArchitectureContext, component, runtime, data, deployment, dan security views konsistenPass / Fail / N/A[ISI DI SINI]
ComponentsTanggung jawab, interface, data ownership, failure handling, observability, dan acceptance terdefinisiPass / Fail / N/A[ISI DI SINI]
InterfacesKontrak, authn, error, timeout, retry, versioning, recovery, dan owner terdefinisiPass / Fail / N/A[ISI DI SINI]
DataERD, dictionary, integrity, retention, classification, migration, dan recovery terdefinisiPass / Fail / N/A[ISI DI SINI]
SecurityThreat model dan kontrol yang testable terdokumentasi; secrets dan data sensitif terlindungiPass / Fail / N/A[ISI DI SINI]
NFRsTarget terukur dan terhubung ke metode verifikasiPass / Fail / N/A[ISI DI SINI]
DeploymentEnvironment, topologi, resource, network, konfigurasi, dan rollback terdefinisiPass / Fail / N/A[ISI DI SINI]
OperationsLog, metrics, traces, health, alert, backup, dan runbook actionablePass / Fail / N/A[ISI DI SINI]
DevSecOpsCode, pipeline, artifact, dependency, dan supply-chain controls terdokumentasiPass / Fail / N/A[ISI DI SINI]
TraceabilityRequirements terhubung ke design elements dan evidencePass / Fail / N/A[ISI DI SINI]
RiskOpen items, limitations, debt, dan accepted risks punya owner dan statusPass / Fail / N/A[ISI DI SINI]

E. Tailoring Guide berdasarkan Tipe Proyek​

Profil ProyekKedalaman yang Dibutuhkan
Aplikasi CRUD internal kecil, sensitivitas rendahGovernance, scope, context, component inventory, API, data model, security/NFR dasar, deployment, operations, dan RTM. Gabungkan bagian detail yang sederhana.
Sistem informasi bisnis-kritis menengahGunakan template lengkap dengan context/container/component, sequence kritis, ERD/dictionary, threat model, NFR terukur, deployment, observability, runbook, dan formal gates.
Platform besar atau teregulasiTemplate lengkap plus interface control document terpisah, threat model detail, migration spec, DR plan, performance model, security control mapping, dan multiple viewpoints.
Microservices / event-drivenTekankan service boundaries, data ownership, API/event contracts, compatibility, idempotency, eventual consistency, outbox/saga, tracing, dan operational independence.
Legacy modernization / migrasiTekankan current/target views, coexistence, strangler approach, conversion, reconciliation, cutover, rollback, decommissioning, dan dependency retirement.

F. Change Management Reference​

Tipe PerubahanAksi SDD yang Diperlukan
Koreksi editorialPatch version dokumen; tidak perlu design review kecuali mengubah makna
Detail implementasi backward-compatibleUpdate bagian yang terpengaruh dan evidence; engineering review
Interface atau data field baruUpdate catalog, contract, dictionary, security/NFR impact, tes, dan RTM
Breaking interface atau schema changeBuat ADR dan compatibility/migration plan; update consumer; re-run affected reviews
Perubahan arsitektur, deployment, atau security boundaryUpdate views, ADR, threat model, NFR, operations, dan formal reviews
Accepted risk atau limitationCatat owner, approver, expiry/review date, dan remediation target

G. Quality Gates dan Review Checklist per Tahap​

TIPS: Gunakan quality gates ini sebagai checkpoint sebelum melanjutkan ke tahap berikutnya.

GateTahapEntry CriteriaReview ByExit Criteria
G1Architecture DraftArchitecture drivers identified, context/container views draftedArchitect + PMViews konsisten, driver tercakup, ADRs drafted
G2Component DesignG1 passed, all components specified with interfacesEngineering LeadComponent inventory complete, dependency matrix reviewed, layer rules defined
G3Data & API DesignG2 passed, ERD + API contracts draftedData + Integration reviewersData dictionary complete, contracts agreed by all consumers
G4Security & NFRG3 passed, threat model + NFR targets definedSecurity + QAControls testable, NFR has pass criteria, no unmitigated High/Critical threats
G5Operational ReadinessG4 passed, deployment + observability designedDevOps/SREEnvironments defined, monitoring actionable, runbooks drafted
G6Final ApprovalG5 passed, RTM complete, all findings resolvedAll reviewersSDD baselined, implementation authorized

H. Common Anti-Patterns (Hal yang Harus Dihindari)​

Anti-PatternMasalahSolusi
"Aman dan scalable" tanpa angkaNFR tidak terukur, tidak bisa diverifikasiDefinisikan target spesifik: p95 < 800ms, 99.5% uptime, 500 concurrent users
Nama komponen berbeda di diagram berbedaInkonsistensi menyebabkan kebingungan implementasiGunakan Component Inventory (§6.1) sebagai single source of truth untuk nama
Desain berhenti di kode, tanpa opsSistem tidak bisa di-monitor, di-debug, atau di-recover di productionTambahkan §14 (Observability) dan §13 (Deployment) sebelum implementation
ADR tanpa alternatifKeputusan terlihat arbitrary, sulit di-challenge atau di-evaluateSelalu dokumentasikan minimal 2 opsi yang dipertimbangkan + trade-off
Security as afterthoughtVulnerability ditemukan di akhir, costly to fixThreat model di awal (§11.2), security review di setiap gate
Diagram tanpa legendPembaca tidak tahu apa arti garis, warna, atau bentukSetiap diagram HARUS memiliki judul, scope, legend, dan versi
Copy-paste dari proyek lainSDD tidak mencerminkan sistem yang sebenarnyaSDD harus ditulis dari driver proyek ini, bukan template proyek lain

I. Publishing Checklist​

NoItemStatus
1Metadata lengkap (versi, tanggal, pemilik, klasifikasi)☐
2Tailoring table (§1.6) terisi — semua omitted sections punya alasan☐
3Seluruh [ISI DI SINI] sudah diganti dengan konten aktual☐
4Nama komponen konsisten di seluruh dokumen (diagram, tabel, teks)☐
5Semua diagram memiliki judul, scope, legend, dan versi☐
6RTM (§16.2) menghubungkan semua requirement ke design elements☐
7Semua review findings (§16.4) resolved atau explicitly accepted☐
8Approval signatures lengkap (§1.3)☐
9Dokumen di-commit ke repositori terkontrol (§1.1 Lokasi Repositori)☐

Hanya digunakan untuk kalangan internal PT. Tristar Surya Gemilang dan tidak untuk didistribusikan secara umum.