Architecture Building Blocks

Architecture Building block is a concept from TOGAF, where there is a distinction between Architectural Building Blocks and Solution Building Blocks, where the architectural building blocks mainly describe the functional and technical requirements, and the Solution Building Blocks contain the actual solution, such as the actual product or component that will implement the building block.

In the Townplanner, we only have Architecture Building Blocks that, like in TOGAF describe the functionality and technical characteristics. IT Systems or IT Platforms replace the Solution Building Block concept of TOGAF.

Architecture Building Blocks realize one or more Business Capabilities, and in turn are realized by one or more IT Systems or IT Platforms.

  val lairManagement: ArchitectureBuildingBlock =
  ea describes ArchitectureBuildingBlock(title = "Lair Management") as { it =>
    it realizes capabilities.managingSecretLairs
    it serves enterprises.wayneCorp
  }

Properties

Description

An Architecture Building Block can have 0 or more descriptions.

  val lairManagement: ArchitectureBuildingBlock =
  ea describes ArchitectureBuildingBlock(title = "Lair Management") as { it =>
    it has Description("A Lair Management system or platform should manage all aspects of a secret lair, including BatMobile platform rotation, secret entrance management and supervillain database management.")
  }

Architecture Verdict

The architecture verdict uses the Gartner TIME model to categorize applications, determining whether to Terminate, Invest, Migrate or Tolerate them.

The architecture verdict property can appear only once on a concept. The value of the property can optionally contain a description, usually the reason why this concept was given this architecture verdict.

...
    it should BeInvestedIn()
    it should BeTolerated()
    it should BeMigrated()
    it should BeEliminated("option description: the reason why this should be eliminated")
...

Criticality

The criticality of a building block describes the impact on the business if that building block would fail or be unavailable. The possible values are:

The criticality property can appear only once on a concept. The value of the property can optionally contain a description, usually the reason why this concept has this criticality level.

...
    it ratesFailureAs Catastrophic("with an optional description of why it would be catastrophic")
    it ratesFailureAs Hazardous()
    it ratesFailureAs Major()
    it ratesFailureAs Minor()
    it ratesFailureAs NoEffect()
    it ratesFailureAs UnknownCriticality  
...
  val lairManagement: ArchitectureBuildingBlock =
  ea describes ArchitectureBuildingBlock(title = "Lair Management") as { it =>
      ...
      it has Website("https://wayne.com/bcms")
      it has Wiki("https://dc.fandom.com/wiki/BCMS")
      it has FunctionalDocumentations(url = "https://docs.wayne.com/bcms", title = "Functional Documentation")
      it has ArchitectureDocumentation(url = "https://wayne.com/architecture/bcms", title = "The BCMS in the Wayne Enterprises Town Plan")
      ...
}

External ID

An external ID is a reference to the description, documentation, implementation or anything else in some external system, for example in another EA tool, or in a cloud platform.

  val lairManagement: ArchitectureBuildingBlock =
  ea describes ArchitectureBuildingBlock(title = "Lair Management") as { it =>
      ...
      it isIdentifiedAs "{42a5e9d4-188d-4509-8145-eaac65ab86b8}" on "Sparx EA"
      ...
}

SWOT

A building block can have strengths, weaknesses, opportunities and threats.

val lairManagement: ArchitectureBuildingBlock =
  ea describes ArchitectureBuildingBlock(title = "Lair Management") as { it =>
      ...
      it has Strength("Lucius Fox built it")
      it has Strength("Many screens")
      it has Weakness("The screens seem to be of poor quality, possibly due to the humidity in the BatCave")
      it has Threat(
        "Throwing a chair in one of the screens seems to explode the whole system"
      )
      he has Opportunity(
        "Bringing it to the cloud might make it less vulnerable to super villains"
      )
      ...
  }

Father Time

Life events can be assigned to a building block, indicating the various stages in its lifetime:

Depending on the lifecycle, a building block will be visible or not in a view.

val batCaveDestructionDay: Day = Day(2027, 10, 31)

val lairManagement: ArchitectureBuildingBlock =
  ea describes ArchitectureBuildingBlock(title = "Lair Management") as { it =>
      ...
      it has StartedDevelopment(description =
        "Ra's al Ghul came to town"
      ) on Day(2003, 1, 1)
      it has GoneToProduction(description =
        "Just in time for the Joker"
      ) on Day(2005, 1, 1)
      it is Decommissioned(description =
        "The Batcave is destroyed"
      ) on batCaveDestructionDay
      ...
  }

Relationships

Flow

A building block can be both the source and the target of a flow relationship. A flow relationship can be defined on the elements on either side.

Note that you should only create flow relationships between building blocks, and not between a building block and a system for example.

val lairManagement: ArchitectureBuildingBlock =
  ea describes ArchitectureBuildingBlock(title = "Lair Management") as { it =>
    it isUsedBy actors.bruceWayne
    it uses otherBuildingBlock
}
val lairManagement: ArchitectureBuildingBlock =
  ea describes ArchitectureBuildingBlock(title = "Lair Management") as { it =>
    it isBeingUsedBy actors.bruceWayne and { that =>
      that has Description("Bruce likes to stare at this intensely")
    }
    it isUsing otherBuildingBlock and { that =>
      that has Description("Interacts with the other building block")
    }
}

Realization

A building block can realize a business capability.

  val lairManagement: ArchitectureBuildingBlock =
  ea describes ArchitectureBuildingBlock(title = "Lair Management") as { it =>
    it realizes capabilities.managingSecretLairs
  }

Serve

A building block can be the source of a serving relationship, typically used to assign the building block to an enterprise.

  val lairManagement: ArchitectureBuildingBlock =
  ea describes ArchitectureBuildingBlock(title = "Lair Management") as { it =>
    it serves enterprises.wayneCorp
  }

Impact

A building block can be impacted by a decision or a project or project milestone. This relationship however is added on the side of the decision, project or milestone.