Posts in the Tech Category

Sunrise, Sunset

Published 9 years, 10 months past

Everything begins, and everything ends.  Sometimes the beginnings are hard to define, and the endings are hard to accept.  Other times the beginnings are clear, and the endings are welcome.

We have a lot of beginnings and endings in our lives.  Beginnings are usually easier than endings.  In fact, some of us dislike endings so much that we avoid them by any means possible.  How many projects have you started, and then let fade from attention, denying them a proper finish?  I’ve done that so many times, I should be ashamed.

This is so common to our industry, though.  Plenty of projects and even programming languages get launched, gain favor, start a buzz, and then gradually fall by the wayside, but they never really end.  There are still people making a living writing COBOL.  There are so few of them left, in fact, they’re probably making a better living than you and me.  COBOL will only die when the last machine shuts down, or else when the last COBOL programmer does.

We see the same dynamics at play in design.  Remember drop shadows?  Some day, we’ll say the same thing about flat design, even responsive design as we now understand it.  Something will build from them, whether as a reaction or an evolution, be given a snappy new name (snappy names are critical to the adoption of design trends), and we’ll look back and say, “Remember…?”

But there is no standard definition of what constitutes the end of a trend.  It’s probably just as well, since in the absence of such a definition, we can support a thriving industry of thinkpieces on The Death Of whatever the thinkpiecer wants to declare dead.  They’re never definitive, but they do generate traffic, which generates ad revenue, which generates higher stock prices for Google.

That is, until some confluence of factors causes Google’s stock to drop, which will in turn launch a thousand breathless thinkpieces on The Death of Google.  They’ll sail off toward the intellectual horizon, questionable axioms and unquestioned assumptions fluttering gaily in the hot air, following in the wakes of the fleets of thinkpieces on The Death of Apple, The Death of Microsoft, The Death of Dell, The Death of IBM, The Death of Kodak, and The Death of Digital Equipment Corporation.

If you live long enough, you start to get a sense that it’s all just a little bit of history repeating, as Shirley Bassey once put it.  The towering crises of youth, both the personal and global, are eventually seen to be iterations on a long-running theme.  When our elders say that youth is wasted on the young, a big part of that observation is the realization that the time of life at which you are the most energetic is also the time in which you’re most likely to expend all that energy taking everything so damn seriously, as if the world is coming to an end.

Which it will, at some point.  Everything does.

The best we can hope for is that an ending comes at the right time, for the right reasons.  We don’t always have the ability to make that happen.  Other times, we do.

Here’s to the last year of The Pastry Box.

This article was originally published at The Pastry Box Project on 2 January 2015.


Well, That Escalated Quickly

Published 9 years, 11 months past

This post is probably going to be a little bit scattered, because I’m still reeling from the overwhelming, unexpected response to the last post.  I honestly expected “Inadvertent Algorithmic Cruelty” to be read by maybe two or three hundred people over the next couple of weeks, all of them friends, colleagues, and friends who are colleagues.  I hoped that I’d maybe give a few of them something new and interesting to think about, but it was really mostly just me thinking out loud about a shortcoming in our field.  I never expected widespread linking, let alone mainstream media coverage.

So the first thing I want to say: I owe the Year in Review team in specific, and Facebook in general, an apology.  No, not the other way around.  I did get email from Jonathan Gheller, product manager of the Year in Review team at Facebook, before the story starting hitting the papers, and he was sincerely apologetic.  Also determined to do better in the future.  But I am very sorry that I dropped the Internet on his head for Christmas.  He and his team didn’t deserve it.

(And yes, I’ve reflected quite a bit on the irony that I inadvertently made their lives more difficult by posting, after they inadvertently made mine more difficult by coding.)

Yes, their design failed to handle situations like mine, but in that, they’re hardly alone.  This happens all the time, all over the web, in every imaginable context.  Taking worst-case scenarios into account is something that web design does poorly, and usually not at all.  I was using Facebook’s Year in Review as one example, a timely and relevant foundation to talk about a much wider issue.

