Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal: Document defining Gutenberg Principles #30963

Open
wants to merge 13 commits into
base: trunk
Choose a base branch
from

Conversation

nerrad
Copy link
Contributor

@nerrad nerrad commented Apr 19, 2021

I've been involved with the Gutenberg project for a few years in different contexts: contributing directly to the codebase, participating in conversations around various interfaces, consuming what others have written about the project, writing plugins and blocks extending Gutenberg, consulting with teams working on it, and teaching others various aspects of the project. While there are various approaches to Gutenberg that are indirectly "picked up" by those working on it extensively as a by product of being "in the trenches", I have found that there's no real authoritative source for describing the underlying principles guiding Gutenberg development and design.

This lack manifests itself with some difficulty when trying to:

  • communicate why certain architectural decisions are made in interfaces built.
  • understand from a business perspective why Gutenberg is beneficial and why its approach should be considered in building for the WordPress ecosystem.
  • help third parties who will be building extensions on top of the various GB interfaces we build and why things work “differently” than what they are used to in the WordPress ecosystem.

While there are a number of posts spread through various blogs and sources that articulate pieces of “Gutenberg principles”, to date there really isn’t a cohesive document than serves as an “official” repository of this guiding knowledge.

Having official principles guiding Gutenberg development can help in the following ways:

  • Reviewers have something to help use when assessing the work in submitted PRs in the Gutenberg project.
  • Guiding architectural discussions and decisions around changes or improvements in general design (both user and code). Besides having a clearer idea around the “yes” things we do, it also makes it much easier to identify why we might say “no” to an idea or approach.
  • Communicating with the wider development and WordPress business community that might have competing interests for how they feel Gutenberg “should be done”. This provides something to align their own work with.

I believe there is an underlying set of ideas and principles that are guiding Gutenberg development and design whether it's communicated officially or not.

Given the above, and my own understanding of the Gutenberg project from my participation, observation, and usage, I'm submitting a proposed document with what I think some of the principles are guiding GB development and design. Some additional considerations:

  • I'd love to have more variety and diversity represented in resources that complement the principles outlined in the doc before publishing. So please pop in some links for consideration if anyone knows of any.
  • Related to the above, I think it'd be beneficial to consider this as an evolving doc. Even after publishing, we may find that certain principles can be refined or additional ones pop up. I also think it's beneficial to have this as an entry point type of document that inspires folks to dive deeper into the implications of these principles in code, design or other posts published in our ecosystem. Ideally we could link to these various voices in the WordPress ecosystem from this doc as well over time.
  • More than anything, this is intended to kickstart discussion around having these principles articulated and published. Whether or not the final form of this document ends up being what I've introduced here is less important to me than having something in place.

@nerrad nerrad requested a review from a team April 19, 2021 14:05
@nerrad nerrad added the [Type] Developer Documentation Documentation for developers label Apr 19, 2021
@nerrad nerrad changed the title Proposal: Document describing Gutenberg Principles Proposal: Document defining Gutenberg Principles Apr 19, 2021
@github-actions
Copy link

github-actions bot commented Apr 19, 2021

Size Change: +536 B (0%)

Total Size: 1.62 MB

