I went to San Diego Drupal Camp in February, with a focus on tracking Drupal 8 developments. Now that Drupal 8 has been around for well over a year, I have my first opportunity to use it for a client project, so naturally I tuned in to Drupal 8 talks. SANDcamp is a small, comfortable camp that’s not overwhelming and enables plenty of face to face conversations. I found the learning and the conversations enriching, and especially enjoyed meeting up with my long time friend and former Jackson Riverite, Danny Englander. Here are some of my top observations, takeaways, and favorite talks:
- Native Configuration Management: Drupal 8's native configuration management is amazing! It completely replaces how we have been using the Features module. Every piece of site configuration is stored as an individual YAML file in a config directory. Committing changes to these files makes updated configuration available to other instances of the site, which will be applied only when you're ready to apply them. That can be done using the Synchronize Configuration page in the drupal site, or equivalent commands in drush or drupal console.
- Text Editors: Configuring text editors is downright pleasant now. Each text format is configured in one single place. No more bouncing between text format in one place and WYSIWYG config in another.
- Commerce: Commerce in Drupal 8 is also shaping up. It's still in a beta phase, but development is progressing rapidly, and there are production commerce sites using it already. The most notable thing to me in my light testing of Commerce is that, in a lot of ways, it's more granular. At the code package level, the composer dependency management system is well used; for example, the main commerce module requires the address module, which in turn requires some independent internationalization libraries. This helps each component maintain a singular focus and purpose. At the functionality level, we see a lot of types: Product types, Product variation types, Product attributes like color or size and Attribute Values like green color, or large size. Also, commerce is generally designed to support multiples, such as multiple stores. So supporting a site that needs to act as a single store means merely creating one store instance.
- Media Support: Media support in Drupal 8 is quite powerful and flexible. Compared to media in D7, various media capabilities are separated out into more feature-specific modules, such as Media Entity Image and Media Entity Twitter to support those media types, Inline Entity Form and Entity Browser for selecting an entity reference or media reference fields. The Entity Embed module enables embedding entities, including media, in text areas. And the URL Embed module enables simple rich embeds by entering only a URL in a ckeditor button or a simple link field. Twitter, Youtube, Spotify and dozens more are supported. This video series by Marcos Cano Miranda provides a clear introduction to the main parts of the media ecosystem in Drupal 8.
- Importance of APIs: Something I didn't expect to be emphasized was the increasing importance of APIs in sites we build. But some compelling points were raised in a talk by Todd Ross Nienkerk. For example, an API is required for decoupled websites. Decoupling is essentially separating the CMS backend from the presentation frontend. There are many more frontends than the usual web browser on computers and mobile devices that we normally think about. Additional frontends include AMP (Google's "Accelerated Mobile Pages"), native apps, screen readers, Xbox/Roku, Smart TVs, and Alexa. So it's important to think about how content in the site would be presented to machines, spoken aloud by them, parsed into a schedule, and similar considerations. Another thing having a strong API and a decoupled architecture gives you is the ability to overhaul the design or the CMS, without having to do both at the same time.
It was generally recommended to use the jsonapi module instead of the core REST module when developing a full API in Drupal 8. In fact, it is planned to be included in a future version of Drupal Core. Here’s the issue on drupal.org where it’s being worked on, if you want to follow along: Add experimental JSON API module.
- “Every Project Is a Story” Talk: Dwayne McDaniel’s session is the one I most remember. We think and feel in terms of stories. The gist was to use story as the main outer framework of a project. It gives all types of participants a single, accessible frame of reference, and helps each party know clearly where they fit in the overall story. It enables better communication within the team, with clients, and with vendors, by having a single language and metaphor.
Here is the main reusable framework, with blanks to be filled in:
Once upon a time [------]. (the world)
Every day [------]. (the pattern)
But one day [------]. (dip)
Because of that, [------]. (rise)
And because of that, [------]. (rise)
… repeat as needed ...
Until finally [------]. (climax)
And ever since then [------]. (settle)
This framework applies to stories as varied as The Tortoise and the Hare, Eris and Heracles, and Scooby Doo. Believe it or not, it applies to technology projects too. Here’s a somewhat contrived example:
Once upon a time an environmental organization worked to defend the natural world and create legal policies that support environmental preservation. (the world)
Every day organization staff write articles, speak at conferences, and lobby in congress for better laws. (the pattern)
But one day they realized they were spending much more time managing their content systems than doing their main work. (dip)
Because of that, they began researching more consolidated and streamlined systems. (rise)
And because of that, they brought in a consultant to help make the wisest decision and implement the chosen solution. (rise)
Until finally the organization was back to writing and lobbying, and managing systems is a thing of the past. (climax)
And ever since then, the organization continues to make progress in legal issues and in public awareness. (settle)
Looking at this type of story, I have a better sense of what the larger purpose is. I also see where my part is: in this case, the consultation and implementation line. This model is recursive too. Any section can be expanded into its own sub-story with its own arc.
I could go on, but Dwayne does it better. Check out his site, where his slides are posted.
All in all, it was a very enjoyable camp. Both the technical and the soft skills sessions were very valuable. See you there next year?