Open solveguide opened 2 months ago
enum SolutionType {
resolution,
discussion,
meeting,
actionItem,
}
class ActionItem {
final String description;
bool isCompleted;
ActionItem({
required this.description,
this.isCompleted = false,
});
// Convert an ActionItem to a Map
Map<String, dynamic> toJson() => {
'description': description,
'isCompleted': isCompleted,
};
// Create an ActionItem from a Map
factory ActionItem.fromJson(Map<String, dynamic> json) => ActionItem(
description: json['description'],
isCompleted: json['isCompleted'] ?? false,
);
}
class Solution {
final String desc;
bool isSolve;
int rank;
List<String>? provenIssueIds;
List<String>? disprovenIssueIds;
SolutionType type;
String stakeholder;
List<ActionItem>? actionItems;
String measurableOutcome;
bool isExpectedToResolveCompletely;
String successCriteria;
bool isAchievableConfirmed;
DateTime? dueDate;
Solution({
required this.desc,
this.isSolve = false,
this.rank = 0,
this.provenIssueIds = const [],
this.disprovenIssueIds = const [],
required this.type,
required this.stakeholder,
this.actionItems = const [],
required this.measurableOutcome,
this.isExpectedToResolveCompletely = false,
required this.successCriteria,
this.isAchievableConfirmed = false,
this.dueDate,
});
// Convert a Solution to a Map
Map<String, dynamic> toJson() => {
'desc': desc,
'isSolve': isSolve,
'rank': rank,
'provenIssueIds': provenIssueIds,
'disprovenIssueIds': disprovenIssueIds,
'type': type.index,
'stakeholder': stakeholder,
'actionItems': actionItems?.map((item) => item.toJson()).toList(),
'measurableOutcome': measurableOutcome,
'isExpectedToResolveCompletely': isExpectedToResolveCompletely,
'successCriteria': successCriteria,
'isAchievableConfirmed': isAchievableConfirmed,
'dueDate': dueDate?.toIso8601String(),
};
// Create a Solution from a Map
factory Solution.fromJson(Map<String, dynamic> json) => Solution(
desc: json['desc'],
isSolve: json['isSolve'] ?? false,
rank: json['rank'] ?? 0,
provenIssueIds: List<String>.from(json['provenIssueIds'] ?? []),
disprovenIssueIds: List<String>.from(json['disprovenIssueIds'] ?? []),
type: SolutionType.values[json['type'] ?? 0],
stakeholder: json['stakeholder'] ?? '',
actionItems: (json['actionItems'] as List<dynamic>?)
?.map((item) => ActionItem.fromJson(item))
.toList(),
measurableOutcome: json['measurableOutcome'] ?? '',
isExpectedToResolveCompletely:
json['isExpectedToResolveCompletely'] ?? false,
successCriteria: json['successCriteria'] ?? '',
isAchievableConfirmed: json['isAchievableConfirmed'] ?? false,
dueDate: json['dueDate'] != null
? DateTime.parse(json['dueDate'])
: null,
);
}
BDD Scenario
Description
After a solve has been confirmed but before the Solve Summary is displayed, the user will be prompted to enter information about the solve to make it actionable and specific.
Solutions will have types: Resolution - An agreement with yourself Discussion - The issue is solved by sharing information you have or need. Meeting - The issue is solved by making a group decision. Action Item - The issue is solved by accomplishing defined tasks.
Specific
Assign a specific stakeholder (with an option to assign to someone else?) I'd recommend that a stakeholder own the solve, even if they are delegating parts of it.
Include an action item check list?
Measurable
This will be pre-populated with the seed-statement and or root issue. Perhaps the users should be asked if this solve is expected to resolve the root issue completely, partially, or as a prerequisite.
Depending on the answer, ask the user how they will know if it worked.
Achievable
Make this only enabled once everything else is set. The assigned user should affirm they can achieve it.
Relevant
This is handled by including the seed-statement & root issue in the measurable section.
Time-bound
Due Date (Look at Tusk to think about the various types of task shapes)
User Story
As a [type of user], I want [some goal] so that [some reason].
Design & Copy Requirements
Design Details
If design is required, add initial design notes here or attach files.
Copy Details
If copywriting is needed, specify the text or content changes here.