Filename Size Change
build/block-editor/index.js 119 kB -137 B (0%)
build/block-library/blocks/query-loop/editor-rtl.css 98 B +15 B (+18%) ⚠️
build/block-library/blocks/query-loop/editor.css 97 B +15 B (+18%) ⚠️
build/block-library/editor-rtl.css 9.93 kB +3 B (0%)
build/block-library/editor.css 9.92 kB +2 B (0%)
build/block-library/index.js 147 kB +454 B (0%)
build/components/index.js 188 kB +423 B (0%)
build/edit-post/index.js 335 kB -41 B (0%)
build/edit-site/index.js 25.6 kB -169 B (-1%)
build/editor/index.js 38.4 kB -29 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.12 kB 0 B
build/annotations/index.js 2.93 kB 0 B
build/api-fetch/index.js 2.42 kB 0 B
build/autop/index.js 2.28 kB 0 B
build/blob/index.js 673 B 0 B
build/block-directory/index.js 6.61 kB 0 B
build/block-directory/style-rtl.css 989 B 0 B
build/block-directory/style.css 990 B 0 B
build/block-editor/style-rtl.css 12.8 kB 0 B
build/block-editor/style.css 12.8 kB 0 B
build/block-library/blocks/archives/editor-rtl.css 61 B 0 B
build/block-library/blocks/archives/editor.css 60 B 0 B
build/block-library/blocks/audio/editor-rtl.css 58 B 0 B
build/block-library/blocks/audio/editor.css 58 B 0 B
build/block-library/blocks/audio/style-rtl.css 112 B 0 B
build/block-library/blocks/audio/style.css 112 B 0 B
build/block-library/blocks/block/editor-rtl.css 161 B 0 B
build/block-library/blocks/block/editor.css 161 B 0 B
build/block-library/blocks/button/editor-rtl.css 475 B 0 B
build/block-library/blocks/button/editor.css 474 B 0 B
build/block-library/blocks/button/style-rtl.css 601 B 0 B
build/block-library/blocks/button/style.css 600 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 315 B 0 B
build/block-library/blocks/buttons/editor.css 315 B 0 B
build/block-library/blocks/buttons/style-rtl.css 375 B 0 B
build/block-library/blocks/buttons/style.css 375 B 0 B
build/block-library/blocks/calendar/style-rtl.css 208 B 0 B
build/block-library/blocks/calendar/style.css 208 B 0 B
build/block-library/blocks/categories/editor-rtl.css 84 B 0 B
build/block-library/blocks/categories/editor.css 83 B 0 B
build/block-library/blocks/categories/style-rtl.css 79 B 0 B
build/block-library/blocks/categories/style.css 79 B 0 B
build/block-library/blocks/code/style-rtl.css 90 B 0 B
build/block-library/blocks/code/style.css 90 B 0 B
build/block-library/blocks/columns/editor-rtl.css 190 B 0 B
build/block-library/blocks/columns/editor.css 190 B 0 B
build/block-library/blocks/columns/style-rtl.css 422 B 0 B
build/block-library/blocks/columns/style.css 422 B 0 B
build/block-library/blocks/cover/editor-rtl.css 643 B 0 B
build/block-library/blocks/cover/editor.css 645 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB 0 B
build/block-library/blocks/cover/style.css 1.22 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 486 B 0 B
build/block-library/blocks/embed/editor.css 486 B 0 B
build/block-library/blocks/embed/style-rtl.css 401 B 0 B
build/block-library/blocks/embed/style.css 400 B 0 B
build/block-library/blocks/file/editor-rtl.css 301 B 0 B
build/block-library/blocks/file/editor.css 300 B 0 B
build/block-library/blocks/file/frontend.js 771 B 0 B
build/block-library/blocks/file/style-rtl.css 255 B 0 B
build/block-library/blocks/file/style.css 255 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.45 kB 0 B
build/block-library/blocks/freeform/editor.css 2.45 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 704 B 0 B
build/block-library/blocks/gallery/editor.css 705 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.06 kB 0 B
build/block-library/blocks/gallery/style.css 1.05 kB 0 B
build/block-library/blocks/group/editor-rtl.css 160 B 0 B
build/block-library/blocks/group/editor.css 160 B 0 B
build/block-library/blocks/group/style-rtl.css 57 B 0 B
build/block-library/blocks/group/style.css 57 B 0 B
build/block-library/blocks/heading/editor-rtl.css 129 B 0 B
build/block-library/blocks/heading/editor.css 129 B 0 B
build/block-library/blocks/heading/style-rtl.css 76 B 0 B
build/block-library/blocks/heading/style.css 76 B 0 B
build/block-library/blocks/home-link/style-rtl.css 259 B 0 B
build/block-library/blocks/home-link/style.css 259 B 0 B
build/block-library/blocks/html/editor-rtl.css 281 B 0 B
build/block-library/blocks/html/editor.css 281 B 0 B
build/block-library/blocks/image/editor-rtl.css 717 B 0 B
build/block-library/blocks/image/editor.css 716 B 0 B
build/block-library/blocks/image/style-rtl.css 481 B 0 B
build/block-library/blocks/image/style.css 485 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 281 B 0 B
build/block-library/blocks/latest-comments/style.css 282 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B 0 B
build/block-library/blocks/latest-posts/editor.css 137 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 523 B 0 B
build/block-library/blocks/latest-posts/style.css 522 B 0 B
build/block-library/blocks/legacy-widget/editor-rtl.css 557 B 0 B
build/block-library/blocks/legacy-widget/editor.css 557 B 0 B
build/block-library/blocks/list/style-rtl.css 63 B 0 B
build/block-library/blocks/list/style.css 63 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 176 B 0 B
build/block-library/blocks/media-text/editor.css 176 B 0 B
build/block-library/blocks/media-text/style-rtl.css 492 B 0 B
build/block-library/blocks/media-text/style.css 489 B 0 B
build/block-library/blocks/more/editor-rtl.css 434 B 0 B
build/block-library/blocks/more/editor.css 434 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 633 B 0 B
build/block-library/blocks/navigation-link/editor.css 634 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B 0 B
build/block-library/blocks/navigation-link/style.css 94 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.54 kB 0 B
build/block-library/blocks/navigation/editor.css 1.54 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 1.78 kB 0 B
build/block-library/blocks/navigation/style.css 1.78 kB 0 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B 0 B
build/block-library/blocks/nextpage/editor.css 395 B 0 B
build/block-library/blocks/page-list/editor-rtl.css 310 B 0 B
build/block-library/blocks/page-list/editor.css 311 B 0 B
build/block-library/blocks/page-list/style-rtl.css 233 B 0 B
build/block-library/blocks/page-list/style.css 233 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B 0 B
build/block-library/blocks/paragraph/editor.css 157 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 247 B 0 B
build/block-library/blocks/paragraph/style.css 248 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 209 B 0 B
build/block-library/blocks/post-author/editor.css 209 B 0 B
build/block-library/blocks/post-author/style-rtl.css 183 B 0 B
build/block-library/blocks/post-author/style.css 184 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 140 B 0 B
build/block-library/blocks/post-comments-form/style.css 140 B 0 B
build/block-library/blocks/post-comments/style-rtl.css 360 B 0 B
build/block-library/blocks/post-comments/style.css 359 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 139 B 0 B
build/block-library/blocks/post-content/editor.css 139 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B 0 B
build/block-library/blocks/post-excerpt/editor.css 73 B 0 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B 0 B
build/block-library/blocks/post-excerpt/style.css 69 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 338 B 0 B
build/block-library/blocks/post-featured-image/editor.css 338 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 119 B 0 B
build/block-library/blocks/post-featured-image/style.css 119 B 0 B
build/block-library/blocks/post-title/style-rtl.css 60 B 0 B
build/block-library/blocks/post-title/style.css 60 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 103 B 0 B
build/block-library/blocks/preformatted/style.css 103 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 183 B 0 B
build/block-library/blocks/pullquote/editor.css 183 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 318 B 0 B
build/block-library/blocks/pullquote/style.css 318 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 315 B 0 B
build/block-library/blocks/query-loop/style.css 317 B 0 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B 0 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B 0 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B 0 B
build/block-library/blocks/query-pagination/editor.css 262 B 0 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B 0 B
build/block-library/blocks/query-pagination/style.css 168 B 0 B
build/block-library/blocks/query-title/editor-rtl.css 86 B 0 B
build/block-library/blocks/query-title/editor.css 86 B 0 B
build/block-library/blocks/query/editor-rtl.css 131 B 0 B
build/block-library/blocks/query/editor.css 132 B 0 B
build/block-library/blocks/quote/style-rtl.css 169 B 0 B
build/block-library/blocks/quote/style.css 169 B 0 B
build/block-library/blocks/rss/editor-rtl.css 201 B 0 B
build/block-library/blocks/rss/editor.css 202 B 0 B
build/block-library/blocks/rss/style-rtl.css 290 B 0 B
build/block-library/blocks/rss/style.css 290 B 0 B
build/block-library/blocks/search/editor-rtl.css 189 B 0 B
build/block-library/blocks/search/editor.css 189 B 0 B
build/block-library/blocks/search/style-rtl.css 359 B 0 B
build/block-library/blocks/search/style.css 362 B 0 B
build/block-library/blocks/separator/editor-rtl.css 99 B 0 B
build/block-library/blocks/separator/editor.css 99 B 0 B
build/block-library/blocks/separator/style-rtl.css 251 B 0 B
build/block-library/blocks/separator/style.css 251 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 512 B 0 B
build/block-library/blocks/shortcode/editor.css 512 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 440 B 0 B
build/block-library/blocks/site-logo/editor.css 441 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 154 B 0 B
build/block-library/blocks/site-logo/style.css 154 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 164 B 0 B
build/block-library/blocks/social-link/editor.css 165 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 800 B 0 B
build/block-library/blocks/social-links/editor.css 799 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB 0 B
build/block-library/blocks/social-links/style.css 1.33 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 308 B 0 B
build/block-library/blocks/spacer/editor.css 308 B 0 B
build/block-library/blocks/spacer/style-rtl.css 48 B 0 B
build/block-library/blocks/spacer/style.css 48 B 0 B
build/block-library/blocks/table/editor-rtl.css 478 B 0 B
build/block-library/blocks/table/editor.css 478 B 0 B
build/block-library/blocks/table/style-rtl.css 485 B 0 B
build/block-library/blocks/table/style.css 485 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 118 B 0 B
build/block-library/blocks/tag-cloud/editor.css 118 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B 0 B
build/block-library/blocks/tag-cloud/style.css 94 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 551 B 0 B
build/block-library/blocks/template-part/editor.css 550 B 0 B
build/block-library/blocks/term-description/editor-rtl.css 90 B 0 B
build/block-library/blocks/term-description/editor.css 90 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B 0 B
build/block-library/blocks/text-columns/editor.css 95 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 166 B 0 B
build/block-library/blocks/text-columns/style.css 166 B 0 B
build/block-library/blocks/verse/style-rtl.css 87 B 0 B
build/block-library/blocks/verse/style.css 87 B 0 B
build/block-library/blocks/video/editor-rtl.css 569 B 0 B
build/block-library/blocks/video/editor.css 570 B 0 B
build/block-library/blocks/video/style-rtl.css 169 B 0 B
build/block-library/blocks/video/style.css 169 B 0 B
build/block-library/common-rtl.css 1.26 kB 0 B
build/block-library/common.css 1.26 kB 0 B
build/block-library/reset-rtl.css 506 B 0 B
build/block-library/reset.css 507 B 0 B
build/block-library/style-rtl.css 10.2 kB 0 B
build/block-library/style.css 10.3 kB 0 B
build/block-library/theme-rtl.css 692 B 0 B
build/block-library/theme.css 693 B 0 B
build/block-serialization-default-parser/index.js 1.29 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/blocks/index.js 47.1 kB 0 B
build/components/style-rtl.css 16.2 kB 0 B
build/components/style.css 16.2 kB 0 B
build/compose/index.js 9.95 kB 0 B
build/core-data/index.js 12.1 kB 0 B
build/customize-widgets/index.js 43.2 kB 0 B
build/customize-widgets/style-rtl.css 1.38 kB 0 B
build/customize-widgets/style.css 1.38 kB 0 B
build/data-controls/index.js 829 B 0 B
build/data/index.js 7.23 kB 0 B
build/date/index.js 31.8 kB 0 B
build/deprecated/index.js 739 B 0 B
build/dom-ready/index.js 577 B 0 B
build/dom/index.js 4.62 kB 0 B
build/edit-navigation/index.js 13.6 kB 0 B
build/edit-navigation/style-rtl.css 2.82 kB 0 B
build/edit-navigation/style.css 2.82 kB 0 B
build/edit-post/classic-rtl.css 454 B 0 B
build/edit-post/classic.css 454 B 0 B
build/edit-post/style-rtl.css 6.8 kB 0 B
build/edit-post/style.css 6.79 kB 0 B
build/edit-site/style-rtl.css 4.76 kB 0 B
build/edit-site/style.css 4.75 kB 0 B
build/edit-widgets/index.js 292 kB 0 B
build/edit-widgets/style-rtl.css 3.46 kB 0 B
build/edit-widgets/style.css 3.47 kB 0 B
build/editor/style-rtl.css 3.92 kB 0 B
build/editor/style.css 3.91 kB 0 B
build/element/index.js 3.44 kB 0 B
build/escape-html/index.js 739 B 0 B
build/format-library/index.js 5.66 kB 0 B
build/format-library/style-rtl.css 637 B 0 B
build/format-library/style.css 639 B 0 B
build/hooks/index.js 1.76 kB 0 B
build/html-entities/index.js 627 B 0 B
build/i18n/index.js 3.73 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/keyboard-shortcuts/index.js 1.65 kB 0 B
build/keycodes/index.js 1.43 kB 0 B
build/list-reusable-blocks/index.js 2.06 kB 0 B
build/list-reusable-blocks/style-rtl.css 629 B 0 B
build/list-reusable-blocks/style.css 628 B 0 B
build/media-utils/index.js 3.08 kB 0 B
build/navigation/index.js 2.85 kB 0 B
build/notices/index.js 1.07 kB 0 B
build/nux/index.js 2.31 kB 0 B
build/nux/style-rtl.css 718 B 0 B
build/nux/style.css 716 B 0 B
build/plugins/index.js 1.99 kB 0 B
build/primitives/index.js 1.03 kB 0 B
build/priority-queue/index.js 791 B 0 B
build/react-i18n/index.js 923 B 0 B
build/redux-routine/index.js 2.82 kB 0 B
build/reusable-blocks/index.js 2.54 kB 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/rich-text/index.js 10.7 kB 0 B
build/server-side-render/index.js 1.64 kB 0 B
build/shortcode/index.js 1.68 kB 0 B
build/token-list/index.js 846 B 0 B
build/url/index.js 1.95 kB 0 B
build/viewport/index.js 1.28 kB 0 B
build/warning/index.js 1.13 kB 0 B
build/widgets/index.js 1.66 kB 0 B
build/wordcount/index.js 1.24 kB 0 B

