]> git.r.bdr.sh - rbdr/map/blob - Map/Data/Stage.swift
395f279039099768713be53ca38fdc096ee2d28b
[rbdr/map] / Map / Data / Stage.swift
1 /*
2 Copyright (C) 2024 Rubén Beltrán del Río
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see https://map.tranquil.systems.
16 */
17 struct Stage {
18 let i: String
19 let ii: String
20 let iii: String
21 let iv: String
22
23 static func stages(_ type: StageType) -> Stage {
24 switch type {
25 case .general:
26 return Stage(
27 i: "Genesis", ii: "Custom", iii: "Product (+rental)", iv: "Commodity (+utility)")
28 case .practice:
29 return Stage(
30 i: "Novel", ii: "Emerging", iii: "Good", iv: "Best")
31 case .data:
32 return Stage(
33 i: "Unmodelled", ii: "Divergent", iii: "Convergent", iv: "Modelled")
34 case .knowledge:
35 return Stage(
36 i: "Concept", ii: "Hypothesis", iii: "Theory", iv: "Accepted")
37 case .ubiquity:
38 return Stage(
39 i: "Rare", ii: "Slowly Increasing", iii: "Rapidly Increasing",
40 iv: "Widespread in the applicable market / ecosystem")
41 case .certainty:
42 return Stage(
43 i: "Poorly Understood / exploring the unknown",
44 ii: "Rapid Increase In Learning / discovery becomes refining",
45 iii: "Rapid increase in use / increasing fit for purpose",
46 iv: "Commonly understood (in terms of use)")
47 case .publicationTypes:
48 return Stage(
49 i:
50 "Describe the wonder of the thing / the discovery of some marvel / a new land / an unknown frontier",
51 ii:
52 "Focused on build / construct / awareness and learning / many models of explanation / no accepted forms / a wild west",
53 iii:
54 "Maintenance / operations / installation / comparison between competing forms / feature analysis",
55 iv: "Focused on use / increasingly an accepted, almost invisible component")
56 case .market:
57 return Stage(
58 i: "Undefined Market",
59 ii: "Forming Market / an array of competing forms and models of understanding",
60 iii: "Growing Market / consolidation to a few competing but more accepted forms",
61 iv: "Mature Market / stabilised to an accepted form")
62 case .knowledgeManagement:
63 return Stage(
64 i: "Uncertain", ii: "Learning on use / focused on testing prediction",
65 iii: "Learning on operation / using prediction / verification", iv: "Known / accepted")
66 case .marketPerception:
67 return Stage(
68 i: "Chaotic (non-linear) / domain of the \"crazy\"", ii: "Domain of \"experts\"",
69 iii: "Increasing expectation of use / domain of \"professionals\"",
70 iv: "Ordered (appearance of being linear) / trivial / formula to be applied")
71 case .userPerception:
72 return Stage(
73 i: "Different / confusing / exciting / surprising / dangerous",
74 ii: "Leading edge / emerging / unceirtanty over results",
75 iii: "Increasingly common / disappointed if not used or available / feeling left behind",
76 iv: "Standard / expected / feeling of shock if not used")
77 case .perceptionInIndustry:
78 return Stage(
79 i: "Future source of competitive advantage / unpredictable / unknown",
80 ii: "Seen as a scompetitive advantage / a differential / ROI / case examples",
81 iii: "Advantage through implementation / features / this model is better than that",
82 iv: "Cost of doing business / accepted / specific defined models")
83 case .focusOfValue:
84 return Stage(
85 i: "High future worth but immediate investment",
86 ii: "Seeking ways to profit and a ROI / seeking confirmation of value",
87 iii:
88 "High profitability per unit / a valuable model / a feeling of understanding / focus on exploitation",
89 iv:
90 "High volume / reducing margin / important but invisible / an essential component of something more complex"
91 )
92 case .understanding:
93 return Stage(
94 i: "Poorly Understood / unpredictable",
95 ii: "Increasing understanding / development of measures",
96 iii: "Increasing education / constant refinement of needs / measures",
97 iv: "Believed to be well defined / stable / measurable")
98 case .comparison:
99 return Stage(
100 i: "Constantly changing / a differential / unstable",
101 ii: "Learning from others / testing the water / some evidential support",
102 iii: "Competing models / feature difference / evidential support",
103 iv: "Essential / any advantage is operational / accepted norm")
104 case .failure:
105 return Stage(
106 i: "High / tolerated / assumed to be wrong",
107 ii: "Moderate / unsurprising if wrong but disappointed",
108 iii:
109 "Not tolerated / focus on constant improvement / assumed to be in the right direction / resistance to changing the model",
110 iv: "Surprised by failure / focus on operational efficiency")
111 case .marketAction:
112 return Stage(
113 i: "Gambling / driven by gut", ii: "Exploring a \"found\" value",
114 iii: "Market analysis / listening to customers", iv: "Metric driven / build what is needed")
115 case .efficiency:
116 return Stage(
117 i: "Reducing the cost of change (experimentation)", ii: "Reducing cost of waste (Learning)",
118 iii: "Reducing cost of waste (Learning)", iv: "Reducing cost of deviation (Volume)")
119 case .decisionDrivers:
120 return Stage(
121 i: "Heritage / culture", ii: "Analyses & synthesis", iii: "Analyses & synthesis",
122 iv: "Previous Experience")
123 case .behavior:
124 return Stage(
125 i: "Uncertain when to use", ii: "Learning when to use", iii: "Learning through use",
126 iv: "Known / common usage")
127 }
128 }
129
130 static func title(_ type: StageType) -> String {
131 switch type {
132 case .general:
133 return "Activities"
134 case .practice:
135 return "Practice"
136 case .data:
137 return "Data"
138 case .knowledge:
139 return "Knowledge"
140 case .ubiquity:
141 return "Ubiquity"
142 case .certainty:
143 return "Certainty"
144 case .publicationTypes:
145 return "Publication Types"
146 case .market:
147 return "Market"
148 case .knowledgeManagement:
149 return "Knowledge Management"
150 case .marketPerception:
151 return "Market Perception"
152 case .userPerception:
153 return "User Perception"
154 case .perceptionInIndustry:
155 return "Perception In Industry"
156 case .focusOfValue:
157 return "Focus Of Value"
158 case .understanding:
159 return "Understanding"
160 case .comparison:
161 return "Comparison"
162 case .failure:
163 return "Failure"
164 case .marketAction:
165 return "Market Action"
166 case .efficiency:
167 return "Efficiency"
168 case .decisionDrivers:
169 return "Decision Drivers"
170 case .behavior:
171 return "Behavior"
172 }
173 }
174 }
175
176 enum StageType: String, CaseIterable, Identifiable {
177 case general
178 case practice
179 case data
180 case knowledge
181
182 case ubiquity
183 case certainty
184 case publicationTypes
185
186 case market
187 case knowledgeManagement
188 case marketPerception
189 case userPerception
190 case perceptionInIndustry
191 case focusOfValue
192 case understanding
193 case comparison
194 case failure
195 case marketAction
196 case efficiency
197 case decisionDrivers
198
199 case behavior
200
201 var id: String { self.rawValue }
202
203 static let types: [StageType] = [.general, .practice, .data, .knowledge]
204 static let characteristics: [StageType] = [.ubiquity, .certainty, .publicationTypes]
205 static let properties: [StageType] = [
206 .market, .knowledgeManagement, .marketPerception, .userPerception,
207 .perceptionInIndustry, .focusOfValue, .understanding, .comparison, .failure,
208 .marketAction, .efficiency, .decisionDrivers,
209 ]
210 static let custom: [StageType] = [.behavior]
211 }