Book
  • Introduction
  • Welcome !!
  • Chapter 1: The mobile ecosystem
    • Fragmentation is the devil
    • There is more than one type of mobile app
    • ... more than one type of app
    • ... one type of app
    • Under pressure (ee da de da de) !!
    • Further reading!!
  • Chapter 2: Let's start with design thinking
    • A taste of design thinking
    • The five steps
    • Design for everybody
    • Accessibility in mobile apps
  • Chapter 3: Give me a context and I will give you an app
    • Users
    • Personas? Users ? What is the difference?
    • Please, help me to model the context
    • The context canvas
  • Chapter 4: Powerful models
    • Data architecture is the foundation of analytics
    • From data to information and knowledge
    • Information/Knowledge in our mobile ecosystem
    • Questions to ask yourselves when building and classifying questions
    • The visualization-data map
    • On the scene: describing how personas interact with your app
  • Chapter 5: A GUI is better than two thousand words
    • 'Good to Go:' Let's explore the Design Systems
    • Designing GUI Mocks
    • No prototype... no deal
  • Chapter 6: About mobile operating systems ... and other deamons
    • The Android OS ... son of LINUX
    • iOS son of Darwin? or is it iOS son of UNIX?
    • Kernels
  • Chapter 7: Yes, software architecture matters !!
    • Self-test time
    • About design and design constraints
    • Architects' mojo: styles and patterns
    • What you need is a tactic !!
    • Self-test time 2 (for real)
    • Further reading
  • Chapter 8: Finally... coding
    • MVC, MVVM, MV*, MV...What?
    • Programming models: the Android side
    • Hello Jetpack, my new friend... An Android Jetpack Introduction
    • Programming models: the iOS side
    • Controllers and more controllers
    • Flutter son of... simplicity
    • Programming models: Flutter?
    • Flutter: State matters... Let´s start simple
    • Flutter: State matters... Complex stuff ahead
    • Micro-optimizations
  • Chapter 9: Data pipeline
    • Generalities data pipelines
    • Data storage types
    • Types of data pipelines
  • Chapter 10: Error Retrieving Chapter 10
    • Eventual Connectivity on Mobile Apps
    • How to handle it on Android
  • Chapter 11: The jewel in the crown: Performance
    • As fast as a nail
    • Memory bloats
    • Energy leaks
    • Final thoughts
  • Chapter 12. Become a performance bugs exterminator
    • Weak or strong?
    • Micro-optimizations
    • The single thread game !!
    • Using multi-threading like a boss !!
    • Caching
    • Avoiding memory bloats
    • Further readings
Powered by GitBook
On this page

Chapter 7: Yes, software architecture matters !!

PreviousKernelsNextSelf-test time

Last updated 1 year ago

(By Mario Linares-Vásquez)

NOTE: In this chapter, I will use some online videos created by Prof. Alex Orso (Georgia Tech) as a reference.


_(Free photo from [https://www.pexels.com](https://www.pexels.com/photo/arch-architecture-art-building-415574/). Creative Commons Zero (CC0) license)._

At this point in your engineering (or computer science) program, you are very close to seeing the ''light at the end of the tunnel". You are at your senior year and you have already passed (or failed) a large set of classes that have prepared you for this moment (attending this awesome class). Our "Mobile apps development" class is a software engineering-oriented one that focuses on the process of designing and building mobile apps based on a set of design constraints. In the case of mobile apps, we must give special attention to design constraints because mobile apps run on environments that have limited resources and are exposed to eventualities from this context (e.g., the phone is running out of memory, or there is no good internet connection when using your favorite app). Therefore, _design constraints_ should be part of the development process, including the evolution and maintenance phases.

Do you not remember what a design constraint is? Well, this is one of the foundations of the engineering disciplines, because we, as engineers, design and build awesome things that (i) provide solutions to problems experienced by people (cool and challenging problems), and (ii) improve the life quality of people in our society. But if you do not remember what a design constraint is, no worries!! In this chapter, we will recap (briefly) the most important concepts you need to know for our class.

Examples of design constraints are the quality attributes** that software applications must support and deal with, such as eventual connectivity, performance, or accesibility. Design constraints can be achieved in software applications by implementing _design decisions_ that combine hardware, software, and humanware. The way how we ---engineers--- organize the design decisions is by means of an architecture. Design an architecture requires us (first) to follow well-proved _architectural styles and patterns _(or to create new ones), and then to implement _tactics_ **that will help us assure our app supports the design constraints.

The term architecture makes reference to the design of the "structures" that compose a system and the rationale for that design.

Design constraints, architecture, quality attributes, non-functional requirements, architectural styles and patterns, tactics, etc., are concepts that you should know (if you already attended a software architecture class). Applying these concepts should be your mantra, since you are not only a programmer--you are an engineer and an architect. The lack of architectural design in mobile apps is one of the top reasons for having buggy apps that will be easily dropped/uninstalled by users. The mobile ecosystem has millions of apps that can be easily browsed by users that look for "replacement products" (i.e., an app that does a better job than your app). Thus, high quality is a mandatory feature for mobile apps.

In the following sections, you will find a brief description of those main concepts. This is not a "replacement" of your software architecture or software design classes. This is a complement, and we build "upon the shoulders of giants", i.e., you are supposed to be ready to design software applications (like a boss!!). We just want to make sure we are on the same page, and we talk the same language in the class. In the case you want to go deep into the concepts, we provide additional links and further readings.

Architecture is an amazing discipline that allows us to build great pieces of art like the one you saw in the photo at the beginning of this section. Software systems are also masterpieces composed of thousands, millions of components called code, libraries, resources, etc.