Random Thoughts on…Six Months of Using Gutenberg

It's been a little over six months since I wrote my first post in Gutenberg (and it was about Gutenberg). In that time, I've published 18 posts using Gutenberg. It still has ways to go before I think it's going to be great, but it's continuously solving my needs on this site. When I originally posted my comments, I posted a mix of ideas, bugs, oooh-moment features, and reactions. Some of them are worth revisiting:

  • It’s pretty. And Fast. I never thought of the post editor as being slow, but there is something about Gutenberg that makes it feel fast.

    This is still true! Overall I’m still impressed with how fast things feel.  And as some of the clutter pieces have been removed, it’s gotten even prettier. 

  • There are a lot of rough edges. It’s hard to know what is a bug, what is intentional,  what just hasn’t been done yet, and what hasn’t been thought of.

    It is becoming clearer what is a bug (and they still exist), what needs another riff, and what is just new to me.

  • The default state is likely my favorite “Distraction Free Writing” implementation in WordPress yet. I’m simultaneously able to focus on my content, and yet I have all the tools I need for writing. I don’t yet have all the tools I need for content creation.

    Creating content in Gutenberg has only gotten better.

  • I need to take my hands off my keyboard more than usual. Adding a paragraph after a list isn’t easy to do with just a keyboard.

    It’s more keyboard friendly, but still has steps to go before I can really not use my keyboard. 

And now for some new thoughts:

  • I like the direction Gutenberg continues to head in, but there are a number of edges that continue appearing rough. Some of those are the micro-interactions that continue to be iterated on, while others are the result of bugs (copy and paste right now is rough). 
  • Developing software in the open is hard. I'm continuously impressed with the Gutenberg team's ability to take critism and turn it constructive. 
  • Once better documentation is in place, I think we will start being at a point that we can consider when Gutenberg is merged into Core. I view the lack of great documentation as being a blocker for that discussion. Until it's easy for plugin developers to support Gutenberg, they can't build much and until things are built, it's hard to figure out when Gutenberg is ready to ship.
  • I think the documentation is going to need to tackle things from multiple points of view:
    • How to use all the various extension points. 
    • How to create automated tests
    • Advice on making decisions/Philosophy of what extension points to use (I'm hoping some designers write this)
  • I'd like to see some iteration around the taxonomies in the sidebar. In part to make custom taxonomies easier and in part to see if there are ways to make it easier. 
  • I'm going to be building something for production in February and am seriously considering building it in Gutenberg so it's more future proof.
  • This post was the first time I needed to use the classic text block. Blockquotes and paragraphs inside list items might be an edge case, or perhaps the list block is too rigid. 

I'm going to try and remember to post more thoughts on Gutenberg in another six months. I think it will be in WordPress core by then, but I'm not sure if 5.0 will have been released. For others that have been using Gutenberg for a while, how has your opinion changed? 

WordPress Core Committer Stats: 2017

2017 is coming to a close, and unless someone commits something very soon, WordPress Core development is at rest (since we have an API to do that now). This is the third year I've compiled these stats, see the 2016 committer stats for some of the background information. I'm going to share the stats and then share my reactions to seeing them.

An important caveat, in the post I'll mention employers but we need to remember that people change jobs and that not everyone works on donated time. In fact, the vast majority of WordPress core committers are volunteering their time when they review, write, and commit code to WordPress.

2017 will end the year with 1731 changesets to trunk.  This is down from 2967 last year.  These changesets were committed by 35 individuals, down from 37 in 2016.

2017's most prolific committer was Sergey Biryukov who was responsible for 20.57% of all WordPress commits. He takes this crown from Dominik Schilling.  In raw numbers, Dominick had 4 more commits in 2016 than Sergey did in 2017. This is the first time since I started keeping these stats that a non-release lead has had the lead.

Other notable committers (by volume of commits) in 2017 were Weston Ruter (18.14%) and John Billion (11.84%). 

The employer who was most responsible for WordPress commits this year was Yoast with 24.67%. 14 different employers (grouping all the self-employed individuals into a single group for this purpose). This is down from 20. In 2016, Automattic was first with 14.66%. 

Thoughts and Reactions

The number of higher volume committers is down substantially. In 2016, 17 commiters had at least 52 commits, in 2017 it was 11. Only 3 individuals had over 100 commits in 2017, while in 2016 it was 11. 

The number of core commits and committers continues to fall, but that's in part due to projects like the rest-api and Gutenberg being developed outside of Trac. If WordPress continues to move away from the monolithic repo model, I think this trend will continue. Additionally, with only 2 major releases and no new default theme, there was less to do in core (and many people that were active in Core development have devoted themselves to Gutenberg, the new hosting team, and other WordPress efforts).

I also don't think that it can be ruled out that as a complex piece of software with moderate (at best) automated test coverage, people tend to be cautious and risk-averse. Increasing the automated test coverage should help with these efforts. 

Finally, WordPress does continue to improve. It had two major releases in 2017 bringing some long requested changes to a large swath of the internet. Commit numbers is far from a perfect metric. Some people it takes one commit to get right, sometimes it takes 3 commits to not break the build when landing something. Looking at it and watching it in context of everything else, we can see that WordPress is setup for an incredible 2018.

My WCUS 2017 Watchlist

I didn't make it to nearly as many WordCamp US Sessions as I would have liked. This year was packed full of quality talks.  Rather than leave a bunch of tabs open, I'm going to list out all the talks I hope to watch here.


There are more talks that still need to be uploaded, so this list may grow.

Check out the rest of the WCUS 2017 videos, you just might find something that inspires you. 

Three Years as a WordPress Committer

Three years ago today, I changed three lines of code in WordPress and did it without someone else signing off.  In fact, I didn't write the code that went into WordPress that day.

I've not been a high volume committer in my three years ( I've made 283 total commits), but I have had the pleasure of working on user-facing features such as Shiny Updates for plugins and "Logout everywhere" along with helping to maintin multiple underlying components. I also had the honor of being a deputy release lead for WordPress 4.7.

