Book Image

Software Architecture with C# 9 and .NET 5 - Second Edition

By : Gabriel Baptista, Francesco Abbruzzese
Book Image

Software Architecture with C# 9 and .NET 5 - Second Edition

By: Gabriel Baptista, Francesco Abbruzzese

Overview of this book

Software architecture is the practice of implementing structures and systems that streamline the software development process and improve the quality of an app. This fully revised and expanded second edition, featuring the latest features of .NET 5 and C# 9, enables you to acquire the key skills, knowledge, and best practices required to become an effective software architect. This second edition features additional explanation of the principles of Software architecture, including new chapters on Azure Service Fabric, Kubernetes, and Blazor. It also includes more discussion on security, microservices, and DevOps, including GitHub deployments for the software development cycle. You will begin by understanding how to transform user requirements into architectural needs and exploring the differences between functional and non-functional requirements. Next, you will explore how to carefully choose a cloud solution for your infrastructure, along with the factors that will help you manage your app in a cloud-based environment. Finally, you will discover software design patterns and various software approaches that will allow you to solve common problems faced during development. By the end of this book, you will be able to build and deliver highly scalable enterprise-ready apps that meet your organization’s business requirements.
Table of Contents (26 chapters)
24
Another Book You May Enjoy
25
Index

Using design techniques as a helpful tool

Defining a solution is not easy. Determining its technology increases the difficulty of doing so. It is true that, during your career as a software architect, you will find many projects where your customer will bring you a solution ready for development. This can get quite complicated if you consider that solution as the correct solution; most of the time, there will be architectural and functional mistakes that will cause problems in the solution in the future.

There are some cases where the problem is worse—when the customer does not know the best solution for the problem. Some design techniques can help us with this, and we will introduce two of them here: Design Thinking and Design Sprint.

What you must understand is that these techniques can be a fantastic option to discover real requirements. As a software architect, you are committed to helping your team to use the correct tools at the correct time, and these tools may be the right options to ensure the project's success.

Design Thinking

Design Thinking is a process that allows you to collect data directly from the users, focusing on achieving the best results to solve a problem. During this process, the team will have the opportunity to discover all personas that will interact with the system. This will have a wonderful impact on the solution since you can develop the software by focusing on the user experience, which can have a fantastic impact on the results.

The process is based on the following steps:

  • Empathize: In this step, you must execute field research to discover the users' concerns. This is where you find out about the users of the system. The process is good for making you understand why and for whom you are developing this software.
  • Define: Once you have the users' concerns, it is time to define their needs to solve them.
  • Ideate: The needs will provide an opportunity to brainstorm some possible solutions.
  • Prototype: These solutions can be developed as mock-ups to confirm whether they are good ones.
  • Test: Testing the prototypes will help you to understand the prototype that is most connected to the real needs of the users.

The focus of a technique like this one is to accelerate the process of detecting the right product, considering the minimum viable product (MVP). For sure, the prototype process will help stakeholders to understand the final product and, at the same time, engage the team to deliver the best solution.

Design Sprint

Design Sprint is a process focused on solving critical business questions through design in a five-day sprint. This technique was presented by Google, and it is an alternative that allows you to quickly test and learn from an idea, needing to build and launch a solution to market.

The process is based on a week dedicated by experts to solve the problem mentioned, in a war room prepared for that purpose. The week is separated like this:

  • Monday: The focus of this day is to identify the target of the sprint and map the challenge to achieve it.
  • Tuesday: After understanding the goal of the sprint, participants start sketching solutions that may solve it. It is time to find customers to test the new solution that will be provided.
  • Wednesday: This is when the team needs to decide the solutions that have the greatest chance to solve the problem. Besides, on Wednesday the team must draw these solutions into a storyboard, preparing a plan for the prototype.
  • Thursday: It is time to prototype the idea planned on the storyboard.
  • Friday: Having completed the prototype, the team presents it to customers, learning by getting information from their reaction to the solution designed.

As you can see in both techniques, the acceleration of collecting reactions from customers comes from prototypes that will materialize your team's ideas into something more tangible for the end-user.