Notes on Features (the Drupal module)

I’ve been noodling around with Features*, but I finally sat down and watched the Drupalize.me video series (I’ve gotten all the way thru Ch 8), then set up a tiny test site to try things out. I’ll probably be using this same project to try out Migrate, FWIW.

Some things I cleared up in my own head:

  • After you initially create a Feature, you should install it on the site where you created it! That makes it waaaaaaay easier to incorporate updates.
  • Recreate = make a new export zip file with all the code
  • Revert = go back to the code version of the feature (and hey, sometimes that includes NEW code from an export, because old stuff that you already set looks like an override when the new code comes in)
  • drush features-update [featurename] is like Recreate, but works directly on the code in the module folder.

Also, what I did for my test project was one local repository for the code, not in a site, one repo for the dev site, and one for the live site, all coordinated through an origin on GitHub. Which takes some wrangling with Tower (omg command line git) but can be done.

Also also, “is there Features support?” is one of my new module criteria. I’m not 100% sure how I feel about that.

* I think I first heard about Features at a PNW Drupal Summit in Vancouver BC in 2010. Took me until literally this year to actually really understand what the hell it’s for, and why it’s kinda magical. I wish there were more intros for button-clickers (site builders) out in the wild, because there’s a pretty big conceptual leap for non-developer types IMHO.

Conferences: who pays? What does it change?

So Jessica Rose asked people who pays when they go to conferences, and as I mentioned, it’s usually been my employer. Since her question back to me, I’ve been thinking about it.

First of all, conferences that I pay for myself have fallen into two categories:

  1. It’s close and cheap: early WebVisions or Pacific Northwest Drupal Summit, or if I hadn’t been speaking at AlterConf Seattle. (Which means that activities are cheap and are basically within my normal day-to-day budget. I can afford to do whatever.)
  2. It’s a big trip that’s sort of a vacation: two of the three times I went to SxSW Interactive. (In theory, that meant I’d saved up for the experience and could afford to go to stuff, although it’s been long enough now that I’m not sure about what I may have skipped out on because I was low on cash.)

(Does this say something about what kinds of conferences I can go to overall? Probably. Every job I’ve been at that’s ever paid me to go to something has had fairly limited conference/training budgets, so if I can go to a conference, it means I’m picking one thing, and that’s the it for the year. I decided not to submit to speak at HighEdWeb when it was in Portland because they don’t give tickets to speakers, and I didn’t want that to be my one conference for the year.)

I suppose if I were being especially thorough I could actually go through my conference notes (which seriously, I think covers EVERY professional conference I’ve EVER been to) and SEE what the difference is based on what sessions I went to, or what sorts of notes I took, or what else I did while I was there. But that seems like a bit much.

If work is paying, I tend to be more narrowly focused, or at least I try to keep current or future projects in mind while listening. If I’m on my own dime, I feel more free to be experimental in what sessions I go to. Still: I find myself thinking about work things when I’m paying for a conference myself, and I don’t stop myself from musing about personal projects if work is paying.

I think also I used to be more likely to stick out a less-than-scintillating session if work was paying…now I think I’m just more assertive about not wasting my time.

And that’s the core of it: if I’m at a thing, I’m going to use the experience the best way I can, whoever’s paying for it; and as I’ve gotten older, I trust my own judgement more about what’s a good use of my time.

So I won’t pay for an event that I don’t think is worthwhile, and I won’t ask to go to anything that isn’t. When I’m at a conference, I’ll have my brain on and be taking lots of notes, and if I get burnt out, bored, or overwhelmed, I’ll take the initiative to regroup and do what works for me.

My AlterConf presentation notes

Description

Every group of people ends up with values that guide their work, whether they mean to or not. Be deliberate in choosing the values that matter to your team, put them into action, and communicate them to the people around you. Our team figured out our core values and we actually use them in making day-to-day decisions. Communicating them helped us launch a website redesign with minimal freakout. I’ll share things to consider when figuring out your team’s values, and how to use them in practice.

[slide, title, image of people with value bubbles]
Today I want to talk about how you can take the values that are already in your heart and make them part of your work, and that can make your work better.

All of us have value systems that guide how we behave in the world. They may be consciously chosen or unconscious values from our upbringing and our surroundings.

Groups of people aren’t any different. Even if a larger organization has formal values or a formal mission, informal values bubble up in a group of people who work together.

When you don’t talk about your values, you can’t know if they’re what you all really want or whether you’re being true to them. And when you do talk about your values, you can make better decisions and help others understand your choices.