compressed-size-action

@gziolo gziolo added the [Type] Project Management Meta-issues related to project management of Gutenberg label Apr 19, 2021
Each of the words in this principle are deliberate:


### Delightful
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As much as I love this word, it's just not a good principle because it is so subjective. It has also been confiscated by commercial projects.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it primarily the specific word you object to or also the meaning behind the choice of the word (and the intent of the principle)? If just the word itself, do you have any suggestions about what could be used instead?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Delightful does sound a bit like marketing-speak. It's not so much the subjectivity as the underlying idea that we're somehow directing the user's feelings about the product that makes me uneasy.

The word "transparent" popped into my head when reading The user interfaces should “get out of the way” and support the user. Transparency both in the sense of clarity (it's clear how to use the interface, thus "supporting" the user instead of making things difficult) but also in the sense of invisibility (it gets "out of the way" so users don't even notice it while working).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You both have shared perspectives on the word "delightful" that I didn't even think of. I was thinking of it in the context of aiming for user experiences that elicit "surprised joy" (my interpretation of "delight"). I also don't think we can escape the reality that we indeed do influence users feelings about the product when building it. This principle is aimed at thinking how what we build contributes to positive feelings.

With that said, I do see how transparent could be a good substitute here for the word delightful and moves more towards the objectiveness of a principle as opposed to the subjectivity of a value or goal.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 for transparent 👍

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Delightful" doesn't capture what I think this section hints at. "Transparent" is also lacking a bit in concrete meaning.

