Teams & author attribution

Hey friends! Just wanted to share something I found confusing about teams UI. When you look at a notebook published to a team, it shows author attribution (e.g. that this Mona Lisa notebook is written by Mike, although published to D3 team):


However, if you go to Mike’s profile, you won’t find that notebook there. If I follow an author on Observable, I’d love to see all public notebooks they create on their profile, and from the other side, as an author publishing to a team, I’d still like my notebooks to show up on my profile page. Were there reasons to intentionally decide against this?

It also seems inconsistent to either show the author or the team in the same spot on a notebook thumbnail — ideally, both would be shown (e.g. “Mike Bostock / D3, 3 days ago”):

And lastly, a few weird slightly unrelated things: fixed now:

  1. If you search for “Mona Lisa Histogram” (the title of the notebook), it doesn’t find it. Might be a search indexing bug?
  2. You can see on the thumbnail above that it’s a fork, but on the notebook’s page, there’s no indication that it’s a fork. Perhaps if it’s a public fork of a private notebook, it shouldn’t be indicated as a fork publicly?

Bravo for noticing the glitch!

I’ll start with the easy stuff first:

Mona Lisa Histogram was a fork of a private (@d3) notebook that had been trashed … but it didn’t have any changes of its own — it was what we call a “trivial fork”, and those don’t show up in search results, generally. We’ve made a single noop edit, so it should appear in results normally now.

That also is why it appears to be a fork, but there’s no link to the parent notebook — because the parent is private and trashed. Our policy so far has been to indicate fork status when the parent notebook can’t be accessed by the reading user, but not link to the inaccessible parent. We’ll try to apply that rule consistently.

As for crediting team / individual notebooks in general, it’s a little bit tricker. The “By Mike Bostock” indicates that he created the notebook in question, not that he made the majority of edits to it, or that he published it. We have a longstanding ticket to explore better ways of attributing credit to team notebooks to multiple authors.

Should public team notebooks appear on the individual profile pages of every team member who made even a single contribution to them? … is a question that’s part of that conversation.


It’s not clear to me what amount of history state should be shown to the public on notebooks, including attribution.

In projects hosted in public version control (e.g. on Github), it is possible to use “blame” to see who wrote what, along with a full history of what the project looked like before/after each contribution. But commits are not every trivial code change, but only the chunks that authors explicitly grouped together and labeled. So when authors are careful about the content/metadata attached to their commits, what we get is a sanitized history that the author could explicitly craft.

In Observable everything but the final notebook state is hidden from everyone but the author in the UI, though old versions are accessible to anyone who knows magic version numbers that were previously published. There are no commit messages, no discussion attached to sets of changes, no idea of which “suggestion” notebooks were merged in, etc.; any metadata like that must be explicitly added to the notebook content by the author (“thanks to X and Y for idea A; thanks to Z for cleaning up implementation of B” or whatever).

Authors can see a full history, but it is a very messy version recording every minor code reformat, typo fix, and failed experiment.

The current tendency to hide the messy guts of the editing process is probably better than an alternative of showing everything including stuff that the author might not want to show.

It’s hard to balance workflow friction (using real version control systems has non-negligible mental overhead) vs. the benefits more structured approaches provide.


Thanks for the thorough explanation, Jeremy!

The simplest solution I could see working in that case would be having a “Show on profile” or “Hide on profile” toggle menu item on a notebook. You could have it on by default for users that create a team notebook, allowing them to remove it from their profile if necessary, and other contributors to the notebook would be able to add it to their profile.

Another option would be to show the top 3, 5, or some other number of contributors based on what percent of their code is still visible in the current published version of the notebook. Other contributors chould be shown under a “+ X more” dropdown like how the like button dropdown works for notebook owners.

Though this has more to do with revision control than authorship: maybe some inspiration can be drawn from the Google Drive approach to version pinning… where minor and major revisions are stored for a time, but eventually discarded unless ‘pinned’ by an author.

Notebooks published for a team still don’t show up on individual author’s pages, but the attribution on the recent page looks good. e.g.

1 Like

Public team notebooks now also appear on the author’s profile. For example, if you go to my profile, you’ll see my personal notebooks in addition to the ones I’ve written for D3 and Observable:


This is great (and my comment is somewhat off-topic for this thread), but to me it also re-emphasizes the gains that would be realized in ehnancing per-user search and filter options. Sometimes, I’d prefer just to see what a given user is doing on her or his own…

This has made the notebook statistics misleading (I suppose):

@mbostock has published 957 notebooks so far (20k likes), owning 560 of them.