So I want to share some ideas about uncovering, setting, and communicating your core values in your work.

[slide, who are we]

So my name is Elaine Nelson, and I work at The Evergreen State College.

You may know us from such stereotypes as the hippie college, the hidden birthplace of grunge, and the hipster college.

I work on a small team of web folk.

I wrangle backend code and words.
Justin wrangles frontend code and pictures.
Susan wrangles projects and people.

Together we make Evergreen’s public-facing website.

[slide, our values]

We went through a process much like this about two and a half years ago, and came up with these four core values:

User-focused
Data-driven
Simplified
Iterative

Where did they come from? How did we decide? Why did we even bother? The college has a mission statement and principles and foci of learning and expectations of a graduate. There’s lots of fancy words, none of which are here. If you work for an organization that’s been around for a while, you probably have plenty of fancy words to choose from.

We weren’t looking for fancy words. We were looking for ways to manage our overwhelming to-do list.

At that time, Justin and I were brand new to the college. Susan had been on her own for many months. And the website hadn’t been significantly updated in several years. So there was lots to do.

[slide, retreat]

We held a retreat. Well, really, we booked a room that had comfortable places to sit and lots of whiteboards, in a time of year when there weren’t many people around. We meant to talk about the next few months of work, but ended up talking about why we wanted to do things, what we would use to make decisions and explained them. We approached it by accident and ad hoc. You don’t have to.

But this is a great place to start: gather a small group of people who work on projects together. Find a place without mundane interruptions. And start talking. And keep talking, even after the time away is over. We started with at least half a dozen values listed, realized some of them didn’t match, and some of them were near-duplicates, before narrowing it to ones that we can all say without looking them up.

And when we looked back at the whole process, we came up with some questions that you might want to consider as you work out your team’s values.
[slide, the questions]

I think of this first one as the zero-eth step:

* What do you care about most in the work that you do?

The other question help the team bring what you value together with what your work needs to be doing.

* What will help your organization achieve its goals?

* What can you learn from past mistakes?

* What motivates your boss?

[slide, what do you care about most in the work that you do?]
So first, what do you value?
I care about using a certain amount of scientific thinking in my work, which means having reasons for doing things, and being willing to try different things. I also value making sites that are designed and written for real people, who have complicated needs and lives.

Susan cares that users can do what they’re there to do. She craves consistency and simplicity, and she wants her work to to be sustainable over the long run. And she often says: “If it’s better than what we’ve got, then go.”

Justin wants design to get out people’s way, to be invisible. But he also wants his work to be unique and fashionable.

We have a common belief in trying and learning, so being iterative underlies almost everything we do.

When you think about what you do, what is most meaningful? If your team’s core values reflect that, then you can feel them as your own.

Now that you know yourself and your team members, it’s time to look outward. And in looking outward, we came up with some examples of other organizations and what we might guess they value based on what we see of them.

[slide, organization]

What will help your organization achieve its goals?

[slide, W3C priority of constituencies]

One of our inspirations has been the W3C’s Priority of Constituencies. In fact looking at the priority of constituencies during our retreat was part of how we started talking about our core values.
Because in an organization that has many different stakeholders with conflicting goals and interests, they need something like the priority of constituencies to give structure to decision making. Because they’ve put end users ahead of everything, and theory after everything, we can guess at a value of utility — usefulness — standing behind the priority system.
[slide, Hotel Tonight]
For a commercial site like Hotel Tonight, we can see at least one of their values in their design: speed. You can see from the number of clicks from home to booked that they care deeply how quickly you can book a room. This matches their business goal of just getting a person to a hotel room right now, versus building a relationship or thinking ahead.
[slide, student]
Being user-focused and choosing the prospective student as our site’s primary audience connects our decisions to the needs of the college. Every piece of content has its user, and for our site as a whole, the most critical user is the prospective student.
[slide, other]

Other values that arise from this question might be found in those fancy words no one usually reads: what is your organization’s mission or strategic plan? Which of those aspects speaks to your team in its daily work? If you don’t have a larger organization’s goals to connect to, what does your work need to be successful?

[slide, mistakes]
Next, what can you learn from past mistakes?
[slide, D&D]
For Wizards of the Coast, switching Dungeons and Dragons to a ruleset with too much focus on grid combat and not enough character detail opened them up to competition on both the detail side and on the story side of role playing games.
The introduction of the fifth edition shows a rededication to a value of fidelity, rediscovering a feel that entices back long-time players. While they may not say with words that they went in the wrong direction, the changes speak for themselves.
[slide, Rube Goldberg]
On our team, we’ve all dealt with some overly complicated systems and useless duplication, both at the college and in our previous work lives. So simplifying is a core value for us, because none of us want to make that mistake again.
[slide, looking back]
You might look to mistakes in your past or your organization’s past and come up with values like respect, honesty, diversity, and dependability.
[slide, boss]

