Back to blog
    SoftwareArquitetura

    Software Architecture Fundamentals: A Beginner's Guide

    Many developers believe that software architecture means drawing complex diagrams, choosing between AWS or Azure, or deciding whether an application should use microservices.

    Software Architecture Fundamentals: A Beginner's Guide
    June 12, 20267 min read

    In practice, architecture is something much more important.

    Architecture is about making decisions.

    Before choosing a language, a database, or a framework, we need to understand the problem we are trying to solve.

    In this article, you will learn:

    • What Software Architecture is.
    • How architects analyze problems.
    • The difference between architecture and implementation.
    • What quality attributes are.
    • How to evaluate trade-offs.
    • When to use monoliths and microservices.
    • How to develop an architectural mindset.

    What is Software Architecture?

    When we hear the word architecture, we usually think of diagrams full of boxes and arrows.

    But architecture is not the diagram.

    The diagram is just a visual representation of the decisions made.

    A good analogy is to think of a city.

    A city has:

    • Streets
    • Avenues
    • Hospitals
    • Schools
    • Transportation
    • Electricity
    • Sanitation

    None of this exists by chance.

    Everything was planned so that the city functions in an organized way.

    With software, it's exactly the same thing.

    The architecture defines how the parts of the system are organized to meet the business objectives.

    What Does Architecture Define?

    A well-constructed architecture answers important questions:

    • Who is responsible for each function?
    • Where will the data be stored?
    • How do the components communicate?
    • How will the system grow in the future?
    • How will it behave in the face of failures?

    In other words, architecture defines:

    • Responsibilities
    • Boundaries
    • Communication
    • Data flow
    • Evolution strategies

    What Does Architecture Not Define?

    A common mistake is to confuse architecture with technology.

    Architecture is not:

    • Python
    • Java
    • Go
    • .NET
    • AWS
    • Azure
    • PostgreSQL
    • MongoDB

    The same architecture can be implemented using completely different technologies.

    Technologies change.

    Principles remain.

    Architecture is the organization of the system to meet business objectives.


    How Architects Think

    One of the biggest differences between beginner developers and experienced architects is the way they approach problems.

    The Most Common Mistake

    Many teams start by asking questions like:

    • Will we use PostgreSQL?
    • Will we use MongoDB?
    • Will we use Kubernetes?
    • Will we use microservices?

    These questions come too early.

    Technology should not be the starting point.

    The Correct Process

    Architects usually follow a flow similar to this:

    Problem
    ↓
    Requirements
    ↓
    Constraints
    ↓
    Architecture
    ↓
    Technology
    

    Notice that technology only appears at the end.

    Practical Example

    Imagine you need to build a financial system.

    First, you identify needs such as:

    • Data consistency
    • Secure transactions
    • Complex relationships
    • Information integrity

    Only after that does it make sense to choose a database.

    In this scenario, PostgreSQL may emerge naturally as an excellent option.

    Not because it's popular.

    But because it meets the identified needs.

    Technology is a consequence of architectural decisions.


    Quality Attributes: What Really Influences Architecture

    Not all requirements talk about functionality.

    Many of them talk about behavior.

    These requirements are known as quality attributes.

    And they often have more impact on architecture than the functionalities themselves.

    Performance

    Main question:

    Does the system respond quickly?

    Examples:

    • Product catalog
    • Checkout
    • Public APIs
    • Searches

    Availability

    Main question:

    Does the system continue to function even in the face of failures?

    Examples:

    • Unavailable AI provider
    • Payment gateway down
    • Database issues

    Scalability

    Main question:

    Does the system support growth?

    Examples:

    • More users
    • More orders
    • More simultaneous accesses

    Security

    Main question:

    Are the data protected?

    Examples:

    • Authentication
    • Authorization
    • Encryption
    • Secret management

    Observability

    Main question:

    Can we understand what's happening?

    Examples:

    • Logs
    • Metrics
    • Distributed tracing
    • Alerts

    Maintainability

    Main question:

    Is the system easy to evolve?

    Examples:

    • Low coupling
    • Organized code
    • Clear responsibilities

    Good architecture seeks to balance all these factors.


    What Are Trade-Offs?

    One of the most important lessons for any architect is to understand that there are no perfect solutions.

    Every decision has advantages and disadvantages.

    This balance is called a trade-off.

    Example 1: Monolith

    Advantages

    • Simplicity
    • Lower cost
    • Ease of operation

    Disadvantages

    • Less flexibility in extreme scaling scenarios

    Example 2: Microservices

    Advantages

    • Team independence
    • Individual scalability
    • Decoupled deployment

    Disadvantages

    • Operational complexity
    • More difficult observability
    • Higher infrastructure cost

    Example 3: Single Database

    Advantages

    • Simplicity
    • Consistency
    • Centralized operation

    Disadvantages

    • Possible future bottleneck
    • Coupling between domains
    • More limited scalability

    The architect's role is not to find a perfect solution.

    The architect's role is to find the best possible balance for the current context.

    Architecture is the management of compromises.


    Monolith vs Microservices: Which to Choose?

    This is probably one of the most famous discussions in modern development.

    And also one of the most misunderstood.

    What is a Monolith?

    Monolith means that the application is deployed as a single unit.

    Example:

    Backend
    
    ├── Catalog
    ├── Cart
    ├── Orders
    ├── Payments
    ├── Support
    └── AI
    

    Everything runs within the same application.

    The Problem is Not the Monolith

    Many people associate monoliths with poorly organized systems.

    This is not true.

    The problem is not being a monolith.

    The problem is being disorganized.

    What is a Modular Monolith?

    In a modular monolith, each area of the system has well-defined responsibilities.

    Backend
    
    ├── Catalog
    ├── Cart
    ├── Orders
    ├── Payments
    ├── Support
    ├── AI
    └── Core
    

    Each module has clear boundaries and internal contracts.

    This approach offers:

    • Operational simplicity
    • Organization
    • Ease of maintenance

    What are Microservices?

    Microservices divide the system into independent applications.

    Catalog Service
    
    Cart Service
    
    Order Service
    
    Payment Service
    
    Support Service
    

    Each service has:

    • Its own deployment
    • Its own database
    • Its own monitoring

    When Do Microservices Make Sense?

    Usually when there are:

    • Multiple teams
    • A large number of users
    • A need for independent scalability
    • Complex business domains

    When Do Microservices Not Make Sense?

    When there is:

    • A single team
    • A single product
    • Low traffic volume
    • A need for rapid delivery

    In these cases, the added complexity usually generates more problems than benefits.

    My Recommendation for New Projects

    In most starting projects, a modular monolith is usually the best choice.

    It offers:

    • Lower cost
    • Lower complexity
    • Faster development speed
    • Ease of maintenance

    If the product grows significantly, specific modules can be extracted into microservices in the future.

    There's no reason to start with an architecture prepared for a problem that doesn't exist yet.


    Conclusion

    Software architecture is not about choosing technologies.

    It's about making good decisions.

    Throughout this article, we've seen:

    • What software architecture is.
    • How architects think.
    • The importance of quality attributes.
    • The concept of trade-offs.
    • The differences between monoliths and microservices.

    If there's one message you should take away from this content, it's this:

    Architecture is not about tools. Architecture is about decisions that help the business achieve its objectives with the lowest possible level of complexity.

    Mastering this mindset is the first step to evolving from a developer to a software architect.