By: dreev
Spec level:
Last updated: 2021-07-09
Gissue: TBD
In which we make all the decisions about how group goals will work.
[PS: embarrassingly we abandoned this spec and just winged it and it may be interesting to do a postmortem on how bad an idea that was.]
In goal settings we’ll have a field similar to Supporters where you can add collaborators who will ALL BE CHARGED along with you if the goal derails. We email the collaborators a link to opt in and then the goal appears in everyone’s goal galleries and any of you can add data. Everyone sets their reminder settings individually (but initially we’ll just have shared reminder settings so the group members have to coordinate on that — the settings page should throw up a banner warning about it). Or maybe it’s not that hard for each person to set their own reminders independently even though they reference the same goal. [currently reminder settings are stored with the goal itself. For each person to set their own reminders, we’d need to change the structure of that information, and/or where it is stored. (one could imagine changing things so that each user has some data structure that indicates what reminders they want to receive, independent of the goal objects themselves… )]
The meta data shown in the mouseover for the datapoint should include the username. Users may want to use a convention of signing datapoints in the comments so it’s more immediately clear who added what, but we can ship this without imposing any structure on that.
Uluc proposes just sponsored goals where you can create a goal for a friend but you get charged.
Step 0 should probably be just a way to have other people’s goals in your gallery.
Q. where does the interface for adding goals go? A: Somewhere in account settings Q: what does it look like? A:
Q: can anyone put any goal into their gallery, or is there some sort of approval / permission granted from the goal owner? A: for now it only works for public goals. no approval needed. Q: Hmm, but maybe can I get a list of people who have my goal in their galleries? A: Um, how is it different from random stranger bookmarking your goal? you never know about that? Q: but.. i don’t know. it feels a bit weird. maybe i want to know who’s keeping tabs on me.
Q: how does the interface indicate that this goal belongs to someone else? (what text is shown? are there other visual indicators?) A: it doesn’t. for now. Q: really? couldn’t we have an icon or something? A: um, maybe? but that adds special cases to the code. so maybe we can hold off on committing to anything for the MVP?
Q: do foreign goals sort normally with the rest of the goals in beebody ui, or is it a separate section of your dashboard? A: I guess see above; for now they just sort right in with everything else.
Q: do we return foreign goals normally as part of regular api requests? or is there a separate endpoint for them explicitly? or is it a special case we are adding on for beebody only? A:
Q: is adding data allowed? A: No. the data entry stuff will be disabled Q: What changes are going to need to happen to allow that in the future? A: [fill in the blank]
Q: what about my secret goals that I want to share with someone? A: make them public. secret is secret.
Q: is it helpful to think of this as an extension of the supporters feature? are there things that need to be clarified one way or the other with supporters in light of making this change? A:
We will put a section into the user’s account settings where they can add any public goal into their own gallery. The user will not get alerts for this “alien”. They will not be able to add data or access settings.
This leaves much to be desired from this feature, but technically fills the bill of a minimum viable product.
In settings
In the dashboard
Friendly Aliens
Add other people’s goals to your dashboard. Only works for public goals. You won’t be able to add data.
bob/gym x alice/gym x no such goal x [?]
Actually we have a partially implemented (legacy) thing for “Friendly Aliens” [Technical note: the thing that is stored in field :gallery, type: Array
in the User model].
But since we can’t just suddenly turn “friended” goals into “okay, now you are getting charged for this”, we need to start the Group Goal implementation as a separate thing, out of which perhaps an un-paid / friendy thing will grow in the future. Or we could just finish the friendly-alien-gallery implementation (by letting people use it. at the moment it takes an admin to add an alien to your gallery).
When a derail happens one email will be sent to all groupies, using CC
or multiple To
addresses in the mail.
This gives some accountability when the goal derails, and common knowledge about the derail, and avoids having multiple people responding to support about the same goal in different threads.
[TODO: do we need to consider Reply-All vs plain Reply issues?].
It does present a problem with unsubscribe links however. We can’t generate multiple unsubscribe links for each person who’s a member of the goal. For MVP we are not going to worry our pretty heads about this. We will just include the unsubscribe link for the goal owner. Anyone clicking on this link will be taken to a functional unsubscribe page, however the page features the email address that is being unsubscribed quite prominently, and includes a “sign in to manage your email settings” link somewhere, so we are okay with this initially.
If we decide to allow wider adoption of the feature (and actually provide an interface for self-serve grouping of goals), then we will need to revisit this.
Derail charges will get queued up same as ever, using the pending_at
and pending_amount
field on the Goal#contract.
The derail-charge-job [TODO: what is this actually called] will loop through goal.users
, charging each.
If any one charge fails, the Charge-fail object will get added to that user to keep track of it for future charging.
The “we tried to charge you but failed” email will go out to all group members.
The deadbeat flag will get set on the user whose charge failed.
TODO: probably the goal will only get hidden for that one deadbeat user, though, not everyone. Verify. Consider if we can make it apply to all group members? For shame?
See also thread with Giles Edkins (@gdedkins) about “reverse beeminder situation, where you have to complete a particular task or someone else gets fined”. I was thinking we could have the best of all worlds here if you could just choose the subset of people on the group goal who get charged on derailments. Then you could make a goal for a friend where you’re the one who gets charged and not them. (Lots of details to worry about here, like the “Beeminder can’t be a credible threat” banner. PS: Oh hey, commitwall solved that one. No one can beemind without a payment method.)
PS: From Mary, idea for name of multiple-person goals: swarm goals (Alternatively, hive goals, but it feels like hive might be something we’d want to reserve for future social features. Like if people in your hive can follow your goals, easily be made collaborators on your swarm goals, be easily made into supporters, have a friends-list style set of people for goals that you neither want fully private nor fully public, etc.)