# Let’s talk about Observable Suggestions

**URL:** <https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675>\
**Category:** Feedback\
**Created:** [February 14, 2019, 9:23pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675 "2019-02-14T21:23:16Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![jashkenas](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/jashkenas/32/1778_2.png) [@jashkenas](https://talk.observablehq.com/u/jashkenas)\
**Post date:** [February 14, 2019, 9:23pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/1 "2019-02-14T21:23:16Z")

</div>

Today (happy Valentine’s Day, everyone) we launched Observable Suggestions: our take on the pull request, and a way to achieve considerate collaboration across notebooks:

> **[Suggestions | Observable documentation](https://observablehq.com/documentation/collaboration/suggestions)**
>
> All your Observable questions answered

There are some things here that work a little differently than tools you might have used for notebooks before: _the conversation lives on the notebook itself, next to live code, not outside of it; private by default; you can suggest directly from someone else’s notebook, and so on…_

Let us know if you find any bugs, or have any helpful suggestions for improvement.

(Speaking for myself, I’m pretty excited to start receiving suggestions for [the Input Bazaar](https://beta.observablehq.com/@jashkenas/inputs), for one.)

---

<div class="post-metadata">

**Author:** ![liuyao12](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/liuyao12/32/250_2.png) [@liuyao12](https://talk.observablehq.com/u/liuyao12)\
**Post date:** [February 14, 2019, 9:40pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/2 "2019-02-14T21:40:19Z")

</div>

Super excited! Great job!

---

<div class="post-metadata">

**Author:** ![bgchen](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/bgchen/32/784_2.png) [@bgchen](https://talk.observablehq.com/u/bgchen)\
**Post date:** [February 14, 2019, 9:42pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/3 "2019-02-14T21:42:33Z")

</div>

Neat! I’ve just made a suggestion to the inputs notebook 🙂

---

<div class="post-metadata">

**Author:** ![jashkenas](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/jashkenas/32/1778_2.png) [@jashkenas](https://talk.observablehq.com/u/jashkenas)\
**Post date:** [February 14, 2019, 9:53pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/4 "2019-02-14T21:53:56Z")

</div>

Reviewed, merged and republished. Thanks @bgchen!

---

<div class="post-metadata">

**Author:** ![bgchen](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/bgchen/32/784_2.png) [@bgchen](https://talk.observablehq.com/u/bgchen)\
**Post date:** [February 14, 2019, 10:00pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/5 "2019-02-14T22:00:23Z")

</div>

That was fast!

I’ve got a question: if I make a fork and then add comments to it, the comment window says “only you will see this” – if I then make a suggestion using this fork, will the original author see those comments?

---

<div class="post-metadata">

**Author:** ![jashkenas](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/jashkenas/32/1778_2.png) [@jashkenas](https://talk.observablehq.com/u/jashkenas)\
**Post date:** [February 14, 2019, 10:03pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/6 "2019-02-14T22:03:03Z")

</div>

Correct. When you start by working on your own fork, we don’t yet know that you’re intending to suggest it, and only you can see the comments at that point.

When you suggest, it automatically shares the notebook (if not already shared or published), and allows the recipient of the suggestion to see and reply to your comments on the suggested notebook.

---

<div class="post-metadata">

**Author:** ![mootari](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/mootari/32/581_2.png) [@mootari](https://talk.observablehq.com/u/mootari)\
**Post date:** [February 14, 2019, 10:24pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/7 "2019-02-14T22:24:19Z")

</div>

Oh, this is great! ❤

@jashkenas Something minor I’ve noticed: When switching between the Base/Diff/Target states of a single cell, the cell might not execute correctly due to missing dependencies. Is this something that can be fixed (at some point)?

---

<div class="post-metadata">

**Author:** ![jashkenas](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/jashkenas/32/1778_2.png) [@jashkenas](https://talk.observablehq.com/u/jashkenas)\
**Post date:** [February 14, 2019, 10:30pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/8 "2019-02-14T22:30:35Z")

</div>

> [@mootari](#):
>
> @jashkenas Something minor I’ve noticed: When switching between the Base/Diff/Target states of a single cell, the cell might not execute correctly due to missing dependencies. Is this something that can be fixed (at some point)?

Yes, potentially. We’ve started with simple with per-cell toggling (Or you can toggle every cell in the notebook at once, by clicking the gear in the compare header). But because we know the upstream inputs for each cell, you could imagine an alternative version that would cause the cell to also toggle all of its inputs (and their inputs, and so on) back to the corresponding base/target state.

One reason not to do this by default is that often the purpose of toggling a cell is to show how it would behave in the context of the other notebook: e.g. Yesterday’s formatting function applied to today’s chart.

Ultimately, it would be a somewhat advanced feature — and really the biggest problem with it is finding a clear, intuitive UI for toggling a cell (and all of its inputs) at once.

---

<div class="post-metadata">

**Author:** ![mootari](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/mootari/32/581_2.png) [@mootari](https://talk.observablehq.com/u/mootari)\
**Post date:** [February 14, 2019, 10:44pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/9 "2019-02-14T22:44:52Z")

</div>

> [@jashkenas](#):
>
> One reason not to do this by default is that often the purpose of toggling a cell is to show how it would behave in the context of the other notebook

That’s a very good point that I hadn’t even considered.

> [@jashkenas](#):
>
> Ultimately, it would be a somewhat advanced feature — and really the biggest problem with it is finding a clear, intuitive UI for toggling a cell (and all of its inputs) at once.

Perhaps a chain symbol beside a cell’s state selector that can be toggled? _Edit: I guess it would be hard to prevent major, disorienting jumps when switching._

---

<div class="post-metadata">

**Author:** ![Fil](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/fil/32/207_2.png) [@Fil](https://talk.observablehq.com/u/Fil)\
**Post date:** [February 14, 2019, 10:53pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/10 "2019-02-14T22:53:17Z")

</div>

Very very super cool! One potential issue is that clicking resolve “hides” the comment forever(?) and apparently without possibility of canceling or showing them again (?)

---

<div class="post-metadata">

**Author:** ![jashkenas](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/jashkenas/32/1778_2.png) [@jashkenas](https://talk.observablehq.com/u/jashkenas)\
**Post date:** [February 14, 2019, 11:05pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/11 "2019-02-14T23:05:08Z")

</div>

> [@Fil](#):
>
> Very very super cool! One potential issue is that clicking resolve “hides” the comment forever(?) and apparently without possibility of canceling or showing them again (?)

Yep. One of the things that we edited out of the introductory post — and that I’ve just gone ahead and put back in there — is that we’re planning to add a way to show all of a notebook’s resolved comments (in a read-only way) in the future.

For the time being, it hides them for good.

---

<div class="post-metadata">

**Author:** ![tau](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/tau/32/1038_2.png) [@tau](https://talk.observablehq.com/u/tau)\
**Post date:** [February 14, 2019, 11:54pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/12 "2019-02-14T23:54:36Z")

</div>

Looks to me like a really smart solution! Especially to keep the suggestions private.  
Nice work 🙂

---

<div class="post-metadata">

**Author:** ![bgchen](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/bgchen/32/784_2.png) [@bgchen](https://talk.observablehq.com/u/bgchen)\
**Post date:** [February 15, 2019, 3:25pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/13 "2019-02-15T15:25:02Z")

</div>

Is there a way to undo a merged suggestion if it contained only comments? I just received a nice comment-only suggestion from @fil that I accidentally merged not realizing that comments get hidden when that happens. Now that I read the “Suggestion and Comments” page again, I see that it does say that comments don’t get moved, so I probably should have known not to do this… 🙁

---

<div class="post-metadata">

**Author:** ![mbostock](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/mbostock/32/9_2.png) [@mbostock](https://talk.observablehq.com/u/mbostock)\
**Post date:** [February 15, 2019, 4:00pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/14 "2019-02-15T16:00:04Z")

</div>

We don’t currently have an action for showing resolved comments, but we’re planning on adding it soon.

---

<div class="post-metadata">

**Author:** ![Fil](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/fil/32/207_2.png) [@Fil](https://talk.observablehq.com/u/Fil)\
**Post date:** [February 18, 2019, 10:14pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/15 "2019-02-18T22:14:43Z")

</div>

After a few comments… it surprised me each time I made a comment on someone’s notebook, and ended up with a fork where no code had been changed. I have to keep in mind that I want to trash it only after the comment was processed. Am I using it correctly? Do I really need a fork if I just want to send a remark or question, with no code change?

---

<div class="post-metadata">

**Author:** ![Job](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/job/32/1185_2.png) [@Job](https://talk.observablehq.com/u/Job)\
**Post date:** [February 19, 2019, 2:39pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/16 "2019-02-19T14:39:29Z")

</div>

I’m kind of missing a way to say “thank you” to people who sent helpful suggestions and edits (speaking of which, @Fil, thanks for the bit of proofreading on my last notebook)

Based on the last section of the notebok I figure that the Observable team has already seen Evan Czaplicki’s musings on the topic, but sharing it just in case:

---

<div class="post-metadata">

**Author:** ![Job](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/job/32/1185_2.png) [@Job](https://talk.observablehq.com/u/Job)\
**Post date:** [February 19, 2019, 2:42pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/17 "2019-02-19T14:42:57Z")

</div>

> [@jashkenas](#):
>
> When you suggest, it automatically shares the notebook (if not already shared or published), and allows the recipient of the suggestion to see and reply to your comments on the suggested notebook.

An “only you will see this” is rather absolute and doesn’t communicate this. Although I can imagine “only you will see this until you click Suggest” is also confusing since the button is not visible until the first comment.

---

<div class="post-metadata">

**Author:** ![jashkenas](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/jashkenas/32/1778_2.png) [@jashkenas](https://talk.observablehq.com/u/jashkenas)\
**Post date:** [February 19, 2019, 5:20pm UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/18 "2019-02-19T17:20:01Z")

</div>

> [@Fil](#):
>
> After a few comments… it surprised me each time I made a comment on someone’s notebook, and ended up with a fork where no code had been changed. I have to keep in mind that I want to trash it only after the comment was processed. Am I using it correctly? Do I really need a fork if I just want to send a remark or question, with no code change?

I’m afraid that, at the moment, you do. In this first version of comments and suggestions — comments are attached to the notebook itself, and you don’t have permission to leave unsolicited comments directly on someone else’s notebook. Instead the flow is to fork your own copy with your comments, and give them explicit permission to comment on _yours_ instead, by sending it to them as a suggestion. So the discussion occurs on the notebook of the person who initiated the conversation, not the person responding to it.

It’s a sort of “the author is the master of their domain” model.

> [@Job](#):
>
> I’m kind of missing a way to say “thank you” to people who sent helpful suggestions and edits (speaking of which, @Fil, thanks for the bit of proofreading on my last notebook)

Thanks for all of the helpful feedback in this thread! As we go back to revisit the design and improve these collaboration features — it’s honestly really quite useful to hear from you all which parts feel weird and which design choices are working and aren’t, because it helps solidify or reverse earlier debates about how the puzzle pieces should be fit together.

---

<div class="post-metadata">

**Author:** ![mbostock](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/mbostock/32/9_2.png) [@mbostock](https://talk.observablehq.com/u/mbostock)\
**Post date:** [February 20, 2019, 1:29am UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/19 "2019-02-20T01:29:22Z")

</div>

> [@Fil](#):
>
> Do I really need a fork if I just want to send a remark or question, with no code change?

To add to Jeremy’s reply, yes, because we don’t currently distinguish between comment-only suggestions and suggestions that propose changes to code. And since comments are private (between the suggester and recipient), the fork exists as a home for that discussion.

We’re listening to feedback and reflecting on improvements to the workflow. Also, we’d like to improve how shared/suggested notebooks appear on your profile (see [Feature Request: Unlist a shared notebook](https://talk.observablehq.com/t/feature-request-unlist-a-shared-notebook/1503/1)) to reduce clutter, and more generally to offer ways to better organize and find your notebooks.

---

<div class="post-metadata">

**Author:** ![Fil](https://yyz2.discourse-cdn.com/flex030/user_avatar/talk.observablehq.com/fil/32/207_2.png) [@Fil](https://talk.observablehq.com/u/Fil)\
**Post date:** [February 20, 2019, 11:14am UTC](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675/20 "2019-02-20T11:14:44Z")

</div>

Thank you for the replies. Jeremy and Mike made clear the need for a fork to hold that specific discussion.

A bit more feedback on the interface/workflow/cognitive difficulties I still see in trying to run the whole process with two accounts:

Lets say that as @fil I’m working on @a\_person’s notebook and start with an intent to comment. I click “comment” (I don’t fork).

**Step 1 typing comments**

While I’m typing I see this message “Suggest to share this with a\_person”. It’s not clear what I should to, because typing my comment is what I understand as “suggesting”, so it looks like I’m doing just that. The message disappears when I validate the comment =\> I’m tempted to read this as “OK this suggestion has been shared now”, but no, it was a comment, not a suggestion, and it hasn’t been sent.

Worse, if I leave the page, the comments are lost.

It all makes sense once you understand that you don’t own the notebook and will lose everything if you play with it _just like if you played with the code_. But the whole interaction has lead me to think I had commented (as on a normal forum board such as talk.observable).

(Maybe a test on window.close that would remind you that you’re going to lose your changes would help here?)

**Step 2: the suggest button.**

```auto
Send suggestion

[Brief description of changes…]

@a_person will be notified and allowed to comment.

The notebook will be visible to anyone with the link.

```

> “[Brief description of changes…]”

If there are no changes, I have nothing to describe. Again, my comments are not mentioned: that interaction seems to tell me that this is only if I need to send “changes”? =\> maybe change the wording to `[Brief description of changes and comments…]`

If my comment is already brief, I have to type it again =\> maybe pre-fill with the first 200 chars of the first comment?

> “@a\_person will be notified and allowed to comment.” + “The notebook will be visible to anyone with the link.”

I understand that the notebook is “shared to anyone has the link” + “@a\_person will receive the link” + “@a\_person will be allowed to view and add comments”.

In short, the authorizations regime on comments is different from that on shared notebooks, but in that step they are mixed up, and it’s not obvious why it’s necessary and makes it cognitively difficult to parse.

**Step 3: suggestion sent**

The notebook reloads as a new SHARED fork in a compare mode. (Again: why SHARED, I just need to share it with @a\_person, it should be in a way independent from the notion of sharing… what happens if I unshare… etc.)

> “@fil suggests merging this: “a question””.

I’m just sending a comment, so all this interface’s widgets don’t really talk to me: “Comparing notebooks”, “diff/base/target”.

I have no feedback on the fact that @a\_person has been notified and invited to the discussion I’ve just opened. I have no idea what happens if I close the suggestion before they visit the link from their email. I have no idea that I will receive email notification(s?) when @a\_person comments, resolves and/or merges the suggestions.

**Step 4: suggestion received**

I am now @a\_person. I have received this email, I click on the link to the fork/compare page, and the interface tells me to merge if I like what I see. Remember it’s just a comment, so merge should not do anything(then why tell me to merge?) or will it merge the comment in(?).

No way to know except to try. Answer is: it doesn’t merge anything into the original notebook, but sends a notification to the commenter (@fil) that @a\_person has merged their suggestion.

Back to the forked notebook, there is a message at the top saying (rightly) that the suggestion has been merged. Good. But the whole conversation has _disappeared_, on both screens (@fil’s and @a\_person’s) (danger!!).

* * *

Also unclear: except from my notification emails, is there a way to list “open suggestions on my notebooks”? [EDIT: just saw the tab in my notebooks]

* * *

Sorry for the long comment. I think it helped me learn how the system works so I won’t be surprised next time I use it. I’ve tried to outline the parts I didn’t find intuitive or that seemed tricky, but for the record let’s say that in general it works out ok 🙂

[Next page](https://talk.observablehq.com/t/let-s-talk-about-observable-suggestions/1675.md?page=2)