And finally what motivates your boss?

[slide, panda]
By this we don’t mean pandering to them. We mean knowing what their values are, in the same way that you know the rest of your team’s values, and finding the common points.
That connection makes it easier for them to become an advocate for you when you’re not there.
And by boss we mostly mean whoever’s next up the chain: a senior manager, a VP, a C-level executive. Maybe a member of a board of directors.
[slide, LotR]
It could be that attention to craft is something your boss cares about. For the chainmail makers and other creators who were part of the Lord of the Rings movies, dedication to craft was a shared value from the tiniest link of rubber to the arrangement of vast armies.
[slide Google Analytics]
Without giving away too much, we work with people for whom numbers are particularly persuasive. We too are fans of data, so being data-driven was an obvious core value.
[slide, your boss]
You don’t necessarily figure out what these values are by asking. You listen to their complaints and compliments. You watch other people try to convince them and see which arguments work. When you know what values you share, you can integrate those into your team.

[slide 65-76, pared down]

And now that you have set your core values as a team, this is where you use your values to filter your decisions: to have meaningful guidance under pressure. These are some examples for each of our team’s values.

Here’s the first example of how we walked the walk.

When we redesigned our primary navigation, we didn’t want to hide important links behind a hamburger menu. We determined that, in our design, there’s only room for [five links], so we really had to streamline what could appear there. But of course, everyone wants to be included, so we needed a way to prioritize.

We looked at our old list of links and we asked questions about it.
But here’s what we didn’t ask:

(Read questions aloud.)

Each of these questions focuses on the product or the desires of the content owners; they’re not relevant to the needs of our primary users, prospective students.

Here are the questions we did ask.

(Read through questions aloud.)

These kinds of questions are focused on the user, not the product or the author. It’s a subtle but important distinction.

In being user-focused we were able to more efficiently prioritize the massive amount of content and with the content changes that we deal with on a daily basis. When someone approaches us about putting a link on the homepage they have to concede that the needs of prospective students outweigh their personal convenience, ego, or some tiny slice of the site’s visitors.

So that’s one way we demonstrated one of our core values.

Here’s another example. When we were trying to write a new tagline for the home page, it turned into a committee debate, which is always a terrible idea for writing. A bunch of ideas were thrown out there, and before it came to a vote (also bad news), Justin suggested trying a split test to see how actual audiences responded to each of the tag lines. Which of these would get the most clicks? [The one] written by a marketing professional? [Or the one] written by the highest paid person in the room?

[Explain the results.]

The lesson here is trust the professional, but also verify.

We look to the data when we’re unsure of the answers. It often provides valuable insights into how well we’re doing or where we could do better.
new transition?

But here’s the thing. Once prospective students are on the site, they need to quickly learn what they can study, how much it costs, how to schedule a campus visit, and how to apply. This information was scattered all over the site.

• [Sometimes] it was hidden.
• [Sometimes] it was duplicated in multiple places and often the information didn’t match up.
• [We had a separate] admissions site with its own navigation system.
• Important dates were sometimes months or even years out of date.
• Basically, we were making it confusing for prospective students to achieve some of their most basic goals.

It was clear that we needed to simplify, and we needed the site to stay simple over the long haul.

Using that core value, we found and consolidated duplicate content and removed content that created confusion. We made the language clearer to improve comprehension. We scheduled audits so that content owners would have a set time to go in and refresh information.

Every time we simplify a new site section, our users have responded positively, and our live tests show that they’re more easily able to find the content they need. Plus, content owners find themselves having to do less work to keep their site up to date.

And about that Admissions site.

An earlier team spent two years in a vacuum creating a flashy design that had all these crazy JavaScript sliders. [When they launched it], it was two years behind the trends. The project had taken so long to get together that by the time it was out the door, it wasn’t quite what we wanted.

At the same time, it had left behind the rest of the site, leaving us without a plan to bring everything together. While it was better than what was there before, it was one website with two designs, which made learning about the college very hard for the audience we were trying to serve.

We learned a hard lesson there, so for our next big update, we decided we weren’t going to keep the project locked away in a tower with a magnificent curtain reveal. We were going to do it iteratively. That means putting out bits of the site a little bit at a time. [Demonstrate it here.]