The people who I envisioned myself writing for — they got what I was saying and where I was focused.  The very early responses to the post were about what I expected.  But then it took off, and a lot of people came into it without the context I assumed the audience would have.

What surprised and dismayed me were the…let’s call them uncharitable assumptions made about the people who worked on Year in Review.  “What do you expect from a bunch of privileged early-20s hipster Silicon Valley brogrammers who’ve never known pain or even want?” seemed to be the general tenor of those responses.

No.  Just no.  This is not something you can blame on Those Meddling Kids and Their Mangy Stock Options.

First off, by what right do we assume that young programmers have never known hurt, fear, or pain?  How many of them grew up abused, at home or school or church or all three?  How many of them suffered through death, divorce, heartbreak, betrayal?  Do you know what they’ve been through?  No, you do not.  So maybe dial back your condescension toward their lived experiences.

Second, failure to consider worst-case scenarios is not a special disease of young, inexperienced programmers.  It is everywhere.

As an example, I recently re-joined ThinkUp, a service I first used when it was install-yourself-and-good-luck alpha ware, and I liked it then.  I’d let it fall by the wayside, but the Good Web Bundle encouraged me to sign up for it again, so I did.  It’s a fun service, and it is specifically designed to “show how well you’re using your social networks at a more human level,” to quote their site.

So I started getting reports from ThinkUp, and one of the first was to tell me about my “most popular shared link” on Twitter.  It was when I posted a link to Rebecca’s obituary.

“Popular” is maybe not the best word choice there.

Admittedly, this is a small wrinkle, a little moment of content clashing with context, and maybe there isn’t a better single word than “popular” to describe “the thing you posted that had the most easily-tracked response metrics”.  But the accompanying copy was upbeat, cheery, and totally didn’t work.  Something like, “You must be doing something right — people loved what you had to say!”

This was exactly what Facebook did with Year in Review: found the bit of data that had the most easily-tracked response metrics.  Facebook put what its code found into a Year in Review “ad”.  ThinkUp put what its code found into a “most popular” box.  Smaller in scale, but very similar in structure.

I’m not bringing this up to shame ThinkUp, and I hope I haven’t mischaracterized them here.  If they haven’t found solutions yet, I know they’re trying.  They really, really care about getting this right.  In fact, whenever I’ve sent them feedback, the responses have been fantastic — really thoughtful and detailed.

My point is that ThinkUp is a product of two of the smartest and most caring people I know, Gina Trapani and Anil Dash.  Neither of them comes anywhere close to fitting the Young Brogrammer stereotype; they are, if anything, its antithesis, in both form and deed.  And yet, they have fallen prey to exactly the same thing that affected the Year in Review team: a failure to anticipate how a design decision that really worked in one way completely failed in another, and work to handle both cases.  This is not because they are bad designers: they aren’t.  This is not because they lack empathy: they don’t.  This is not because they ignored their users: they didn’t.  This is such a common failure that it’s almost not a failure any more.  It just… is.

We need to challenge that “is”.  I’ve fallen victim to it myself.  We all have.  We all will.  It will take time, practice, and a whole lot of stumbling to figure out how to do better, but it is, I submit, vitally important that we do.


Inadvertent Algorithmic Cruelty

Published 9 years, 11 months past

I didn’t go looking for grief this afternoon, but it found me anyway, and I have designers and programmers to thank for it.  In this case, the designers and programmers are somewhere at Facebook.

I know they’re probably pretty proud of the work that went into the “Year in Review” app they designed and developed, and deservedly so — a lot of people have used it to share the highlights of their years.  Knowing what kind of year I’d had, though, I avoided making one of my own.  I kept seeing them pop up in my feed, created by others, almost all of them with the default caption, “It’s been a great year! Thanks for being a part of it.”  Which was, by itself, jarring enough, the idea that any year I was part of could be described as great.

