ParabolInc / parabol

Free online agile retrospective meeting tool
https://www.parabol.co/
Other
1.91k stars 331 forks source link

Test ended poker meetings after changed template #4422

Closed mattkrick closed 3 years ago

mattkrick commented 3 years ago

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

jordanh commented 3 years ago

Noting that #4366 has been merged, this is not blocked

mattkrick commented 3 years ago

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:

i think that's the direction we have to go. rewritten for clarity:

mattkrick commented 3 years ago

stuck on team feedback

jordanh commented 3 years ago

I think taking some inspiration from git would be useful. This might be restating what you've suggested, in a different way:

tianrunhe commented 3 years ago

Thinking 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.

tiffanyhan commented 3 years ago
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)

mattkrick commented 3 years ago

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

mattkrick commented 3 years ago

stuck on postgres implementation. no sense in creating a new TemplateRef table in rethinkdb right now

mattkrick commented 3 years ago

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

mattkrick commented 3 years ago

Migration checklist:

Burndown: