A B Testing Workflow
patterns
This workflow models comparing two versions to see which performs better.
patterns
This workflow models converting varied inputs to a standard format.
user { # User
n1: circle label:"Start Normalizer"
n5: rectangle label:"Record Normalizer outcome"
n9: rectangle label:"Monitor Normalizer status"
n13: circle label:"End Normalizer"
n1.handle(bottom) -> app.n2.handle(top)
n5.handle(bottom) -> app.n6.handle(top) [label="Done"]
n9.handle(bottom) -> app.n10.handle(top)
}
app { # App
n2: rectangle label:"Receive Normalizer event"
n6: rectangle label:"Monitor Normalizer status"
n10: rectangle label:"Monitor Normalizer status"
n2.handle(bottom) -> service.n3.handle(top) [label="Next"]
n6.handle(bottom) -> service.n7.handle(top)
n10.handle(bottom) -> service.n11.handle(top)
}
service { # Service
n3: rectangle label:"Validate Normalizer conditions"
n7: rectangle label:"Monitor Normalizer status"
n11: rectangle label:"Monitor Normalizer status"
n3.handle(bottom) -> database.n4.handle(top)
n7.handle(bottom) -> database.n8.handle(top)
n11.handle(bottom) -> database.n12.handle(top) [label="Success"]
}
database { # Database
n4: diamond label:"Execute Normalizer action"
n8: rectangle label:"Monitor Normalizer status"
n12: diamond label:"Monitor Normalizer status"
n4.handle(left) -> service.n3.handle(left) [label="Retry/Rejected"]
n4.handle(right) -> user.n5.handle(left)
n8.handle(right) -> user.n9.handle(left) [label="Processed"]
n12.handle(left) -> service.n11.handle(left) [label="Retry/Rejected"]
n12.handle(right) -> user.n13.handle(bottom)
}
patterns
This workflow models comparing two versions to see which performs better.
patterns
This workflow models checking user permissions before actions run.
patterns
This workflow models an async operation that notifies a callback when done.
patterns
This workflow models keeping large payloads external and only passing references.
patterns
This workflow models rolling back work when a later step fails.