Still, they were easy enough to pass over, and I did.  Until today, when I got this in my feed, exhorting me to create one of my own.  “Eric, here’s what your year looked like!”

image

A picture of my daughter, who is dead.  Who died this year.

Yes, my year looked like that.  True enough.  My year looked like the now-absent face of my little girl.  It was still unkind to remind me so forcefully.

And I know, of course, that this is not a deliberate assault.  This inadvertent algorithmic cruelty is the result of code that works in the overwhelming majority of cases, reminding people of the awesomeness of their years, showing them selfies at a party or whale spouts from sailing boats or the marina outside their vacation house.

But for those of us who lived through the death of loved ones, or spent extended time in the hospital, or were hit by divorce or losing a job or any one of a hundred crises, we might not want another look at this past year.

To show me Rebecca’s face and say “Here’s what your year looked like!” is jarring.  It feels wrong, and coming from an actual person, it would be wrong.  Coming from code, it’s just unfortunate.  These are hard, hard problems.  It isn’t easy to programmatically figure out if a picture has a ton of Likes because it’s hilarious, astounding, or heartbreaking.

Algorithms are essentially thoughtless.  They model certain decision flows, but once you run them, no more thought occurs.  To call a person “thoughtless” is usually considered a slight, or an outright insult; and yet, we unleash so many literally thoughtless processes on our users, on our lives, on ourselves.

Where the human aspect fell short, at least with Facebook, was in not providing a way to opt out.  The Year in Review ad keeps coming up in my feed, rotating through different fun-and-fabulous backgrounds, as if celebrating a death, and there is no obvious way to stop it.  Yes, there’s the drop-down that lets me hide it, but knowing that is practically insider knowledge.  How many people don’t know about it?  Way more than you think.

This is another aspect of designing for crisis, or maybe a better term is empathetic design.  In creating this Year in Review app, there wasn’t enough thought given to cases like mine, or friends of Chloe, or anyone who had a bad year.  The design is for the ideal user, the happy, upbeat, good-life user.  It doesn’t take other use cases into account.

Just to pick two obvious fixes: first, don’t pre-fill a picture until you’re sure the user actually wants to see pictures from their year.  And second, instead of pushing the app at people, maybe ask them if they’d like to try a preview — just a simple yes or no.  If they say no, ask if they want to be asked again later, or never again.  And then, of course, honor their choices.

It may not be possible to reliably pre-detect whether a person wants to see their year in review, but it’s not at all hard to ask politely — empathetically — if it’s something they want.  That’s an easily-solvable problem.  Had the app been designed with worst-case scenarios in mind, it probably would have been.

If I could fix one thing about our industry, just one thing, it would be that: to increase awareness of and consideration for the failure modes, the edge cases, the worst-case scenarios.  And so I will try.


Note: There is a followup to this post that clarifies my original intent, among other things.

A slightly revised and updated version of this post was published at Slate.


Finding My Way

Published 9 years, 11 months past

With presentations of “Designing for Crisis” at AEA Orlando and World Usability Day Cleveland now behind me, I’m getting into the process of reviewing and refining the talk for 2015.  This will be my talk at An Event Apart all throughout this year, making me one of the rare AEA speakers who won’t have a brand-new talk in 2015.  (We’ll have a mix of new and familiar faces, as we always try to do, and they’ll all be bringing new material to the stage.)

Even “Designing for Crisis” will have some new aspects to it, as I discover ways to strengthen it and loop in some new thoughts and discoveries.  As an example, I just recently had a great chat with Amy Cueva, who gave me some really sharp insights into how I can share the message even more effectively.  I expect that kind of iterative improvement to continue throughout the year, given how new the topic is to me, and possibly to everyone.  It’s been something of a surprise to have many people tell me it’s caused them to see their own work in a whole new light — even people working in fields where you might think they would already be on top of this.  I’m really excited to bring this talk to people at AEA, and elsewhere as opportunities arise.  I hope it will do some good in the world.