In this way, we were able to get fresh, new pages in front of prospective students without worrying about less important pages. Those would come later, but they weren’t essential to launch. Iterating meant that we could help our users immediately while staying open to new possibilities.
[more of Justin’s slides]


That brings me to the last step, communicating your core values. We gave several versions of a presentation about the work we were doing on the website. That presentation always explained our core values and how they influenced our decisions.

By presenting our core values to senior staff—and later the rest of campus—we made the process more clear to our fellow employees. Our openness build understanding and respect.

We also rounded up some guinea pigs. We invited a few clients whose sites were essential for recruiting prospective students. Some of them came in trusting our process while others we expected to give us more pushback. But the temptation of getting in on the ground floor of a redesign was a great way to get some challenging clients on board.

We made it clear that not everything was going to go smoothly at first. When we tried our fledgling processes out on them, we figured out what worked, and redesigned the things that didn’t. These guinea pigs helped us create a portfolio of success stories.

This communication step works hand-in-hand with the previous step, demonstration. The more we showed how our core values worked, the easier it’s been to get others to understand the process. And the more you share your victories with your clients, the more opportunities you’ll have to rack up new successes.

By showing our wins to senior staff and the reasons why they worked, we built up much-needed trust and we turned them into advocates for us. Yes, we got VPs to be our advocates! Our process for establishing victories was then filtered back down to their staff, and as we’ve been working with them, our base of advocates grows. This means fewer angry emails in our inbox when big changes come.

This process is the bedrock for our success: we go back to this well time and time again. When we’re approached about a change that we might not know how to handle, we ask ourselves how it stacks up against our core values and make a decision from there. It really is a point of pride for us.

[and then I mostly used Justin’s slides & notes for the conclusion]

code sprint thoughts

I spent Friday morning/midday at the Mentored Core Sprint. It was a weird mix of extra-hand-holding and being thrown in the deep end, at least for me. I had 99% of my environment set before I got there or in the first 10 minutes: I already have a Git client (yay Tower!), and since I was up at 5:15 am AGAIN that morning, I went ahead & installed MAMP, then installed Drupal 8, so when I got to the sprint (early, see also 5:15 am) all I had to do was clone the main Drupal repo in Tower, install Chatzilla, and rediscover that my nickname was already registered. (Thankfully using an old default password.) I couldn’t get xdebug working, but got told that wasn’t strictly necessary.

But then…I don’t anything about applying patches. I don’t have object-oriented programming experience. I do some PHP, and I can usually work my way through it, but I’ve realized that in the Drupal parlance I’m a site builder, not so much a developer. And I was in a giant conference room with probably hundreds of other people, and really really really nervous about doing something wrong.

What I probably should’ve done was find the documentation team and offer my wordsmithing skills.

What I actually did wasn’t too bad, though. I found a bug in Views tagged “novice” that actually just needed someone to see if a bug was still a bug. So I walked through the steps — which also meant creating a new content type and fields in Drupal 8, and getting the hang of a few different parts of Views that I haven’t used much — determined that the thing seemed to work as intended, and posted some screenshots to the issue. I’m pretty proud of that, TBH. It was an environment that managed to simultaneously trip both my “student ahead of the class” thing and my “fake programmer” anxiety. And yet I did a thing, on what was marked as a Major bug.

After all that, and a little lunch, I was all the brain fry (did I mention 5:15 am?), so I did a little work-related stuff. But before I took off, I went to one of the organizers to say thank you. Because whatever was not quite right for me, it was pretty amazing that all of this was happening. She asked what I’d done, and I explained it, and she wanted me to get up and say something. Which OMG NOPE. Still, she gave me a couple of stickers, which ok, I’ll take that.

With that, me and my luggage were off away from DrupalCon. It was a good week. I feel like I managed to balance on-time and downtime, meeting people, catching up with people, seeing a few sights, and knowing where my boundaries were. I only went to two parties, and that was PLENTY. (It’s kind of reminding me of some SxSW experiences, and I feel ambivalent about that. I really wish there had been a game night or something. If I go again in the future, I WILL organize one this time.) I learned a bunch, and also created a bunch of mental bookmarks: things I need to come back to and explore in more depth on my own.

D&D & Drupal

list of urls, query path to scrape data, migrate for pathfinder!

migrate & spotify

marvel character database, star wars character api

D8 has symphony’s DOM parser

3.5 SRD MySQL data dump

Pathfinder has it as CSV.

isotope module (for hiding & showing?)

wacky dice stories.

