What this book covers
Chapter 1, The Sad State of Information Systems, explains what prevents most Information Systems from providing as much value as they should. It also proposes some methods to measure the efficiency of an Information System, focusing on what causes are behind most of the problems observed.
Chapter 2, Applying Industrial Principles to Software, starts by explaining what characterizes the principle of industrialization, and then proposes a way to apply a transformation to Information System management. It focuses on the importance of standards and norms to reduce complexity, which is quite high in most virtual systems.
Chapter 3, Reaching Business Alignment, brings a layer of theory to the problems analyzed in the previous chapters, explaining Conway’s law and some other principles, patterns, and anti-patterns in business/IT alignment. This chapter also introduces the four-layer diagram, which will be used throughout the rest of the book.
Chapter 4, Dealing with Time and Technical Debt, describes the concept of technical debt and explains how Information Systems often start quite well adapted to their context but slowly drift apart from efficiency over time. It also reflects on how to adopt an Agile approach to architecture.
Chapter 5, A Utopic Perfect IT System, is about setting a vision of an absolutely perfect Information System that would be completely aligned with business needs and where changes would be as easy as the original design. Even if this utopic system will never exist in reality, it will help you understand how externalizing functions and strictly separating responsibilities can make existing Information Systems more efficient and ease their evolution over time.
Chapter 6, SOLID Principles from Code to Systems, starts a more technical set of chapters. It discusses the SOLID principles, which usually apply to code, and adapts them to systems architecture. We also present the example Information System that will serve as an applied example for the rest of the book.
Chapter 7, C4 and Other Approaches, lists some of the most well-known architectural methods in software design and architecture. It analyzes the differences and common points between them, giving you some ways to choose which is best suited depending on the context.
Chapter 8, Service Orientation and API, starts with a historical description of all the techniques that have been used to implement the concept of a service, explaining what people expect from the concept. It will explain how standards and pivotal formats are useful in services.
Chapter 9, Exploring Domain-Driven Design and Semantics, is about the importance of having a clear definition of the semantics of a business domain. Though this may sound a bit distant from the notion of software architecture, it actually is at the heart of the method of business/IT alignment.
Chapter 10, Master Data Management, provides a structured view of the management of data in a well-aligned Information System. Master Data Management is much more than persisting data in a database. It is about defining its life cycle and the associated governance and ensuring a progressive evolution of data management, particularly when some legacy data repositories are already in place.
Chapter 11, Business Processes and Low Code, explains the place of business processes in an Information System, and how they can be described formally using standards such as BPMN. Though this is still a theoretical chapter, it describes the tools that can be used in order to implement business process management in an Information System.
Chapter 12, Externalization of Business Rules, closes the loop on the three parts of the ideal IT system, after data and process management. It explains what a business rules management system is and shows some examples of implementations.
Chapter 13, Externalization of Authorization, explains the concept of identification and authorization management and shows how it can be externalized to the benefit of the evolution of the whole Information System. Paradigms such as Role-Based Access Control (RBAC) and Attribute-Based Access Control (ABAC) are also explained with examples.
Chapter 14, Decomposing the Functional Responsibilities, is where we start applying the knowledge from the previous chapters to an example; we’ll get our hands dirty with the code and services. The chapter starts by using the four-layer diagram to model the system and then prepares the technical specifications for the features that will be better considered in external applications.
Chapter 15, Plugging Standard External Modules, takes these specifications into account and proposes some off-the-shelf software solutions for the different features that have been identified, such as Apache Keycloak for IAM, MongoDB for persistence, Alfresco for electronic document management, and so on.
Chapter 16, Creating a Write-Only Data Referential, focuses on the business domain data management of the example Information System. It shows how to code an API server in .NET that will serve the data needed in a way that as far as possible respects standards and all the principles of business/IT alignment that have been described previously.
Chapter 17, Adding Query to the Data Referential Service, builds on the previous chapter and adds some features to the data management system that has been put in place, but also shows how it can be tested in an industrial manner. Standards such as the Open Data Protocol are used in this chapter to improve the implementation.
Chapter 18, Deploying Data Referential Services, shows how to deploy the services that were created in the previous chapters and how to plug them into the IAM. Since security is such an important and complex subject, this is the subject of this dedicated chapter.
Chapter 19, Designing a Second Data Referential Service, uses all the principles presented in the previous chapter to build a second API implementation, this time complexified by the fact that this service has to use webhooks and create a local cache of data in order to reduce calls to the first data referential service. Though it does not add any new principles, it does show how loose coupling can be realized in practice.
Chapter 20, Creating a Graphical User Interface, adds some graphical interfaces to our example Information System, which only exposed API endpoints for now. After showcasing a web-based single-page application and explaining how the concepts and recommendations of business/IT alignment also apply in the GUI domain, it details connecting the data pagination mechanism with the backend, observing a rigorous separation of responsibilities.
Chapter 21, Extending the Interfaces, builds on the previous chapter and applies some industry standards to the GUI that was previously built, namely by automating tests on it but also by showing how importing data can be automated to migrate a system from its legacy data management. It finishes by showing how a good separation of components can help, with the right technical stack, to quickly build a mobile application.
Chapter 22, Integrating Business Processes, closes the set of chapters corresponding to the example application by explaining how business processes can be integrated into it through the GUI, a BPMN engine, or a low-code/no-code modern orchestration tool such as n8n. It finishes by explaining when a dedicated service is necessary to implement orchestration or choreography.
Chapter 23, Applying Modifications to the System, sums up the whole idea of the book by showing how the Information System that has been built can now support all kinds of changes by being impacted by side effects or losing its ability to evolve further. In this chapter, we will change the data structure, the GUI, and the business rules, particularly authorization, and even adjust the business processes, hopefully demonstrating that the initial planning of the architecture makes all this easy.