Record Class DesignDecisionRecord
java.lang.Object
java.lang.Record
com.eqixiac.equinix.design.record.DesignDecisionRecord
- Record Components:
schemaVersion- the record format version ("1")title- the record's titlestatus- the decision's status (for exampleProposed,Accepted)generatedAt- when the record was producedsdkVersion- the SDK version that produced itspecFingerprint- the spec'sfingerprint()spec- the spec the record is aboutcontext- 1. context and requirements, restated from the specdecision- 2. the recommended portfolio, its placement and its objective values and scoresalternatives- 3. the Pareto frontier and what each option trades away; what the constraints rejectedsensitivity- 4. how far the weights can move before the decision changescost- 5. priced lines, currency conversions, term and growth view, TCO and savingsresilience- 6. failure simulation: N-1 / N-2, single points of failure, availability, remediationrisks- 7. every engine's findings, de-duplicated, most severe firstprovenance- 8. assumptions, data notes and as-of datesimplementation- 9. the deployment plan summary and how to reproduce the record
public record DesignDecisionRecord(String schemaVersion, String title, String status, Instant generatedAt, String sdkVersion, String specFingerprint, DesignSpec spec, RecordSection<DesignDecisionRecord.Context> context, RecordSection<DesignDecisionRecord.Decision> decision, RecordSection<DesignDecisionRecord.Alternatives> alternatives, RecordSection<DesignDecisionRecord.Sensitivity> sensitivity, RecordSection<DesignDecisionRecord.Cost> cost, RecordSection<DesignDecisionRecord.Resilience> resilience, RecordSection<DesignDecisionRecord.Risks> risks, RecordSection<DesignDecisionRecord.Provenance> provenance, RecordSection<DesignDecisionRecord.Implementation> implementation)
extends Record
A Design Decision Record: what was decided for a
DesignSpec, why, on what evidence, and what would
change the decision. Produced by DesignDecisionRecorder; immutable; round-trips through JSON
(toJson(), fromJson(String)); renders as an ADR-style Markdown document (toMarkdown());
two records of the same design can be diffed (compare(DesignDecisionRecord, DesignDecisionRecord)).
Every section is a RecordSection: included, or skipped or failed with the reason. Figures keep their
provenance: each cost line says whether it is a live price, a reference figure or an estimate; availability is
computed from planning assumptions, not SLAs; latency counts say how many figures were measured.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final recordOne option on the frontier.static final recordThe options considered and rejected.static final recordOne assumption.static final recordOne workload's estimated availability, under planning assumptions.static final recordWhat one constraint did to the search.static final recordThe requirements, restated from the spec in words.static final recordWhat the recommended design costs, and where each figure came from.static final recordOne priced line.static final recordThe recommended design.static final recordAn exchange rate a line was converted at.static final recordThe design priced month by month under the spec's growth, with a term recommendation per item.static final recordOne item's growth and term decision.static final recordHow to build and reproduce the design.static final recordThe frontier option nearest the recommendation.static final recordOne objective of the recommended design.static final recordA deployment plan in brief.static final recordWhat the record rests on.static final recordWhat pins the record's figures.static final recordThe failure simulation of the recommended design.static final recordOne finding.static enumFinding severity, most severe first.static final recordEvery finding, de-duplicated, most severe first.static final recordEgress savings of the private path.static final recordHow firm the decision is.static final recordThe TCO archetype comparison.static final recordThe TCO and egress-savings view of the design's main cloud.static final recordAn N-1 or N-2 verdict.static final recordThe share of one objective's weight over which the recommendation holds. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringThe record format version this release writes. -
Constructor Summary
ConstructorsConstructorDescriptionDesignDecisionRecord(String schemaVersion, String title, String status, Instant generatedAt, String sdkVersion, String specFingerprint, DesignSpec spec, RecordSection<DesignDecisionRecord.Context> context, RecordSection<DesignDecisionRecord.Decision> decision, RecordSection<DesignDecisionRecord.Alternatives> alternatives, RecordSection<DesignDecisionRecord.Sensitivity> sensitivity, RecordSection<DesignDecisionRecord.Cost> cost, RecordSection<DesignDecisionRecord.Resilience> resilience, RecordSection<DesignDecisionRecord.Risks> risks, RecordSection<DesignDecisionRecord.Provenance> provenance, RecordSection<DesignDecisionRecord.Implementation> implementation) Requires the identity fields. -
Method Summary
Modifier and TypeMethodDescriptionReturns the value of thealternativesrecord component.static DecisionDeltacompare(DesignDecisionRecord before, DesignDecisionRecord after) What changed between two records (spec, recommendation, cost, resilience, risks), for example the same design re-run a quarter later.context()Returns the value of thecontextrecord component.cost()Returns the value of thecostrecord component.decision()Returns the value of thedecisionrecord component.final booleanIndicates whether some other object is "equal to" this one.static DesignDecisionRecordReads a record written bytoJson().Returns the value of thegeneratedAtrecord component.final inthashCode()Returns a hash code value for this object.Returns the value of theimplementationrecord component.Returns the value of theprovenancerecord component.The spec with the exchange rates this record used pinned incommercial.exchangeRates, so running it again reproduces the cost figures.Returns the value of theresiliencerecord component.risks()Returns the value of therisksrecord component.Returns the value of theschemaVersionrecord component.Returns the value of thesdkVersionrecord component.Map<String, RecordSection<?>> sections()Returns the value of thesensitivityrecord component.spec()Returns the value of thespecrecord component.Returns the value of thespecFingerprintrecord component.status()Returns the value of thestatusrecord component.title()Returns the value of thetitlerecord component.toJson()final StringtoString()Returns a string representation of this record class.
-
Field Details
-
SCHEMA_VERSION
-
-
Constructor Details
-
DesignDecisionRecord
public DesignDecisionRecord(String schemaVersion, String title, String status, Instant generatedAt, String sdkVersion, String specFingerprint, DesignSpec spec, RecordSection<DesignDecisionRecord.Context> context, RecordSection<DesignDecisionRecord.Decision> decision, RecordSection<DesignDecisionRecord.Alternatives> alternatives, RecordSection<DesignDecisionRecord.Sensitivity> sensitivity, RecordSection<DesignDecisionRecord.Cost> cost, RecordSection<DesignDecisionRecord.Resilience> resilience, RecordSection<DesignDecisionRecord.Risks> risks, RecordSection<DesignDecisionRecord.Provenance> provenance, RecordSection<DesignDecisionRecord.Implementation> implementation) Requires the identity fields.
-
-
Method Details
-
toMarkdown
- Returns:
- the record as an ADR-style Markdown document
-
toJson
- Returns:
- the record as indented JSON (ISO-8601 instants)
-
fromJson
Reads a record written bytoJson().- Parameters:
json- the document- Returns:
- the record
- Throws:
IllegalArgumentException- when the document is not a readable record
-
compare
What changed between two records (spec, recommendation, cost, resilience, risks), for example the same design re-run a quarter later.- Parameters:
before- the earlier recordafter- the later record- Returns:
- the differences
-
reproducibleSpec
The spec with the exchange rates this record used pinned incommercial.exchangeRates, so running it again reproduces the cost figures. The spec itself when nothing was converted.- Returns:
- the reproducible spec
-
sections
- Returns:
- the sections in document order, keyed by their heading
-
toString
-
hashCode
-
equals
Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared withObjects::equals(Object,Object). -
schemaVersion
Returns the value of theschemaVersionrecord component.- Returns:
- the value of the
schemaVersionrecord component
-
title
-
status
-
generatedAt
Returns the value of thegeneratedAtrecord component.- Returns:
- the value of the
generatedAtrecord component
-
sdkVersion
Returns the value of thesdkVersionrecord component.- Returns:
- the value of the
sdkVersionrecord component
-
specFingerprint
Returns the value of thespecFingerprintrecord component.- Returns:
- the value of the
specFingerprintrecord component
-
spec
-
context
-
decision
-
alternatives
Returns the value of thealternativesrecord component.- Returns:
- the value of the
alternativesrecord component
-
sensitivity
Returns the value of thesensitivityrecord component.- Returns:
- the value of the
sensitivityrecord component
-
cost
-
resilience
Returns the value of theresiliencerecord component.- Returns:
- the value of the
resiliencerecord component
-
risks
-
provenance
Returns the value of theprovenancerecord component.- Returns:
- the value of the
provenancerecord component
-
implementation
Returns the value of theimplementationrecord component.- Returns:
- the value of the
implementationrecord component
-