I wanted to mention a side blog I started a little while ago. I wasn’t going to say anything until I had a decent number of posts. They’re in place now, so I thought I’d share.
One of the things I’m interested in is attention management. How do we prioritize our action? How do we stay productive and free from distractions? Personally, I’m terrible at managing my own attention, which is probably why I’m so interested in it as a discipline.
Calculating Color Contrast for Legible Text in Ruby
Back in 2008, Kevin Hale (at Wufoo) published Calculating Color Contrast for Legible Text. In it, he goes over how to determine the best contrasting color (that is, either pure white or pure black) when given a random hexadecimal color (something like “#851B03”).
For example, that “#851B03” with black text looks like this:
With white text, it looks better. Like this:
When it’s a one-off color, it’s not hard to see whether white text or black text gives a higher contrast (and easier legibility). But how do you determine the color when the background color is provided randomly?
Kevin’s post showed how to handle it with PHP. Since I’m using Ruby to build the web-based component of Monotask, I had to take their PHP implementation and map it out in Ruby. I thought I’d share what I came up with.
Basically, you give it a hexadecimal color code, like the #851B03 we used before. (Note: don’t pass along the “#” … just “851B03”.) The first method splits the color up into its three components (red: 85; green: 1B; blue: 03), then converts each of those numbers into an integer between 0 and 255 (red:133; green:27; blue 3). Then, it adds those three numbers up (163).
The second method takes that value and compares it with the exact halfway-point between pure black (0 + 0 + 0 = 0) and pure white (255 + 255 + 255 = 765), which comes out to 382.5. If the value the first method spits out is less than 382.5, the original color is closer to black (it’s a darker color), so the contrasting color should be white. Greater than 382.5, the original color is closer to white, and the contrasting color should be black.
In our example, “851B03” converts to a brightness value of 163. Since that’s less than 382.5, it’s a dark color, and the more legible text color is going to be white. (As we saw above.)
When you stick these two methods into your app’s helper methods, you can quickly determine the contrasting color for any hexadecimal color value on the fly. You’ll be able to see it in use, before too long, in Monotask, looking something like this:
(Ignore the names of the working states, and the duplicates. But note how “writing”, “research”, and the blue “Inbox Zero” at the bottom of the list all have lighter background colors and have black text, where the other ones are darker colors, and so have white text.)
Somebody recently asked for beta testers for a new site. I said I’d give it a shot. In signing up, I had a few thoughts about the process, and just wanted to capture them, as Tony and I are about to start our own beta test soon.
I really want a simple, inline means of dropping feedback. A text box that’s sitting right there on the screen, inviting comment.
I’d actually be open to seeing a phone number, or a Skype userid, or something, to have a real-time conversation.
Some searchable forum or other means of inquiring about whether the bug I’m seeing or the opinion I’m having is novel, or if it’s The Issue That Everyone Names When They First Create An Account. Basically, is my insight as a beta tester useful?
The page that loads as soon as I’ve created my trial account really needs to be The Page that solves my problem. That is, if the app will be useful because it … say … measures traffic on my site, once I sign up, don’t take me to the “account customization” page … take me to the “how to get our widget on your site” page.
If I’m entering in text that has some ambiguity about its formatting, give an example. For instance, if you want my Twitter username, pre-populate the field with an “@”, so I know I don’t need to type it. If you want a URL, give an example of http://example.com, so I know to include the “http://”. To quote Krug, “don’t make me think.” I’m not even committed to this service, yet. The fewer cognitive barriers you give me, the better.
Try to automate my initial signup. If you’re setting up a customized widget for my URL, and my e-mail isn’t “gmail.com”, there’s a good chance that my e-mail’s domain is the domain I’m signing up for. Or, at least, there’s the possibility. If I haven’t created any URL profiles yet, give me a button that says “click here to create a profile for monotask.com”, again, you’ll have reduced my cognitive load, and I’ll make it further into your app. Once I’ve created a profile, don’t show that button anymore.
After I’ve gone through the installation process with the widget, take me to a place with value. Even if you aren’t collecting data yet, give me a prompt to the analysis screen, so I know what to look for the next time I come back to the site.
I had a few other thoughts as well, but these were the easiest to capture. The main takeaways:
Make it easy for beta users to get in touch / leave feedback. Their default mode should be “I’ll throw this feedback over to them.”
Don’t have any barriers to moving through the funnel. Think of the desired end state, and refine the process as much as possible to get the user there.
Give the user value, so they know they’ve made good use of their time and energy.
Those principles apply to web development in general, of course, not just during beta testing. But since I was in the context of a beta test, they rose to the surface.
Me, getting annoyed by Microsoft's abuse of copyright laws
If you’ve spent any time in the information visualization world, you know Edward Tufte. If you’ve spent any time with Edward Tufte’s work, you know sparklines.
Here’s a sparkline:
In Tufte’s words, sparklines are “data-intense, design-simple, word-sized graphics.” He’s been talking about them since the early 2000’s. You can see them in a few web applications, like in Google Finance:
We’ve thought about incorporating them into PearBudget, but haven’t so far. The point, though, is that they aren’t new.
Microsoft raised some hackles when they tried to patent sparklines, back in November of 2009. (See the forum thread on edwardtufte.com about it, here.) That was frustrating enough. But now, Microsoft has gone even further down the path, with this ad from the August 2010 issue of Real Simple:
You see it, right?
No? Let me zoom in.
How about now? See it?
Okay. We’ll go in deeper.
Certainly you see what I’m annoyed by.
That. That right there.
Microsoft, you can’t effing copyright a term that someone else developed, that has years of prior art, and that has been used in hundreds and hundreds of applications. If you want to copyright “Sparklines for Excel,” you might have a case, but even then, Fabrice over at Sparklines for Excel might have something to say about it.
I’m a fan of Excel. Really, I am. I haven’t used it in years, but developing PearBudget in Excel as an early proof-of-concept and Minimum Viable Product was essential to our eventual development of PearBudget as a viable web-based business. But get your marketing hacks to back down on using other peoples’ terminology and claiming some special rights that you really don’t have.
The whole LeBron James decision depresses me. Not because of where he decided to go (or not go), but because so many people could (apparently) be so wrapped up in something so fundamentally trivial.
There’s a Neil DeGrasse Tyson interview where he talks about how we’re only 1% different, genetically, from chimps, and how most people are shocked that it’s such a small amount. It’s times like this where that difference seems generous.
Side note: This is two complain-y posts in a row, and I’m sorry about that. Back to more interesting things. Hopefully I’ll write soon about my 2011 SXSW panel proposal. It should be good.
Tl;dr: Social consumption can be a very good thing. Foursquare is not the good kind of social consumption.
I think Foursquare has a lot of (good) potential within a number of uses (“I’m in the East Village, I’m wondering which bar in the area has a good number of my friends”). But without more granular default controls (“only share with people who are checking in within 1 mile of me”), it can lead to a curious issue that, it turns out bugs me. My biggest issue with Foursquare isn’t that it’s violating privacy, or that it’s prompting oversharing, or anything like that.
My biggest issue is that the most frequent check-in spots are at stores. (I’m including bars and restaurants in that designation. Basically, places where you spend money and get stuff.) I’m not sure if that’s an issue rooted in Foursquare (consumption centers have the most incentive for creating “locations”), or if it’s because people who use Foursquare are conditioned to think of checking in when they’re at a store/restaurant, or if it’s rooted in some other reason. But whatever its cause, having a running Foursquare feed is like having a less-specific Blippy feed: I bought stuff here; I bought stuff here; I bought stuff here.
A genuine, originally-composed tweet about a good experience at a restaurant or coffeeshop is fine (and, in fact, welcome). A moderated forum, like Yelp, is great, too. But a play-by-play of your consumption patterns is noise that I really don’t care about, and that actually interferes with whatever other interest I have in you.
My issue isn’t that consumption is a private matter and that I take issue with your oversharing. My issue is that I see overconsumption as an offensive matter. Going to a bar to have a good time with friends is one thing. But the engagement with friends is the end, the bar is the means, and conflating the two (and then publicizing it) is an unfortunate byproduct of Foursquare and other consumption streams.
To be clear, I believe that consumption is necessary, and I believe that social consumption can be a wonderful thing — see Community-Supported Agriculture, neighborhood tool lending libraries, and other “we’re collectively combining our purchases to support a Good Thing that makes our community stronger”-models for social consumption writ genuine.
But when your Foursquare feed — or, even worse, your Foursquare auto-cross-posting at Twitter or Facebook — just strings out a series of coffeeshops, restaurants, clubs, and other stores, it does violence to the idea of what social consumption really can and should be about. It overemphasizes your relationship to Stuff, and, honestly, makes me like you a little bit less.
iPod update: My “wallpaper”, by the way, is a 1px x 1px black PNG. So when I wake the iPod up, it’s just got a black background with the time/date and a slider. And then when the Dock shows up, there’s no transition, since the background is, again, all black. If you want the black png for your own iPod, you can download it from here: [ here it is! →
Park’s Law of the Inbox Half-Life: If it takes you N minutes to cut the size of your inbox in half, it’ll take you another N minutes to cut that smaller inbox in half again.
Example: If it takes you two hours to cut your inbox from 80 messages to 40 (resolving 40 messages), it’ll take you another two hours to resolve the next 20. And another two hours to deal with the next 10.
And therein lies the best career advice I could possibly dispense: just DO things.
Chase after the things that interest you and make you happy. Stop acting like you have a set path, because you don’t. No one does. You shouldn’t be trying to check off the boxes of life; they aren’t real and they were created by other people, not you. There is no explicit path I’m following, and I’m not walking in anyone else’s footsteps. I’m making it up as I go.
Actually, this is an idea for anyone, but I think it’d be especially appropriate for BankSimple, who are building a brand around transparency, openness, and authenticity. It’s something I’ve wanted to do with PearBudget for a while, but it’s low on the priority list, and, with time being tight, I haven’t been able to make it happen. I’ve been thinking about BankSimple a lot lately, though, and think it would help set them apart even further from their competition.
So, the idea: All customer support e-mails should, after anonymizing, be posted publicly to a FAQblog.
a shorter path to happiness for users / reducing customer support calls
It would create a huge stream of content that could be searchable … hopefully searched before the users submit their questions.
Since different customers use different words to describe the same problems, the varied terms would come up more readily in searches.
Since it’s presumably being archived by Google, the terms would come up in broader internet searches as well … let’s say the user searches for “BankSimple change expiration date with payees” at Google, it’d be pretty handy if the top three results were answers to the question that came directly from BankSimple themselves. Users wouldn’t even need to know about the FAQ site to benefit from it.
surfacing features and bugs more rapidly
As an indie web app developer, I know how eager I am to not answer the same question more than once. When I can, I take an e-mail from a user and make the subject of the question more visible … either adding a FAQ, or, better yet, rethinking the way that component of the site works.
This would create a quick, scannable overview of issues that are coming up frequently (BankSimple teammate: “we seem to be getting a lot of questions about X. Let’s make that easier to use.”)
When users discover a bug of some sort, they could see if it’s just them, or if there are others having the same issue.
One of the ways that BankSimple is going to set itself apart is its simplicity and forthrightness. Somebody (Chris Dixon?) noted on Twitter that true transparency won’t be achieved until our inboxes are opened up. (Note: He wasn’t saying that was a good or bad thing. Just that things like Blippy/Swipely aren’t that “share-y” when compared with e-mail.)
By putting timestamps on the messages, it’d allow for a public metric of the company’s time-to-respond on queries. (This wouldn’t be necessary, of course.)
more humane customer support
I like knowing that the companies I’m dealing with are going to treat me with respect. If I could see that there are genuine, caring people on the other end of the phone line (or, rather, the other end of the internet connection), I’d be more likely to trust the company, to give them my business, and to recommend them to others.
Perhaps there could even be some voting mechanism, where the best answers could be upvoted by logged-in BankSimple users. The reps behind these answers could be celebrated in some meaningful way. (Extra vacation? I don’t know. I don’t think it should be monetary.) The metric for “good service” isn’t necessarily “how many customer support inquiries did the rep handle today” … the metric becomes “how many upvotes did they get this quarter?”
So, the mechanics of it. How would a company do this without exposing sensitive customer data? What about getting customers to buy in to their questions being online?
I haven’t fully thought through how this would work, but I think it could look something like this:
Customer writes in with a question. The e-mail automatically goes into an internal customer service app, which:
A) associates the e-mail with a user account (which, independent of this process, would have recorded the OS / browser the user used to access their account.
B) assigns the e-mail to a customer support rep
C) marks the message as “unresolved”
BankSimple writes back with an answer, via the internal app. The internal app, by the way, might have some stock answers on file that the rep can add to the e-mail by clicking a single link. The query thread is marked as “potentially resolved”. (“Potentially resolved” notes, after a week with no action, get an automatic follow-up e-mail, stating something like “I hope this is going well … if you have questions, can you let me know?” This could be done by hand, or automated, depending on the company’s preference. At PearBudget, all our follow-ups are written from scratch.)
If the user writes back, the thread is marked “unresolved” and stuck back in the rep’s queue. The rep and the user go back and forth as many times as necessary.
Once the rep gets a “thanks! that worked!” note from the user, he/she can just mark it as either “to be published” and “not to be published”.
Part of the rep’s job is to take the “to be published” notes, to clean them of all personal info, and to slightly format them for posting to the blog. Once this is done, the rep can hit a button to send an e-mail with the cleaned-up text to the customer. It could have some copy at the beginning of the note, stating “we liked your question and want to share it with other BankSimple users” or something. The customer gets the e-mail, can read through the post (to make sure there’s nothing personal or otherwise dangerous) and when he/she clicks on a link in the e-mail, the post would be published (or added to a publishing queue) to a public blog. (As a side benefit of this e-mail, the customer now knows about the rich resource of questions-and-answers at the BankSimple site.
So, that’s the idea. It’s basically taking the idea of “Frequently-Asked Questions” and putting some real weight behind it, such that anyone who visits could see the actual questions and their answers. As far as I know, nobody’s doing anything like this. It would be a real testament to their openness, and would also, I think, save them work (even with the significant investment of building the internal app and then managing the cleanup and posting process).
Now that DF has achieved a modicum of popularity, however, what I tend to get instead aren’t queries or complaints about the lack of comments, but rather demands that I add them — demands from entitled people who see that I’ve built something very nice that draws much attention, and who believe they have a right to share in it.
I love this. My view on comments has certainly changed over the years. I feel like I used to be suspicious of any site that didn’t have them. But now I don’t have them on this very site.
I suppose my time at TechCrunch (and VentureBeat before that) changed my opinion. I came to realize that the vast majority of comments on popular sites are useless — or worse.
Like Gruber, I much prefer when people use their own sites to respond to something. That small barrier to entry seems to ensure that the quality of the discussion will be higher.
There are exceptions, of course, but they’re few and far between. And I feel like the comment problem on the Internet is getting worse, not better.
And yes, I’ve tried all the various third-party commenting platforms. Some work really well. But the fundamental problem remains that most people on the Internet are idiots — especially when they can be anonymous in some way.
Plus, comments tend to make sites look ugly.
Agreed. And it’s why we haven’t added comments on Photojojo, though the subject comes up constantly.