In parallel with that ongoing effort, I’m getting back to writing more than just the occasional blog post.  I’ve restarted work on the fourth edition of CSS: The Definitive Guide — details on that will be forthcoming just after the holidays.  I’m also starting to write down some of the thoughts and approaches in “Designing for Crisis”, as well as some nascent thoughts on network effects, responsibility, community, and guidance.  I’m also trying to teach myself git so I can push out public repositories of my CSS tests and some bits of code I’d like to release into the wild, but honestly that’s pretty slow going, because it’s always a fifth or sixth priority behind my family, working on AEA, refining and rehearsing the new talk, and writing.

(“Bits of code”.  SEE WHAT I DID THERE?)

Given everything that’s coming together, I really am looking forward to 2015 and a return to speaking and writing.  For painfully obvious reasons, I was pretty out of the loop for nearly all of 2014, not to mention the last half of 2013.  I tried to stay up to date, but it’s one thing to be in the middle of things, and quite another to observe things from a distance.  (The mosh pit never looks like it feels, you know?)  So in addition to all the other stuff, I’m working overtime to catch up, and that’s where I could really use some help from the community.

So, tell me: what did I miss?  What’s emerging that I should be (or should already have been) paying attention to, and what am I already behind the curve on?  What has you excited, and what sounds so awesome that you’re hungering to know more about it?  And maybe most important of all, where should I be going to get caught up?

All input welcome, whether here in the comments, or out there on les médias sociaux.  And thank you!


Blue Beanie Day 2014

Published 9 years, 11 months past

This past Sunday was Blue Beanie Day, the annual celebration of web standards that was established by Douglas Vos, taking as his inspiration the cover of Jeffrey Zeldman’s field-defining book, Designing With Web Standards.  This year’s was the eighth annual celebration, and to mark the occasion, I replaced my purple-infused Twitter and Facebook avatars to sport blue beanies.

That’s how much web standards mean to me.

If you missed Blue Beanie Day — which, it being the Sunday of a major U.S. holiday weekend, many of you may well have — don’t let that stop you!  Drop a cerulean toque on your social-media avatars, make a quick status update about why, and wear your pride in your craft and your love of the web on your sleeve.  Head.  Whatever.

If you don’t have a beanie ready to hand, then here, feel free to use one of these.

image image image

Every day is web standards day, of course, but Blue Beanie Day comes but once a year.  It’s not too late to mark the occasion.  As Ethan says, toque ‘em if you got ‘em!


A New Chapter

Published 10 years, 3 weeks past

Last Wednesday, I stood on the stage at An Event Apart for the first time in almost fifteen months, in front of an audience for the first time in just over a year, and delivered the most important talk of my life.  It wasn’t about CSS, or coding, or even standards.  It was about design and empathy and user experience and my own personal experience and what it taught me.  It was a talk about designing for users who are in the midst of crisis, no matter what kind of content you have, no matter whether you think your users will ever be in crisis when they come to your site.  It was the opening of a new chapter in my career.

To say this is a radical departure is an understatement.  But after the turns my life has taken, it was almost impossible that this would have been anything less.

I don’t know if the audience sensed my anxiety and fear in the moments before I spoke.  I wasn’t afraid of speaking in front of the audience, nor of their reaction to my points.  I was afraid of making my points badly, so that the message was lost in hesitation and stumbling.  I was afraid of fumbling and failing, not because of how I would look in public, but because it would mean doing a disservice to the message I was trying to convey.  And I was a little bit afraid of letting down the team at AEA, who have stood by me and done so much for me.

In the past, I haven’t really rehearsed my talks.  They were all technical, covering territory I knew very well.  The cliché is “Don’t prepare a talk, prepare yourself.”  In other words, know your subject so well that you can just talk about it for an hour.  That’s how I approached all my presentations.  I had high points to hit, slides (or demos) in a certain order, but no actual script.  I didn’t need one.  CSS was so familiar to me, I could mostly improvise what I said.

