Understanding Software Architecture: Choosing the Right Model for Your Application