Here's to three years of helping to democratize publishing 🍻

Gutenberg and Publishers: unconference notes from WordCamp for Publishers

At WordCamp for Publishers, I hosted an unconference session on "Gutenberg and Publishers". There were forty people overflowing a conference room who worked at agencies, publishers, universities, hosting companies, as freelance developers and writers, and one person who described their affiliation as "I left my backpack at the bar last night and lost my name badge, and that's representative of my professional career."

The people in the room had all largely used Gutenberg in some way before the session. Almost the entire room had at least 5 custom meta boxes on the editor screen, over two thirds had at least 10 custom meta boxes, and a few had more than 20. The vast majority used custom taxonomies, many of which had at least one using a UI other than the default taxonomy UI. 

After everyone introduced themselves, I gave a brief introduction to Gutenberg, including demonstrating some of its features. I also explained the block based approach, the desire to eliminate mystery meat, and that Gutenberg is still in very active development with things changing all the time.  After that, I kicked off the discussion.

What do you view as the biggest challenge for publishing companies in making the editor better?

  • Long form layouts. Even with something like short cake to render short codes, you still don't get the full-width experience that you do in a full post. A lot of bouncing back and forth to compare sizes.
  • Everything hooked on to save post and how that negatively impacts the actual saving experience.
  • Collaborative editing and the work around to collaborative editing, which is moving from a thirdparty tool, Google Docs, some other workflow. Bringing that integration into WordPress.
  • Allowing users to preview a prepublished preview version of the post in, the home and the category views. Platform Preview: How do posts look different on different size devices, different platforms, whatever.

