Showing posts with label Enterprise Architecture. Show all posts
Showing posts with label Enterprise Architecture. Show all posts

2026-08-24

2026-08-24 Monday - On The Value of Diagrams

This post was inspired by my reply/comment to a LinkedIn post by Will Borici (Senior Consultant - Platform Strategy | Business Architecture (Data/AI-enabled); NTT DATA, Inc.)

 

[image credit: Vilkasss on pixabay dot com]

Over the weekend, I decided to get started building a piece of software that I have long wanted, and needed. In the past, I have used one commercially available software utility – but it was acquired, and is no longer available. Then I switched to using an open source utility – but it is no longer maintained.

So, I decided to begin.

But, beginning does not mean immediately writing code.

I had some very clear thoughts on what I wanted the software to do, but I wanted to explore the requirements, use cases, and design first.

So, I began drawing diagrams.
Diagrams allowed me to see layers of complexity – that if I had simply started coding – would have constrained, or made more difficult, implementing layers of features I *discovered* that I really wanted.

The more I drew, the more my vision became clearer, crisper, tangible. Reflecting on the diagrams - helped me to see which features to build first, and ways of making it more useful to others.


And, I was reminded, yet again ...
Drawing is a goodness, not a waste.
Even if the diagrams are thrown away, eventually.
Even if the diagrams are no longer maintained.

The diagrams are part of the process in creating great software products.
 

2023-08-22

2023-08-22 Tuesday - Argue for your limitations and, sure enough, they're yours

[Kanji: "Shuhari", image source: wikipedia.org]

Today's meditation:

“Argue for your limitations and, sure enough, they're yours.”
~ Richard Bach, Illusions: The Adventures of a Reluctant Messiah

A favorite book, from my youth.

This quote came to mind today, after I had a chance to reflect on a series of *vigorous* idea exchanges with someone - regarding our *very* different views on the foundational definitions of what is architecture.

In Japanese martial arts, there is a concept known as "Shu-ha-ri" (Kanji: 守破離 Hiragana: しゅはり)

https://en.wikipedia.org/wiki/Shuhari

"shu (守) "protect", "obey"—traditional wisdom—learning fundamentals, techniques, heuristics, proverbs."

"ha (破) 'detach', 'digress'—breaking with tradition—detachment from the illusions of self, to break with tradition - to find exceptions to traditional wisdom, to find new approaches. In some styles of Japanese music (gagaku and noh), it is also the middle of the song."

"ri (離) 'leave', 'separate'—transcendence—there are no techniques or proverbs, all moves are natural, becoming one with spirit alone without clinging to forms; transcending the physical - there is no traditional technique or wisdom, all movements are allowed."

Which roughly translates as "to keep, to fall, to break away" or "follow the rules, break the rules, transcend the rules".

Some architects insist on rigid adherence to certain ideas, definitions, frameworks, standards - that have their roots in thinking that is 30+ years old. When confronted with evolving interpretations of ideas - they react - instead of responding.

It is difficult to let go of what is old, worn, and comfortable - but that is where the "Ha" comes in - to break out of the cycle - and "Ri", to experience new growth.

New interpretations - that challenge existing preconceptions - for what architecture encompasses - is healthy, and necessary.

Clinging to the "Shu" - is to become brittle, and break. For the vitality of the roots to wither and die.

There are thousands of different types of martial arts - many of them share the same principles, concepts, and patterns - but they find different ways to express their essential differences.

Those variations do not make those martial arts less - they enrich the ecosystem.

Variation of interpretation isn't wrong, and it doesn't make one style's interpretation of the martial arts better - or worse - than another.

The same should be the mindset of IT practitioners of the different schools of thought in Enterprise Architecture, Business Architecture, agile practices, etc.

The measure of anything - is whether it is effective.

Will your block stop a kick, or a punch?

Will your approach to architecture deliver results?

We shouldn't be so attached to frameworks like SAFe, TOGAF, or notations, or anything that makes our thinking rigid - and prevents us from moving naturally - and responding to change.

There is a Zen teaching: “The Finger Points at the Moon".

The finger is the spiritual teaching, and the moon is the truth.

This is a reminder not to be too attached to words and/or teachings and not to confuse either with what they are pointing to.

If ISO definitions work for you - and you can deliver results - then use them.

But do not allow your attachments to blind you to growth - and learning new ways.