The way I'd describe this is "A canvas for expression" (more on that here: #18667)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll see if I can capture some of what you wrote in that issue Matías - ❤️ it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See the changes made in d6db504. I incorporated much of what Matías articulated in #18667 and this forms the basis for the revised content of the principle which is now simply "A canvas for expression" with the supporting points of this canvas:

  • Guiding users around interacting with the content
  • Uniformity within diversity
  • and Accessbility

The wording around accessibility has also been tweaked in f8a44af which includes not only the work around this for creators of content, but also for consumers of content (to address what was brought up here).

This also handles the concerns around the word "delightful".

@gziolo gziolo requested review from a team, mtias, youknowriad, jasmussen and mcsf April 20, 2021 15:42
@youknowriad
Copy link
Contributor

This is a great document. I don't have much to add to be honest :)

Copy link
Member

@gziolo gziolo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a great document. @nerrad, you did an extraordinary job to put it all together in such a thoughtful way.

I left some minor thing like missing links that I could spot when browsing:

https://github.com/WordPress/gutenberg/blob/add/gb-principles-doc/docs/explanations/principles.md

It would be great to have a few more ✅ to ensure we all share the same principles 😄

docs/explanations/principles.md Outdated Show resolved Hide resolved
docs/explanations/principles.md Show resolved Hide resolved
docs/explanations/principles.md Show resolved Hide resolved
docs/explanations/principles.md Outdated Show resolved Hide resolved
docs/explanations/principles.md Outdated Show resolved Hide resolved
docs/README.md Outdated
Comment on lines 23 to 25
### Gutenberg Principles
[The Gutenberg principles document](/docs/explanations/principles.md) highlights a few principles that are guiding the overall project and shape various development and design decisions.