What are the customization points that matter most Publishers for the editor? On your site, what's the most custom part of the editor in your eyes?

  • Probably our biggest anxiety around Gutenberg, what is the fate of that metadata management system under the new Gutenberg regime.
  • Taxonomy customization comes in multiple forms:
    • A taxonomy that's a single value, a drop down for it.
    • A taxonomy that can have zero or one with radios and a "clear" button.
    • We'll group multiple taxonomies together in a single meta box that maybe has a repeating field either an autocomplete or a drop down where you select. So there might be five taxonomies which each can have multiple terms.
    • I've had numerous times is where I want a hierarchical taxonomy, but I wanted to limit to two levels. And another is a really long list of taxonomy terms. And so I want to get an audit complete. And then when you select one, it adds to the list of ones that are selected. And have a check box next to the ones that you decide you want to do later. So there's a whole bunch of different ways to do taxonomy.
    • We end up doing a lot of custom validation around taxonomies. We check this one taxonomy, you can check three other of this other type, or X, Z, Z. And right now, I think there isn't sort of a builtin validation mechanism to do enforcement on the layout or on taxonomy.
    • So a couple that I've used as well, in addition to the ones mentioned, is where taxonomies can't be you can choose taxonomies, but you can't add new ones. I think that's probably fairly common.
    • Taxonomies where you must select one, but there's no prepopulated one. There's no default. And taxonomies where you have to select one before you can save the post as well. And it has to pass a save checklist validation thing.
  • I think just validation in the editor as a whole is a wonderful thing that can help us, as developers, make richer experiences. So I can think of other use cases beyond taxonomies. But say like someone has a rich media embed. Is it tagged correctly extremely in another place? Say someone has a citation they're using. Has it been factchecked? Has it been proven? Validation is currently very difficult. Unless you're doing something extremely custom. Which takes a lot of time and a lot of maintenance.

What other hooks for validation do people think are needed?

  • Knowing which block is above and below in some way so that you can enforce not stacking seven videos on top of each other. It's really easy to write a beautiful post in Gutenberg and it's really easy to write a horrible post too.
  • We work with a lot of news agencies. And something that they have been asking us about is how to handle packages. This article has a sub, a side bar. This article has eight photos connected to it. Plus, a graphic, plus, an opinion piece. It would be really great to be able to create that kind of content, either taxonomy or association for future output. 
  • Per context, content. Because for us WordPress is the entry point for web, mobile, and print. So right now we have a tabbed interface with multiple tiny MCE editors to prepare content for all three. Videos make no sense for print. So with Gutenberg to switch over and see the printenabled blocks, but not see the webenabled ones. Or native. Because native will only support certain things too.
  • One opportunity Gutenberg might have is less developercentric and more journalistic is, so if you decide on an atomic unit of writing called the Block, you could annotate this. And you could preserve reporter's notes as to the source of the information. This was from an interview. So a year from now, that reporter is long gone. Right now the source material is lost, scrawled into paper notebooks and stuff like that. So I like that opportunity for this. Each Block could have a source that is published or not published or whatever.
  • One point to accept further on your note about comments within block level, it would be awesome if there was a hook to create additional kinds of data. So not just comments, but also, again, I'm thinking back clarifications. I'm thinking custom meta about meta. Which is weird to say, but it's useful, because at some point when we have to look at this, if a copy editor comes in and wants to look at the posts and validate or triple check, whatever that might be, having a starting point or a place to view all that information, that doesn't sit there baked on the side under the context menu. But you can view that directly next to it.
    • That opens up possibilities around having blocker paragraph levels. Like this has been signed off by the copy editor. Like the collaborative features. The photo editor signed off on a picture. And then you can easily view what paragraphs haven't been signed off. Or if a paragraph changes, the sign off automatically turns off and it needs to get resigned off on.
    • And if there are tasks associated with that article that have to go through revisions or approval or whatever might be. Those become part of the dashboard. An article requires work? Who has to do that work? You can associate more information beyond just the article. Even though we currently do this in our own individual workflows, some of the workflows can be sussed out by having the additional information.
    • Kind of along those lines, the side effects of editing a block. One thing I want to point out. It's built with React and Redux. If you're not familiar with Redux, when things change, you can see the actions that have been changing. And you can hook into those changes and do something else in WordPress, right? So you have a block or let's say somebody is typing a paragraph and you just find that, okay, this is for a publisher, we need to factcheck every paragraph. Whatever. You can have that, as they finish the article, use Redux to send that off to validation server as they're writing the next block. And if it doesn't pass validation or fact checking, maybe the state changes and it's highlighted red.
    • And actually, I can't validate that you talked to this person. And they respond on a different system using the heart beat API or whatever. And within 15 seconds, you my light that, they're off working fact checking. I'm still working on content.

