Systems
The IT System concept in the Townplanner is borrowed from the C4 Model. In Archimate it would be an Application Component. Contrary to the C4 Model though, the IT System is not the highest level of abstraction in the Townplanner model. That would be the IT Platform.
val bcms: ItSystem =
ea describes ItSystem(title = "BatCave Management System")
as { it =>
it has Description("A custom Lair Management System, designed and built by Lucius Fox")
it realizes buildingBlocks.lairManagement
}
Properties
Description
A system can have 0 or more descriptions.
val bcms: ItSystem =
ea describes ItSystem(title = "BatCave Management System")
as { it =>
it has Description("A custom Lair Management System.")
it has Description("It was designed and built by Lucius Fox")
...
}
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 system describes the impact on the business if that system would fail or be unavailable. The possible values are:
- Catastrophic: a component failure would significantly affect the operability of the system/platform and could cause bankruptcy, law suits or even the loss of life.
- Hazardous: a failure in these systems would pose a major threat to the company and its employees
- Major: a failure in these systems will impact the working of the larger whole, resulting in outages and loss of money
- Minor: a failure in these systems will have a minor impact the working of the larger whole, not resulting in system outages, but a reduced customer experience
- NoEffect: a failure in these systems will have no impact the working of the larger whole, and will not have any impact on the customer experience
- UnknownCriticality
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
...
Resilience Measures
A resilience measure property is simply a description of what has been provided in the system to deal with failures.
A system can have 0 or more resilience measures.
...
it provides ResilienceMeasure("circuit breaker")
it provides ResilienceMeasure("fallback scenario")
...
Links
val bcms: ItSystem =
ea describes ItSystem(title = "BatCave Management System")
as { it =>
...
it has Website("https://wayne.com/bcms")
it has Wiki("https://dc.fandom.com/wiki/BCMS")
it has ApiDocumentation("https://api.wayne.com/bcms")
it has FunctionalDocumentations(url = "https://docs.wayne.com/bcms", title = "Functional Documentation")
it has TechnicalDocumentation("https://reference.wayne.com/bcms")
it has ArchitectureDocumentation(url = "https://wayne.com/architecture/bcms", title = "The BCMS in the Wayne Enterprises Town Plan")
it has ProductionUrl("https://bcms.wayne.com")
it has PreProductionUrl("https://staging.bcms.wayne.com")
it has DevelopmentUrl("https://dev.bcms.wayne.com")
it has SourceCodeRepository("https://github.com/wayne/bcms")
...
}
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 bcms: ItSystem =
ea describes ItSystem(title = "BatCave Management System")
as { it =>
...
it isIdentifiedAs "{42a5e9d4-188d-4509-8145-eaac65ab86b8}" on "Sparx EA"
...
}
SWOT
A system can have strengths, weaknesses, opportunities and threats.
val bcms: ItSystem =
ea describes ItSystem(title = "BatCave Management System")
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 system, indicating the various stages in its lifetime:
- started development
- gone to preproduction
- gone to production
- active
- retired
- decommissioned
Depending on the lifecycle, a system will be visible or not in a view. System Container Views for example are time-sensitive and will not show systems that were decommissioned or are not yet in production.
val batCaveDestructionDay: Day = Day(2027, 10, 31)
val bcms: ItSystem =
ea describes ItSystem(title = "BatCave Management System")
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 system can be both the source and the target of a flow relationship. A flow relationship can be defined on the elements on either side.
val bcms: ItSystem = ea describes ItSystem(title = "BatCave Management System") as { it =>
it isUsedBy actors.bruceWayne
it uses systems.otherSystem
}
val bcms: ItSystem = ea describes ItSystem(title = "BatCave Management System") as { it =>
it isBeingUsedBy actors.bruceWayne and { that =>
that has Description("Bruce likes to stare at this intensely")
}
it isUsing systems.otherSystem and { that =>
that isImplementedBy technologyRadar.rest
that isImplementedBy technologyRadar.tls12
}
}
Deliver
The delivery relationship indicates that a system, service, project, ... is delivered by a team, an organization or even an individual. A business actor can be the source of a delivery relationship.
val bruceWayne: Person = ea describes Person(title = "Bruce Wayne") as { he =>
...
he delivers systems.bcms
...
}
val bruceWayne: Person = ea describes Person(title = "Bruce Wayne") as { he =>
...
he isDelivering systems.bcms and { that =>
that has Description("Admittedly, he needed Lucius Fox")
}
...
}
val bcms: ItSystem = ea describes ItSystem(title = "BatCave Management System") as { it =>
it isBeingDeliveredBy actors.bruceWayne and { that =>
that has Description("Admittedly, he needed Lucius Fox")
}
}
val bcms: ItSystem = ea describes ItSystem(title = "BatCave Management System") as { it =>
it isDeliveredBy actors.bruceWayne
}
Realization
A system can realize an architecture building block. As an example, suppose we have the architecture building block called Content Management System, then systems like Strapi, Wordpress and Contentful would realize it. This relationship is typically used to visualize multiple systems doing the same thing within a company, as an input for a rationalisation exercise.
val cms: ArchitectureBuildingBlock =
ea describes ArchitectureBuildingBlock(title = "Content Management System") as { it =>
it realizes capabilities.manageChannelContent
it serves enterprises.wayneCorp
}
val strapi: ItSystem = ea describes ItSystem(title = "Strapi") as { it =>
it realizes cms
}
val contentful: ItSystem = ea describes ItSystem(title = "Contentful") as { it =>
it realizes cms
}
Composition
A system can be part of a platform. It can also be composed of containers, such as microservices and databases, but that relationship is specified on the container side.
val strapi: ItSystem = ea describes ItSystem(title = "Strapi") as { it =>
it isPartOf platforms.wayneMarketingPlatform
}
Impact
A system 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.
Knowledge
A system can be known by a person or a team. This relationship appears in the documentation and can be very helpful when there are problems with the system.
val strapi: ItSystem = ea describes ItSystem(title = "Strapi") as { it =>
it isKnownBy actors.diana
it isKnownBy(target = actors.bruceWayne, level = Expert)
}