If another has discarded attachments to strict adherence to some made-up things - be cautious concluding that they must not know what they are doing. Keep what works - Discard what doesn't.

Allow for the possibility that they they have embraced "Ri".

"Ri" is where real progress begins.

2023-08-18

2023-08-18 Friday - Today's Meditation - Reference Architecture as Abstraction

[image credit: 422737 on pixabay.com]

 Today's meditation:


I think many IT teams have "lost the thread" on the value of abstractions in design.

A pattern is not a detail design specification, nor is it an implementation specification, nor is it a solution architecture.

Likewise, a Reference Architecture *SHOULD* be kept at an abstract level - and not be misconstrued as a Solution Architecture (which is almost always implementation specific).

However, the major cloud vendors - to include Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP) - have decided to classify implementation-specific architecture guidance as "Reference Architecture".

Within their respective *WALLED GARDEN* - it is plausibly reasonable - ONLY within the contexts of their specific cloud services environment - as an acceptable exception to classify that type of an artifact as a Reference Architecture.

However, it is not appropriate to let that smudging of the line of Architecture View taxonomy, definition, and distinction - to expand beyond those narrowly defined contexts.

A Reference Architecture SHOULD be something that can be reused, as a macro-level pattern - regardless of the specific technology in any environment.

To put this another way - your Reference Architecture - SHOULD be at the technical capabilities / standards level - not the technology-specific implementation / solution architecture level.

This allows us to define views, the context, use cases, scenarios under which it is fit-for-purpose - and not fit-for-purpose, as well as its limitations, forces & constraints, NFRs, etc. - that are appropriate for a given Reference Architecture - without worrying about the target platform upon which it may be implemented.

The literature within the field of Information Technology - lacks consistency and clarity on this basic definition - and the lack of such clarity - introduces significant issues with getting alignment and agreement - when introducing the concept of Reference Architectures and Patterns into an organization. And thus, more's the pity.

As I mentioned in the 2nd paragraph of this posting - with intention - I have stipulated my view & definition of Reference Architecture with the proviso of "SHOULD" - I allow that there are edge cases (e.g., Walled Garden) .

The benefits of adopting such discipline in how we define and use Reference Architectures:

  • Reuse
  • Clarity
  • Conciseness 
  • Consistency

And designs that consistently address:

  • Availability
  • Scalability
  • Reliability
  • Performance
  • Security

#patterns, #ReferenceArchitecture, #EnterpriseArchitecture, #SolutionArchitecture, #DetailDesign, #SAD, #Specification, #Abstraction, #Reuse  

 