Data Storage

  • Would it be a good idea to maybe have an ability to save this in a JSON format and keep that all together with its own components being stacked? So I think that might help a lot of us. Especially if you're doing things that are WP API based. And headless. 
  • The HTML comments as structured data is Shortcodes reloaded. It's too easy to break. 
  • It's certainly possible to store data elsewhere and then hydrate it for the editor. 

Other Observations and thoughts

  • We do have prototype support for WPGraphQL for Gutenberg. It uses the blocks parser to transform the content. 
  • Gutenberg opens up the possibility for front end editing in the customizer since it's also essentially a sidebar and main content area like Gutenberg. 
  • We had an idea we played with in shortcake for a little bit which was contextual rendering of the short code so, for instance, to say it's a YouTube embed that's being rendered under the RSS view. Maybe you don't want us in the iFrame. You want the YouTube API and get an image instead to replace it. I feel there's a lot of adaptive content ideas you could play with around that.
  • For us, posts end up being three different pieces of content. So if they need to fix a typo in one, it's three spots currently. With something like that, if you had context for a block, it would be the same source of truth. If they change here, the context is just a visual thing.
  • I don't know if this is being thought about but right now you go to get a new post and you basically, have a blank screen, a blank canvas. And if you have task workers you want to, give them a bunch of different things to fill out. I don't know if that's part of the vision to be able to create those task worker forms as well.
  • And another is kind of adaptive posts where you start entering things in and depending on what you select, I'll use the term "Post type" here. But I don't mean specific post type. You select certain fields and get different subfields that you would be able to fill in.
  • There were two ideas that came from a workshop yesterday. I wanted to share these with you. One of them was, building in the blocks themselves rules and best practices. So, you know, that could include things like a link catcher sort of validation process. Another one was to integrate context into distribution. This block will work better at this time. Or in these conditions. 
  • I think a lot of what we're talking about with the blocks with, deciding AMP versus mobile, what it all kind of boils down to is setting specific custom meta for the blocks individually and then saving them as a whole. That would allow you to do your different views because you would be filtering out based on just, I want to see just the AMP version of this. So anything that is either not flagged general or AMP, I'll just not put in. But I have no idea how that would work elegantly in the comments. The current system.

Closing Thoughts

After the session, a few of us chatted further.  One of the ideas discussed was a "Block Council", essentially a group to collaborate on blocks so that there aren't 15 different Facebook blocks floating around (i.e., issues we all see with widgets and plugins). Overall, there is a lot of anxiety around the unknowns of Gutenberg, but most of the people are excited for what Gutenberg offers. There is a lot of work remaining, but the more people that can be involved, the more likely Gutenberg is to be successful.

This post would not have been possible without the transcription by Amanda Lundberg from White Coat Captioning who live captioned the session. Most words are direct from the speaker's mouth. Some have been lightly edited for easier reading. 

Random Thoughts on…WordPress?

I wasn't sure how to title this one. I went to the WordPress NYC "Help Desk" meet-up on Wednesday and learned a lot about things users of WordPress are struggling with.   So I guess in some ways it is random thoughts on me learning more.

  • The biggest thing people struggle with is themes they bought off Theme Forest. Most of them are hard to configure and include so many damn options that it's easy to screw up a site and get lost trying to fix it.
  • One of the worst parts of these themes is that when there is an issue, I can't just open up the source from everywhere in the world and trouble shoot.  If they used themes from WordPress.org, I could help them.
  • The first question someone asked me about related to Gutenberg. People are paying attention to it. I don't know if this is a good or a bad thing. 
  • I was referred to as a WordPress Celebrity and it was a bit off putting. The people that make and contribute to WordPress are just people. Some of us have the privilege of contributing to WordPress. Others have the privilege of maintaining WordPress. But both come from points of privilege as they require time, energy, and money (for a computer, internet access, etc.),  but ultimately we shouldn't be considered celebrities. That's not to say it isn't nice to be thanked every once in a while, but I don't know anyone who contributes to WordPress for fame. 
  • It's important that we don't assume people know the difference between WordPress.org and WordPress.com. Especially with the lines getting more and more blurred due to "WordPress.com Business".
  • Finding the right theme is still #HardAsFuck for most users. I think that no matter how great WordPress the application is, until people find the right theme for them, we are likely to lose them.

