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
  1. Chapter 7: Yes, software architecture matters !!

About design and design constraints

PreviousSelf-test timeNextArchitects' mojo: styles and patterns

Last updated 1 year ago

Remember that one of the most important things in the engineering disciplines is design, and computer science, software engineering and systems/computing engineering are not the exception. Although we do not follow "heavy" a priori methods to design and test the design of software before the construction phase (like other engineers do), we have a plethora of methods, models, and tools in our toolbox that allow us to design software applications. For us, design is highly important because we are engineers and architects, and as a consequence, (i) we build software systems that solve human kind issues/problems, and (ii) we must deal with a set of design constraints (e.g., budget, a specific software stack, or a set of service level agreements). In order to build software systems, we must design (or define) an architecture. Please take a look to the following video of Prof. Alex Orso (Georgia Tech) that briefly explains two different definitions of software architecture:

(Video by Prof. Alex Orso from Georgia Tech available at . The video is published under the Standard YouTube license )

In the context of software development, architecture is the design of the structures that compose a system. One easy way to understand the architecture is by using a "metaphor" of components and connections. In this sense, a software system is a set of components that interact with each other. Thus, as Prof. Orso said in the video, a software architecture is a design of how the components interact in a software system and the rationale for that design.

Note that an architecture also includes the hardware and human components of a system.

OK, but what is the meaning of rationale? It is the set of underlying reasons for your design decisions and your architecture, e.g., "we decided to follow a publish-suscribe style because we were interested on asynchronous notifications".

Remember that when designing a system there are three aspects that should be gathered/elicited to define what is the system to implement and how is the system going to be implemented:

  1. the features and services offered by the system to the users, i.e.,** the functional requirements**;

  2. the quality attributes and service levels expected by the stakeholders, i.e., the non-functional requirements

  3. technology constraints regarding the production/deployment environment (e.g., the system should be deployed on AWS but with Windows servers).

Both non-functional requirements and technology constraints are design constraints that drive systems' implementation. Design constraints are like "nature forces" that you must fight/deal with when designing a system. If there are design constraints, then your architecture must assure the constraints will be covered. But, How? Well, by using architectural styles, patterns, and tactics.

YouTube