Software Architecture: Way of Learning for Microservices

In this article, we are going to learn our how to master any architecture type of Software Architecture, that means we will learn Way of Learning.

Software Architecture: Way of Learning

Before learn any architecture, we should have a strategy to digest the software architecture with following the several steps. The best way to learn is try and experiment the architecture, but sometimes its really hard to experiment all these architecture types into our daily software development jobs.

I have just published a new course — Design Microservices Architecture with Patterns & Principles.

Software Architecture Design

Learning any software architecture, specifically microservices architecture, typically involves the set of steps that we should consider.

For example we should start by learning the fundamental concepts of software architecture, the different types of architecture, and the principles behind microservices architecture.

After learning basics, its good to familiarizing with the key components of a microservices architecture, such as Microservices Communications, Data Management, Deployments and so on.

The important part is experiment which is practice building and deploying microservices-based applications. Start with simple projects and gradually work your way up to more complex ones.

Steps of Learning Flow any Software Architecture

Based on my own experience after working as a software architect for many years, I’ve created a learning flow of any architecture type. You can see the flow at image below;

Software Architecture: Way of Learning

According to this flow, We will always start with a problem. That means before design any architecture, we should find business related, valid problem that everyone accept the problem should be fixed.

So, we will start with the problem and try to solve this problem with learning and designing new architectures, the process is;

  • Problem -> Learn -> Design -> Adapt -> Evaluate

The idea is here, architecture styles are not the solutions, those are tools that we can use for solving particular problem. So now let’s elaborate these steps one by one.

Step 1 : Problem

So we said that, before we design any architecture, we will always start from Problem which is Business Problem that drive our design considerations.

Because If there is no Business Problem or any Problem can’t related to Business, then most probably you don’t need to change your Architecture
if you do, that means you are doing over-engineering. You can see the detailed explanation for learning flow of any Software Architecture:

Steps of Learning Flow any Software Architecture

That's why we always start with problem and identify problem clearly.

Step 2: Learn

After that, the second step is Learning step that we will learn
Architecture approaches Patterns, Principles and Best practices related to problem.

In this step, we should start by learning the fundamental concepts of software architecture, the different types of architecture, and the principles behind microservices architecture.

After learning basics, its good to familiarizing with the key components of a microservices architecture, such as Microservices Communications, Data Management, Deployments and so on. And lastly we should understand the related Patterns, Principles and Best Practices of current architecture.

So that means in Learning step, we will fill our design toolbox with newly learning Patterns, Principles and Best practices.

Step 3: Design

After that, the third step is Design. This is the Hands-on experience step that need to practice building and deploying microservices-based applications. Start with simple projects and gradually work your way up to more complex ones.

After Learn and fill our design toolbox, we will design initial architecture that will solve the problem. Refactor and iterate design till solve the problem with optimum level.

Step 4: Adapt

After Designing, we will adapting with software tools like programming languages, application frameworks, databases and so on. In this step, we should research the best tools, libraries, frameworks to realize the architecture that we design previous step. We should compare and evaluate several tools and decide that which tool is best fit for our problem and design.

Step 5: Evaluate

And lastly, we will evaluate our design and try to find pain points of current architecture, ask our selves;

  • What's wrong with this architecture ?
  • How can we improve this current design ?

and iterate the architecture with following the same steps from the scratch.

So Every design session, we will start with problem and solve this problem during the section with learning new stuff and at the end of the section we will end up with another problem to make architecture better. This loop will help you understand how to design any software architecture for business requirements.

Example Problem for Learning Flow

According to this flow, we can start with very common problem to create e-commerce architecture:

Problem : Sold products on the internet
Learn : e-commerce domain, required specs, monolithic
Design : monolithic, microservices
Adapt : tech stack, java or .net ecosystem
Evaluate : pros-cons , what’s wrong this design

And this process will restart for every problem that we faced.

Let me show you some of the problems that we will solve into my Udemy course:

  • Problem: Increased Traffic, Handle More Request
  • Problem: Break Down Application into Microservices
  • Problem: Direct Client-to-Service Communication
  • Problem: Inter-service communication makes heavy load on network traffic
  • Problem: Chat with Support Agent
  • Problem: Service-to-Service Communications Chain Queries
  • Problem: Long Running Operations Can’t Handle with Sync Communication
  • Problem: Database Bottlenecks when Scaling, Different Data Requirements For Microservices
  • Problem: Cross-Service Queries and Write Commands on Distributed Scaled Databases
  • Problem: Manage Consistency Across Microservices in Distributed Transactions
  • Problem: Handle Millions of Events Across Microservices
  • Problem: Database operations are expensive, low performance
  • Problem: Deploy Microservices at Anytime with Zero-downtime and flexible scale
From Udemy Course — Problem: Break Down Application into Microservices

Conclusion

This process should never end with continuously learn and improve your hand-on experience into your job. Because, software architecture is a constantly evolving field, and it’s important to stay up-to-date on the latest developments and best practices. Continuously learn, improve, and experiment with new approaches and tools to become a skilled software architect.

What's Next ?

Step by Step Design Architectures w/ Course

I have just published a new course — Design Microservices Architecture with Patterns & Principles.

In this course, we’re going to learn how to Design Microservices Architecture with using Design Patterns, Principles and the Best Practices. We will start with designing Monolithic to Event-Driven Microservices step by step and together using the right architecture design patterns and techniques.

--

--

Mehmet Ozkaya
Design Microservices Architecture with Patterns & Principles

Software Architect | Udemy Instructor | AWS Community Builder | Cloud-Native and Serverless Event-driven Microservices https://github.com/mehmetozkaya