Gutenberg is far from done

This is going to hopefully be a quick rant (famous last words). If you haven’t been following along, Gutenberg is a project to replace the editor in WordPress with something more modern. There have been 7 beta releases thus far, but in many ways, pieces are still in experimentation mode. The process has been open: Code has been on GH since the start, updates have been on make/core, ~weekly plugin repo updates. Communication could be better for sure, but when is that not the case? The biggest misconception I see is people thinking Gutenberg is anywhere near complete. It’s still alpha in many ways. Many things need to be figured out before Gutenberg is going to be ready to go into WordPress. Please, get involved and help. Gutenberg needs you. WordPress needs you.

Akin’s Laws of Spacecraft Design Modified for Websites

I have long been a believer that as creators and creatives working on websites, we can learn a lot of other fields.  One that I am constantly looking at for inspiration is spacecraft and astrophysics. Akin's Laws of Spacecraft Design are a collection of axioms collected and maintained by David Akin, a professor at the University of Maryland.  Here they are, lightly edited for websites. 

1. Engineering is done with numbers. Analysis without numbers is only an opinion.

2. To design a website right takes an infinite amount of effort. This is why it's a good idea to design them to operate when some things are wrong.

3. Design is an iterative process. The necessary number of iterations is one more than the number you have currently done. This is true at any point in time.

4. Your best design efforts will inevitably wind up being useless in the final design. Learn to live with the disappointment.