Copy link
Member

@mkaz mkaz Apr 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we move this section into the Contribute to the block editor below, I don't think it should be the first Quick Link.

This is the first page that shows when viewing the Block Editor Handbook and people are going to be more interested in how to build for and extend first.

With that also said, I think a better more prominent spot would be the repository top-level readme, as that is only showed within the repo and more likely target to developers of the project.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm going to go ahead and move this into the repo top-level README.md - I agree it makes more sense to target contributors.

Given your comment here however, do you think I still need to expose this on on the built docs and if so, where do you think it should be in the docs structure?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See 219f0af (and 1a648ba where wording was changed a bit).

Copy link
Member

@mkaz mkaz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this is a new document you need to add it to docs/toc.json and then npm run docs:build and then commit the updated manifest.json file. 👍

See the existing listings in toc.json for syntax.

@mtias
Copy link
Member

mtias commented Apr 25, 2021

I'd like to give this a bit more thought before merging.


Extensibility interfaces in Gutenberg favor:

**Modularity** - the concept of being able to combine blocks or components into different types of layout or content (see “[Embrace the modularity](https://riad.blog/2020/01/28/embrace-the-modularity/)”).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's some overlap here with https://developer.wordpress.org/block-editor/explanations/architecture/key-concepts/ — it should be linked at least

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See 5e744d9.

@@ -0,0 +1,106 @@


# Gutenberg Principles
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think "Guiding Principles" would be better.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See 1a648ba.

When applied, sometimes these principles build on each other much like the idea of constructing a house with a foundation, walls and roof. However, other times the application of the principles results in something that is more similar to a tapestry where threads of each principle are embedded together and evident in the finished feature or design of the project.


## Aim for delightful, consistent, accessible user interfaces for empowering content creation and expression.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I adhere to "empowering content creation and expression" but I'm not sure the other concepts capture the right concepts. 🤔

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about something like:

The user experience is a canvas that empowers content creation and expression through intuitive and exploration friendly interfaces

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See d6db504.

The user interfaces should “get out of the way” and support the user in creating their content. They should lead to experiences where the user (in the vernacular of Marie Kondo) _finds delight_ with each new thing they discover they can do or accomplish.


### Consistent
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not a principle I'd be comfortable stating as a primary guiding force because it's a bit more nuanced. The way I tend to describe this is more along the lines of "Providing uniformity within diversity, as learning the ingredients of the interface happens once but scales to hundreds of blocks."

This is an important design tension.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the concept of "providing uniformity within diversity" but I think there's still the importance here of capturing the idea of not just the block interfaces but also the interfaces within the editor? Would you say this statement is a principle that also applies to the editor interfaces?

Also, is this something that you believe should be explicitly called out as it's own principle, or should it be included somehow as a part of the statement commented on here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See d6db504.

This also applies to learning _where to find_ different elements that the user might interact with in creating their content.


### Accessible
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one feels a bit odd as it's more of a general principle of WordPress at wide and not specific to Gutenberg. If anything, it should build upon the two other axis of "canvas for expression" and "uniform yet diverse" to embrace the fact users interacting with the software have distinct characteristics and preferences for how to use said software.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's also something important missing here which is how the software can help users build better websites that are semantic and more accessible. That is, respect for the viewers as well as the creators.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is, respect for the viewers as well as the creators.

This is definitely something that isn't capture well in the current iteration that should be included ❤️

This one feels a bit odd as it's more of a general principle of WordPress at wide and not specific to Gutenberg. If anything, it should build upon the two other axis of "canvas for expression" and "uniform yet diverse" to embrace the fact users interacting with the software have distinct characteristics and preferences for how to use said software.

While I agree it's a general principle of WordPress, I also think it's important to call out the distinctive nature of accessibility in the context of Gutenberg. I like how you reflect on describing this as software accommodating users with "distinct characteristics and preferences for how to use said software". An example of this is reflected in the numerous entry points people have to insert a block. Is there some specific concern here around the use of the word "accessible" itself here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See f8a44af.

**Experimentation** - Often new APIs and interfaces clearly start as experimental while reliability and usability of different approaches are being tested. These experiments always begin with determining what problem is solved from the _creator_ perspective and seek to validate how it impacts the user workflow. The intent is to explore what generalizations of the creator's use-case are possible and to discover better abstractions before solidifying around the contract exposed to extension developers.


## Progressive Complexity
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs to be balanced a bit more with a general seek for "simplicity"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Content wise in the description of the principle, or reflected in the principle statement itself?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one was a bit difficult for me to address. I think in general I understand your feedback to mean we want to avoid the idea of complexity as a starting point for the interactions. I've made a few changes in e7b3960 which I think helps, but it still feels like it could be better expressed.

There’s also the related application here to design systems in larger organizations where the design team wants to put some restrictions on what can be modified and manipulated by the content creation team in keeping with the chosen designs behind the presentation of that content. In this case, the progressive complexity principle in Gutenberg provides the tools for “locking down” various elements of the editor when and as needed depending on who is working with the content. Entire swaths of the interface could be hidden or removed to account for the fluent needs of those interacting with the content.


## Ubiquitous and Safe Adoption
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I this is more about a profound respect for the user in an expansive sense — both in how it respects where they come from (compatibility) and aims to ensure protections for the future (the way user data is treated, for example)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So is this more a comment on the principle wording itself (that you would like changed) or on the description of the principle?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left this as is, it's not clear to me how to improve it.

@nerrad nerrad force-pushed the add/gb-principles-doc branch from e651743 to 8f65c69 Compare May 18, 2021 19:14
nerrad and others added 4 commits May 19, 2021 14:01
Co-authored-by: Greg Ziółkowski <grzegorz@gziolo.pl>
This moves away from using the word delightful and incorporates some language used by Matias to describe interface principles (@see #18667)
@nerrad nerrad force-pushed the add/gb-principles-doc branch from 8f65c69 to e7b3960 Compare May 19, 2021 18:02
@nerrad
Copy link
Contributor Author

nerrad commented May 19, 2021

Sorry for the delay in addressing all the feedback. I've gone through and made changes and commented in the related threads to help highlight what was changed as a result. I think this is ready for another round of examination as folks are able.


## Curated Extensibility

The use of the word _curated_ expressly refers to implementing extensibility in a way that prioritizes those _using Gutenberg interfaces to create their content_ over developers integrating with the system. As a result, every extensibility interface request is filtered through the question of how it impacts creator workflows.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm having a little bit of trouble parsing this paragraph.

In "using Gutenberg interfaces to create their content", does interfaces refer to UI/user interfaces, or interfaces as a whole, including APIs?

Assuming the prior, maybe "prioritizes those using Gutenberg user interfaces to create their content"?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. Fixed in 9b4eade (which also clarifies the usage of interfaces elsewhere in the doc).

Copy link
Member

@getsource getsource May 25, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good; thanks much!

@nerrad
Copy link
Contributor Author

nerrad commented Aug 25, 2021

Just checking in to see if there's any appetite for seeing this land from other @WordPress/gutenberg-core contributors. I let this sit for a bit given the efforts around getting WordPress 5.8 released. In particular, @mtias, I addressed some feedback you had and I'm not sure you've seen it, or if you have additional comments.

I'm happy to discuss/iterate more if needed (or even close the PR if there's no consensus).

@mtias
Copy link
Member

mtias commented Aug 27, 2021

Thanks for the nudge — I'm still not quite happy with some of the items and headings.

@nerrad
Copy link
Contributor Author

nerrad commented Sep 6, 2021

I'm still not quite happy with some of the items and headings.

Based on this, it's not clear to me what are the next steps. I've assumed don't merge. I also do not know which items and headings are still problematic or what needs done to make them better.

@mtias
Copy link
Member

mtias commented Sep 10, 2021

Sorry, I mean that some of the items in the outline feel at different levels but is not quite clear why. I don't have a concrete suggestion just yet. Perhaps it's trying to cover too much at once.

@nerrad nerrad closed this Oct 30, 2021
@gziolo
Copy link
Member

gziolo commented Nov 2, 2021

That's very unfortunate to see this PR closed with no additions to the Block Editor Handbook 😞

I was hoping we will finally have a good reference to use when discussing new extensibility points.

@getdave
Copy link
Contributor

getdave commented Nov 5, 2021

Agreed. How about after 5.9 we look to break this PR down into smaller documentation updates to various sections of the Block Editor Handbook? That way it will be easier to review and merge incrementally.

@nerrad
Copy link
Contributor Author

nerrad commented Nov 12, 2021

Sorry folks, I closed this mostly because I felt it was stalled and I really had no clear idea on what some next steps could be taken to get it to a mergable state. While I do still think it'd be really helpful to have some master doc outlining principles guiding the project, I got a sense (maybe incorrectly) that there's still not sufficient consensus behind publishing this :). That's not necessarily a bad thing, it just means there's more work to do before something like this PR can be published.

How about after 5.9 we look to break this PR down into smaller documentation updates to various sections of the Block Editor Handbook? That way it will be easier to review and merge incrementally.

One thing I've noticed with the feedback that has come in, is that there are some principles already sprinkled through various issues and docs already. Maybe all that is needed is to capture those and pull them into an index of sorts. The main outcome I was hoping from this PR was to have a single reference to point folks to for all the reasons I outlined in the PR description.

For more information around currently built patterns for extensibility and key architectural concepts, see [this document](/docs/explanations/architecture/key-concepts.md).


## Progressive Complexity unfolding from simple origins.
Copy link
Contributor Author

@nerrad nerrad Nov 12, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still not happy with this heading. Feels too wordy and abstract.

@mtias
Copy link
Member

mtias commented Nov 18, 2021

I personally don't mind this sitting open, we can come back to it, others can read it and add thoughts. Some time distance can also clarify what works and what doesn't.

@mtias mtias reopened this Nov 18, 2021
@senadir
Copy link
Contributor

senadir commented Feb 7, 2022

Now that 5.9.0 is merged, would work on this get resumed?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Type] Developer Documentation Documentation for developers [Type] Project Management Meta-issues related to project management of Gutenberg
Projects
None yet
Development

Successfully merging this pull request may close these issues.