Terkadang developer membuat kesalahan ini dalam mendesain suatu software:
- Reducing Design Time (Don’t switch)
- Feature Creep (Ensure all changes are vital)
- Silver Bullet Syndrome (Just say no to such tool)
- When you think some design tool is going to solve all problems and magically reduce time and cost
- Switching tools in mid-project (Don’t switch unless there is a compelling need for specific features)
Functional Model Verification and Validation (V & V)
- Even dalam UCS harus memetakan aktivitas di Activity Diagram
- Object node dalam activity diagram harus disebutkan dalam UCS
- Sequential ordering dalam UCS harus menyamai activity diagram
- Harus ada korespondensi satu-banding-satu dalam Use case pada UCS dan Use Case Diagram
- Semua aktor pada UCS harus ada pada Use Case Diagram
- Stakeholder pada UCS harus ada sebagai aktor pada Use Case Diagram
- Semua relasi pada UCS harus digambarkan pada Use Case Diagram
Evolving analysis models Into Design Models

Review use case dan class, apakah semuanya dibutuhkan, apa ada yang hilang, apakah sudah terdefinisi semua, apakah ada atribut atau metode yang hilang? Modif analysis model agar efisiensi dan efektivitas meningkat.
Cara untuk mengevolve:
- Factoring
- Membuat modul yang account dalam persamaan dan perbedaan antara units of interest
- Membuat kelas baru dengan cara:
- Abstraksi
- Nurse, Administrative staff dan dokter –> Generalisasi -> Employee
- Refinement (kebalikan dari abstraksi)
- Administrative Task –> –>Receptionist, Secretary, Bookkeeper
- Abstraksi
- Partition dan collaboration
- Membuat subsystem (partisi) dari unit besar
- Antara partisi atau unit bisa bekerja sama
- Mengelompokkan unit yang bekerja sama
- Yang sering berkomunikasi antara satu sama lain biasanya bisa dikelompokkan jadi satu partisi
- Contoh: Partisi dari Accounting Information System (https://www.slideshare.net/wiweck/accounting-information-system-18527651)
- Membuat subsystem (partisi) dari unit besar
- Layers
Package Diagram

- Derivasi Package Diagram dari Layers

- Cara bikin:
- 1. Set the context
2. Cluster classes together based on shared
relationships
3. Model clustered classes as a package
4. Identify dependency relationships among
packages
5. Place dependency relationships between
packages
- 1. Set the context
Design Strategies
- Custom Development
- Highly specified requirements bisa dicapai
- Masalah bisa diselesaikan secara kreatif dan fleksibel
- Komponen bisa diubah dengan mudah
- Membangun skill pekerja
- Risk
- Mahal ngehire pekerja yang jago
- Ga ada jaminan proyek bakal selesai
- Developer bisa disuruh kerjain hal lain
- Technical obstacle
- Packaged Software
- Lebih efisien beli jadi (asumsi program lain udah dites dan dapat diinstal dengan cepat)
- Bisa untuk komponen kecil maupun satu system
- Masalah
- Harus terima apa adanya
- Jarang perfect fit
- Mungkin harus ganti cara melakukan bisnis
- Mungkin butuh kustomisasi atau workaround
- Integrasi Sistem
- Gabungin paket, sistem lawas, software baru
- Integrasi data sebagai key challenge soalnya harus nulis data di format yang sama
- Solusinya bikin “object wrapper” yang bikin object oriented software bisa berkomunikasi sama legacy sistem (contoh: Application Programming Interface API)
- Outsourcing
- Nyuruh perusahaan lain bikin sistemlu
- Mungkin lebih jago vs lu
- Mungkin mengextend resource yang lu udh punya
- Jangan outsource yang lu ga ngerti
- hati hati sama vendor (jgn sampe dikerjain), dan siapin dgn hati hati kontrak dan skema pembayaran
Cara milih Design Strategi: Mikirin faktor dibawah
- Business Need
- Inhouse experience
- Project Skill
- Project Management
- Time Frame
Cheatsheet to help you choose:

The Design Model
- Architecture Design
- Illustrasi subsystem yang terhubung dan setiap subsystem boleh punya arsitektur sendiri (subsystem dalam subsystem yg terhubung)
- Class & Method Design
- Class dalam Class diagram yang tadinya cuma berisi metode dan attribute doang, ditambahkan spesifikasi tipe variable untuk attribute dan return type untuk metode
- Design pattern
- Solusi Reusable untuk masalah yang serupa biar ga perlu develop solusi lagi (biar lebih murah)
- Component Level Design
- Illustrasi mendetail dari setiap komponen software
- Data Structure dan Algorithmic Detail
- Interface yang memberi akses ke component operations
- Illustrasi mendetail dari setiap komponen software
- Deployment level design
- Gimana caranya nanti software lu bakal dideploy dan bagaimana tempat lu deploy dapat men-support software lu

- Gimana caranya nanti software lu bakal dideploy dan bagaimana tempat lu deploy dapat men-support software lu