Finally, none other than Gregor Hohpe (Sr. Principal Evangelist, AWS - and author of the books The Software Architect Elevator: Redefining the Architect's Role in the Digital Enterprise; and Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions) weighed in with this comment on my original LinkedIn post:

 



2023-08-12

2023-08-12 Saturday - On The Value of Patterns

[image credit: ValdasMiskinis on pixabay.com]

A recent conversation with a colleague has given me pause to think about one of the more severe stumbling blocks - that I now believe - Enterprise Architects are perhaps far too...

unaware of (to be generous), 

or have made a conscious choice of perceptual blindness (possibly), 

or are simply operating with an unconscious inattentional blindness (likely). 

My university education was in the field of classic computer science - so I have an inherent bias towards thinking in terms of data structures, algorithms, and patterns.

Patterns are such a foundational cornerstone of how I think, and how I approach problems & solutions - it is just a part of my professional DNA.

I cannot comprehend working on any endeavor of software engineering, or at any of the various levels of architecture (enterprise, security, infrastructure, information/data, system, software, solution, ...) without leveraging patterns (either intentionally, or unconsciously). 

To be sure, there are numerous real-world solutions, and mountains of bad code - that were created with no conscious and intentional use of patterns, although unconscious choices of patterns did occur (e.g., Spaghetti is a pattern - it's just, more precisely, an example of an anti-pattern).

Patterns are building blocks.

They can be defined from the micro to macro scale.

They are the basis for any ability to achieve reuse.

They (generally) should not be implementation specific.

They are not implementation specifications.

They are not solution (detail) designs.

Nor are they solution architectures (which by definition, must be implementation specific).

Patterns exist (and suffer) with many different taxonomies - but they do exist.

By studying patterns, you reduce the cognitive load to understand, or design, anything - and it can be very helpful in bringing clarity and precision to any communication.

Patterns support consistency, repeatability, reliability - in the design of any solution.

Most patterns require stipulation of the types of problems (or conditions) under which a given pattern is appropriate - and those for which it would be inappropriate. 

About that stumbling block I mentioned earlier. Sadly, the utility and value of patterns are not universally understood by everyone that works in Information Technology (IT). It is quite often dismissed as too theoretical. Nothing could be further from the truth. Patterns are the bedrock upon which reliable systems are built.

To explore the depth of someone's understanding of patterns, I use a simple discussion exercise, that goes something like this:

Imagine that your company [A] has a new business requirement to send Customer Information updates to partner [B].

Stipulations:

  • There is no current integration between [A] and [B], for this data.

From just that baseline description - the relative degree of experience and expertise of an individual can be quickly assessed - based on the questions they ask, before they begin proposing a solution.

Walking someone through this exercise, can also be very useful, to help explore their understanding of patterns. 

To help with this discovery effort, I use three different sets of requirements, that I assign to three different project phases. 

What is interesting to me, in observing how someone responds to just the limited integration requirements of Phase-1, is which patterns do they turn to first? What questions do they ask? Do they discuss any trade-offs in their consideration of possible choices? Or, do they leap to a solution, before asking any questions? To what degree do they understand/explore the possible Non-Functional Requirements (NFRs)?

Phase-1:

  • Partners: 1
  • NFR: Data Latency MUST BE Less than 24 hours.

Phase-2 requirements, forces someone, who may be just on the edge of making a different integration solution decision - usually to reveal much about their experience, their preferences, their depth of understanding for long-term change management, solution maintainability, operational impact, and potential trade-offs. Observing the questions that someone asks at this point in the discussion...where their thinking goes, how they weigh the different potential trade-offs...is often very illuminating...as is any dearth for just such considerations.

Phase-2:

Phase-3 requirements are where someone's depth and breadth of experience and expertise are really discovered. No one can hide from this revealing change in requirements. All is laid bare.

 Phase-3:

  • Partners: 1,000
  • NFR: Data Latency MUST BE less than 60  seconds (which, although not explicitly stated, implies an NFR for Scalability)

The long-term implications of any patterns proposed/chosen, across these three sets of fairly simple requirements - can be a great teaching tool, for those that are willing to listen - and engage in an open and honest dialogue.

Hopefully, participants in such discovery discussions, may deepen their appreciation of the nuances of various concerns that a pattern-based approach can help encapsulate and encompass, in a repeatable, and reusable, manner.

Without understanding the implications of pattern choices - some folks may continue to just use techniques that they have grown comfortable with - but which can be woefully inadequate for the requirements stipulated. This has implications for many Non-Functional Requirements (NFRs):

  • Accuracy
  • Adaptability 
  • Availability
  • Change Management
  • Compliance 
  • Configuration Management
  • Cost, initial and Life-cycle cost 
  • Data Integrity
  • Data Latency
  • Data Quality
  • Disaster Recovery 
  • Efficiency
  • Extensibility
  • Failure Management
  • Fault Tolerance 
  • Interoperability
  • Maintainability
  • Network Latency
  • Observability
  • Operability
  • Performance
    • Response Time
    • Memory Utilization
    • CPU Utilization
  • Reliability 
  • Repeatability
  • Resilience 
  • Re-usability
  • Scalability
    • Capacity
    • Elasticity 
    • Throughput
  • Security
    • Authentication
    • Authorization
    • Encryption
    • Exploitability
    • Attack Surface Area
  • Stability
  • Support-ability

A good pattern should address a relevant set of NFRs for a particular problem/solution context. This helps teams be holistic in how they approach solution design - and it can help them avoid missing key/critical concerns.


References:

  1. https://en.wikipedia.org/wiki/Pattern_language
    1. https://www.patternlanguage.com/ 
    2. https://en.wikipedia.org/wiki/A_Pattern_Language
    3. https://arl.human.cornell.edu/linked%20docs/Alexander_A_Pattern_Language.pdf
  2. https://wiki.c2.com/?DesignPatterns
  3. https://en.wikipedia.org/wiki/Software_design_pattern 
  4. https://en.wikipedia.org/wiki/Enterprise_Integration_Patterns
  5. https://en.wikipedia.org/wiki/Modular_design

 

Suggested Books: 
(still working on this list, will add [n] numbering later...)

[-] Christopher, Alexander, et al (1977).  A Pattern Language: Towns, Buildings, Construction (Center for Environmental Structure Series)

[-] Davis, Cornelia (2019).  Cloud Native Patterns: Designing change-tolerant software,  First Edition

[-] DiBernardo, Michael, et al, (link retrieved: 2023-08-12). The Architecture of Open Source Applications

[-] Fowler, Martin, et al (2002). Patterns of Enterprise Application Architecture. Addison-Wesley. ISBN 978-0-321-12742-6

[-] Freeman, Eric T.; Robson, Elisabeth (2021). Head First Design Patterns, 2nd Edition

[-] Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. ISBN 978-0-201-63361-0

[-] Hohpe, Gregor; Woolf, Bobby (2003). Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions. Addison-Wesley. ISBN 978-0-321-20068-6, [companion web site]

[-] Indrasiri, Kasun, et al (2021). Design Patterns for Cloud Native Applications: Patterns in Practice Using APIs, Data, Events, and Streams, 1st Edition

[-] Resnick, Pini, et al (2020). Cloud Native Transformation: Practical Patterns for Innovation, 1st Edition

[-] Richardson, Chris (2018). Microservices Patterns: With examples in Java, First Edition, [companion web site]   

 

YouTube Videos: 

  1. Christopher Alexander - Patterns in Architecture
    1. The 1996 ACM Conference on Object-Oriented Programs, Systems, Languages and Applications (OOPSLA). San Jose, California, October of 1996
  2. ...

2021-08-24

2021-08-24 Tuesday - Book Review - Designing API-First Enterprise Architectures on Azure

 

image source: Amazon.com

 Designing API-First Enterprise Architectures on Azure: A guide for architects and developers to expedite digital transformation with API-led architectures, by  Subhajit Chatterjee.

https://www.amazon.com/Designing-API-First-Enterprise-Architectures-Azure/dp/1801813914
Packt Publishing; 1st edition (August 24, 2021)
290 pages
 

My book review on Amazon:

https://www.amazon.com/gp/customer-reviews/R3JLYPXRZ5P52R

 

Full Disclosure: I was provided a preview PDF copy of the book, by Deepak Kumar (Marketing Coordinator, Packt Publishing)

My Book Review Summary

A decent high-level/broad survey/roadmap - but lacking sufficient "meat"

This book provides a broad, high-level, enterprise architecture overview of API design – with some context based on the Microsoft Azure cloud platform – but many of the topics/concepts can easily be translated/applied to any commercial cloud vendor’s platform.

The primary value of this book is as more of a summary/roadmap - than a detailed technical or architecture guide for implementing an API strategy for the enterprise . The topics in the well-organized chapters – and the many links to the additionally suggested references/ reading – is worth the price of the book for the busy architect, developer, or IT manager.

What I Particularly Liked:

- The framing and weaving of business drivers, requirements, forces, constraints, concepts, and examples through the lens (and continuity) of the simulated case study ("Packt Insurance, Inc.") discussion that is threaded throughout the book.

- The “further reading” citations at the end of each chapter – and in particular – that it is not simply citations of additional Packt books.

- Chapter-1’s definition of service scales (re: page-7, microservice, mini-service, macroservice) – as well as the key benefits of an API-led architecture (re; page-11,  four points enumerated).

- Chapter-2's framing of APIs as digital services - and the use of service and personas maps.

- Chapter-2’s illustration of the concept of API layers (re: page-23) – an important concept in the design of enterprise API architecture strategies.

- Chapter-3's level-setting of Architecture Principles - and the discussion on API architecture styles - as well as the discussion on Serverless APIs.

- Chapter-3’s Figure and Table 3.1 – Agile architecture evolution process (re: page-41)

- Chapter-4's coverage of the Security Development Lifecycle (SDL) - as well as the elaboration on defining SLOs and SLIs for APIs. 

- Chapter-5's coverage of contract-first API design - and in particular, promoting the use of the Open API Specification (OAS). 

- Chapter-6's discussion on secure by design, as well as design patterns.

- Chapter-7's focus on DevOps - and the enumeration of DevOps Capabilities that are important to APIs design, development, operation - as well as the four supporting "pillars".

- Chapter-8's coverage of Enterprise Application Integration (EAI)  patterns. 

- Chapter-9's discussion on monetization - and APIs as potential revenue generating mechanisms.

 

Suggestions for Improving the Next Edition:

Overall, I am a bit disappointed in this book – as it far too often only provides a very brief paragraph to describe an Azure capability – without providing any discussions in the book of concrete examples in code – and then suggesting the reader follow a link to “Find out more…”. See pages 55-56 for examples (re: App Service, Function App, Logic App) – when the value of the book could be greatly increased by providing examples – and counter-examples (how to properly use these services, and how you might inadvertently abuse them).

What is keenly missing – is the author’s practical, first-hand,  insights on how/when to use which of these services – to solve particular kinds of solution design problems.

Consider increasing the length of the book (by 150-200 pages) to provide details on the following topics (that are only lightly referenced in the book):

  • Domain-Driven Design (DDD)
  • Event Storming
  • Behavior-Driven Design (BDD)
  • API anti-patterns
  • API Authentication/Authorization (beyond the brief mention on pages 80-81).
  • High Availability Patterns (re: page-98) – would greatly benefit from having some architecture diagrams to illustrate these patterns.

Given that the book’s case study is based on a simulated insurance company – readers of Chapter-5 would greatly benefit by the author exploring how query parameters for an HTTPS GET – that might potentially expose Personally Identifiable Information (PII), Personally Protected Information (PPI), or Personal Health Information (PHI) – should NOT be passed via a GET query – but should be sent as content in an HTTPS POST.

Additional chapters to explore the capabilities of such 3rd party tooling as Swagger Hub, or Postman (beyond their brief mention on page-158)  – as part of a complete view of their potential use in a multi-team enterprise API design/build/test pipeline – would be a goodness.

Chapter-8’s discussion of Azure API Management (APIM) – could be greatly/beneficially expanded to discuss how common/reusable/shared Open API Specification (OAS) fragments should/could be managed – in the absence of such capability within Azure (e.g., leveraging SwaggerHub, or Postman Enterprise, or ?). This is a fundamental/common enterprise-class problem. Additionally, guidance on when/whether an enterprise should consider having only one APIM instance vs. multiple APIM instances. 

Chapter-8’s discussion of the API Developer Portal – could be greatly/beneficially expanded to discuss what are the APIM options/capabilities to restrict access to API definition content – for different internal teams, as well as external partners, or 3rd party API developers.

Chapter-8 should also include a discussion of Azure’ssupport for CMS-mandated FHIR APIs (re: Healthcare).

 

Missing/Broken Links

(I grew weary of finding so many of these - that I gave-up testing links in the book)
  • The github link on page-108 is broken.
  • The link is missing on page-160 for “Microservices Architecture”) under Further Reading.
  • The link is missing on page-165 to the DevOps Dojo white belt foundation.
  • The URL for the link is broken/invalid on page-175 to the git-handbook.
  • The URL for the link is broken/invalid on page-185 to the Azure Monitor info.
  • The URL for the link is broken/invalid on page-189 to the devsecops.
  • The URL for the link on page-191, mastering markdown, returns a 404 error code (“File Not Found”) – because the URL for the link is incorrect.
  • The URL for the link on page-192, Wikipedia, value stream mapping – is not correct. Also see the  invalid URL link for the “3-explore-first-foundation”
  • The URL for the link on page-193, “4-explore-secondfoundation” is not correct. Also see the invalid URL link “2-explore-thirdfundation-pillar” on the same page. Also note the URL link is missing for the “pillars/3-explore-last-foundation”
  • The URL for the link on page-215, see “/product-categories/integration” - is missing.

 I have reported these to Packt.

Table of Contents:

Section 1: API-Led Architecture in the Digital Economy
1 - Evolution of Enterprise Solution Architectures
2 - APIs as Digital Connectors

Section 2: Build Reliable API-Centric Solutions
3 - Architecture Principles and API Styles
4 - Assuring the Quality of the API Service (or Product)
5 - RESTful APIs –􀁢the New Web
6 - API Design Practices
7 - Accelerating through DevOps Essentials

Section 3: Deliver Business Value for a Modern Enterprise
8 - API-Centric Enterprise Integrations
9 - APIs as a Monetized Product


WordCount

Copyright

© 2001-2026 International Technology Ventures, Inc., All Rights Reserved.