5. (Miller's Law) Three points determine a curve.

6. (Mar's Law) Everything is linear if plotted log-log with a fat magic marker.

7. At the start of any design effort, the person who most wants to be team leader is least likely to be capable of it.

8. In adtech, the optimum is almost always in the middle somewhere. Distrust assertions that the optimum is at an extreme point.

9. Not having all the information you need is never a satisfactory excuse for not starting the analysis.

10. When in doubt, estimate. In an emergency, guess. But be sure to go back and clean up the mess when the real numbers come along.

11. Sometimes, the fastest way to get to the end is to throw everything out and start over.

12. There is never a single right solution. There are always multiple wrong ones, though.

13. Design is based on requirements. There's no justification for designing something one bit "better" than the requirements dictate.

14. (Edison's Law) "Better" is the enemy of "good".

15. (Shea's Law) The ability to improve a design occurs primarily at the interfaces. This is also the prime location for screwing it up.

16. The previous people who did a similar analysis did not have a direct pipeline to the wisdom of the ages. There is therefore no reason to believe their analysis over yours. There is especially no reason to present their analysis as yours.

17. The fact that an analysis appears in print has no relationship to the likelihood of its being correct.

18. Past experience is excellent for providing a reality check. Too much reality can doom an otherwise worthwhile design, though.

19. The odds are greatly against you being immensely smarter than everyone else in the field. If your analysis says your page speed is one nanosecond, you may have invented HTTP/3, but the chances are a lot better that you've screwed up.

20. A bad design with a good presentation is doomed eventually. A good design with a bad presentation is doomed immediately.

21. (Larrabee's Law) Half of everything you hear at meetups and conferences is crap. Education is figuring out which half is which.

22. When in doubt, document. (Documentation requirements will reach a maximum shortly after the termination of a program.)

23. The schedule you develop will seem like a complete work of fiction up until the time your customer fires you for not meeting it.

24. It's called a "Work Breakdown Structure" because the Work remaining will grow until you have a Breakdown, unless you enforce some Structure on it.

25. (Bowden's Law) Following a testing failure, it's always possible to refine the analysis to show that you really had negative margins all along.

26. (Montemerlo's Law) Don't do nuthin' dumb.

27. (Varsi's Law) Schedules only move in one direction.

28. (Ranger's Law) There ain't no such thing as a free launch.

29. (von Tiesenhausen's Law of Program Management) To get an accurate estimate of final program requirements, multiply the initial time estimates by pi, and slide the decimal point on the cost estimates one place to the right.

30. (von Tiesenhausen's Law of Engineering Design) If you want to have a maximum effect on the design of a new website, learn to draw. Engineers always wind up building the website to look like the initial artist's concept.

31. (Mo's Law of Evolutionary Development) You can't get to the moon by climbing successively taller trees.

32. (Atkin's Law of Demonstrations) When the website is working perfectly, the really important visitors don't show up.

33. (Patton's Law of Program Planning) A good plan violently executed now is better than a perfect plan next week.

34. (Roosevelt's Law of Task Planning) Do what you can, where you are, with what you have.

35. (de Saint-Exupery's Law of Design) A designer knows that he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.

36. Any run-of-the-mill engineer can build a website which is elegant. A good engineer builds systems to be efficient. A great engineer designs them to be effective.

37. (Henshaw's Law) One key to success in a mission is establishing clear lines of blame.

38. Capabilities drive requirements, regardless of what the systems engineering textbooks say.

39. Any feature launch which "just happens" to include a new design is, de facto, a redesign.

39. (alternate formulation) The three keys to keeping a new feature launch affordable and on schedule:
       1)  No new designs.
       2)  No new designs.
       3)  Whatever you do, don't redesign the website.

40. (McBryan's Law) You can't make it better until you make it work.

41. The Internet is a completely unforgiving environment. If you screw up the engineering, somebody loses money (and there's no partial credit because most of the analysis was right…)

Mini Tracks for Technical Conferences

Conference organizing comes with many challenges. Attendees are going to complain about the food. Someone is going to think "There aren't enough SEO/Security/Regular Expression/". Overall, you are not going to be able to make everyone happy. But one way to increase attendee hapiness and make sure people walk away with solid lessons is by curating mini tracks.

Your job as an organizer is to curate the experience and lessons you want your attendees to have. You shouldn't pick a talk because it's popular, you should pick talks that tell the story you are aiming to tell. The story you are telling is one that takes its characters and lessons from the speakers and talks you choose.

What will the attendees be talking about tomorrow? 

The attendees of a conference are going to go back to work, are going to rejoin their professional circles, and bring things with them. Unless you are doing longer workshops, these are going to often be the themes and lessons that are weaved throughout the day. I like to create "mini tracks" of a couple of talks that build upon a theme.  

For example at a WordCamp, a mini track on "Fundamentals of WordPress Development" could include talks on custom post types, child themes, the user and role APIs and post meta. These talks may be at multiple levels, but that's ok.  They all build upon a thesis of "WordPress has multiple ways to be extended". A new to development person may gain an understanding of how a plugin they use works and may come up with a new idea. A new to WordPress developer may gain an understanding of how to structure a custom plugin. An experienced WordPress developer may gain a new way of thinking about when to use one API over an other. 

Some themes come in different styles than others. I've seen a number of different types of mini tracks including ones focused on a vertical ( Real Estate, Education, Enterprise, etc ), those focused on a type of worker ( Freelancer, Manager of People, Remote Worker, etc ), or on more generalized theme (Advancing as a Developer, Redesigning Websites, Social Media). 

Mini Tracks in Action

Mini tracks were something I first observed for a conference at WordCamp Boston 2011. This conference went so far as to print the names of these tracks on the schedule. (Sidenote: The greatest technical talk I've ever seen at a WordCamp was at this WordCamp. )

By grouping three "Enterprise" talks together, an attendee who wanted to gain an understanding about enterprise could make sure they were setup in one location to do so. And while there, they could learn about growing teams, growing code bases, and growing sites. With Boston having so many world class universities, the education track was a natural choice.  This track included engineering talks, strategy talks, and more. It was about a common interest, rather than common skill that united these talks.

Another example can be found at WordCamp DC 2017 were three talks in a row looked at questions concerning equality, inclusion, and intersectionality in three very different ways. Attendees could see these three talks and walk away inspired and with a better understanding of how they could use WordPress in an entirely different way.

If you start working on a conference schedule, consider what the lessons are that you want the attendees to walk away with. Think about the themes in the talks. Schedule something "Hard" or "Complex" or "Technical" where it might not be obvious. Allow people to learn something they weren't ready to learn. Give them something to walk away with that may not be useful for years, but might stick with them.