EW Resource


There's a huge resource of Newsfeeds on the Net which brings up-to-date information and content on a wide range of subjects.

Here are just a few relating to web development.

A List Apart: The Full Feed
  • The Most Dangerous Word In Software Development 

    “Just put it up on a server somewhere.”

    “Just add a favorite button to the right side of the item.”

    “Just add [insert complex option here] to the settings screen.”

    Usage of the word “just” points to a lot of assumptions being made. A few months ago, Brad Frost shared some thoughts on how the word applies to knowledge.

    “Just” makes me feel like an idiot. “Just” presumes I come from a specific background, studied certain courses in university, am fluent in certain technologies, and have read all the right books, articles, and resources.

    He points out that learning is never as easy as it is made to seem, and he’s right. But there is a direct correlation between the amount of knowledge you’ve acquired and the danger of the word “just.” The more you know, the bigger the problems you solve, and the bigger the assumptions are that are hiding behind the word.

    Take the comment, “Just put it up on a server somewhere.” How many times have we heard that? But taking a side project running locally and deploying it on real servers requires time, money, and hard work. Some tiny piece of software somewhere will probably be the wrong version, and will need to be addressed. The system built locally probably isn’t built to scale perfectly.

    “Just” implies that all of the thinking behind a feature or system has been done. Even worse, it implies that all of the decisions that will have to be made in the course of development have already been discovered—and that’s never the case.

    Things change when something moves from concept to reality. As Dave Wiskus said on a recent episode of Debug, “everything changes when fingers hit glass.”

    The favorite button may look fine on the right side, visually, but it might be in a really tough spot to touch. What about when favoriting isn’t the only action to be taken? What happens to the favorite button then?

    Even once favoriting is built and in testing, it should be put through its paces again. In use, does favoriting provide enough value to warrant is existence? After all, “once that feature’s out there, you’re stuck with it.”

    When you hear the word “just” being thrown around, dig deep into that statement and find all of the assumptions made within it. Zoom out and think slow.

    Your product lives and dies by the decisions discovered between ideation and creation, so don’t just put it up on a server somewhere.

  • Gardens, Not Graves 

    The stream—that great glut of ideas, opinions, updates, and ephemera that pours through us every day—is the dominant way we organize content. It makes sense; the stream’s popularity springs from the days of the early social web, when a huge number of users posted all types of content on unpredictable schedules. The simplest way to show updates to new readers focused on reverse chronology and small, discrete chunks, as sorting by newness called for content quick to both produce and digest. This approach saw wide adoption in blogs, social networks, notification systems, etc., and ever since we’ve flitted from one stream to another like sugar-starved hummingbirds.

    Problem is, the stream’s emphasis on the new above all else imposes a short lifespan on content. Like papers piled on your desk, the stream makes it easy to find the last thing you’ve added, while anything older than a day effectively disappears. Solely relying on reverse-chronology turns our websites into graveyards, where things pile up atop each other until they fossilize. We need to start treating our websites as gardens, as places worthy of cultivation and renewal, where new things can bloom from the old.

    The stream, in print

    The stream’s focus on the now isn’t novel, anyway. Old-school modes of publishing like newspapers and magazines shared a similar disposability: periodic updates went out to subscribers and were then thrown away. No one was expected to hang onto them for long.

    Over the centuries with print, however, we came up with a number of ways to preserve and showcase older material. Newspapers put out annual indexes cataloguing everything they print ordered by subject and frequency. Magazines get rebound into larger, more substantial anthologies. Publishers frequently reach into their back catalogue and reprint books with new forewords or even chapters. These acts serve two purposes: to maintain widespread and cheap access to material that has gone out of print, and to ensure that material is still relevant and useful today.

    But we haven’t yet developed patterns for slowing down on the web. In some ways, access is simpler. As long as the servers stay up, content remains a link away from interested readers. But that same ease of access makes the problem of outdated or redundant content more pronounced. Someone looking at an old magazine article also holds the entire issue it was printed with. With an online article, someone can land directly on the piece with little indication of who it’s by, what it’s for, and whether it’s gone out of date. Providing sufficient context for content already out there is a vital factor to consider and design for.

    You don’t need to be a writer to help fix this. Solutions can come from many fields, from targeted writing and design tweaks to more overarching changes in content strategy and information architecture.

    Your own websites are good places to start. Here are some high-level guidelines, ordered by the amount of effort they’ll take. Your site will demand its own unique set of approaches, though, so recombine and reinvent as needed.


    Emma is a travel photographer. She keeps a blog, and many years ago she wrote a series about visiting Tibet. Back then, she was required to travel with a guided tour. That’s no longer the case, as visitors only need to obtain a permit.

    The most straightforward thing to do is to look through past content and identify what’s outdated: pieces you’ve written, projects you worked on, things you like. The goal is triage: sorting things into what needs attention and what’s still fine.

    Once you’ve done that, find a way to signal their outdated status. Perhaps you have a design template for “archived” content that has a different background color, more strongly emphasizes when it was written, or adds a sentence or two at the top of your content that explains why it’s outdated. If entire groups of content need mothballing, see whether it makes sense to pull them into separate areas. (Over time, you may have to overhaul the way your entire site is organized—a complicated task we’ll address below.)

    Emma adds an <outdated> tag to her posts about her guided tour and configures the site’s template to show a small yellow notification at the top telling visitors that her information is from 2008 and may be irrelevant. She also adds a link on each post pointing to a site that explains the new visa process and ways to obtain Tibetan permits.

    On the flip side, separate the pieces that you’re particularly proud of. Your “best-of” material is probably getting scattered by the reverse-chronology organization of your website, so list all of them in a prominent place for people visiting for the first time.


    I hope that was easy! The next step is to look for old content you feel differently about today.

    When Emma first started traveling, she hated to fly. She hated waiting in line, hated sitting in cramped seats, and especially hated the food. There are many early blog posts venting about this.

    Maybe what you wrote needs additional nuance or more details. Or maybe you’ve changed since then. Explain why—lead readers down the learning path you took. It’s a chance for you to reflect on the delta.

    Now that she’s gotten more busy and has to frequently make back-to-back trips for clients, she finds that planes are the best time for her to edit photos from the last trip, catch up on email, and have some space for reflection. So she writes about how she fills up her flying time now, leaving more time when she’s at her destination to shoot and relax.

    Or expand on earlier ideas. What started as a rambling post you began at midnight can turn into a series or an entire side project. Or, if something you wrote provokes a big response online, you could gather those links at the bottom of your piece. It’s a service to your new readers to collect connected pieces together, so that they don’t have to hunt around to find them all.

    Revise and reorganize

    Hopefully that takes care of most of your problematic content. But for content so dire you’re embarrassed to even look at it, much less having other people reading it, consider more extreme measures: the act of culling, revising, and rewriting.

    Looking back: maybe you were completely wrong about something, and you would now argue the opposite. Rewrite it! Or you’re shocked to find code you wrote one rushed Friday afternoon—well, set aside some time to start from the ground up and do it right.

    Emma started her website years ago as a typical reverse-chron blog, but has started to work on a redesign based around the concepts of LOCATIONS and TRIPS. Appearing as separate items in the navigation, they act as different ways for readers to approach and make sense of her work. The locations present an at-a-glance view of where she’s been and how well-traveled she is. The trips (labeled Antarctica: November 2012, Bangkok: Fall 2013, Ghana: early 2014, etc.) retain the advantages of reverse-chronology by giving people updates on what she’s done recently, but these names are more flexible and easier to explain than dates and timestamps on their own. Someone landing directly on a post from a trip two years ago can easily get to the other posts from that trip, but they would be lost if the entries were only timestamped.

    If the original structure no longer matches the reality of what’s there, it’s also the best case for redesigning and reorganizing your website. Now is the time to consider your content as a whole. Think about how you’d explain your website to someone you’re having lunch with. Are you a writer, photographer, artist, musician, cook? What kind? What sorts of topics does your site talk about? What do you want people to see first? How do they go deeper on the things they find interesting? This gets rather existential, but it’s important to ask yourself.


    If it’s really, truly foul, you can throw it out. (It’s okay. You officially have permission.) Not everything needs to live online forever, but throwing things out doesn’t have to be your first option when you get embarrassed by the past.

    Deploying the internet equivalent of space lasers does, I must stress, come with some responsibility. Other sites can be affected by changes in your links:

    • If you’re consolidating or moving content, it’s important to set up redirects for affected URLs to the new pages.
    • If someone links to a tutorial you wrote, it may be better to archive it and link to more updated information, rather than outright deleting it.


    Everything we’ve done so far applies to more than personal websites, of course. Where else?

    Businesses have to maintain scores of announcements, documentation, and customer support. Much of it is subject to greatly change over time, and many need help looking at things from a user’s perspective. Content strategy has been leading the charge on this, from developing content models and relationships, to communicating with empathy in touchy situations, to working out content standards.

    Newspapers and magazines relentlessly publish new pieces and sweep the old away from public view. Are there opportunities to highlight material from their archives? What about content that can always stay interesting? How can selections be best brought together to generate new connections and meaning?

    Museums and libraries, as they step into their digital shoes, will have to think about building places online for histories and archives for the long term. Are there new roles and practices that bridge the old world with the networked, digital one? How do they preserve entirely new categories of things for the public?

    No one has all the answers. But these are questions that come from leaving the stream and approaching content from the long view. These are problems that the shapers and caretakers of the web are uniquely positioned to think about and solve.

    As a community, we take pride in being makers and craftsmen. But for years, we’ve neglected the disciplines of stewardship—the invisible and unglamorous work of collecting, restoring, safekeeping, and preservation. Maybe the answer isn’t to post more, to add more and more streams. Let’s return to our existing content and make it more durable and useful.

    You don’t even have to pick up a shovel.

  • Radio-Controlled Web Design 

    Interactive user interfaces are a necessity in our responsive world. Smaller screens constrain the amount of content that can be displayed at any given time, so we need techniques to keep navigation and secondary information out of the way until they’re needed. From tabs and modal overlays to hidden navigation, we’ve created many powerful design patterns that show and hide content using JavaScript.

    JavaScript comes with its own mobile challenges, though. Network speeds and data plans vary wildly, and every byte we deliver has an impact on the render speed of our pages or applications. When we add JavaScript to a page, we’re typically adding an external JavaScript file and an optional (usually large) library like jQuery. These interfaces won’t become usable until all the content, JavaScript files included, is downloaded—creating a slow and sluggish first impression for our users.

    If we could create these content-on-demand patterns with no reliance on JavaScript, our interfaces would render earlier, and users could interact with them as soon as they were visible. By shifting some of the functionality to CSS, we could also reduce the amount of JavaScript needed to render the rest of our page. The result would be smaller file sizes, faster page-load times, interfaces that are available earlier, and the same functionality we’ve come to rely on from these design patterns.

    In this article, I’ll explore a technique I’ve been working on that does just that. It’s still a bit experimental, so use your best judgment before using it in your own production systems.

    Understanding JavaScript’s role in maintaining state

    To understand how to accomplish these design patterns without JavaScript at all, let’s first take a look at the role JavaScript plays in maintaining state for a simple tabbed interface.

    See the demo: Show/hide example

    Let’s take a closer look at the underlying code.

    <div class="js-tabs">
        <div class="tabs">
            <a href="#starks-panel" id="starks-tab"
                class="tab active">Starks</a>
            <a href="#lannisters-panel" id="lannisters-tab"
            <a href="#targaryens-panel" id="targaryens-tab"
        <div class="panels">
            <ul id="starks-panel" class="panel active">
            <ul id="lannisters-panel" class="panel">
            <ul id="targaryens-panel" class="panel">

    Nothing unusual in the layout, just a set of tabs and corresponding panels that will be displayed when a tab is selected. Now let’s look at how tab state is managed by altering a tab’s class:

    .js-tabs .tab {
        /* inactive styles go here */
    .js-tabs .tab.active {
        /* active styles go here */
    .js-tabs .panel {
        /* inactive styles go here */
    .js-tabs .panel.active {
        /* active styles go here */

    Tabs and panels that have an active class will have additional CSS applied to make them stand out. In our case, active tabs will visually connect to their content while inactive tabs remain separate, and active panels will be visible while inactive panels remain hidden.

    At this point, you’d use your preferred method of working with JavaScript to listen for click events on the tabs, then manipulate the active class, removing it from all tabs and panels and adding it to the newly clicked tab and corresponding panel. This pattern is pretty flexible and has worked well for a long time. We can simplify what’s going on into two distinct parts:

    1. JavaScript binds events that manipulate classes.
    2. CSS restyles elements based on those classes.

    State management without JavaScript

    Trying to replicate event binding and class manipulation in CSS and HTML alone would be impossible, but if we define the process in broader terms, it becomes:

    1. User input changes the system’s active state.
    2. The system is re-rendered when the state is changed.

    In our HTML- and CSS-only solution, we’ll use radio buttons to allow the user to manipulate state, and the :checked pseudo-class as the hook to re-render.

    The solution has its roots in Chris Coyier’s checkbox hack, which I was introduced to via my colleague Scott O’Hara in his morphing menu button demo. In both cases, checkbox inputs are used to maintain two states without JavaScript by styling elements using the :checked pseudo-class. In this case, we’ll be using radio buttons to increase the number of states we can maintain beyond two.

    Wait, radio buttons?

    Using radio buttons to do something other than collect form submission data may make some of you feel a little uncomfortable, but let’s look at what the W3C says about input use and see if we can ease some concerns:

    The <input> element represents a typed data field, usually with a form control to allow the user to edit the data. (emphasis mine)

    “Data” is a pretty broad term—it has to be to cover the multitude of types of data that forms collect. We’re allowing the user to edit the state of a part of the page. State is just data about that part of the page at any given time. This may not have been the intended use of <input>, but we’re holding true to the specification.

    The W3C also states that inputs may be rendered wherever “phrasing content” can be used, which is basically anywhere you could put standalone text. This allows us to use radio buttons outside of a form.

    Radio-controlled tabs

    So now that we know a little more about whether we can use radio buttons for this purpose, let’s dig into an example and see how they can actually remove or reduce our dependency on JavaScript by modifying the original tabs example.

    Add radio buttons representing state

    Each radio button will represent one state of the interactive component. In our case, we have three tabs and each tab can be active, so we need three radio buttons, each of which will represent a particular tab being active. By giving the radio buttons the same name, we’ll ensure that only one may be checked at any time. Our JavaScript example had the first tab active initially, so we can add the checked attribute to the radio button representing the first tab, indicating that it is currently active.

    Because CSS selectors can only style sibling or child selectors based on the state of another element, these radio buttons must come before any content that needs to be visually manipulated. In our case, we’ll put our radio buttons just before the tabs div:

        <input class="state" type="radio" name="houses-state"
            id="starks" checked />
        <input class="state" type="radio" name="houses-state"
            id="lannisters" />
        <input class="state" type="radio" name="houses-state"
            id="targaryens" />
        <div class="tabs">

    Replace click and touch areas with labels

    Labels naturally respond to click and touch events. We can’t tell them how to react to those events, but the behavior is predictable and we can leverage it. When a label associated with a radio button is clicked or touched, the radio button is checked while all other radio buttons in the same group are unchecked.

    By setting the for attribute of our labels to the id of a particular radio button, we can place labels wherever we need them while still inheriting the touch and click behavior.

    Our tabs were represented with anchors in the earlier example. Let’s replace them with labels and add for attributes to wire them up to the correct radio buttons. We can also remove the active class from the tab and panel as the radio buttons will be maintaining state:

        <input class="state" type="radio" title="Targaryens"
            name="houses-state" id="targaryens" />
        <div class="tabs">
            <label for="starks" id="starks-tab"
            <label for="lannisters" id="lannisters-tab"
            <label for="targaryens" id="targaryens-tab"
        <div class="panels">

    Hide radio buttons with CSS

    Now that our labels are in place, we can safely hide the radio buttons. We still want to keep the tabs keyboard accessible, so we’ll just move the radio buttons offscreen:

    .radio-tabs .state {
        position: absolute;
        left: -10000px;

    Style states based on :checked instead of .active

    The :checked pseudo-class allows us to apply CSS to a radio button when it is checked. The sibling selector ~ allows us to style elements that follow an element in the same level. Combined, we can style anything after the radio buttons based on the buttons’ state.

    The pattern is #radio:checked ~ .something-after-radio or optionally #radio:checked ~ .something-after-radio .something-nested-deeper:

    .tab {
    #starks:checked ~ .tabs #starks-tab,
    #lannisters:checked ~ .tabs #lannisters-tab,
    #targaryens:checked ~ .tabs #targaryens-tab {
    .panel {
    #starks:checked ~ .panels #starks-panel,
    #lannisters:checked ~ .panels #lannisters-panel,
    #targaryens:checked ~ .panels #targaryens-panel {

    Now when the tab labels are clicked, the appropriate radio button will be checked, which will style the correct tab and panel as active. The result:

    See the demo: Show/hide example

    Browser support

    The requirements for this technique are pretty low. As long as a browser supports the :checked pseudo-class and ~ sibling selector, we’re good to go. Firefox, Chrome, and mobile Webkit have always supported these selectors. Safari has had support since version 3, and Opera since version 9. Internet Explorer started supporting the sibling selector in version 7, but didn’t add support for :checked until IE9. Android supports :checked but has a bug which impedes it from being aware of changes to a checked element after page load.

    That’s decent support, but with a little extra work we can get Android and older IE working as well.

    Fixing the Android 2.3 :checked bug

    In some versions of Android, :checked won’t update as the state of a radio group changes. Luckily, there’s a fix for that involving a webkit-only infinite animation on the body, which Tim Pietrusky points out in his advanced checkbox hack:

    /* Android 2.3 :checked fix */
    @keyframes fake {
        from {
            opacity: 1;
        to {
            opacity: 1
    body {        
        animation: fake 1s infinite;

    JavaScript shim for old Internet Explorer

    If you need to support IE7 and IE8, you can add this shim to the bottom of your page in a script tag:

    .addEventListener('change', function (e) {
        var radios, i;
        if (e.target.getAttribute('type') === 'radio') {
            radios = document.querySelectorAll('input[name="' +
                e.target.getAttribute('name') + '"]');
            for (i = 0; i < radios.length; i += 1) {
                radios[ i ].className = 
                    radios[ i ].className.replace(
                        ' '
                if (radios[ i ] === e.target) {
                    radios[ i ].className += ' checked';

    This adds a checked class to the currently checked radio button, allowing you to double up your selectors and keep support. Your selectors would have to be updated to include :checked and .checked versions like this:

    .tab {
    #starks:checked ~ .tabs #starks-tab,
    #starks.checked ~ .tabs #starks-tab,
    #lannisters:checked ~ .tabs #lannisters-tab,
    #lannisters.checked ~ .tabs #lannisters-tab,
    #targaryens:checked ~ .tabs #targaryens-tab,
    #targaryens.checked ~ .tabs #targaryens-tab {
    .panel {
    #starks:checked ~ .panels #starks-panel,
    #starks.checked ~ .panels #starks-panel,
    #lannisters:checked ~ .panels #lannisters-panel,
    #lannisters.checked ~ .panels #lannisters-panel,
    #targaryens:checked ~ .panels #targaryens-panel,
    #targaryens.checked ~ .panels #targaryens-panel {

    Using an inline script still saves a potential http request and speeds up interactions on newer browsers. When you choose to drop IE7 and IE8 support, you can drop the shim without changing any of your code.

    Maintaining accessibility

    While our initial JavaScript tabs exhibited the state management between changing tabs, a more robust example would use progressive enhancement to change three titled lists into tabs. It should also handle adding all the ARIA roles and attributes that screen readers and other assistive technologies use to navigate the contents of a page. A better JavaScript example might look like this:

    See the demo: Show/hide example

    Parts of the HTML are removed and will now be added by additional JavaScript; new HTML has been added and will be hidden by additional JavaScript; and new CSS has been added to manage the pre-enhanced and post-enhanced states. In general, our code has grown by a good amount.

    In order to support ARIA, particularly managing the aria-selected state, we’re going to have to bring some JavaScript back into our radio-controlled tabs. However, the amount of progressive enhancement we need to do is greatly reduced.

    If you aren’t familiar with ARIA or are a little rusty, you may wish to refer to the ARIA Authoring Practices for tabpanel.

    Adding ARIA roles and attributes

    First, we’ll add the role of tablist to the containing div.

    <div class="radio-tabs" role="tablist">
        <input class="state" type="radio" name="houses-state"
            id="starks" checked />

    Next, we’ll add the role of tab and attribute aria-controls to each radio button. The aria-controls value will be the id of the corresponding panel to show. Additionally, we’ll add titles to each radio button so that screen readers can associate a label with each tab. The checked radio button will also get aria-selected="true":

    <div class="radio-tabs" role="tablist">
        <input class="state" type="radio" title="Starks"
            name="houses-state" id="starks" role="tab"
            aria-controls="starks-panel" aria-selected="true"checked />
        <input class="state" type="radio" title="Lanisters" 
            name="houses-state" id="lannisters" role="tab" 
            aria-controls="lannisters-panel" />
        <input class="state" type="radio" title="Targaryens" 
            name="houses-state" id="targaryens" role="tab" 
            aria-controls="targaryens-panel" />
        <div class="tabs">

    We’re going to hide the visual tabs from assistive technology because they are shallow interfaces to the real tabs (the radio buttons). We’ll do this by adding aria-hidden="true" to our .tabs div:

        <input class="state" type="radio" title="Targaryens"
            name="houses-state" id="targaryens" role="tab"
            aria-controls="targaryens-panel" />
        <div class="tabs" aria-hidden="true">
            <label for="starks" id="starks-tab"

    The last bit of ARIA support we need to add is on the panels. Each panel will get the role of tabpanel and an attribute of aria-labeledby with a value of the corresponding tab’s id:

       <div class="panels">
            <ul id="starks-panel" class="panel active"
                role="tabpanel" aria-labelledby="starks-tab">
            <ul id="lannisters-panel" class="panel"
                role="tabpanel" aria-labelledby="lannisters-tab">
            <ul id="targaryens-panel" class="panel"
                role="tabpanel" aria-labelledby="targaryens-tab">

    All we need to do with JavaScript is to set the aria-selected value as the radio buttons change:

    $('.state').change(function () {
        $(this).parent().find('.state').each(function () {
            if (this.checked) {
                $(this).attr('aria-selected', 'true');
            } else {

    This also gives an alternate hook for IE7 and IE8 support. Both browsers support attribute selectors, so you could update the CSS to use [aria-selected] instead of .checked and remove the support shim.

    #starks[aria-selected] ~ .tabs #starks-tab,
    #lannisters[aria-selected] ~ .tabs #lannisters-tab,
    #targaryens[aria-selected] ~ .tabs #targaryens-tab,
    #starks:checked ~ .tabs #starks-tab,
    #lannisters:checked ~ .tabs #lannisters-tab,
    #targaryens:checked ~ .tabs #targaryens-tab {
        /* active tab, now with IE7 and IE8 support! */

    The result is full ARIA support with minimal JavaScript—and you still get the benefit of tabs that can be used as soon as the browser paints them.

    See the demo: Show/hide example

    That’s it. Note that because the underlying HTML is available from the start, unlike the initial JavaScript example, we didn’t have to manipulate or create any additional HTML. In fact, aside from adding ARIA roles and parameters, we didn’t have to do much at all.

    Limitations to keep in mind

    Like most techniques, this one has a few limitations. The first and most important is that the state of these interfaces is transient. When you refresh the page, these interfaces will revert to their initial state. This works well for some patterns, like modals and offscreen menus, and less well for others. If you need persistence in your interface’s state, it is still better to use links, form submission, or AJAX requests to make sure the server can keep track of the state between visits or page loads.

    The second limitation is that there is a scope gap in what can be styled using this technique. Since you cannot place radio buttons before the <body> or <html> elements, and you can only style elements following radio buttons, you cannot affect either element with this technique.

    The third limitation is that you can only apply this technique to interfaces that are triggered via click, tap, or keyboard input. You can use progressive enhancement to listen to more complex interactions like scrolling, swipes, double-tap, or multitouch, but if your interfaces rely on these events alone, standard progressive enhancement techniques may be better.

    The final limitation involves how radio groups interact with the tab flow of the document. If you noticed in the tab example, hitting tab brings you to the tab group, but hitting tab again leaves the group. This is fine for tabs, and is the expected behavior for ARIA tablists, but if you want to use this technique for something like an open and close button, you’ll want to be able to have both buttons in the tab flow of the page independently based on the button location. This can be fixed through a bit of JavaScript in four steps:

    1. Set the radio buttons and labels to display: none to take them out of the tab flow and visibility of the page.
    2. Use JavaScript to add buttons after each label.
    3. Style the buttons just like the labels.
    4. Listen for clicks on the button and trigger clicks on their neighboring label.

    Even using this process, it is highly recommended that you use a standard progressive enhancement technique to make sure users without JavaScript who interact with your interfaces via keyboard don’t get confused with the radio buttons. I recommend the following JavaScript in the head of your document:

    <script>document.documentElement.className+=" js";</script>

    Before any content renders, this will add the js class to your <html> element, allowing you to style content depending on whether or not JavaScript is turned on. Your CSS would then look something like this:

    .thing {
        /* base styles - when no JavaScript is present
           hide radio button labels, show hidden content, etc. */
    .js .thing {
        /* style when JavaScript is present
           hide content, show labels, etc. */

    Here’s an example of an offscreen menu implemented using the above process. If JavaScript is disabled, the menu renders open at all times with no overlay:

    See the demo: Show/hide example

    Implementing other content-on-demand patterns

    Let’s take a quick look at how you might create some common user interfaces using this technique. Keep in mind that a robust implementation would address accessibility through ARIA roles and attributes.

    Modal windows with overlays

    • Two radio buttons representing modal visibility
    • One or more labels for modal-open which can look like anything
    • A label for modal-close styled to look like a semi-transparent overlay
    • A label for modal-close styled to look like a close button

    See the demo: Show/hide example

    Off-screen menu

    • Two radio buttons representing menu visibility
    • A label for menu-open styled to look like a menu button
    • A label for menu-close styled to look like a semi-transparent overlay
    • A label for menu-close styled to look like a close button

    See the demo: Show/hide example

    Switching layout on demand

    • Radio buttons representing each layout
    • Labels for each radio button styled like buttons

    See the demo: Show/hide example

    Switching style on demand

    • Radio buttons representing each style
    • Labels for each radio button styled like buttons

    See the demo: Show/hide example

    Content carousels

    • X radio buttons, one for each panel, representing the active panel
    • Labels for each panel styled to look like next/previous/page controls

    See the demo: Show/hide example

    Other touch- or click-based interfaces

    As long as the interaction does not depend on adding new content to the page or styling the <body> element, you should be able to use this technique to accomplish some very JavaScript-like interactions.

    Occasionally you may want to manage multiple overlapping states in the same system—say the color and size of a font. In these situations, it may be easier to maintain multiple sets of radio buttons to manage each state.

    It is also highly recommended that you use autocomplete="off" with your radio buttons to avoid conflict with browser form autofill switching state on your users.

    Radio-control the web?

    Is your project right for this technique? Ask yourself the following questions:

    1. Am I using complex JavaScript on my page/site that can’t be handled by this technique?
    2. Do I need to support Internet Explorer 6 or other legacy browsers?

    If the answer to either of those question is “yes,” you probably shouldn’t try to integrate radio control into your project. Otherwise, you may wish to consider it as part of a robust progressive enhancement technique.

    Most of the time, you’ll be able to shave some bytes off of your JavaScript files and CSS. Occasionally, you’ll even be able to remove Javascript completely. Either way, you’ll gain the appearance of speed—and build a more enjoyable experience for your users.

  • This week's sponsor: The Digital PM Summit 

    The Digital PM Summit is the event for folks who manage digital projects. Attend the Summit October 6-7 in Austin, TX.

  • Matt Griffin on How We Work: Being Profitable 

    When I recently read Geoff Dimasi’s excellent article I thought: this is great—values-based business decisions in an efficient fashion. But I had another thought, too: where, in that equation, is the money?

    If I’m honest with myself, I’ve always felt that on some level it’s wrong to be profitable. That making money on top of your costs somehow equates to bilking your clients. I know, awesome trait for a business owner, right?

    Because here’s the thing: a business can’t last forever skating on the edge of viability. And that’s what not being profitable means. This is a lesson I had to learn with Bearded the hard way. Several times. Shall we have a little bit of story time? “Yes, Matt Griffin,” you say, “let’s!” Well OK, then.

    At Bearded, our philosophy from the beginning was to focus on doing great web work for clients we believed in. The hope was that all the sweat and care we put into those projects and relationships would show, and that profit would naturally follow quality. For four years we worked our tails off on project after project, and as we did so, we lived pretty much hand-to-mouth. On several occasions we were within weeks and a couple of thousand bucks from going out of business. I would wake up in the night in a panic, and start calculating when bills went out and checks would come in, down to the day. I loved the work and clients, but the other parts of the business were frankly pretty miserable.

    Then one day, I went to the other partners at Bearded and told them I’d had it. In the immortal words of Lethal Weapon’s Sergeant Murtaugh, I was getting too old for this shit. I told them I could put in one more year, and if we weren’t profitable by the end of it I was out, and we should all go get well-paid jobs somewhere else. They agreed.

    That decision lit a fire under us to pay attention to the money side of things, change our process, and effectively do whatever it took to save the best jobs we’ve ever had. By the end of the next quarter, we had three months of overhead in the bank and were on our way to the first profitable year of our business, with a 50 percent growth in revenue over the previous year and raises for everyone. All without compromising our values or changing the kinds of projects we were doing.

    This did not happen on its own. It happened because we started designing the money side of our business the way we design everything else we care about. We stopped neglecting our business, and started taking care.

    “So specifically,” you ask, “what did you do to turn things around? I am interested in these things!” you say. Very good, then, let’s take a look.

    Now it’s time for a breakdown

    Besides my arguably weird natural aversion to profit, there are plenty of other motivations not to examine the books. Perhaps math and numbers are scary to you. Maybe finances just seem really boring (they’re no CSS pseudo-selectors, amiright?). Or maybe it’s that when we don’t pay attention to a thing, it’s easier to pretend that it’s not there. But in most cases, the unknown is far scarier than fact.

    When it comes down to it, your businesses finances are made up of two things: money in and money out. Money in is revenue. Money out is overhead. And the difference? That’s profit (or lack thereof). Let’s take a look at the two major components of that equation.

    Overhead Overheels

    First let’s roll up our sleeves and calculate your overhead. Overhead includes loads of stuff like:

    • Staff salaries
    • Health insurance
    • Rent
    • Utilities
    • Equipment costs
    • Office supplies
    • Snacks, meals, and beverages
    • Service fees (hosting, web services, etc.)

    In other words: it’s all the money you pay out to do your work. You can assess these items over whatever period makes sense to you: daily, weekly, annually, or even by project.

    For Bearded, we asked our bookkeeper to generate a monthly budget in Quicken based on an average of the last six months of actual costs that we have, broken down by type. This was super helpful in seeing where our money goes. Not surprisingly, most of it was paying staff and covering their benefits.

    Once we had that number it was easy to derive whatever variations were useful to us. The most commonly used number in our arsenal is weekly overhead. Knowing that variable is very helpful for us to know how much we cost every week, and how much average revenue needs to come in each week before we break even.

    Everything old is revenue again

    So how do we bring in that money? You may be using pricing structures that are fixed-fee, hourly, weekly, monthly, or value-based. But at the end of the day you can always divide the revenue gained by the time you spent, and arrive at a period-based rate for the project (whether monthly, weekly, hourly, or project length). This number is crucial in determining profitability, because it lines up so well with the overhead number we already determined.

    Remember: money in minus money out is profit. And that’s the number we need to get to a point where it safely sustains the business.

    If we wanted to express this idea mathematically, it might look something like this:

    (Rate × Time spent × Number of People) - (Salaries + Expenses) = Profit

    Here’s an example:

    Let’s say that our ten-person business costs $25,000 a week to run. That means each person, on average, needs to do work that earns $2,500 per week for us to break even. If our hourly rate is $100 per hour, that means each person needs to bill 25 hours per week just to maintain the business. If everyone works 30 billable hours per week, the business brings in $30,000—a profit of 20 percent of that week’s overhead. In other words, it takes five good weeks to get one extra week of overhead in the bank.

    That’s not a super great system, is it? How many quality billable hours can a person really do in a week—30? Maybe 36? And is it likely that all ten people will be able to do that many billable hours each week? After all, there are plenty of non-billable tasks involved in running a business. Not only that, but there will be dry periods in the work cycle—gaps between projects, not to mention vacations! We won’t all be able to work full time every week of the year. Seems like this particular scenario has us pretty well breaking even, if we’re lucky.

    So what can we do to get the balance a little more sustainable? Well, everyone could just work more hours. Doing 60-hour weeks every week would certainly take care of things. But how long can real human beings keep that up?

    We can lower our overhead by cutting costs. But seeing as most of our costs are paying salaries, that seems like an unlikely place to make a big impact. To truly be more profitable, the business needs to bring in more revenue per hour of effort expended by staff. That means higher rates. Let’s look at a new example:

    Our ten-person business still costs $25,000 a week. Our break-even is still at $2,500 per week per person. Now let’s set our hourly rate at $150 per hour. This means that each person has to work just under 17 billable hours per week for the business to break even. If everyone bills 30 hours in a week, the business will now bring in $45,000—or $20,000 in profit. That’s 80 percent of a week’s overhead.

    That scenario seems a whole lot more sustainable—a good week now pays for itself, and brings in 80 percent of the next week’s overhead. With that kind of ratio we could, like a hungry bear before hibernation, start saving up to protect ourselves from less prosperous times in the future.

    Nature metaphors aside, once we know how these parts work, we can figure out any one component by setting the others and running the numbers. In other words, we don’t just have to see how a specific hourly rate changes profit. We can go the other way, too.

    Working for a living or living to work

    One way to determine your system is to start with desired salaries and reasonable work hours for your culture, and work backwards to your hourly rate. Then you can start thinking about pricing systems (yes, even fixed price or value-based systems) that let you achieve that effective rate.

    Maybe time is the most important factor for you. How much can everyone work? How much does everyone want to work? How much must you then charge for that time to end up with salaries you can be content with?

    This is, in part, a lifestyle question. At Bearded, we sat down not too long ago and did an exercise adapted from an IA exercise we learned from Kevin M. Hoffman. We all contributed potential qualities that were important to our business—things like “high quality of life,” “high quality of work,” “profitable,” “flexible,” “clients who do good in the world,” “efficient,” and “collaborative.” As a group we ordered those qualities by importance, and decided we’d let those priorities guide us for the next year, at which point we’d reassess.

    That exercise really helped us make decisions about things like what rate we needed to charge, how many hours a week we wanted to work, as well as more squishy topics like what kinds of clients we wanted to work for and what kind of work we wanted to do. Though finances can seem like purely quantitative math, that sort of qualitative exercise ended up significantly informing how we plugged numbers into the profit equation.

    Pricing: Where the rubber meets the road

    Figuring out the basics of overhead, revenue, and profit, is instrumental in giving you an understanding of the mechanics of your business. It lets you plan knowledgeably for your future. It allows you to make plans and set goals for the growth and maintenance of your business.

    But once you know what you want to charge there’s another question—how do you charge it?

    There are plenty of different pricing methods out there (time unit-based, deliverable-based, time period-based, value-based, and combinations of these). They all have their own potential pros and cons for profitability. They also create different motivations for clients and vendors, which in turn greatly affect your working process, day-to-day interactions, and project outcomes.

    But that, my friends, is a topic for our next column. Stay tuned for part two of my little series on the money side of running a web business: pricing!

  • Ten CSS One-Liners to Replace Native Apps 

    Håkon Wium Lie is the father of CSS, the CTO of Opera, and a pioneer advocate for web standards. Earlier this year, we published his blog post, “CSS Regions Considered Harmful.” When Håkon speaks, whether we always agree or not, we listen. Today, Håkon introduces CSS Figures and argues their case.

    Tablets and mobile devices require us to rethink web design. Moused scrollbars will be replaced by paged gestures, and figures will float in multi-column layouts. Can this be expressed in CSS?

    Paged designs, floating figures, and multi-column layout are widely used on mobile devices today. For some examples, see Flipboard, the Our Choice ebook, or Facebook Paper. These are all native apps. If we want the web to win on these devices (we do), it’s vital that designers can build these kinds of presentations using web standards. If web standards cannot express this, authors will be justified in making native apps.

    Over the past years, I’ve been editing two specifications that, when combined, provide this kind of functionality: CSS Multi-column Layout and CSS Figures. I believe they are important to make sure the web remains a compelling environment for content providers.

    In this article, I will demonstrate how simple it is to write CSS code with these specs. I will do so through 10 one-liners. Real stylesheets will be slightly longer, but still compact, readable, and reusable. Here are some screenshots to give you a visual indication of what we are aiming for:

    Three views of a web page demonstrating different numbers of columns for different window sizes

    Building a page

    The starting point for my code examples is an article with a title, text, and some images. In a traditional browser, the article will be shown in one column, with a scrollbar on the right. Using CSS Multi-column Layout, you can give the article two columns instead of one:

      article { columns: 2 }

    That’s a powerful one-liner, but we can do better; we can make the number of columns depend on the available space, so that a narrow screen will have one column, a wider screen will have two columns, etc. This is all it takes to specify that the optimal line length is 15em and for the number of columns to be calculated accordingly:

      article { columns: 15em }

    To me, this is where CSS code morphs into poetry: one succinct line of code scales from the narrowest phone to the widest TV, from the small print to text for the visually impaired. There is no JavaScript, media queries, or expensive authoring tool involved. There is simply one highly responsive line of code. That line is used to great effect to produce the screenshots above. And it works in current browsers (which is not yet the case for the following examples).

    The screenshots above show paged presentations, as opposed to scrolled presentations. This is easily expressed with:

      article { overflow: paged-x }

    The above code says that the article should be laid out as pages, stacked along the x-axis (which, in English, is toward the right). Browsers that support this feature must provide an interface for navigating in these pages. For example, the user may reach the next page by making a swiping gesture or tilting the device. A visual indication of which page you are reading may also be provided, just like scrollbars provide a visual indication in scrolled environments. On a tablet or mobile phone, swiping to the next page or document will be easier than scrolling.


    Adding images to the article creates some challenges. Lines of text can easily be poured into several columns, but if figures are interspersed with text, the result will be uneven; because images are unbreakable, they will cause unused whitespace if they appear at a column break. To avoid this, traditional paper-based layouts place images at the top or bottom of columns, thereby allowing other text to fill the whitespace. This can naturally be expressed in CSS by adding top and bottom to the float property. For example:

      img { float: bottom }

    The bluish harbor images in the screenshots above have been floated to the bottom of the page with this one-liner. CSS is used to express something that HTML cannot say; it is impossible to know how much textual content will fit on a screen in advance of formatting. Therefore, an author cannot know where to insert the image in the source code in order for it to appear at the bottom of the column. Being able to float figures to the top and bottom (in addition to the already existing left and right) is a natural extension to the float property.

    Spanning columns

    Another trick from traditional layout is for figures to span several columns. Consider this newspaper clipping:

    A newspaper clipping showing text in four columns and images in the lower-left, lower-right and upper-right corners
    Used with permission from the Bristol Observer

    In the newspaper article, the image on the left spans two columns and is floated to the bottom of the columns. The code to achieve this in CSS is simple:

      figure { float: bottom; column-span: 2 }

    HTML5’s figure element is perfect for holding both an image and the caption underneath it:

        <img src=cats.jpg>
        <figcaption>Isabel loves the fluffy felines</figcaption>

    The newspaper article also has a figure that spans three columns, and is floated to the top right corner. In a previous version of the CSS Figures specification, this was achieved by setting float: top-corner. However, after discussions with implementers, it became clear that they were able to float content to more places than just corners. Therefore, CSS Figures introduces new properties to express that content should be deferred to a later column, page, or line.

    Deferring figures

    To represent that the cat picture in the newspaper clipping should be placed at the top of the last column, spanning three columns, this code can be used:

      figure { float: top; float-defer-column: last; column-span: 3 }

    This code is slightly less intuitive (compared to the abandoned top-corner keyword), but it opens up a range of options. For example, you can float an element to the second column:

      .byline { float: top; float-defer-column: 1 }

    The above code defers the byline, “By Collette Jackson”, by one. That is, if the byline would naturally appear in the first column, it will instead appear in the second column (as is the case in the newspaper clipping). For this to work with HTML code, it is necessary for the byline to appear early in the article. For example, like this:

      <h1>New rescue center pampers Persians</h1>
      <p class=byline>By Collette Jackson</p>

    Deferring ads

    Advertisements are another type of content which is best declared early in the source code and deferred for later presentation. Here’s some sample HTML code:

      <aside id=ad1 src=ad1.png>
      <aside id=ad2 src=ad2.png>
      <h1>New rescue center pampers Persians</h1>

    And here is the corresponding CSS code, with a one-liner for each advertisement:

    #ad1 { float-defer-page: 1 }
    #ad2 { float-defer-page: 3 }

    As a result of this code, the ads would appear on page two and four. Again, this is impossible to achieve by placing ads inside the text flow, because page breaks will appear in different places on different devices.

    I think both readers and advertisers will like a more page-oriented web. In paper magazines, ads rarely bother anyone. Likewise, I think ads will be less intrusive in paged, rather than scrolled, media.

    Deferring pull quotes

    The final example of content that can be deferred is pull quotes. A pull quote is a quote lifted from the article, and presented in larger type at some predetermined place on the page. In this example, the pull quote is shown midway down the second column:

    A picture of a pull quote in a print newspaper

    Here’s the CSS code to express this in CSS:

      .pullquote#first { float-defer-line: 50% }

    Other types of content can also be positioned by deferring lines. For example, a photograph may be put above the fold of a newspaper by deferring a number of lines. This will also work on the foldable screens of the future.

    Pull quotes, however, are an interesting use case that deserve some discussion. A pull quote has two functions. First, it presents to the reader an interesting line of text to gain attention. Second, the presentation of the article becomes visually more varied when the body text is broken up by the larger type. Typically, you want one pull quote on every page. On paper, where you know how many pages an article will take up, it is easy to supply the right number of pull quotes. On the web, however, content will be reformatted for all sorts of screens; some readers will see many small pages, other will see fewer larger pages. To ensure that each page has a pull quote, authors must provide a generous supply of pull quotes. Rather than showing the extraneous quotes at the end of the article (which would be a web browser’s instinct), they should be discarded; the content will anyway appear in the main article. This can be achieved with a one-liner:

      .pullquote { float-policy: drop-tail }

    In prose, the code reads: if the pull quote is at the tail-end of the article, it should not be displayed. The same one-liner would be used to extraneous images at the end of the article; authors will often want to have one image per page, but not more than one.


    The studious reader may want to consult the CSS Multi-column Layout and CSS Figures specifications. They have more use cases and more knobs to allow designers to describe the ideal presentation of figures on the web.

    The easiest way to play with CSS Figures is to download Opera 12.16 and point it to this document, which generated the screenshots in Figure 1. Based on implementation experience, the specifications have changed and not all one-liners presented in this article will work. Also, Prince and AntennaHouse have partial support for CSS Figures—these are batch formatters that output PDF documents.

    I’d love to hear from those who like the approach taken in this article, and those who don’t. Do you want this added to browsers? Let me know below, or request if from your favorite browser (Firefox, Chrome, Opera, IE). If you don’t like the features, how would you express the use cases that have been discussed?

    Pages and columns have been basic building blocks in typography since the Romans started cutting scrolls into pages. This is not why browsers should support them. We should do so because they help us make better, more beautiful, user experiences on mobile devices.

  • Laura Kalbag on Freelance Design: I Don&#8217;t Like It 

    “I don’t like it”—The most dreaded of all design feedback from your client/boss/co-worker. This isn’t so much a matter of your ego being damaged, it’s just not useful or constructive criticism.

    In order to do better we need feedback grounded in understanding of user needs. And we need to be sure it’s not coming from solely the client’s aesthetic preferences, which may be impeccable but may not be effective for the product.

    Aesthetics are a matter of taste. Design is not just aesthetics. I’m always saying it, but it’s worth repeating: there are aesthetic decisions in design, but they are meant to contribute to the design as a whole. The design as a whole is created for an audience, and with goals in mind, so objectivity is required and should be encouraged.

    Is the client offering an opinion based on her own taste, trying to reflect the taste of the intended audience, or trying to solve a perceived problem for the user? Don’t take “I don’t like it” at face value and try to respond to it without more communication.

    How do we elicit better feedback?

    To elicit the type of feedback we want from clients, we should encourage open-ended critiques that explain the reasons behind the negative feedback, critiques that make good use of conjunctions like “because.” “I don’t like it because…” is already becoming more valuable feedback.

    Designer: Why don’t you like the new contact form design?

    Client: I don’t like it because the text is too big.

    Whether that audience can achieve their goals with our product is the primary factor in its success. We need clients to understand that they may not be the target audience. Sometimes this can be hard for anyone close to a product to understand. We may be one of the users of the products we’re designing, but the product is probably not being designed solely for users like us. The product has a specific audience, with specific goals. Once we’ve re-established the importance of the end user, we can then reframe the feedback by asking the question, “how might the users respond?”

    Designer: Do you think the users will find the text too big?

    Client: Yes. They’d rather see everything without having to scroll.

    Designer: The text will have to be very small if we try to fit it all into the top of the page. It might be hard to read.

    Client: That’s fine. All of our users are young people, so their eyesight is good.

    Throughout the design process, we need to check our hidden assumptions about our users. We should also ensure any feedback we get isn’t based upon an unfounded assumption. If the client says the users won’t like it, ask why. Uncover the assumption—maybe it’s worth testing with real users?

    Designer: Can we be certain that all your users are young people? And that all young people have good eyesight? We might risk losing potential customers unless the site is easy for everyone to read.

    How do we best separate out assumptions from actual knowledge? Any sweeping generalizations about users, particularly those that assume users all share common traits, are likely to need testing. A thorough base of user research, with evidence to fall back on, will give you a much better chance at spotting these assumptions.

    The design conversation

    As designers, we can’t expect other people to know the right language to describe exactly why they think something doesn’t work. We need to know the right questions that prompt a client to give constructive criticism and valuable feedback. I’ve written before on how we can pre-empt problems by explaining our design decisions when we share our work, but it’s impossible to cover every minute detail and the relationships between them. If a client can’t articulate why they don’t like the design as a whole, break the design into components and try to narrow down which part isn’t working for them.

    Designer: Which bit of text looks particularly big to you?

    Client: The form labels.

    When you’ve zeroed in on a component, elicit some possible reasons that it might not be effective.

    Designer: Is it because the size of the form labels leaves less space for the other elements, forcing the users to scroll more?

    Client: Yes. We need to make the text smaller.

    Reining it in

    Aesthetics are very much subject to taste. You know what colors you like to wear, and the people you find attractive, and you don’t expect everyone else to share those same tastes. Nishant wrote a fantastic column about how Good Taste Doesn’t Matter and summarized it best when he said:

    good and virtuous taste, by its very nature, is exclusionary; it only exists relative to shallow, dull…tastes. And if good design is about finding the most appropriate solution to the problem at hand, you don’t want to start out with a solution set that has already excluded a majority of the possibilities compliments of the unicorn that is good taste.

    Taste’s great

    Designer: But if we make the text smaller, we’ll make it harder to read. Most web pages require scrolling, so that shouldn’t be a problem for the user. Do you think the form is too long, and that it might put users off from filling it in?

    Client: Yes, I want people to find it easy to contact us.

    Designer: How about we take out all the form fields, except the email address and the message fields, as that’s all the information we really need?

    Client: Yes, that’ll make the form much shorter.

    If you’re making suggestions, don’t let a client say yes to your first one. These suggestions aren’t meant as an easy-out, allowing them to quickly get something changed to fit their taste. This is an opportunity to brainstorm potential alternatives on the spot. Working collaboratively is the important part here, so don’t just go away to work out the first alternative by yourself.

    If you can work out between you which solution is most likely to be successful, the client will be more committed to the iteration. You’ll both have ownership, and you’ll both understand why you’ve decided to make it that way.

  • Kids 4–6: &#8220;The Muddy Middle&#8221; 

    I call kids between ages 4 and 6 the “muddy middle,” because they’re stuck right in between the cute, cuddly preschool children and the savvy, sophisticated elementary-schoolers. They’re too old for games designed for toddlers, but they can’t quite read yet, so they struggle with sites and apps geared toward older kids. Unfortunately, you rarely see a digital product designed specifically for this age group, because they’re hard to pin down, but these little guys are full of ideas, knowledge, creativity, and charisma.

    Like the 2–4s, these children are still in the preoperational stage, but they present their own set of design challenges based on where they are cognitively, physically, and emotionally.

    Who are they?

    Table 5.1 shows some key characteristics that shape the behavior and attitudes of 4–6-year-olds and how these might impact your design decisions.

    You’ll find that 4–6-year-olds have learned “the rules” for how to behave, how to communicate, and how to play. Now they’re looking for ways to bend and break these rules. They understand limitations—angry parents, broken toys, and sad friends have taught them well—but they still take every opportunity to test these limitations. Digital environments provide a perfect place for these active kids to challenge the status quo and learn more about the world around them.

    4–6 year-olds… This means that… You’ll want to…
    Are empathetic. They’re beginning to see things from other perspectives. Make interactions feel more “social,” even if the kids aren’t actually communicating with others.
    Have an intense curiosity about the world. They’re very interested in learning new ideas, activities, and skills, but may become frustrated when that learning takes longer than they would like. Set attainable goals for the tasks and activities you create. Provide context-based help and support so kids have an easier time processing information.
    Are easily sidetracked. They sometimes have trouble following through on a task or activity. Keep activities simple, short, and rewarding. Provide feedback and encouragement after milestones.
    Have wild imaginations. They prefer to create on their own rather than following strict instructions or step-by- step directions. Make “rules” for play/engagement as basic as possible and allow for a lot of invention, self-expression, and storytelling.
    Are developing increased memory function. Can recall complex sequences of events just by watching someone perform them. Include multi-step activities and games, with more than one main goal (for example, touch the red stars and green apples to get points of different values).
    Table 5.1: Considerations for 4–6-year-olds

    Make it social

    When you think of social design for adults, you may think of experiences that let users communicate and interact with others. The same is true of social design for kids, but in this case, “others” doesn’t have to mean other kids or even other humans. It means that kids need to feel like part of the experience, and they need to be able to observe and understand the interactions of characters in the experience, as players and contributors. Kids at this age understand that individual differences, feelings, and ideas are important and exciting. Showcasing these differences within the experience and directly communicating with users allows this social aspect to come through and provide additional depth and context to interactions.

    Sometimes, making something feel social is as easy as presenting it in the first person. When characters, elements, and instructions speak directly to kids, it makes it easier for them to empathize and immerse themselves in the experience.

    Let’s take a look at an example from Seussville. The designers of this highly engaging site keep the uniqueness of Dr. Seuss’s characters vibrantly alive in their lovely character chooser. Every character (and I do mean every) from every Dr. Seuss book glides by on whimsical conveyor belts, letting the user pick one to play with (see Figure 5.1).

    This character chooser provides a strong social experience for kids, because it allows them to “meet” and build relationships with the individual characters. Kids can control the viewer, from a first-person perspective, to see the visual differences among the characters, as well as personality details that make the characters unique, much like how they’d go about meeting people in real life (without the conveyor belt, of course).

    When users choose a character, they are shown a quote, a book list, and details about the character on the pull-down screen to the right. On the left side of the screen, a list of games and activities featuring the character magically appears.

    Screenshot of the Seussville homepage
    FIGURE 5.1: Seussville presents a first-person perspective to kids.
    Screenshot of Seussville's games and activities page
    FIGURE 5.2: Seussville feels social, even though kids don’t interact with other humans.

    This social experience is carried through across most of the games on the site. For example, when users pick the “Horton Hears a Tune” game from Horton the elephant’s list of activities, they can compose their own melody on the groovy organ-like instrument under the supportive eyes of Horton himself. Then, in true social fashion, they can save their tune and share it with family and friends.

    Screenshot of “Horton Hears a Tune” on Seussville
    FIGURE 5.3: “Horton Hears a Tune” lets kids compose music and share it.

    Make learning part of the game

    As a designer, you know that providing help when and where your users need it works better than forcing them to leave the task they’re trying to complete to get help. This is especially true for 4–6-year-olds, who have a strong curiosity for why things are the way they are and want to know everything right away. Unlike the “school stinks” mentality of earlier generations, today’s kids are fascinated with learning and want to soak up as much information as possible.

    This new attitude could be because learning is more dynamic, more hands-on, and more inventive than it’s been in the past, or because computers, tablets, and other digital teaching tools make learning fun. However, younger kids still lack patience when learning takes longer than they’d like. You’ll want to provide short, manageable instructions to make learning fast, easy, and pleasurable, and to incorporate learning into the experience itself.

    The Dinosaur Chess app does a great job with structured teaching, as well as on-the-spot assistance to help kids learn how to play chess (see Figure 5.4). Upon launching the app, children get to choose what they want to do. The great thing about Dinosaur Chess is that it’s not just all about chess—kids can take lessons, check their overall progress, and even participate in a “dino fight!”

    One perk is how the app links the activities via a treasure-hunt-style map on the menu screen. It gently recommends a progression through the activities (which older kids will follow), but is subtle enough to allow exploration. This feature is great for kids who like to break the rules, because it establishes a flow, yet invites users to deviate from it in a subtle yet effective way.

    Screenshot of the Dinosaur Chess homescreen
    FIGURE 5.4: Dinosaur Chess offers many opportunities for learning.

    When users select the “learn” option, they are taken to a screen where an avuncular dinosaur (who, for some reason, is Scottish) talks kids through the mechanics of chess in a non-intimidating way. Since these kids are still learning to read, the designers used voice-overs instead of text, which works really well here.

    The lessons are broken up into short, manageable chunks—essential for learning via listening—which let the 4–6s learn a little at a time and progress when they are ready. The children can also try out various moves after learning them, which is particularly effective with younger users who learn by seeing and doing (see Figure 5.5).

    If this app were designed for an adult audience, the lessons would be a little longer and would probably include text explanations in addition to the audio, since a combination of listening and reading works best for grown-ups. However, the brief audio segments coupled with animated examples are perfect for younger users’ short attention spans and desire to learn as much as quickly as possible.

    Screenshot of a chess game
    FIGURE 5.5: Dinosaur Chess teaches kids how to play chess in short, informational chunks.

    My favorite aspect of Dinosaur Chess is its guided playing. At any point during the game, kids can press the “?” button for help. Instead of popping a layer, which many sites and apps do (even those designed for a younger audience), Dinosaur Chess uses subtle animation and voice-overs to show the users what their next moves should be, as shown in Figure 5.6.

    Screenshot of a chess game showing contextual help arrows
    FIGURE 5.6: Dinosaur Chess uses animation and voice-overs to provide contextual help.

    Give feedback and reinforcement

    As anyone knows who has dealt with this age group, 4–6-year-olds have short attention spans. This is particularly true of the younger ones, because kids ages 6 and up are able to pay attention for longer periods of time and absorb more information in a single session. What’s interesting (and challenging) about these younger ones is that they get frustrated at themselves for not being able to focus, and then they channel that frustration onto the experience.

    A common response to this from designers is: “Well, I’ll make my app/game/site super fun and interesting so that kids will want to play longer.” That’s not going to happen. A better approach is to identify opportunities within the experience to provide feedback, in order to encourage kids to continue.

    Here are some ways to keep children focused on a particular activity:

    • Limit distractions. With a child audience, designers tend to want to make everything on the screen do something, but if you want your 4–6s to complete a task (for example, finish a puzzle or play a game), then remove extra functionality.
    • Break it up. As when you’re designing for 2–4s, it’s best to break activities for 4–6s into manageable components. The components can be a bit bigger than ones you might design for a younger audience, but many clear, simple steps are better than fewer, longer ones. While adult users prefer to complete as few steps as possible, and scroll down to finish a task on a screen, 4–6s like finishing a step and moving to a new screen.
    • Make it rewarding. Provide feedback after each piece of an activity is completed, which will help your users stay motivated to continue. If you have the time and budget, use a combination of feedback mechanisms, to keep an element of surprise and discovery in the task-completion process.

    Keep it free-form

    The 4–6-age bracket gravitates toward activities that are open and free-form, with simple, basic rules (and lots of opportunities to deviate from the rules). This changes pretty dramatically when kids hit age 7 or so. At that point, they become quite focused on staying within boundaries and need a certain level of structure in order to feel comfortable. However, these younger kids like to break the rules and test limits, and digital environments are the perfect places to do this.

    Zoopz.com has a great mosaic-maker tool, which lets kids enhance existing mosaic designs or create their own from scratch (see Figures 5.7 and 5.8).

    Screenshot of a Zoopz.com mosaic
    FIGURE 5.7: An existing mosaic design from Zoopz.com, which lets kids experiment and test limits.
    Screenshot of a Zoopz.com mosaic being created
    FIGURE 5.8: Zoopz.com mosaic-creator enables kids to create their own cool designs.

    The nice thing about Zoopz is that it requires little to no explanation in order to make mosaics—kids can jump right in and start playing. This feature is important, as younger ones will get frustrated if they need to listen to detailed instructions before getting started and will likely move on to something else before the instructions are complete. Typically, 4- and 5-year-olds will leave websites and close apps that they can’t immediately figure out. Older kids will hang around and pay attention to directions if the perceived reward is high enough, but young ones abandon the site right away. So if your game allows for free exploration, make sure that it’s really free and doesn’t require lots of information in order to play.

    An important thing to note about open exploration/creation: If you’re designing something with a “takeaway,” as Zoopz is, make sure that kids can either print or save their creations. The only thing kids like better than playing by their own rules is showing their work to others. Zoopz misses an opportunity here, because it doesn’t offer the ability for kids to share their work, or print it out to show to friends and family. This feature becomes even more important as kids get older. We’ll talk at length about sharing, saving, and storing in Chapter 6, “Kids 6–8: The Big Kids.”

    Keep it challenging

    The worst insult from a child between the ages of 4 and 5 is to call something “babyish.” They’re part of the big-kid crowd now, and the last thing they want is to feel like they’re using a site or playing a game that’s meant for younger kids. Unfortunately, it’s hard to pin down exactly what “babyish” means, because the definition changes from kid to kid, but in my experience, children call something “babyish” when it’s not difficult or challenging enough for them. Since kids show increased memory function (and more sophisticated motor skills) starting at around age 4, adding multiple steps to games and activities helps keep them on their toes.

    As designers, we instinctively want to make stuff that users can master immediately. If you’re designing for elementary-school kids, you’ll want to move away from that mindset. While it’s true that children need to be able to easily figure out the objectives of a game or app right away, they don’t necessarily have to do it perfectly the first time. Instead, build in easier layers early on so that kids can complete them quickly, but throw in some extras that might be a little harder for them. For example, if you’re designing a game where kids have to shoot at flying objects, send in a super-fast projectile they have to catch to win extra points or add a harder “bonus round.” Kids will be less likely to call something “babyish” if it takes them several tries to master. And they’ll appreciate the vote of confidence you’re giving to their memory and agility.

    Parents are users, too

    When adding complexity to your game or app, you’ll still need to make the basic premise simple and clear. A little parental intervention is sometimes necessary, in order to explain rules and demonstrate interactions, but when parents or siblings have to become very involved in game mechanics, it’s frustrating for all parties.

    Try not to place too much emphasis on “winning” and keep the perceived “rewards” small and unexciting, if you have them at all. Kids tend to ask parents to step in and help with the trickier parts if the reward for winning is really high. While I believe that a parent should be in the room when kids are online and should check on kids frequently when they’re using a device, too much involvement takes away some autonomy from the kids and prevents them from learning as much as they could and should.

    Chapter checklist

    Here’s a checklist for designing for 4–6-year-olds.

    Does your design cover the following areas?

    • Feel “social”?
    • Break up instructions and progression into manageable chunks?
    • Provide immediate positive feedback after each small milestone?
    • Allow for invention and self-expression?
    • Include multi-step activities to leverage improved memory function?
  • Longform Content with Craft Matrix 

    Jason Santa Maria recently shared some thoughts about pacing content, and my developer brain couldn’t help but think about how I’d go about building the examples he talked about.

    The one fool-proof way to achieve heavily art-directed layouts like those is to write the HTML by hand. The problem is that content managers are not always developers, and the code can get complex pretty quickly. That’s why we use content management systems—to give content managers easier and more powerful control over content.

    There’s a constant tension between that type of longform, art-directed content and content management systems, though. It’s tough to wrangle such unique layouts and styles into a standardized CMS that scales over time.

    For a while, the best we could do was a series of custom fields and a big WYSIWYG editor for the body copy. While great for content entry, WYSIWYG editors lack the control developers need to output the semantic and clean HTML that make the great experiences and beautiful layouts we’re tasked with building.

    This tension leaves developers like myself looking for different ways to manage content. My attention recently has been focused on Craft, a new CMS that is just over a year old.

    Craft’s solution for longform content is the Matrix field. With Matrix, developers have the flexibility to provide custom fields to be used for content entry, and can write custom templates (using Twig, in Craft’s case) to be used to render that content.

    A Matrix field is made up of blocks, and each block type is made up of fields—anything from text inputs, to rich text, dropdowns, images, tables, and more. Here’s what a typical Matrix setup looks like:

    Configuring a Matrix field

    Instead of fighting with a WYSIWYG editor, content managers choose block types to add to the longform content area, fill out the provided fields, and the content is rendered beautifully using the handcrafted HTML written by developers. I use the Matrix field to drive longform content on my own site, and you can see how much flexibility it gives me to create interesting layouts filled with images with captions, quotes with citations, and more.

    To pull back the curtain a bit, here’s how my blog post Unsung Success is entered into the Matrix field:

    Entering Content with the Matrix field

    Three block types are used in the post seen above—an image block, a quote block, and a text block. Notice that the text block is using a WYSIWYG editor for text formatting—they’re still good for some things!

    The Matrix field is endlessly customizable, and provides the level of flexibility, control, and power that is needed to achieve well-paced, art-directed longform content like the examples Jason shared. This is a huge first step beyond WYSIWYG editors and custom fields, and as we see more beautifully designed longform pieces, our tools will only get better.

  • Nishant Kothary on the Human Web: In Pursuit of Facebook Happiness 

    The outrage being directed at Facebook right now centers on its experiment in manipulating the emotions of 689,003 users in 2012.

    Regardless of where you stand on the issue, there’s no denying the phantasmagorical irony that we’re upset (and sad) about how Facebook affects our emotions thanks to learning about a study where Facebook affected our emotions through someone on Facebook. Maybe that, too, was to be expected.

    One of the motivations for Facebook’s controversial study was to debunk the notion that seeing our friends’ happy posts in our news feeds actually makes us sadder. And according to a post by Adam Kramer, the primary author of the study, it did exactly that, “We found the exact opposite to what was then the conventional wisdom: Seeing a certain kind of emotion (positive) encourages it rather than suppresses it.”

    But, how profound is this effect on users’ overall enjoyment while they’re using Facebook? That remains unknown, and in my experience, it’s not much at all.

    We already know that social media has a profound effect on our emotions. I’ve personally struggled with the emotional rollercoaster for years now. My Achilles’ heel used to be Twitter because I used to be a heavy user. I even quit the service for a whole year to regain my bearings. And while the hiatus turned out to be very positive, I didn’t quite get to the bottom of what inevitably turns me off about Twitter. And then, of course, there was Facebook.

    Facebook affected my mood so dramatically that I’d stopped using it entirely for years until a few months ago. I used to refer to Facebook as, “The place my Instagram pictures go to die.” This was partly in jest, partly serious. My Instagram account is dedicated to my dog, and it’s hard to not notice that a picture or video that can get a few hundred likes, spur over a hundred comments, and bring so much joy to both me and my followers is often met with dead silence or, worse, scorn on Facebook (and honestly, on Twitter as well). There are many reasons for this, several that I covered in one of my prior columns, The REAL Real Problem with Facebook. But there is one above all: Not everyone is interested in pictures of my dog.


    OK, so this isn’t really news, and it’s hardly blasphemous. It’s understandable that people wouldn’t want to see images of someone else’s dog every day. But then why the disparity between how enthusiastically my content is received on Instagram as opposed to Facebook (or even Twitter)? Therein lies the key to the puzzle.

    It’s really quite simple: people follow me on Instagram specifically for pictures of my Weimaraner (yes, it’s a notoriously difficult to pronounce dog breed).

    I never intended on turning my Instagram account into a dog account. It just happened. And in the process I met loads of Weimaraner (and dog) people from around the world (some whom, true story, I’ve subsequently met in real life). I now honor an informal contract to only post pictures of my dog. And what happens when I break that contract and post the occasional picture of something else? I’m rewarded with crickets in terms of engagement.

    What escaped me back when I quit Twitter or when I silently shunned Facebook was that the negativity or the positivity of the posts wasn’t even relevant to the compounding effect of the social network on my emotional well being. What was more to blame was the lack of engagement; the lack of feeling a connection. As much as we do in all life, online we want to meet, engage, and be engaged by others who share our passions and interests. And when that doesn’t happen, well, it can be a bummer.

    Over the past few months I’ve joined numerous groups related to my interests on Facebook (yes, including a Weimaraner group). The result is that my Facebook news feed is now flooded with content I enjoy far more. I’ve essentially hacked my Facebook world to feel a lot more like my Instagram world—more focused on my interests and pastimes. Sharing and talking with folks who care about the same things has made Facebooking infinitely more enjoyable. In an unexpected way, I think it has also helped me understand the mid-conversation exclamations I receive from some people about how much they love Pinterest.

    One would think that Pinterest would be the ideal social network for most of us, especially me. After all, on Pinterest you can follow someone’s Weimaraner board, and dodge all their gardening, baby, culinary, and political content. What’s not to like? Well, clearly something, because like loads of people, I’ve never quite gotten into Pinterest. I have some theories why that’s the case, but my disinterest is beside the point. What seems clear to me is that Pinterest is really onto something. We need a social network that acknowledges that we all have facets, and that it’s OK for us to pick and choose each other based on our interests. In my experience, the amount of happiness you feel on a social network seems to relate more closely to how much the content caters to your interests.

    So, if you’re looking to maximize your happiness on social networks, here’s the short-term solution: fill your account with content that’s interesting to you. Like or follow your favorite sports teams, TV shows, clubs, non-profits, news organizations, web design magazines, and anything else you’re into. In other words, make your feeds about things you genuinely like, happy or sad, instead of about your real-world social obligations.

    And that may also mean muting or unfollowing the people filling your feed with posts about their gardens, babies, food, or politics.

    Or, god forbid, their dogs.

  • Structuring a New Collaborative Culture 

    When I was a junior designer, my creative director asked me to design a mascot with the rather uninspiring instruction to reorder the shapes of the famous 2012 Olympics logo. Having little choice but to accept my task, I threw myself into it with all the boundless, panicked energy that comes from needing to impress the powers above, trusting my superior to steer me in the right direction.

    Three weeks later I was distraught, the entire weight of our complete and utter failure to win the pitch resting on my shoulders.

    It would be easy to put that loss down to inexperience—after all, I totally missed the brief, and every other pitch was better. But when I think about it a little more thoroughly, I can see that the real problem was one of access. I longed to understand the full project details, but was instead privy to mere bits and pieces of projects, attempting to cobble together an unknown whole. It was like trying to put together a jigsaw puzzle whilst looking at it through a keyhole.

    Many organizations—faced with the challenge of bringing together multiple projects, departments, and skillsets—fall back on the traditional combination of hierarchy, method, and structure. This can breed a culture of complacency, leading to outcomes that are narrow in their vision, team members who feel restricted and undervalued, and a workforce that operates under ceaseless pressure to either get it right, or get out.

    When I look back on my ill-fated Olympic experience, I can see that I didn’t have the full picture. I was unable to bring my own ideas to the table, powerless to create change. I was subordinate; my relationship with my superiors was distant, and the most integral aspects of the design process—research, exploration, and discussion—were entirely absent. It wasn’t collaboration of any kind. No wonder that I lost both the pitch and the plot!

    It doesn’t have to be that way. When I co-founded the creative studio Gravita, I learned what collaboration really looks like: multiple minds working together to solve problems. By doing this, our complementary skillsets are free to blend together in surprising ways—unconstrained, we’re better equipped to deliver inventive solutions.

    This kind of collaborative culture is possible, whether you’re freelancing, in an agency environment, or in-house. You only need to do three things:

    1. Remove assumptions
    2. Emphasize project roles over job titles
    3. Create a supportive environment for new ideas

    Here’s how we’ve accomplished each one at Gravita.

    Assumption: the cyanide of collaboration

    When I first established Gravita with two other designers, we found that there was real synergy between us. The feedback was exceptional. We had stumbled across a dynamic that worked, even in our earliest projects.

    However, the path to uninhibited working was far from smooth, because I started making assumptions about my value to the team. I weighed my own skills against theirs and—deciding that I came up short—assumed my ideas weren’t as good. Agency life had drilled into me that my contributions weren’t worthwhile.

    My insecurities created walls. I became terrified of showing my work, afraid of failure. I found any excuse not to contribute. This created frustration and tension in our working space, and hindered progress on my first project.

    The only way out of this debilitating dead-end was to lay out my insecurities and discuss them. Once I was brave enough to open up to my colleagues about how I was feeling, and accept a gradual process of support and positive feedback, we were able to move forward.

    On our next project, we began by talking openly about how we all felt. I was amazed to discover that I was not alone in feeling apprehensive; having everyone’s cards on the table was cathartic. We sat together as a team and worked out what we could each bring to the task, what we were afraid of, and how we could work together to get around potential problems.

    Collaboration offers a vehicle through which assumptions of the self can be overridden. Don’t bottle up what you’re feeling, and don’t be afraid to ask questions you assume others will find stupid. Voicing the concerns you have about yourself opens up an ongoing dialogue—one that can identify your strengths, encourage praise, and allow your confidence to blossom.

    Prioritizing roles over jobs

    Job titles can be useful, but they’re also confining. They can stifle entire projects and hold back personal development. They’re labels, and just like on a can of soup, they create a clear expectation of what is inside—if anything else emerges, it comes as a nasty surprise.

    I had the first inkling it didn’t have to be this way when I was working for a large charity, stuck with the title “web master.” The management noticed how confining this was for me; they gave me the green light to take on new responsibilities that allowed me to branch out. I realized it was perfectly feasible for organizations to adopt this kind of open, flexible thinking.

    I’ve found this way of thinking works at Gravita too. We recognize that it’s the role, not the label, which should be the focus of the work. We don’t have job titles at all, opting instead to rotate roles. We sit down over a cup of coffee and see who fancies doing what on a new project, whether that be project manager, information architect, iconographer, or anything else.

    Removing permanent titles is liberating. Suddenly, like a long-distance runner, you’re only ever really competing with yourself. It becomes more about self-improvement, less about climbing the ladder. You’re free to bring whatever you want to the table, and to grow as a designer.

    Chance favors the connected mind

    Ideas should always be heard, regardless of what form they’re in or how complete they are. Instincts and hunches—proto-ideas, neurons sparking with other neurons—need a free environment where they can mingle, collide, and flourish, ultimately producing something greater than the sum of their parts. After all, as Steven Johnson explains in his talk, “Where Good Ideas Come From,” “chance favors the connected mind”—connectivity and flow between people create stronger ideas.

    It can be challenging to achieve flow, but it’s very worthwhile. Mihaly Csikszentmihalyi defines flow as “the internal state of energised focus which characterises the mind at its most productive.” We look past the separate spaces that we inhabit as individual bodies and come together as minds. It’s a form of intense, unified working where people relax from their inhibitions and see themselves as being fundamentally interconnected on a project.

    Recently we were evaluating concept designs for a healthcare project. It just wasn’t quite working, and individually none of us had figured out what was wrong with it. Together, we began passing ideas back and forth, until someone uttered the words “less cold.” Suddenly we could see what we needed: a new and more gentle typeface, a softer and more comfortable palette. It took all of us, working together in a connected way, to hit on the solution.

    Flowing mind-to-mind in this way allows us to fuel an idea in a shared headspace. Collaborative thinking enhances the brain’s natural capacity to make new links, which in turn strengthen the initial idea. There’s no place for ego—it’s important to be open and welcome this flow of others’ thoughts.

    A new way of thinking

    Collaboration means bringing different minds and skillsets together in a way that doesn’t make assumptions about what someone is or isn’t good at. It means dispensing with limiting roles, and introducing a fluidity of thought and activity into the design team. Above all, it means putting interconnectedness at the heart of every action.

    So is collaborative working the elusive Holy Grail? Certainly a lot of people aim for it, and like to think that they do it even if there is a wide variance in form. What I do know is that by changing the way I think, I’ve helped bring about a safe, assumption-free space with an even distribution of authority that allows ideas to flow freely.

    Collaborative culture helps us discover unique solutions—and continuously redefine ourselves. Designing for the online community means operating in an ever-changing environment, where adaptability is key for keeping up with new technology and scenarios.

    A collaborative culture can push us into spaces more conventional practices fear to tread. Everything is open to question. Ideas are heard. People feel empowered to make real change.

    Finally, I feel like I’m seeing the full picture.

  • Persuasion: Applying the Elaboration Likelihood Model to Design 

    Persuasion is part of every aspect of our lives. Politicians want our vote, businesses want us to buy their products, and people want us to like them. Even altruistic nonprofits want us to change our behaviors around environmental issues and public safety, or give them our money to help fight hunger and disease (the nerve!).

    This reality is no different for websites and other digital properties. Persuasion is a necessary component of good design, ensuring that users will engage with your product in the way you intended, leading to the outcome you intended.

    Understanding persuasion will highlight the importance of developing strong messages, help you better incorporate and refine effective persuasive techniques into your design, and allow you to explain to others (potential clients, peers) how and why your design is effective at persuading users.

    The really nice elephant in the room

    Persuasion has a bad reputation—the word itself often evokes thoughts of being swindled or pressured to do something we really don’t want to do. But persuasion isn’t inherently negative—it’s just a process of influence, for better or worse. With some help from Richard Perloff’s The Dynamics of Persuasion, here are five ways of understanding persuasion:

    • Persuasion is communication. At its core, persuasion needs a strong, clear message sent from one party to another.
    • Persuasion is an attempt to influence. Understanding your audience and what makes them tick makes your attempt more likely to succeed—though the outcome is never guaranteed.
    • Persuasion involves more than words. Aesthetics, interactions, ease of use, and other factors can make a website or application more persuasive to potential users.
    • Persuasion is not coercion. It is up to individuals to form or change their own attitudes. Utilizing dark patterns or purposely tricking a user into doing something they wouldn’t otherwise do is not persuasion. It’s being an asshole.
    • Persuasion can reinforce attitudes. Your audience has opinions that need to be strengthened from time to time. If you don’t preach to the choir, someone else will, and eventually your faithful followers will be led astray.

    Academics have attempted to explain how persuasion works on individuals for decades. The Elaboration Likelihood Model (Petty and Cacioppo, 1986), one of the most frequently cited models of persuasion, explains how shaping attitudes also shapes behaviors. Incorporating the principles of the Elaboration Likelihood Model into your messages and design will maximize your influence on user attitudes and, therefore, behaviors. That, my friend, is what persuasion is all about.

    The Elaboration Likelihood Model

    The Elaboration Likelihood Model attempts to explain how attitudes are shaped, formed, and reinforced by persuasive arguments. The basic idea is that when someone is presented with information, some level of “elaboration” occurs. Elaboration, in this context, means the effort someone makes to evaluate, remember, and accept (or reject) a message.

    The model suggests that people express either high or low elaboration (that is, their level of effort) when they encounter a persuasive message. The level of elaboration then determines which processing route the message takes: central or peripheral.

      Central route processing Peripheral route processing
    Elaboration High Low
    Information processing Contents of message are closely examined by the receiver Receiver is influenced by factors other than the contents of the message
    Attitude Will change or be reinforced based on message characteristics such as strength of argument and relevancy Might change or be reinforced based on the effectiveness of factors other than the message
    Strength of attitude formed/reinforced More enduring and less subject to counterarguments Less enduring and subject to change through future persuasive messages
    Table 1: Comparison of central route processing and peripheral route processing.

    Central route processing means your audience cares more about the message. They’ll pay more attention and scrutinize the quality and strength of the argument. Any attitudes formed or reinforced this way are thought to be more enduring and resistant to counter-arguments.

    Peripheral route processing happens on a more superficial level. Your audience will pay less attention to the message itself while being influenced by secondary factors, such as source credibility, visual appeal, presentation, and enticements like food, sex, and humor. Attitudes formed or reinforced this way are thought to be less enduring, subject to change through counter-arguments, and in need of continual reinforcement.

    To illustrate the difference between central and peripheral route processing—and how messaging and design can be used to simultaneously address each route—let’s look at the behemoth that is online retailer Amazon.com.

    A tale of two paths

    Imagine two potential customers, both in need of a new television. Suzanne is a technophile and regular Amazon user, while Kevin rarely makes purchases online, and is mostly interested in finding a quality television at a good price. Amazon wants to persuade both users to purchase a television (any television) through its website.

    Central route processing

    While both users will have some level of central route processing (especially for pricing), it is more likely that Suzanne, with her interest in technology, will be attentive to the messages and design. Assuming she agrees with what she sees, she’ll be more inclined to purchase through Amazon versus a less persuasive competitor.

    For Amazon, this is critical; its competitors include stores where potential customers can interact face to face with knowledgeable sales reps. So it has to make product information easy for users to access by including multiple options for searching and sorting, offering detailed product descriptions, and providing in-depth product reviews written by fellow shoppers.

    Image of Amazon search results
    Amazon search results can be sorted and filtered by numerous variables.

    Suzanne searches for high-end TVs, filters them from high to low ratings, and reads the reviews. After making her decision, she uses the “Buy now with 1-Click” option, since all of her information is already up to date in Amazon’s system; Amazon’s reliability and service over the years has earned her trust.

    Suzanne was not a hard sell for Amazon; this is due in part to years of persuasive factors that have shaped her buying habits. If central route processing has occurred in a positive direction, Suzanne is also likely to purchase from Amazon again in the future, while Amazon’s competitors will have a harder time persuading her to purchase from them.

    Peripheral route processing

    Amazon does not leave the casual user hanging when it comes to persuasive design. Many elements of its design are meant to appeal to peripheral route processing.

    First, look at its use of visual hierarchy. The product page’s focal point, a nice large photo of the product itself, is perfect for holding attention—no reading necessary to see that gem. It also offer options to view the product from multiple angles. The numerous filtering options allow potential customers to choose from a broad range of categories that can serve as a shortcut to selecting a product they have little interest in researching in-depth (e.g. price, rating, age of product).

    Screenshot of Amazon product page, showing product details
    Amazon provides a detailed product description, highlights potential savings, and makes adding to the cart obvious and simple.

    Let’s say that Kevin, our less motivated potential customer, is curious to see how much TV he can get for his money. After searching for televisions in the impossible-to-miss search bar on the homepage, he immediately sorts the results by price from low to high. Next, using the filters offered on the left of the screen, he selects to view only TVs with four stars or more. (Why spend time reading a review when you can see four shiny stars at a glance?)

    Kevin notices the percentage saved and the low-price guarantee that comes with his purchase. Additionally, free shipping is offered in bold type directly next to the price. Appealing to a user’s pocketbook is an excellent form of peripheral route persuasion. This penny-pincher won’t even have to pay for the convenience of having the product shipped to his front door.

    Utilizing visual hierarchy at its finest, the second most eye-catching element of this page is the blatantly obvious “Add to Cart” button. You can guess how the scenario unfolds from here.

    Notice that both routes lead to the same outcome—and that design elements are not exclusive to one route or the other. People often process information using some level of both routes—the routes can complement each other. For example, Suzanne would be more likely to process the information in the product description through the central route, but utilize the star-rating filter as a peripheral route shortcut to viewing TVs highly rated by likeminded shoppers. She was persuaded by elements from both routes. High-five to Amazon!

    Suzanne is more likely to maintain her positive attitude towards making purchases on Amazon.com, thanks to central route processing, whereas Kevin will need some convincing in the future not to go check out the big box store down the street (the free shipping should help!).

    Persuasion goes hand-in-hand with messaging and design, but there are also ways to do it wrong: distractions can undermine your persuasive techniques just as quickly as you can develop them. If your potential user encounters nine pop-ups, long loading time, or three pages of disclaimers to get to the meat of your message, they are never going to choose to taste it. Distractions, whether physical, visual, or intangible, can temporarily halt the whole elaboration process.

    Could you please elaborate on that?

    What promotes central route processing and high elaboration? Researchers have explored two main factors: motivation and ability.

    Motivation is often influenced by the relevance of a topic to an individual. A user who feels directly impacted by a topic is more likely to process a message through the central route. This explains why Facebook asks why a user blocked an ad; not everyone finds a free trial of Viagra compelling, but eventually Facebook intends to crack the code on what each user finds relevant. You can account for this in your own work with a strong message that shows your users why your product is relevant to their lives.

    Ability is exactly what you think it is. For central route processing to occur, your message must be in line with the thinking abilities of your audience. If an individual does not have the mental ability to process your message, they will not be able to critically evaluate it, and are guaranteed to process it through the peripheral route. Yes, if you want to effectively persuade someone, your message actually has to be conveyed in a way they understand. Shocking.

    In other words: if you want users to actually pay attention to your message, make it directly relevant and easy to understand.

    What does this mean for working on the web?

    How can you put the Elaboration Likelihood Model and other tenets of persuasion into practice? First, you need to account for the following elements to effectively persuade your users:

    • Message: what’s being said, marketing efforts, content, and copy
    • Design: visual hierarchy, navigation, and layout
    • Delivery: load time, user experience, rewards, and bells and whistles

    This all seems simple enough—provided you know a lot about your target audience and what motivates them. This is where it is best to sit down with a professional user researcher and develop a list of questions about what your audience values; what their fears, hopes, and dreams are; and what existing challenges you face in persuading them. A researcher can also conduct a brief review of past research on persuasion in your field, which will help back your current efforts.

    Then, take a closer look at your work. A lot of what we have discussed can be boiled down to clarity and simplicity:

    • Is your message clear?
    • Are you telling people exactly why your product/website is relevant to their lives (or could be) in an easily understood way?
    • Are you guiding people to the actions you want them to take? Does your design facilitate this?
    • Does your design incorporate elements of persuasion that will help potential users become users?

    Asking these questions of your work will help you be laser-sharp when it comes to persuading your users.

    Have I been persuasive?

    For some of your users, you may only need to provide a convincing message—that is, one that shows the relevancy of your work to their life and helps shape or reinforce a positive attitude. However, many will probably process your message through low levels of elaboration. They will need clear content, good design, and efficient delivery to bolster their receptiveness to your message or product.

    Being persuasive requires a conscious effort. Conducting user research, incorporating the tenets of good design, and understanding how persuasion works will help you appeal to more users through both central and peripheral processing routes.

    Designing for both paths of the Elaboration Likelihood Model isn’t just good in theory; it’s good in practice. This purposeful incorporation of persuasion will bring a new level of effectiveness to your craft, eventually enabling you to move your audience to process your messages through the central route—the sign of a truly persuasive design.

  • Ten Years Ago in ALA: Dynamic Text Replacement 

    Ten years ago this month, A List Apart published Stewart Rosenberger’s “Dynamic Text Replacement.” Stewart lamented text styling as a “dull headache of web design” with “only a handful of fonts that are universally available, and sophisticated graphical effects are next to impossible using only standard CSS and HTML.” To help ease these pains, Stewart presented a technique for styling typography by dynamically replacing text with an image.

    I began working on the web five years after Stewart’s article was published, right around the time when web fonts were gaining popularity. It was an exciting time, with a slew of new typefaces, foundries, and new techniques for styling text with CSS3 cropping up frequently. It seemed—for a moment—that we could finally “control” typography in a way that we never could before.

    I was recently looking at the state of default system fonts and realized that we’re never going to have as much control over typography as we want. But that’s ok.

    Instead, I’ve been seeing more nuanced discussions about typography, focused on striking a balance between having beautiful typography without taking a huge performance hit. I appreciate that as an industry we’re dedicated to creating the best experiences possible, regardless of device or connection speed.

    It’s easy to get carried away with web fonts, and slow our sites down significantly as a result. While we may no longer need to use dynamic image replacement, the deliberate approach Stewart advocated is worth revisiting:

    “Sticking with the traditional typefaces is smart for body text, but when it comes to our headings—short, attention-grabbing blocks of text—it would be nice to have some choice in the matter.”

    In another five years, we’ll have completely different techniques and a host of other considerations. If we are thoughtful and deliberate with our (type) decisions, we’ll be able to evolve much more easily.

  • Ask Dr. Web with Jeffrey Zeldman: The Doctor Is In 

    A note from the editors: Way back in the early days of web design—back before, even, A List Apart—there was Zeldman.com, where thousands of us spent hour after hour soaking up every bit of web design knowledge we could. Between 1995 and 1999, Jeffrey Zeldman himself even answered your questions—or at least, his alter ego Dr. Web did.

    The days where one column can cover “Everything You Ever Wanted To Know About HTML, CSS, Graphics, & Multimedia” are long gone (except on the Internet Archive), but Dr. Web is back. This time, our fearless leader is here to help you find your place and build a satisfying career in this big, weird, changing industry we call the web.

    Read on for Dr. Web’s advice, and don’t forget to submit a question of your own. 

    An Ask Dr. Web logo from the 1990s

    Dear Dr. Web,

    I’m a print designer trying to transition into the web world, but the resources out there seem to be endless. It’s overwhelming trying to figure out where to start. Do you have any suggestions for what to read, who to listen to, or how to otherwise take careful sips from the firehose?

    Just Getting Started

    Dear Just,

    Funny you should ask. Four score and 13 years ago, I wrote a book for designers transitioning to the web. That book is now available free of charge, and while some of the sites it references are no longer with us, and more than a few of its browser references and front-end techniques are amusingly dated, the basic premises are as true today as they were in 2001. Enjoy Taking Your Talent To The Web, Dale Cruse’s HTML rendition of the book, or download the PDF version, containing the original layout, typography, and artwork. (Thanks to New Riders, my original publishers, for believing in the book, and for allowing me to give it away online after its best-used-by date expired.)

    If you are willing to learn HTML and CSS—and, at least until Macaw is in its 5.0 version, every web designer should learn those things, at least well enough to understand the principles behind them—read Designing With Web Standards followed by Bulletproof Web Design and HTML5 for Web Designers.

    Then dive into Aaron Gustafson’s modern classic, Adaptive Web Design: Crafting Rich Experiences with Progressive Enhancement. Though compact and approachable, it is jam-packed with the collective wisdom of literally thousands of modern web designers, developers, and consultants, all filtered through Aaron’s expertise, practicality, and friendly style. Nobody has ever done a better job of explaining progressive enhancement and why it is the basis of universal web design.

    Of course, web designers do not live by code alone. So next, or simultaneously, I recommend getting your mitts on Steve Krug’s classic, Don’t Make Me Think, which is the quickest and friendliest way I know for a print designer to grasp all those things about usability and interaction design that you’d never, ever pick up in a traditional graphic design curriculum or career. In print for 13 years, it’s been translated into 20 languages and sold over 400,000 copies—and now it’s available in a fully revised edition.

    As a print designer, you’re familiar with type—and on the web, interfaces consisting almost entirely of type are used to present content consisting almost entirely of type. Bone up on what type means for the screen with Ellen Lupton’s newly released Type on Screen, and Jason Santa Maria’s upcoming On Web Typography.

    While you’re reading these books, you should also be visiting websites, viewing source, selecting all, and copying into a text editor. The more you study other people’s HTML markup and CSS, the better you will begin to understand how to structure web content so people and search engines can find it, and browsers and devices can display it. Short of working as part of a front-end development team with experienced colleagues, viewing source is the best front-end web development education you can have. (“Front-end” is what we call it to distinguish from the heavier kinds of coding that go into the “back-end” of most sites today.)

    Of course, it helps if the sites whose source code you’re viewing are well-made. Besides viewing source on A List Apart (cough), you’ll find fine source code on Chris Coyier’s CSS Tricks. (You’ll also learn a lot about CSS, the visual language of web design.) You’ll learn loads more about CSS, and get more great source code to boot, in the articles section of Sara Soueidan’s website.

    Other great resources—for education, inspiration, great source code, and just plain good reading—include:

    This is barely a distracted start; readers, please list your favorite sites in the comments section.

    Don’t study or work in isolation. If you’re freelancing or working remotely, Twitter can be your best friend (or can help you find your new best friends). After a week of working at home, make time for a meetup in your hometown, and if your city offers free or inexpensive design, development, or user experience (UX) events, take advantage of those offerings and get out there. This is a warm community full of passionate practitioners who love to share tips and make connections.

    Lastly and perhaps most importantly, take the time to become deeply familiar with a few websites that you love and use all the time. Analyze what design decisions and special touches (whether of interactivity, or visual hierarchy, or copy, or whatever) make the experience of using the site so special. Likewise, when you encounter an unpleasant-to-use site (online banking, anyone?), instead of fleeing in frustration, force yourself to spend extra time on that site, to discover which particular interaction design decisions are responsible for your bad experience. And then never, ever make decisions like that on the sites you design.

    Design on the web is a combination of aesthetics and usability, control and surrender, constraint and endless creativity. Designing books is wonderful, but designing for the web is a whole ’nother thing. Welcome, friend!

    Have a question about professional development, industry culture, or the state of the web? This is your chance to pick Jeffrey Zeldman’s brain. Send your question to Dr. Web via Twitter (#askdrweb), Facebook, or email.

  • Rachel Andrew on the Business of Web Dev: Lessons Learned by Being the Client 

    I ran a web development consultancy from mid-2001 through to early 2013. By 2006, the company I had started alone was busy enough for my husband, Drew McLellan, to join the business full time. The vast majority of our work was as an outsourced team, developing projects for design agencies. But now, in 2014, we find ourselves on the other side of the client/developer relationship.

    We launched our first product, Perch, as a side project of that business. It’s now the whole of what we do, yet we have managed to remain a team of two by making use of freelancers and other agencies. At first we only outsourced design, but increasingly we are also using outside help for development.

    Here are some of the things I have learned by being the client.

    Give regular progress updates

    I always felt we were good at communicating with our clients. We asked questions and updated the staging version of the project regularly. And so, when clients would ask for an update, I would feel irritated and pestered. We felt as if we were constantly communicating with them and we were rarely late delivering something, so I assumed that the client would understand that if we didn’t mention there was a problem, everything was running on time.

    As the client, I now know that even if I can see code being committed and the developer is talking to us, I don’t always get a sense of whether they are on track or not. I’ve seen how other business milestones may depend on the completion of an outsourced project. For example, you might buy advertising to go live at the same time that a planned feature launches. If the ad buy has to be booked in advance, but the project runs late, that advertising spend will have been wasted. Due to the stress of the unknown and fear of losing out financially, it is easy to end up being that client who seems to be constantly asking if the work is completed.

    Of course when you are providing a service it is important that you do what you say you will do, in the time you said it could be done in. However, in addition to that basic requirement, building in regular status updates helps your client to plan things that rely on the work you are doing to be completed. It stops the constant is-it-done-yet? type emails and phone calls.

    Explain what to review

    We often used to grumble that clients never looked over or tested any of the work we had done, although we deployed work to staging servers and made it available for review as often as possible. Looking back, I think we made an assumption that not only would the client have the time to immediately look at everything we had deployed, but would understand for themselves the progress.

    We’re working with a developer currently who uses Trello not just to organize tasks but as a way for us, his client, to see what he is working on and where he is at. I can take a look at Trello at any point and see that a certain feature is being worked on, or has been moved to done. I can then go take a look on the staging version and I know what I’m looking for.

    Even if your client is able to see your commits or updates to a system, give them a way to know which bits they should be looking at at any one time. This will save your client wasting their time pointing out things that you haven’t addressed yet, and also help them feel part of your progress.

    In addition to gaining a new insight into what really makes for great client and developer communication, I’ve discovered other ways in which freelancers can really contribute to the businesses they do work for.

    Make costs foreseeable

    As a business owner with a product, there are many things that I would love to find help with. But hiring a consultant at an hourly rate when I don’t fully understand the scope of the task at hand is a bit scary. What if it costs far more than I imagined, or what if what I really need is ongoing support?

    If you can make your consultancy services more product-like in terms of how you market them, you can make life a lot simpler for business owners who aren’t sure what work needs doing and whether it is in their budget. This approach has been termed “productized consulting” and involves packaging up services that typically would be completed on an hourly rate into fixed-price—one-off or monthly—purchases.

    For examples of how some companies have turned their freelance services into products, see Brennan Dunn’s post 3 Great Examples of Productized Consulting Services.

    Put business aims before perfection

    Possibly the biggest thing I have learned from being the client is that often “good enough” is enough. As a developer, I wanted the time to do a really amazing job, yet often felt that we were being asked to cut corners and to not develop the perfect solution we knew we could come up with. As the client, though, I know I have to make the decision to ship. I need to be the person who says, this will do for now.

    I’d still love everything to be perfect. Sometimes, however, it is more important to get something out there, even if that means accepting slightly rough edges. As an example, we recently rebuilt the internal system that allows people to pay for our product and be issued with a license. We moved away from a legacy PSP to Stripe and made other changes that are going to enable things we have planned for the future. We shipped this with the most rudimentary reporting dashboard, and with a number of tasks that could be automated via various APIs not yet finished. For the business and our customers, the important thing was the parts they interact with; the rough edges were only a problem to us, and we can tidy up as we go along.

    To be able to work in this way with freelancers requires a change in mindset and in approach to defining and quoting for jobs. One of the reasons we hated feeling that we were shipping things with rough edges was because we were often contracted just to build a particular product. Our job ended when the project launched; we knew that whatever state the project launched in would often be the state in which it stayed. Now that we hire developers, we try to find people who are interested in an ongoing relationship. We hope this relationship helps them feel confident that when we say we need to ship something they have worked on, it’s not the end of their work on it.

    If I were writing code for other people now, I think I would foster these types of relationships far more than we did then. Instead of railing against the client who wanted to ship something I felt was not ready, I would try to help them to get to a shipping point that didn’t also mean we hand over the work.

    Invoicing: the relationship killer

    Many of the issues outlined above were exacerbated by the agency model of building, shipping, and invoicing for projects. Since our final invoice couldn’t be sent in until the work was complete, clients often saw that invoice as a way to hold us over a barrel until some element (that perhaps wasn’t initially quoted for) was done. It’s a pretty toxic way to work if you want to create great ongoing relationships.

    Many of our freelancers now bill weekly or every two weeks when they are working on things for us. I really like that as a model. If the scope creeps and the work takes longer, we simply pay for more days of work—potentially with a delay if our contractor has booked some other work in—but the entire job doesn’t need renegotiating. There are no awkward discussions about whether they are allowed to submit an invoice.

    There is a huge imbalance in many client/developer relationships. The client often wields power in the shape of owing the developer money that won’t be paid until hoops have been jumped through. The developer may be privy to, and often may be the only person who fully understands, a large part of the client’s business. The developer can feel as if their work is not being valued, while the client feels that the developer is spending far too much time on unimportant things.

    Of course there are people who will treat developers badly no matter how hard they work and how well they communicate. However, I think that many relationships become strained because of the lack of balance created by the agency billing model.

    Better together

    Ultimately the best client/developer relationships should be mutually beneficial; two businesses working together for the benefit of both, understanding each others’ communication needs and business aims. It sounds like perfect sense, and it is—but it’s only by being the client that I have really come to appreciate that.

  • Apple and Responsive Design 

    Apple has always had a funny relationship with responsive design. They’ve only sparingly used media queries to make minor visual tweaks on important pages, like their current homepage.

    Though a “handcrafted for all devices” approach seems like the “Apple way,” it’s almost as if they’ve avoided it because of the iPhone’s original pitch—giving users the ability to pinch and zoom their way through the “full” web, as opposed to being shuttled off to the mobile web.

    Apple could afford that stubbornness when the only thing running iOS was the 3.5-inch iPhone. Over the past few years, though, they’ve introduced the 10-inch iPad, the 4-inch iPhone, the 7-inch iPad mini, and reports point to an even larger iPhone coming this fall.

    The approach that Apple and their community of developers have taken to build apps for these new device sizes closely resembles the way we did it for the web over the last decade or so: adaptive first, then slowly building to responsive.

    When the iPad was first announced, developers built separate View Controllers for iPhones and iPads—on the web, that’d be like building separate pages for each. Layouts, styles, and interactions were built to target each device specifically. This was an adaptive way of thinking, and it worked because of the limited number of targets.

    With iOS 6, and the subsequent release of the taller iPhone 5, Apple introduced something called Auto Layout—a relationship-based layout engine. Unlike the iPad, which required a separate build, apps for the taller iPhone were the same build with layout adjustments applied. Auto Layout was Apple’s first true foray into responsive design within native applications since, much like the web, different layout rules were applied to the same base code.

    Last week, Apple introduced iOS 8, and with it, something they’re calling Adaptive UI. The main feature of Adaptive UI is the ability to specify layout rules based on Size Classes, which are really just breakpoints set by Apple.

    Developers can now use a single View Controller (or page, in our world) with various layout rules applied across Size Classes (or breakpoints) to accommodate devices of all sizes. While there are only two Size Classes right now, compact and regular, Apple has left a lot of room to add more, or to even let developers set breakpoints themselves in the future.

    It may be adaptive in name, and hard-coded breakpoints may seem like adaptive thinking, but the groundwork has been laid for responsive design within native iOS applications. It’s been interesting to watch Apple’s path from static, to adaptive, to responsive, and it’ll be even more interesting to watch third-party developers take advantage of the workflow benefits of responsive design that we’ve become accustomed to.

    Apple has finally come around on responsive design, and to top all that off, there was even a session about it last week at WWDC. I wouldn’t be surprised if, in the next year, we finally see the responsive redesign of apple.com that we’ve been waiting for all these years.

  • Testing Responsive Images 

    At long last, the native picture element isn’t just coming: it’s here. The picture element has landed in Canary—Google’s “beta” channel for upcoming Chrome releases—and we can try it out for ourselves right now. Firefox isn’t far behind, and WebKit work is officially underway.

    We got the picture element this far, and now that we’re in the final stages we have another opportunity to help things along: testing and filing bugs. Yoav Weiss is hard at work, testing and patching as much as possible before this ships in Chrome stable—but the more eyes we have on this, the better.

    Ready to get started?

    1. Download Chrome Canary
    2. Copy and paste the following into Canary’s address bar: chrome://flags/#enable-experimental-web-platform-features
    3. Click “enable”

    The page at chrome://flags allows you to tinker with the browser’s internals a bit, enabling and disabling features that might not quite be ready for prime time: the picture element is, for now, behind the “experimental web platform features” option—including sizes and srcset. Don’t worry: changing this option in Canary won’t have any effect on your regular Chrome app.

    Kicking the tires

    And now—finally—we can try out the native picture element for ourselves. The Picturefill demos are a great place to get started, since Picturefill only takes over in the event that the element isn’t natively supported. One thing to note is that this early version of picture doesn’t re-evaluate when the viewport resizes—at least until the next major patch lands—so you’ll need to reload the page to see things change, for now.

    Experiment with the new markup for yourself, either by forking the Picturefill repo and making changes to the existing demos, or by writing your own from scratch. If something seems wrong, file an issue on Yoav’s fork of the Google Blink code, or join us in the RICG IRC channel to discuss what you’re seeing—or just to share your test cases with us, so we can test the Firefox and Safari implementations against them when the time comes.

    We couldn’t have made it this far without the hard work of the design and development community—and the more testing we do now, the better responsive images will be for it.


  • Living up to Your (Business) Ideals 

    I believe that most people are good. Most people really want to live up to their ideals. So why do companies fall short on living up to their missions, credos, mantras, or ideals?

    For example, why does a company that says it supports local businesses jump at the chance to work with Walmart just to get a “big name” client on its roster? I have started to believe it is because they haven’t taken the time to clearly articulate company values and, more importantly, establish routines and practices that intentionally frame their decisions to factor in their values.

    At our design firm, P’unk Ave, we decided to change that by developing a model for evaluating potential clients, giving us a practical, standardized way to make decisions that stay truer to our values. While it may seem like being picky about who we work with is bad for business, we’ve found the opposite to be true: the more we’ve stuck to our ideals, the stronger our business has become. In this article, I’ll show you how it worked for us—with the hope you can learn from it and do the same for your business.

    Establishing your values

    You can’t live up to your ideals until you have a clear grasp of them. If you have been in business for some time, you might be surprised to realize that they already exist and are just waiting for you to be more intentional about identifying and writing them down.

    Set a timer

    My partner and I began our process with some borrowed time on a layover heading back from a conference. We took out our journals, set a timer for 10 minutes, and began writing down our core values. The ideas took form quickly because they had already been part of our DNA. This allowed us to make a rough list of values that resonated with decisions we had made in the past—values like “innovation,” “trust,” and “responsibility.” We’ve since refined these somewhat general ideas using an exploratory process that includes all members of the team, but setting a timer during this early phase forced us not to overthink things, and helped us to get started with ideas that came more from the gut than from the brain.

    Take inventory

    Then we did a whiteboard audit of our current and past clients to look for trends and to test how our values applied (or not). We paid particular attention to those clients we were most excited about. Through this process we identified a pattern of partnerships with people who work to strengthen our cities (urban planning, local food, bicycle advocacy, waterfront improvement), create knowledge (universities, education initiatives), improve people’s health (advocacy, research), and enhance our quality of life through arts and culture (museums, photography collectives, arts organizations).

    Get outside perspective

    We followed this up with a workshop led by a friend, which allowed us to further explore our values, strengths, and goals. This led us to create a series of active phrases about our work, including we are part of a community and we dream. These phrases now form the basis of the P’unk Guide, which includes our shared values and principles to run the business we all want to work in. As part of our ongoing reflection, we have also evolved the guide to include “guiding metaphors.” One of those metaphors is based on the notion of sailing upwind: “The shortest distance is not always the quickest.”

    Building a framework

    Becoming more aware of our values helped us make more intentional choices with prospective projects, but it didn’t necessarily provide us with a framework for quickly evaluating potential projects and relationships. That came when we read the book Drive, by Daniel Pink.

    In Drive, Pink talks about the principles of autonomy, mastery, and purpose as powerful motivational elements for modern workers. For Pink, jobs that require deep thinking and applied analytical skills are not easily simplified to an assembly line process, and measuring productivity within a certain time limit isn’t an effective way to track their success. Rather, people who have the freedom to work in the way they see fit (autonomy), who are constantly honing their skills (mastery), and who understand the intention of their work (purpose) perform best in these positions.

    There was no turning back. We used Pink’s principles as a starting point to create our own framework for evaluating potential relationships with partners and clients: the AMP scoring system. Evaluating projects through our new lens of autonomy, mastery, and purpose helped us ask whether or not that relationship would motivate us to do good work and help us live up to our ideals of trust, innovation, and impact.

    The AMP score

    In considering a new project, we take the time to get to know the client, with the goal of determining whether we will we be truly pumped (or “AMPed”) if the project is a success—not because the project is done, but because of the impact it has on something we care about. Then we score it, using a series of questions in each of the three categories. Each category then gets a score from 1 to 5, and we total up the results at the end.


    • Will this client respect us?
    • Will they seek our counsel?
    • Will they give us the space to bring our experience and knowledge to impact the project positively?
    • Do they trust us?
    • Basically, will they let us do what we do best in service to their project?

    It is always a good sign when a potential client is genuinely interested in understanding how you work. If they take the time to ask you about how and why you make decisions, they’re telling you that they respect your experience, and are seeking a partnership that is productive and valuable. It is an especially good sign—usually a 4 or 5 on the AMP scale—if they listen carefully and ask thoughtful follow-up questions, since it indicates that they are genuinely interested in working towards a relationship built on understanding and trust.


    • Is there space to practice our skills and grow as craftspeople?
    • Is there time to do the project well?
    • Does the client value a job done well?

    For example, if a client emphasizes how simple a project is by saying something like, “All we need is to code this page. It is simple. How long will that take? A week?” or “Do we have to do the research? Couldn’t we just copy the design of this website?” then they may not respect the work we do—especially if this perspective persists after we explain the value of a thoughtful and measured approach. In this scenario, we would rate the mastery score a 1 or 2, since they seem more interested in rushing than in allowing us the time to do thoughtful and considered work.


    • Do we understand the purpose of their project?
    • Equally important, do they understand the purpose of their project?
    • What kind of impact will this project make?
    • Do we feel aligned with that impact?

    For example, sometimes a webmaster at a larger organization contacts us, but is only interested in technology. This is common when an organization puts the management of their website solely in the hands of their technical or IT team, instead of seeing it as a communication tool for the entire organization. When this happens, we try to bring leadership into the process and educate them before signing an agreement—but if that cannot be done, the project would score low on the purpose scale. It is particularly difficult to walk away from an organization that is doing work we find interesting and aligns well with our values, but we have learned that when leadership isn’t involved, the project is not likely to be a success.

    What does all this actually look like? Practically speaking, we post a message with details about all potential projects in Basecamp, and each member of the team has the opportunity to respond with their thoughts and personal AMP score for the project. Once everyone has weighed in, we compare scores, looking for a total of 12 or higher. We will consider lower scores, but not below 10.

    This system creates a paradigm where we are asking ourselves if there is a compelling reason we should work with a client, rather than just looking for a reason not to work with them. That distinction may seem subtle, but it has powerful implications, supporting a proactive versus reactive culture.

    Intentional projects are successful projects

    This may seem one-sided and only to our benefit, and maybe an unsustainable business practice. However, being thoughtful and intentional in this way has turned out to be a great thing for our clients as well. Once we commit to a project, we are truly committed. We even share how this benefits them in our project proposals:

    Most projects will hit bumps in the road that will require persistence and dedication to see it to a successful completion. With that in mind, our philosophy is to only work on projects where there is a strong alignment of values. We truly care and you can see the difference in that approach.

    They get that. It resonates with them because anyone that has some business experience knows that unanticipated problems will inevitably rear their head at some point. Because we took the time to evaluate the project using the AMP score, we’ve already decided that we are committed to the success of the project, and any bumps in the road will be tackled with gusto and passion. This knowledge gives our clients greater confidence in working with us.

    What’s good for the goose…

    As a consultancy, much of our “everyday” revolves around clients and projects. This is the lifeblood of our company and sets the tone for our interactions. If we are not in sync with our clients, our lives can turn miserable pretty quickly.

    We always cared about our work and had good relationships with our clients before, but intentionally pursuing projects that align with our business values has brought a higher level of investment and internal motivation from all members of our team. We have become true partners in the success of our clients’ projects.

    A lucrative project that doesn’t align well with your values is like the siren’s call to start your day with a sugary doughnut. Of course, getting sidetracked is easy. Using a framework to evaluate potential business has become a way to stay on course—a way to make healthier choices.

    When we made compromises in the past, it never resulted in great work and often had other unintended consequences, like burning out our team. The attitudes you develop working on a project you don’t care about can carry over into all of your work. Our framework has helped us stick to our guns and not work on even a single project where we don’t see an alignment of values.

    Ideals are good for business, too

    The AMP system has had a positive ripple effect throughout our company. Everyone knows that we make decisions based on our shared and agreed upon values. We have chosen not to pursue work that does not garner a high AMP score, and we have even stopped working with clients when they turn out not to allow us to live up to our ideals. In the short term, we may have turned down some potential business, but in the long term we have increased our revenue while working with clients we respect. That growth comes from our participatory culture, where everyone is invested in and focused on their projects—leading to happier clients and a lot more word-of-mouth referrals and opportunities.

    This is not something that can happen overnight. If you want to live up to your business ideals, you have to take the time to authentically identify your values, the things you care about. You also have to commit to the ongoing tending and cultivation of those values in your organization. It is not a “set it and forget it” scenario. At P’unk Ave, we think about this regularly, and especially during our quarterly “State of P’unk” and twice-yearly retreats. Building in those rituals, as well as creating tools like the AMP score, helps us stay on track in creating the kind of company we want for ourselves.

    But the commitment is worth it. Once you have a framework for evaluating the kinds of people you want to work with, you have power: the power to say “no”—and the power to do the work you know matters.

  • Prototyping Your Workflow 

    Last year the digital agency I work for, Bluecadet, started a website redesign project for The Franklin Institute—a renowned Philadelphia science museum undergoing the largest expansion in its history. My colleagues and I were excited because not only were we getting to work with an iconic local institution, but the project represented an opportunity to incorporate a number of techniques into our responsive web design practice: atomic design, HTML wireframes, style tiles, element collages, and front-end style guides. We envisioned a series of quick prototypes that lent momentum to a harmonious back-and-forth between design and development. We felt like this was an opportunity to overhaul the way we created for the web, from start to finish.

    And then we got stuck.

    We couldn’t figure out where we would fit all of these new techniques into our preferred way of working. I don’t think we’re alone in this. The way we create for the web is changing so rapidly that if you’ve attended enough conferences or read enough books and blogs these last couple of years, you may feel like we did: excited but a little overwhelmed, and worried that your organization is the only one that hasn’t yet adopted the expert-approved way to create for a device-agnostic web.

    There’s a seductive danger present whenever you see someone else outline their way of working, however. It’s easy to take their process as a rigid, universal truth. The trouble is, you and your team aren’t like everyone else—you have different strengths and weaknesses. Borrowing someone else’s process wholesale ignores the fact that it probably took them lots of fumbling to get to that point, and it’s going to take plenty of experimentation on your team’s part to figure out what works for you.

    So perhaps the solution isn’t to transplant someone else’s guidelines in an attempt to fix the entire thing all in one shot. Maybe there’s a way to take the same iterative spirit of these new techniques and apply it to the overall workflow itself. To prototype your workflow, in other words. In some ways, it’s a mental trick—a way of giving yourselves permission to try things, even if you’re unsure of the outcome. It also lowers the stakes to a comfortable level: if we mess this up, we’re still okay.

    What follows, then, isn’t a tidy recipe or a formula. It’s a collection of observations I hope will help you re-cast workflow change as an ongoing process of small, imperfect steps.

    Technique is easy, talking is hard

    It’s easy to get fixated on the benefits of specific tools and techniques, and to assume that those benefits are self-evident to everyone. But over the course of the past year, it’s dawned on us that meeting the demands of our multi-device web is less a problem of technique, and more one of communication. Sometimes people just need to understand why you want them to change how they work.

    Prior to the Franklin Institute project, my colleagues and I had been pooling all of these new techniques, but we instinctively focused on pieces that affected our part of the process. Designers and developers were talking and dreaming—but largely within the echo chamber of their respective disciplines. So when it came time to kick off the project, we had to have some hard conversations about how new techniques would work for us as an entire team, and sometimes we were downright skeptical of each other’s suggestions. On more than one occasion we asked each other: “That’s great, and it works for that agency, but how would that work here?”

    You will probably need to make your case differently for each person on your team, then. If you’re a designer, it could mean explaining to your developer teammate that you would like to start breaking things into a design system so that you don’t have to do 20 different iterations of the same page layout. For developers, you might have to convince your boss that a style prototype will be the best way to present a site to your client.

    Whatever the rationale, realize that change represents a very real cost (at least in the short term) to your teammates’ time and comfort, and their skepticism may be their reaction to that cost, rather than to the less-immediate benefits you say will follow. Focusing on the why instead of how can help balance those two competing forces.

    Limit your focus

    As of this writing, Bluecadet has 22 full-time staff members. That’s just big enough to make it hard to work on intricate, shifting process details at a company-wide level. So we’re starting small, at the project level, instead of trying to craft a monolithic process that gets handed down from above.

    Look at the projects you have on the horizon. Think about the portions of your workflow that you want to improve, and pick just one of those things to introduce into your project. Why just one? It allows you enough space to experiment without endangering your project.

    A mentor of mine once told me that programming (and especially programming for the web) boils down to reducing the number of “unknowns” on a project to a manageable number. One is fine, two is a stretch, and three is asking for trouble. If you think exploring HTML/CSS wireframes could have a positive impact on your work, introduce just that one thing. Most projects have enough built-in friction without adding or changing multiple processes at the same time.

    For the Franklin Institute project, we ended up deciding that the added wrinkle would be a front-end style guide. It wasn’t the biggest thing, but it was one small step that we thought could have a big benefit without affecting our schedule.

    We made this decision based on two factors—factors that might be helpful as your team thinks about what that “one thing” could be:

    • A good idea that didn’t quite work in the past: we had created a static style guide for a previous project that had quickly become outdated and was ultimately discarded. But we still thought the idea had merit. So when you gather as a team, think about past good ideas that might have stalled, and whether they could work if you approached them differently.
    • (A little) experience mixed with (a lot of) enthusiasm: a new front-end developer joined our team, and he had already been experimenting with different style-guide generators like Barebones and Pattern Lab. More importantly, he was excited about building one. Does someone have something they’ve been testing on a personal project, or that they’ve used successfully at a previous job? If so, you’re already halfway there—you might just need to figure out how to make space for it.

    Align your tools and techniques with your team

    One of the recurring discussions we have at our studio is: “Should our designers learn markup and start doing some of this design in the browser?” We’ve heard a lot of persuasive arguments for it, but in the end, we decided that the main focus should be how to get our designs into the browser earlier in the process, instead of who should be doing that work.

    This led us to try pairing designers and developers early on in a project, and having the developer create markup that “waterskis” behind the designer’s sketches and Photoshop explorations. We’ve found that doing it this way takes advantage of our team’s individual strengths. It also means that our developers are providing feedback that makes it into design iterations while they are still malleable.

    We’re currently in the middle of a redesign project for a literary magazine, and we’ve found that the rough HTML/CSS mockups created by our developer helped us pose the right questions to our team’s designer. Giving our designer a specific problem to solve (“These titles take up too much space at narrow widths”) allowed her to judge the problem in the context of the entire design. She could then explain what she was trying to accomplish visually, and even find solutions that extended beyond the immediate issue we were trying to solve. She’d look at the screen while we squished the browser back and forth, and then say something like, “If you move the titles below the photos this whole problem goes away.” Stepping away from dogmatic ideas of who should be doing what allowed her to focus on doing what she did best, which was solving visual problems.

    Distinguish between internal and external needs

    When you start moving things around, you may start producing deliverables that are important, but only for an internal audience. That might be because they’re of limited use to the client, or they simply may not be mature enough. Managing expectations is as important as trying a new technique, so if the client is going to see something new, you’ll have to invest time preparing them for what they will receive—especially if it’s not how they’re used to working.

    For a current project we are producing HTML/CSS wireframes to get an idea of how long they actually take to make. Since we don’t know (yet), the first rounds of client deliverables are still going to be static wireframes done in Photoshop. If we feel like the HTML/CSS prototypes are mature enough, we will introduce them to the client in the final round.

    As you work, then, give yourself enough room to adjust: what if it takes twice as long to produce that wireframe? What if the client is resistant to parallel wireframe and design conversations? What if the thing you’ve produced has value, but only if accompanied by other deliverables?

    Focus on products, not presentations

    One of the things we’ve had to do was clarify the ultimate goal. This seems obvious: “We’re making a website.” But if your process is anything like ours, you actually spend a lot of time making anything but a website. Mostly you make pictures of a website.

    Recently, while working on a beta build of a website, we found out that the majority of our client’s team members were using older versions of Internet Explorer and Firefox. Those people were surprised to see something that differed from the comps they’d been presented earlier in the process.

    That experience taught us a lot. Setting client expectations is one way to avoid those surprises, but we’re also slowly agreeing as a team: the browser is the final arbiter of what we do, so let’s stop shoving it to the end of the line. The components of our process need to support the final product at every step of the way.

    Put your process prototype on the agenda

    It’s easy to nod and agree on something: “We’re going to do this!” But when you get immersed in detail work, it’s just as easy to forget that one new thing you all agreed to put in the mix. So task someone with making sure that you revisit your process prototype repeatedly. This might mean you start meeting more frequently. We’ve found it helpful to have official meetings, but our hope is that eventually we start doing this in a less-structured way, choosing to meet informally when we feel the need to discuss something.

    If you’re working on a project-based team, remember to share what you’re doing with other groups. For example, on a recent project, we implemented modular content blocks that could be reordered as needed, inspired by a post by Christopher Butler of Newfangled. We then showed what we were doing to a colleague, and she integrated some of what we learned into her next project. She also had some incisive questions for us that helped us improve the content-authoring experience for our client.

    By sharing with others, everyone wins: your colleagues will pick up your new skills, and you’ll be forced to clarify your goals and assumptions.

    Iterate your workflow (play the long game)

    When you’re reworking your process, it’s good to keep a running log of the things (both good and bad) that you encounter with each new change you introduce:

    • Did something take more (or less) time than you expected?
    • Were there people who were negatively affected by the change?
    • How did the client react? If you’ve worked with them before, were they receptive to change?

    By breaking things into focused pieces, you’ll be able to evaluate how effective they were. You can keep the stuff that worked, and refine (or throw away) what didn’t. Having a forum to share those pieces is important, too—at Bluecadet, we’ve made sharing lessons from completed projects with one another a regular part of our monthly all-staff meeting.

    Over the course of three separate projects, we’ve now field-tested:

    • Atomic/modular content and layout
    • Front-end style guides
    • HTML/CSS wireframes

    Here’s the thing: each of those things that we tried? We’ll probably do them just a little bit differently the second time around, because of all the data we gathered from the first go-round. If we had sat around until we were sure about The New Way of Doing Things, well, we’d still be sitting around today.

    One of the things I’m most proud of is that by working piece-by-piece, we’ve pushed our workflow forward while being honest with our clients. One of our internal guidelines is that our clients shouldn’t be bankrolling our workflow remodeling project—our fine-tuning should result in tangible internal benefits for us, but, more importantly, a better product for our clients.

    Try something new, now

    As I finish writing this, we’re trying out yet another thing that we hope to add to that list: HTML/CSS prototypes as a design deliverable. Maybe they will replace static comps, or simply accompany them—we don’t know yet. But it’s okay that we don’t know. By the fall, we’ll probably be building things far differently than we are right now, informed by the experimentation we’re doing piece-by-piece along the way.

    I hope that this encourages you and your team to take some small steps, too. Get together and talk about the parts of your workflow that can be improved, pick one thing to try together, and figure out where you can make space for it. Like us, you’ll probably never be able to draw a line on the calendar and say, “That’s when we started doing things the right way.” But you’ll find yourself much further along—one thing at a time.


  • On Styled Form Elements 

    For almost 20 years, we’ve had the same input types and form elements we still use today: text fields and areas, password fields, select dropdowns, radio buttons, checkboxes, file fields, hidden fields, and the menagerie of button types including submit, reset, image, and plain old button.

    All of these input types brought with them some styles and functions from both the operating system and browser in use. Much to our own chagrin, we (mostly) figured out how to fight that to achieve custom styles for basic and advanced elements.

    Custom styling usually meant background images, pseudo-classes, weird vendor prefixes, and selectively hiding certain elements. I’m not going to get into the accessibility concerns of styling inputs with those tactics (this post can only be so long), but the complexity of input types and their implementation amplified cross-browser and platform issues. Each possible combination of browser and operating system brings its own styles and functions, some of which are hard to control, and all of which are inconsistent.

    Even with that amount of stylistic complexity, the interactions of these early input types were pretty simple—click this, type into that box, check the other thing. Simplistic interaction allowed us to get a little crazy with custom styles without hurting the experience. Only the select dropdown, with its list of options, had a more advanced interaction.

    As the web moved forward, though, we grew hungry for better interfaces. We built JavaScript-driven components on top of these basic input fields to achieve better experiences, and that worked fine for a while, up until everything changed when the modern mobile environment exploded in 2007.

    The changing environment led to changing interactions—our adorable little calendar-like date picker was an absolute nightmare to use on a 3.5-inch touchscreen, and even dropdowns needed to be rethought.

    The iPhone’s native drop-down control was a full-screen wheel-type interface, which was a much more natural interaction at its size. It’s not the perfect interface, especially when the number of options exceeds ten or so (don’t get me started on a listing of countries), but it was a big improvement over fiddling with a tiny, in-page drop-down list.

    The Various Dropdown Interfaces of Apple Devices

    Android’s drop-down interface was similar, but ever so slightly different—a modal listing of options which closes on selection.

    Android’s Native Dropdown Interface

    There was a native date picker in iOS—a three-segment drop-down interface, which was much better to use than its calendar-based predecessor.

    The iOS Date picker

    Standard select elements were well-supported on these new devices, but we didn’t have a way to leverage other built-in, native components, like the iOS date picker, on the web. Luckily, HTML5 came along and brought us some fantastic new input types. Types like date and range set the stage for browsers and operating systems to begin handling more and more complex interactions. Apple quickly introduced support for date in iOS 5, and gave us the ability to expose the native iOS date picker in the browser.

    As support for these new input types grows, we can begin implementing them today with fallbacks when appropriate (or at least helpful hints, since unsupported input types become text fields). Dropdowns and date pickers are just a sampling of the things that are better handled by systems themselves—a device will always be able to make better decisions about its use than the device-agnostic web.

    The simplistic interactions of early input types gave us room to experiment, but the more complex interactions of modern fields leave little room for that. There’s only so much we can control before the browser and operating system take over, and then we’re at their whim. The web isn’t stopping any time soon—we’re headed for more complex input types with even less control exposed.

    That makes me wonder how much longer we’ll be fighting to style these elements. It’s time we stop breaking and faking input types and accept the ebb and flow of things.

  • We Have Work to Do: #yesallwomen and the Web 

    Last week, I plucked an article from our submission inbox. It was about getting stuck in the “friendzone,” and likened women not wanting to date men to both the Holocaust and terrorism.

    It was obviously ridiculous—a terrible article terribly suited to our magazine. I told the author it was sexist, made a joke about it on the ALA Slack channel, and moved on with my life.

    We’re A List Apart, after all. We published “Responsive Web Design.” “The Discipline of Content Strategy.” “A Dao of Web Design.” We’re here to help you make better websites and digital products, not get bent out of shape about every stupid example of sexism we see.

    And yet. Someone thought that was right for us.

    I woke up Saturday morning to news of tragedy, and watched as that tragedy turned into #yesallwomen, a Twitter conversation about sexism and violence against women so large, so powerful, that most of the women I know contributed to it.

    The women I know, by and large, work in tech. They’re your designer, your developer, your content strategist, your user researcher. They’re our authors. And more often than any of us wants to believe, they’re getting groped at tech meetups. They’re receiving death and rape threats for speaking at a conference. Their bodies are being made the targets of office jokes.

    They’re being talked down to, fired, catcalled, harassed, abused, and raped—and blamed for it, too.

    But of course, that’s not our subject matter. A List Apart is about publishing the Next Big Thing in design. It’s about shaping standards. It’s about the business of building websites.

    And yet. When I look at those articles that most influenced my career (and probably many of yours), I see our mission, clear as day: to encourage a more thoughtful, curious, and engaged web industry—one that pushes past easy answers and encourages ongoing growth and learning.

    Technical skills—and by that I mean everything from JavaScript to typography to taxonomy—will take us part of the way there, but they’re not enough anymore. Not now, not when we’re facing the big, messy problems that come with designing for an increasingly web-connected world.

    We need as many brains and hearts as possible to solve these problems. And if we do not make this a welcoming place for people of all kinds of backgrounds—women, as #yesallwomen clearly shows, but also people of color and younger people and older people and people who don’t speak English as a first language and people with disabilities and even people who don’t think gifs are funny—then we, as an industry, will miss out. We’ll miss out on talent, on perspective, on ideas.

    So we, the staff of A List Apart, are putting a stake in the ground: we will be part of this conversation, too. Sexism and discrimination and diversity are not fringe issues—not problems that should be relegated only to niche sites or individuals’ blogs. They’re mainstream issues that have found far too comfortable a home in our industry. An industry we’ve worked too damn hard to grow, guide, and collaborate with to watch it falter and flail now.

    We’re not going to stop publishing articles about CSS Shapes or Sass mixins, not for a second. But as we do, we’re also going to be thinking about our responsibility to this community. And that means a few things:

    • We expect the people we publish to be respectful to their community, and we will not publish those we see doing otherwise.
    • We will be vigilant about the voices we choose to amplify, and those we do not.
    • We will actively, purposefully seek out diverse contributors.
    • We’ll be spending more time talking about sexism, racism, and other forms of discrimination, even if it makes some readers uncomfortable.

    Most of all, we’re here, and we’re on the record: the web industry has a diversity problem. It’s got a misogyny problem. It’s standing in the way of the web we want, and we are all—every one of us—responsible for changing that.

  • Ten Years Ago in ALA: Art Direction and Drop Shadows 

    Writing for web designers is a tricky blend of trying to predict and shape the near-future while keeping your feet firmly grounded in the practical concerns of the here-and-now. Ten years ago this month in Issue 180, A List Apart published Stephen Hay’s Art Direction and the Web, a tidy piece that still resonates today.

    For those who have grown weary of the Great Flatness Debates of the present, Stephen’s piece is refreshingly rooted in communication design. The article provides a solid outline of the principles of art direction by discussing the importance of creative themes and rhetorical devices in your work, and follows up with some practical tips on how to implement these concepts into your workflow. It’s a good read for today’s designer, as it is mainly focused on thoughtfulness and process, and unencumbered by jaggy screenshots of the pre-anti-aliased web.

    On the other hand, Onion Skinned Drop Shadows, written by Brian Williams for Issue 182, is a direct example of a technique that is now utterly obsolete. Like Faux Columns and Sliding Doors, this technique demonstrates an incredible amount of ingenuity that seems ridiculously kludgey today, when drop shadows are so easily created with a single line of CSS that an entire movement has spawned to argue against them.

    Also from May 2004: Print It Your Way by Derek Featherstone, a guide to creating custom user print stylesheets for Firefox, and Separation: The Web Designer’s Dilemma, a rumination from Michael Cohen on the ongoing concern over keeping content separate from layout.

    Finally, a bonus flashback: zeldman.com from 10 years ago, with Issue 182 featured in the sidebar!

  • Global Accessibility Awareness Day: Getting the Word Out 

    Today is Global Accessibility Awareness Day. To mark the day and promote the goal of the day, groups of developers and designers interested in accessibility offer webinars, presentations, and networking events to interest and educate more people about why accessibility is important and how to address accessibility in web content, documents, and software. GAAD is a community-driven event, and engaging is a simple as visiting the GAAD web site, Facebook page, or Twitter feed and taking a few minutes to read an article that someone posts or joining a webinar to learn new techniques or get up to speed on current trends.

    At A List Apart, we started this week by posting Andrew Hoffman’s new article, Accessibility, The Missing Ingredient. The article highlights techniques used to make an interactive shopping application and cart experience more accessible, and discusses how use of the W3C ARIA specification provides useful tools for a developer to use. Most articles about accessibility attract lots of passionate discussion, and this one is no different.

    ARIA is a specification with support that is developing still, and there is often some measure of subjectivity in decisions related to accessibility and there is always variability in support offered by the mix of browser and assistive technology support for accessibility, so it’s helpful to see examples and talk about them.

    Discussion about any accessibility topic is a good thing, and helps engage people who are new to the topic. While it can be intimidating to wade into discussions on accessibility and it’s true that the accessibility community can be quick to criticize, there’s so much value in these discussions—for participants and onlookers alike—that the signal makes a little noise worthwhile.

    When I started on accessibility, my sometimes ignorant questions were met with welcoming advice and with dismissive remarks. I’m glad I focused on the former, and the many people interested in advancing accessibility who shared their knowledge, advice, and passion continue to help me develop my knowledge. Almost 15 years later, as a dyed-in-the-wool accessibility wonk myself, I need to continually remind myself that not everyone has worked on accessibility for as long as some of my colleagues but that there are a lot of people that are interested in helping make the web more accessible and as a community we need to pull them in, not push them away.

    On Global Accessibility Awareness Day, I applaud the many efforts being made to expand the number of people who know about accessibility, as it’s a problem that can’t be solved without expanding our community. It’s a big web, and we need as many voices doing as much educating as they can. Whether you’re writing for yourself or submission page: let’s get the word out!