elasticsearch

[context: at some point Google Site Search is probably going to be prohibitively expensive. is this a good alternative?]

Lucene is an underlying search technology, from Apache, in Java. Same as Solr.

big diff from Solr is that it’s clusterable? is that something that matters for us? I’ve no idea.

also, I have no goddamn idea what they’re talking about now.

solr-vs-elasticsearch.com

“if you just want to search all your nodes, use Solr” ok then. (esp better integration with Search API?) so there’s that, I guess that’s the super-short answer to my question. not that there’s not super-neato stuff in Elasticsearch, and who knows, maybe by the time we price out of Google Site Search (does _that_ work with Search API) it’ll be ready for prime time.

Documentation

Someone from Evergreen should go to Write the Docs?

(these are notes on phone.)

I think there’s a lot to bring from this to documentation of things at work. The idea of curation, pruning, caretaking of articles. Everything has an owner/editor, at least.

Edit as pull request.

flavors of svg

I’m in this one for Justin, mostly, and to see what modules and things we should be going with.

svg is just ridic cool.

inline svg — could that be added via embed entity (or whatever that’s called) — I hope I’m not getting too far ahead. TBH, this part is all about all the different methods of adding SVG to a page, nothing yet about Drupal specifically. (something called svg injector?) And I’m pretty sure Justin already has a preferred inclusion method. If I were on a regular computer, I’d go look at how the SVG for the logo is included.

oh, the media queries for showing different versions based on the sizing of the bounding box is quite fascinating. I wonder if he’s thought of that.

[look up jolly icons. those are cute.]

grunticon

oh wait he did like a whole day workshop on svg, yes? we’ll  have to compare notes.

also grumpicon (best for one-time use)

this svg sprites thing is what we were trying to do in Cascade?

I’m so glad I got to test-read Shelley’s book all those years ago. it gave me this great view into what was possible.

you can ctrl+c SVG from illustrator into a text editor.

still no Drupal mentions, except a quick mention of some navigation in a .tpl as markup, which I don’t think is what we’re after.

revisions everywhere

undoing delete?

problems with concurrent editing

the issue of distributed content generation

….

demo of a module for D8 — I’ve already forgotten the name. [nb: Multiversion]

tree showing split “revision tree” when editing in two sites that are supposed to be in sync.

[so is there a D7 contrib module that works like Cascade’s Recycle Bin? because we use that all the time.]

the speaker’s notable modules are UUID & Deploy? which I should probably look at both.

oh wow this gets complicated fast. and this might be going over my head a bit. :\

some in-session researching:

how does Deploy play nicely with Workbench Moderation? Does it?

for Recycle Bin like functionality: see Killfile?

this is all quite high-end (the advanced level was quite correct) but it’s fascinating.

{oh I just heard Greg.}

this question: ow my brain.

forward revisions? O.o — oh, like Scheduler, or Draft in Workbench Moderation.

Right now I feel like I’m gonna need a week with a whiteboard and a brand-new Drupal installation.

using grunt with drupal

I’m not 100% sure if this applies, but it’s intriguing since Justin is already using Grunt for CSS & JS tasks (compiling SASS, minifiying, etc).

I really wish DrupalCon were set up like Confab in one very specific way: I like having a table to set my tablet/notebook on for typing. The height of these chairs combined with the height of my legs means that it’s quite awkward typing on my lap, the whole thing wants very much to go head over heels and fall off of my lap entirely. Then add in the knitting, which is mostly helpful in listening, but it’s hard to have ALL THE THINGS in my lap simultaneously. Confab’s setup with rows of tables was so much nicer than just rows of chairs w/out tables.

what about testing that’s more than just “clicking around” (I guess that’s the point of something like behat?)

what ARE D’s tools for deployment?

Grunt Drupal Tasks

“it has opinions”

Gadget “easy to start a Drupal project with Grunt Drupal Tasks”

feels very rabbit-hole. I’m not quite sure I get what’s going on, but maybe… actually, Justin might like that for that other thing he’s thinking about….

actually, I think I’m going to try this, if I can get Justin to help me get Grunt & Yeoman set up.

but omg sleeeeeeepy.

this might not be related, but does Hobsons have an API that we could connect with for building forms?

separate Grunt file for the theme — sort of like what Justin does now?!

again: what would it be like for the web team to be able to do our own theme deployment? or module deployment specifically for Features-generated modules (ie, content types with associated views, etc)?

the guy sitting in front of me has the USDA foreign agriculture service website in his browser, but with the url of localhost. so that’s a thing.