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 !!

What you need is a tactic !!

PreviousArchitects' mojo: styles and patternsNextSelf-test time 2 (for real)

Last updated 1 year ago


_(Free photo by Luca Unniboni on [Unsplash](https://unsplash.com/photos/bUpwY7EdrlQ))._

One of the big challenges we have to face is the lack of visibility of software structures when compared to other products made by humans. Think of a building, a bridge, or a car. Clearly, these structures are composed of other structures and elements, which are put together by using different gluing/connection mechanisms and a plethora of engineering methods. Are software systems structures composed of other structures and components that are put together by using engineering methods? Yes, they are. The big difference is that most of the structures and components in software systems are also software (), which means that they are not visible to the user because at the end, they are strings of zeros and ones running on a Zilicio-based world (the chips in the computers). Of course you can see the hardware, which is also part of the software system. However, the soul of a software system is not tangible at all. What the users can see is the UI and documents of the systems.

OK, OK, but how does this concept of (in)visibility fit in our book? Some of the engineering techniques we use are not as fancy as the math-based methods of other , but we have several methods that belong to the book-of-knowledge that several guys have built since the last century (circa 1950). In addition to architectural styles and design patterns, there are specific "recipes" that have been designed, in particular, to deal with and achieve quality attributes. These recipes are known as architectural tactics (or tactics).

Recap: A quality attribute (aka quality properties) is a stakeholder concern in the non-functional sense. This means that a quality attribute is a non-functional property that can impact the quality as perceived by the stakeholder. Examples of quality attributes are: security, scalability, performance, etc.

According to Nick Rozanski and Eoin Woods in his seminal book "Software Systems Architecture":

"An architectural tactic is an established and proven approach you can use to help achieve a particular quality property (e.g., defining different processing priorities for different parts of the system’s workload and managing this by using a priority-based process scheduler to achieve satisfactory overall system performance)."

Another definition of tactic from Len Bass et al. book is:

"A tactic is a design decision that influences the control of a quality attribute response."

In other words, a tactic is a recipe for achieving a quality attribute. Note that a tactic is different from a design pattern in that the pattern operates at the class level, while a tactic is a design decision that might involve hardware, architectural style, or execution of specific actions. An example of well-known tactics for achieving scalability are vertical and horizontal scalability---while the former establishes that increasing the resources in a machine (it is like asking help to Captain America when you are in a fight), the latter suggest to include more machines that distribute the computing tasks across the machines (it is like asking help to a thousand minions when you are in a fight). If you are interested in reading more about the architectural tactics, please check (at your own pace) the Rozanski's and Bass's books referenced in this section.

  1. Nick Rozanski, Eoin Woods. Software Systems Architecture, Addison Wesley, 2005.

😅