But this new talk is entirely about territory new to me.  In some cases, it involves things that are new to everyone — ideas I’ve come up with, and techniques I’ve devised, that I’ve never seen before, and nobody I’ve talked to has seen before.  It took no particular act of genius to do this; I just tried to simulate certain frames of mind with software.  The only insight there was to realize that it should be tried at all.

Beyond the topic area, everything about this talk is unusual for me.  I wrote it out as if composing an article, and read the text aloud several times to figure out what had to change.  Once the text was set, I rehearsed more than a dozen times, which partly explains the complete blogging silence of the past month.  I memorized the opening and closing sections of the talk verbatim, going over them in my head before bed, sitting on the plane to Florida, pacing in my hotel room.  On Sunday afternoon before the show opened, I went into the ballroom and essentially gave the talk to myself and the techs putting the lighting and AV together, getting reacquainted with being on stage and throwing my thoughts into the world.

And then, Wednesday morning, after Jeffrey introduced me, I stood center stage, looked out into the audience that held hundreds of my colleagues as well as my sister and parents, paused for a moment… and started talking.

Several people told me they were holding their breath in that pause, wondering if I’d be able to start.  That wasn’t my concern.  My concern was that I would lock up a few minutes in — that I’d stumble, lose my place, and go tharn.  Once I got through the opening and the first screenshots came up, I knew that danger was past.  Whatever else, I’d be able to carry it to the end.  And I did.

As I said before, that talk marked the opening of a new chapter for me.  I’m not abandoning CSS by any stretch, and in fact I’m moving forward on that front as well, but a goodly portion of my energies will be devoted to this new topic.  I think it’s not just important, but vital, and very much overlooked.  I have research to do, ideas to test and further develop, and a lot of thinking ahead of me.  I have this talk to give at An Event Apart throughout 2015.  There will probably be articles, and possibly a book.  Perhaps even more.  I don’t know yet.

What I know is that I’m on a new path now, one I wish I hadn’t come to by this route, but one that I’m determined to follow.  I hope to take what I’ve suffered and forge it into positive, lasting change — not just for me, but for the profession and medium I still love after all these years.


Gravity Wars Redux

Published 10 years, 2 months past

Over the past few weeks, I’ve been writing a remake of/homage to a game I last played somewhere around 1990: Gravity Wars.  I gave this personal project a few hours here and there each day, or more usually each evening, slowly resurrecting a little piece of my past and putting my own spin on it.  You can check it out for yourself, if you like: Gravity Wars Redux.

There are a few things I changed from the version I played all those years ago, besides the change of colors.  First of all, instead of taking turns, in my version the ships fire simultaneously, meaning a no-survivors tie is possible.  Second, the shot preview paths weren’t part of the original game.  Third, the “Gravimetric display” wasn’t a thing in the original game either.  That and the shot previews are leftovers from my development testing that I decided to keep around, either because I thought they added something to the game or because I just liked them too much to dump.

In fact, most of the code in there is accreted leftovers from the experimentation and development process.  Looking at it now, I can see all the things I should have done.  It just got to a point, as with most coding projects, where I could add another scoop or two of spaghetti to the existing mound and ship it, or I could start over and try to make the lasagna properly this time.  I decided to ship it.

I have to admit the point of all this wasn’t actually to recreate Gravity Wars, as much as I like the game and am glad to have a working copy of it.  It was instead to teach myself about the canvas API, and also to try to get a handle on some JS features that have never quite made sense to me.  I think I did okay on the both fronts, in my own idiosyncratic way.

At this point in a JS-related post, I usually throw in a disclaimer about being a JS newb whose code should never be inspected by anybody.  That’s probably still true, but I know I’ve advanced quite a bit from where I was, which pleases me.  I can see that not just in that the code I’m publishing today, which is convoluted and clumsy but still better than what I’ve written in the past.  I can also tell I’ve gotten better simply because I can see better approaches, as a result of what I learned along the way.

