The Leanpub Frontmatter Podcast Feat. Maciej "MJ" Jedrzejewski, Author of Master Software Architecture: A Pragmatic Guide

In this interview, Leanpub co-founder Len Epp talks with Maciej "MJ" Jedrzejewski, author of the Leanpub book Master Software Architecture: A Pragmatic Guide.

Episode Details

In this interview, Leanpub co-founder Len Epp talks with Maciej "MJ" Jedrzejewski, author of the Leanpub book Master Software Architecture: A Pragmatic Guide.

MJ, based in Switzerland, is a software developer, architect, and tech lead with extensive experience in the IT industry. He discusses his background, starting from his early fascination with hardware and overclocking processors in Poland, to his transition into software development and architecture, now working in Switzerland.

The interview covers MJ's journey from software development to becoming a software architect. He explains how his career highlights the importance of understanding both technical and business aspects when designing software. In his book, MJ offers a practical guide for navigating the complexities of software architecture, emphasizing the need for pragmatic solutions that can evolve with the business.

MJ delves into the definition of software architecture, explaining that each architect may have a different perspective. For him, software architecture is a pragmatic and holistic approach to building software that includes understanding the business domain, deployment strategies, security, and testing. One of the key points he makes is about focusing on evolutionary architecture, where systems can adapt and grow over time.

A major theme of the discussion is the importance of understanding the business domain in software architecture. MJ describes how architects need to break down the problem into smaller subdomains and ensure that everyone on the team is aligned on the language and processes. He also discusses techniques such as “eventstorming” and domain storytelling, which are crucial for uncovering the right requirements and designing systems that meet business needs.

The conversation touches on key topics from MJ's book, including release strategies and security. He explains how to plan for different types of releases - whether you're deploying directly to production or working within a more regulated environment. MJ also highlights the importance of testing early and often, using strategies like automated testing and continuous integration to ensure systems are robust and scalable.

Another important focus of the interview is security. MJ discusses best practices, such as using static analysis tools, encryption, and partnering with third-party services for penetration testing. He emphasizes the need for automation in security processes and the importance of identifying potential vulnerabilities early in the development cycle.

Finally, MJ shares insights into how he approached writing *Master Software Architecture*. He spent years collecting ideas before fully dedicating himself to writing the book over a five-month period. He describes his disciplined yet flexible writing process, where he focused on creating clear and actionable content, complete with over 230 images and diagrams to support practical learning.

Listen to the full episode here.

About the Book

Book cover image for Master Software Architecture: A Pragmatic Guide
Master Software Architecture: A Pragmatic Guide

Feeling lost in the world of software architecture? This software architecture book is for you!

Years ago, I felt lost when I started in software architecture. There were so many topics and issues, and I was a novice architect in the middle. I didn't know where to start building applications, what key areas to pay attention to, or how to build systems that would be able to evolve over many years.

I have spent countless hours and days learning to recognize this area, and it has not been easy—knowledge was scattered throughout the Internet, books, and tutorials. Finally, mentors helped me get on the right track.

That's why I decided to write this software architecture book. I want to help you navigate this complex world of hard decisions, trade-offs, and techniques that will support you in this fantastic journey. I wish you didn't have to make the same mistakes as me and give up your private life by spending many hours looking for the right information. Each step describes practically the most important aspects of software architecture.

Contents:

Step 1: Understand Software Architecture: In this step, you will learn the basics of software architecture, covering key areas like business analysis, solution architecture, and infrastructure. You'll understand the role of software architects, their influence on architectural decisions, and the impact of drivers like functional requirements, technical constraints, and quality attributes while exploring how pragmatism and holism shape these decisions.

Step 2: Discover Your Business Domain: Next, we will explore the critical aspect of system design: the business domain. Through workshops on Event Storming and Domain Storytelling, you will learn to analyze processes, discover subdomains, define bounded contexts, and create a context map (strategic Domain-Driven Design).

Step 3: Recognize the Environment Around You: Step three focuses on understanding your work environment, including decision-making processes, project goals, budget limitations, and differing expectations of stakeholders and development teams. You will assess team skills with a competency matrix, plan infrastructure for various team setups, and learn to calculate crucial metrics like active users, request numbers, and SLA-defined availability, then apply this knowledge to a practical case.

Step 4: Choose Deployment Strategy: In this step, we explore the technical aspects of software architecture, focusing on single and multiple deployment unit strategies and their most popular representatives: modular monoliths and microservices. You will learn about communication methods, database design, deploying changes, scaling applications, and key patterns like outbox, inbox, and dead letter queue.

Step 5: Define Release Strategy: Step five focuses on delivering new application versions using strategies like basic, blue-green, canary, and rolling deployments and leveraging continuous delivery and deployment. You will adopt engineering practices such as swarming, pair and mob programming, feature flags, trunk-based development, and short-living branches. You will also learn how to organize post-mortem meetings to analyze past production issues and prevent future ones. I will also show you how to handle changes in the database in case of various versions of the application,

Step 6: Focus On Testing: This step covers different ways to test your software, focusing on key concepts from a software architect’s perspective. You will learn about the pyramid of tests, the inverted pyramid, the diamond, when to use each, penetration, performance, and load testing to ensure software reliability.

Step 7: Evolve Your Architecture: This step highlights that architecture evolves over time, focusing on four key steps: simplicity, maintainability, growth, and complexity. You'll learn helpful concepts like CQRS, database replicas and sharding, and tactical Domain-Driven Design to ensure your application's robustness and support informed decision-making as it evolves with the business.

Step 8: Don't Forget About Security: In the final step, you will learn about common security vulnerabilities in greenfield and legacy applications, such as IDOR, supply chain attacks, SQL injection, XSS, and DDoS. You'll also explore defense strategies, misconceptions leading to vulnerabilities, and the differences between encoding, encryption, and hashing to select the appropriate mechanism for your needs.

Extra 1: Other Engineering Practices: This section covers important engineering practices that didn't fit into the main body of the book. You'll learn about metrics, developer carousels, effective use of vertical slices in product design, and managing technical debt.

Extra 2: Architecture Exercises: To master software architecture, you need to put theory into practice. I have prepared several real-world scenario exercises to challenge you, validate your understanding, and highlight areas for further study, enhancing your learning journey.

About the Author

Picture of author Maciej "MJ" Jedrzejewski
Maciej "MJ" Jedrzejewski

Fractional architect, consultant, and advisor. 12 years in the IT industry.

Author of Mastering Strategic Domain-Driven Design book and Evolutionary Architecture repository.

Promoter of continuous deployment, holistic and pragmatic software architecture, and short feedback loops. Speaker at IT events.

New 📚 Release! Master Software Architecture: A Pragmatic Guide by Maciej "MJ" Jedrzejewski

Leanpub book LAUNCH! Master Software Architecture by Maciej "MJ" Jedrzejewski

Clips From This Episode of the Frontmatter Podcast

Coming soon!


Publish Early, Publish Often