Closed mattkrick closed 3 years ago
Noting that #4366 has been merged, this is not blocked
it all works...but i still don't love it.
in a perfect world, the dimensions, scales & values for a meeting would persist even after that meeting ended. Changing the value 3 from red to blue should keep it as red for old meetings. changing the dimension name should not change it for previous meetings.
if we wanted to go down this path, there are some options for how we store the data:
inactiveAt
trait. changing the object just creates a new one & sets the inactiveAt for the old one. (wasteful because it's possible that no meeting is attached to these)i think that's the direction we have to go. rewritten for clarity:
stuck on team feedback
I think taking some inspiration from git would be useful. This might be restating what you've suggested, in a different way:
TemplateRef
TemplateRef
, else you make a new oneThinking out loud here: what if we put a version number to those entities (template, dimension, scale) and then a pair of (id, version) uniquely defines a set of entities used in a meeting. When an attribute changes in one of those versioned entities, we increment the version.
each dimension & scale object has an inactiveAt trait. changing the object just creates a new one & sets the inactiveAt for the old one. (wasteful because it's possible that no meeting is attached to these)
so no meeting is attached to some bc a new template is made each time an object is changed? what if we only create a new one if a meeting is started or ended, and the template is different from the one previously used? singling this suggestion out bc it seems the most intuitive to me
(this might also be restating what you were saying in a different way)
i love this thread so much. i think we're all saying the same thing in different ways!
this stuff is probably pretty useful for retrospectives, but i figure poker meetings are new & more complicated so let's try it out there & see how it works.
Start vs. End
TemplateRef
for all currently active meetings.stuck on postgres implementation. no sense in creating a new TemplateRef
table in rethinkdb right now
scaleValues and dimensions are difficult because those are arrays. pg can't do arrays of FKs, so we'd have to fully normalize & then add a sortOrder on the intermediary table. alternatively, we could just store those are arrays, but then we give up the relational good parts. alternatively, we could store them as JSON. or, we could store the whole thing as JSON in a single table.
the downside of saving it all a 1 big JSON is that analytics would be hard. it'd be hard to answer the question "how many meeting were run with 5 as a possible value". I mean we could, but someone else would have to write that query, because it'd hurt my head.
that said, it's probably best to guess reuse of each entity for user-defined templates:
so, the sweet spot is probably down the middle. let's do an intermediary cache on scale & then reference that in the cached template. this way, we can easily figure out which templates are hot & which scales are hot.
AC
scale
json where scale = {name, scales[]}`Migration checklist:
Burndown:
After a template has changed, we need to make sure that the old poker meeting is still accessible & works as a standalone artifact. Stuck on #4366
AC
Estimate: 4 hours