This may be where I end the project, or I may go back and take another crack at making lasagna.  We’ll see.  The carrot for me in doing that is it would let me add some other fun features and useful improvements pretty cheaply, not to mention I could fix some things that aren’t quite what they should be (like the placement of planets and ships, which should be a little less random).  The stick is of course having to rewrite code I already wrote.  I mean, lasagna is nice and all, but I like spaghetti too.

Anyway, I enjoyed writing it and learning as I coded, so if slinging missiles around planetary limbs sounds like your idea of a good time, please enjoy.


I’m indebted to Sohrab Ismail-Beigi, whose 1989 PASCAL source code I studied and in some cases directly ported; and to pascal-source.ru, for making that code available for download.  My thanks to both.


The Light of Other Days

Published 10 years, 4 months past

Every day or three, I upload another batch of photos to Flickr, trying to work my way through the backlog and get caught up with the present.  This is a habit I enforce inconsistently, because I’m bad at maintaining regular habits even at the best of times.  That halfway explains the backlog.  When I do enforce it, my habit is to upload no more than 10 or 15 photos at a time, so that I can properly tag and geolocate them without having to invest hours in the process.  That explains the other half of the backlog.  Right now, as I write this, I’m about six weeks behind.

Which means that yesterday, I uploaded the first half of the pictures from Rebecca’s sixth birthday party.  It’s been over five weeks now since she died, but in the Flickrverse, she still has six days to live.  She’s still tired but essentially herself, riding the Rocket Car and eating mini-donuts and chasing bubbles and hula hooping and blowing out the candles on her half of the enormous Frozen-themed cake shared with Ruth, her best friend in the whole world, the girl who shares her initials and whose birthday is only a few days apart from hers.

She still doesn’t know, none of us know, that the experimental medicine has failed and the tumor has been growing unchecked for weeks, compressing normal brain matter and now only days away from killing her.  Just two days after her birthday party, an MRI will reveal the horrible truth, but in the Flickrverse, that day has not yet come.

Flickr and my laptop combine to become a digital slow glass, bathing me in the light of days past.  I look at those pictures, tag them, adorn them with metadata, sort some into albums, and all the while I remember how we felt that day.  We were worried, Kat and I, but we still had hope.  Everyone there still hoped that she’d find a way to survive, and that hope was not unreasonable.

And so the party was not a wake for a still-living child, but a joyful celebration of her life and the simple fact that she’d lived long enough and well enough to enjoy the party.  There had been times in the previous few weeks that we’d thought she wouldn’t make it that far.  Had we held the party six days later, on her actual birthday, as originally planned, she wouldn’t have.

We didn’t know that then, but I know that now.  As I witness those days past, trying to taste some trace of what life was like then, I also have the horrible foreknowledge of what will happen in the days to come.  I know without question that the MRI will happen, that the news will be dire.  That she will sink into herself and lose so much of what we fought so hard to preserve, and that it will be lost quickly, in the span of a few days.  That we will believe she is leaving us the day before she actually does, and be surprised when she wakes and has a semi-normal evening, believing when that happens that she has a week or two left.  That the next day, the week will end with her actual birthday, the day that shatters us, the day she dies.

Today or tomorrow, I’ll upload the second half of the party photos, and her birthday party will once more be over and that final week will once more begin.  I could stop there, just walk away from uploading forever, and a large part of me cries out to do exactly that — but doing so would arrest more than just the glacially slow expansion of my Flickr account.  If I allow myself to stop there, arrested in the days when we could still feel hope, it will be that much harder to reconcile the past and present.  Without that reconciliation, it is very likely I will never feel hope again.

For myself and my future, the future we were unable to bring her into but must inhabit anyway, I have to keep going.  I have to upload the photos of that last week, relive the horror and anguish, the moments I captured as well as the moments I didn’t but will never be able to forget.  I have to let her go again.

And so the light keeps coming through the slow glass we’ve built, emerging from distributed panes aglow with the light of other days, pushing closer and closer to the unwelcome present.


Browse the Archive

Earlier Entries

Later Entries