Design Decision Guidelines: Trendability vs. Usability

When you make a design decision, understand that there is no single more important guideline to follow than an equal balance of your own intention and the consumer’s situation.

Often, conversations discussing the usability implications of a particular design decision spike on HN/DN, bringing opinions out of the wood work. Whether you are talking about the hamburger icon or whether parallax is a good idea, the opinions of readers shift wildly.

As I said in a recent interview, there is no one guiding factor for design. Design is, in many ways, subjective.

Before you usability engineers jump down my throat and describe the difference between art and design, let me go ahead and stop you. Design and art are not two separate things entirely; instead, art is borne of design. An artist designs a particular piece (be it performance, visual, or purely conceptual) with some kind of intent, even if the intent is to be void of intent. And thus, if the intent of a given piece is to communicate pure chaos, then you must throw away any preconceptions of a design approach.

Do excuse me for my grossly obvious post-modernism spiel. As much of a diversion from common web design this may be, this principle holds: the intended message and identity of a given work, in combination with the context of the intended audience, provide the only valid guide for which a designer may make decisions.

And so we arrive at a good, albeit challenging, framework by which to run our design decisions through.

Take, for instance, the save icon.

Does it make sense to use a hard disk to represent “saving” a document? By purely observational standards, with no context, absolutely not. Hard disks have long been gone. It’s roughly akin to using a typewriter to represent a keyboard. Why, then, do we continue to use the save icon?

The answer is fairly simple: contextually, the disk icon means save (maybe even more than it means “disk”) to most users. Of course, we are moving more towards the symbolic understanding of cloud over disk, but all of this is representation.

A cloud disk drive, found via Google Image Search. Literally.

That context helps us understand decisions more accurately.

Square buttons, flatness, etcetera.

A coworker of mine recently asked me what the “best practices” are for buttons. I found an article explaining some of those, such as being sure that the buttons “look like buttons”, whatever that means – including the need for rounded edges.

I then changed tabs to Facebook, probably to waste some time, and saw that Facebook had indeed adopted a square button.

Someone’s got it wrong, right?

Not necessarily. The truth is, people evolve. Frank Chimero explained this evolution beautifully in his brilliant transcript of What Screens Want, saying that people use things like clouds and disks and trash cans and other representations (he calls this “padding”) to help them grasp what the functionality of those things are. A button in real life is rarely perfectly square, so why would a button in the digital world be square? The answer is relatively complex, but the short answer is, our brains won’t always need padding. We won’t always need to consider things on our screen to be related to things in the real world, and thus we can grasp the squareness of buttons just fine.

Furthermore, Facebook is quite big. You won’t catch me saying that makes them invincible, but it allows them to push usability standards further. In other words, Facebook users want to post a status, and they will probably figure out how to post a status no matter what shape the button is. They are invested, and Facebook can make huge changes to their platform (or rather small ones, as well) without much of a consequential hit on usability or user engagement. How many times have you heard people complaining about how much they hate the “new Facebook”, only to complain again when it changes again? (It always amuses me that the complains show up on Facebook.) They stayed. The posted statuses. They learned to use new feeds and mini-feeds and, believe it or not, square buttons.

And because of Facebook’s relative audience, we can safely assume that people have a pretty good idea how to use square buttons, now that Facebook has trained them.

Where it might break down

We can’t safely assume that people can learn anything, just that they can learn many things. I’d argue that a good number of the design decisions in iOS7 were a bit too far of a jump, too much of a drop in padding if you will, for people to keep their grasp. Sure, we all (read: most of us) probably use iOS 7 perfectly fine, but it certainly hasn’t been a seamless transition. Was it a bad design decision? It depends on the intention of Apple, which I think is to continue being the leader in making things that screens want, rather than only things humans are comfortable with. Apple, like Facebook, can break down a few barriers of design without a large backlash. The backlash comes when you design something that simply doesn’t work (like Maps).

But it’s not just bad directions that can break a design. It’s a bad understanding of humans that can break a design.

I’d label Google Glass’s debut a fairly ineffective launch; it hasn’t done what we as designers wanted it to do. But why? Well, one answer might be that they’re really, really quite awkward to wear for many users. Another might be that they are so unnatural in daily life, that the user couldn’t make the leap to full integration, which is what the device is intended to accomplish. This is a problem solved by time and cultural saturation, most likely, as cell phones and cars and clothing were at one point completely unnatural as well.

A conclusion

Be careful with design decisions by remembering who your audience is, and what your intention is for the thing you are designing.

The Internet of Places: The Context of Things

The Internet of Things is absolutely upon us.

Whether you’re fully aware and plugged in to tech rumor blogs and things like iotlist.co, or if you’ve never heard the term before, the Internet of Things is a huge wave in the way we think about technology.

A brief summary: everything is connected to the internet (is connected to everything), and everything is everywhere.

That’s the groundbreaking idea. To have an internet of things, you must have not only complex, multi-tasking machines like laptops and smartphones that connect to the internet, but also common elements of your every day life that connect to the internet. Lights, washing machines, thermostats, faucets, pet collars… You get the idea. If you don’t, try Googling an appliance, or really almost any concrete noun, followed by “wifi”.

This isn’t about a big red sticker saying “new and improved, now with WIFI!” – what it really comes down to is a different perception of control interfaces; I already do so much on my phone, why not centralize everything? Let me wash my dishes, pay my bills, set my DVR, and entertain my pet directly from my phone. And give me visibility to anything, anywhere. Oh, and save me some money in the process.

And it’s happening! It’s happening in my home, and it’s probably happening in yours. My nest has saved me… I don’t know how much money, but I really enjoy using it. And my Hue lights flash red when Alabama scores.

The ubiquitous dream. One day, the walls will be screens. Our homes will have ears, and our eyes will be everywhere. (This isn’t a discussion about privacy – imagine it’s magically solved.)

But let’s think further, beyond nouns. Let’s think in sentences, as humans do. Think about the context of our wifi-empowered nouns.

Context is everything. And the Internet of Place is the evolution of the Internet of Things. Things are nothing without their context, and the connectivity of things will only be followed by the connectivity of place.

Distinguishing Place From Space

At Georgia Tech, I studied mobile applications under Christopher Le Dantec. One of the primary themes of Chris’s work is understanding the relationship of mobilized technology as it relates to place, and the social science that turn a space into a place.

To unpack this a bit, let’s think about the lot that your home is built on. Scientifically speaking, that space has dimension and material makeup, and resulting properties. The space is located at a particular latitude and longitude.

Without any social understanding, the meaning of this space is lost.

Let’s start with sociocultural understanding: what country does that latitude and longitude land in? What state, city, and perhaps most importantly, what neighborhood?

We can get a sense for the mass sociocultural meaning, but what about the micro-cultural meaning in the space? A more elementary way of asking: who is your neighbor?

Now, the richest meaningful aspects of the space: who inhabits the space? Who has built the human history of participation in the space?

We attribute value to these things, both conceptually and concretely. Book two hotel rooms, exactly alike on their face; if one of them once held the President, I’d bet you’d be charged more for that room. Why? The space is the same; the place is different.

And truly, places aren’t the same to each person who comes along. The run-down garage where you and your father worked on your first car when you were a kid has a market worth of nearly nothing. But to you, it’s priceless.

The Internet of Places

Arguably, the most powerful motivator for technological innovation is the opportunity to empower us to make meaning in our lives more richly. The Internet of Things gives us the material to do this, but the Internet of Place gives us a full vocabulary.

What does it look like?

The Internet of Places will likely be made up of context aware applications combined with higher level machine learning to develop a sense of place-oriented interaction. Let’s imagine a few scenarios.

Football Game

I enjoy football. Going to a football game to me is a memorable experience. How awesome would it be for the stadium to know I was in it, and display my presence on a digital wall of inhabitants? Or maybe it’s as simple as having an application that allows me to press a button to order my hot dog and Coke from my seat so I don’t miss a play. This is absolutely possible right now with almost zero technological innovation. A more lofty scenario: my Google Glass listens to the game, and based on analysis of voice tension, language analysis, and game data, automatically records my perspective of the big plays. Later, I can go back and identify the ones it got right (hey machine learning folks – there’s your correction feedback loop), and share my perspective of the incredible touchdown pass. My memory of that play isn’t what they show on ESPN – it’s what I saw. This enriches my ability to revisit my important memories.

Shopping

Dear stores: Buy iBeacons and make awesome experiences for your buyers. Trade them their personal info for coupons. (Be responsible with their info.)

Imagine for a moment that you are in Wal Mart, and you can’t remember what you need. Your digital world remembers though, and your phone knows you’re at Wal Mart. You no longer keep a list of things you need to buy – your phone has already pre-ordered them and they are ready for you to pick up. (This seems like a very complicated scenario, but this is essentially how inventory management happens at the Wal Mart level; why can’t it happen at the My Home level, too?)

Another shopping example: you’re shopping for clothes. Your device of choice is your companion, letting you know what stores have your sizes in stock, and checking whether those sizes run smaller or larger than average. When you walk into the store, your device identifies, based on your past purchasing behavior, current fashion trends, local fashion trends, and friend comparisons via Facebook (or whatever network you choose), what you are most likely to genuinely be interested in. Perhaps a score is assigned to outfits, identifying things that are “out of the box” vs things that are “popular mainstream”. (Don’t crucify me – I’m not a fashion guy.) These value decisions you usually make on your own are now more informed. You have more confidence in your decisions, and the store has better information about you to ensure that your size is in stock next time you come in.

The implications are absolutely ginormous for retail; employing higher level learning algorithms for massive communities would change the concept of “lead time”, and could potentially virtually eliminate a massive margin of error in most inventory prediction methods.

At Home

When it comes down to it, what people want out of a smart home doesn’t put the emphasis on smart – it puts the emphasis on home. And that happens with context. For now, we have hyper-configuration, a tinkerer’s dream. Philips Hue lets me set a mood, for instance. We’re moving towards contextualization with automation and pipelines like IFTTT, and the next wave of home automation will move even further this direction. My home should know when it’s my anniversary, when I have friends coming over, and when I’m on vacation. I should be able to see meaningful analytics about my energy usage as it relates to my activities, not just simply the time of day. I don’t want my home to be a house-shaped human – I want it to be a representation of the people that live in the home.

My masters project was a good example of creating placeness in a home (or anywhere that music is played in an open space). I created an application that allowed people to check in to a given location, and would dynamically select music using everyone’s collective preferences. Once the person leaves the space, their effect on the music preferences decay over time; if they are a “regular”, their preferences remain strong for longer. This concept perpetuates a sense of collective identity of a place and its history.

The future of smart home technology doesn’t just let you set your alarm from anywhere in the world, or give out digital keys to let your friends in the front door. It knows you – it learns your moods and your behaviors, and connects with your personality. And not in a creepy invasive way, because your home isn’t personified. Instead, it picks relevant pictures and lighting to show on screens. It gives you suggestions for outfits on a given day, because it knows your wardrobe. It makes your coffee when you begin to wake up in the morning (instead of on a static timer). It keeps track of your belongings for you so losing your keys never happens again. Your presence isn’t simply presence; it’s contextualized presence.

Conclusion

The future of the Internet makes placeness a primary consideration, and elevates the Internet of Things. We begin to see machine learning conforming not only directly to measurable data, but also to subjective data – artificial intelligence in it’s smallest, most domain-specific application.

Discussion on Hacker News

The Terror of Facebook and the Endless Social Network

They died.

I have seen these words on my screen countless times. I fear them, in many ways, as they seem to hit closer to home all of the time.

Fear of death isn’t irrational – I know that when someone I love dies, it will be painful. It is natural, but that doesn’t make it easy to bear.

What is irrational is believing that death is related to proximity (except in horseshoes and hand grenades). However irrational it is, when something “hits close to home”, it can have a chilling effect, and if you’re anything like me, it can cause anxiety.

Irrational or not, when those words pop up on my screen, I immediately think about the proximity of death to those that I love.

Bad news makes the headlines.

And when I say headlines, I mean not only the ones on your TV, but also the ones in your browser (read: the top post on Facebook, or Hacker News). People attach themselves to bad news, for many reasons; sometimes it is because, quite simply, it is genuinely bad for that person. Like when someone they are close to is going through something horrible. Whatever the reason, this attachment naturally causes bad news to rise to the top. Thank you brilliant algorithms: bad news (amongst cats, surveys, and Candy Crush) is effectively micro-viral.

Bad things happen to everyone.

You know, everyone goes through tough times. And that shouldn’t be downplayed. When we see these headlines in our news feed, they are certainly not usually disingenuous. But unfortunately, while bad things happen to everyone, on average, many more good things happen. These things unfortunately don’t make the headlines as often, though. Normal, happy life isn’t viral.

A Time for Mourning

We’ve reduced mourning to comments on a feed.

It used to be the obituary section that housed this information. We would intentionally participate in a process of mourning with loved ones. We would either seek out the information, or the affected would contact us in some more direct way to inform us of the bad news.

Now, it’s broadcast.

And we participate in some perverse form of mourning. Next to our messages of consolation sit mountains of distraction, clicks away from invites, messages, and notifications that encourage us to make quick, efficient work of what once took intentionality. And why?

Because our massive volume of “relationships” make us believe we need digital methods to manage our infinitely growing network of friends.

A simple equation.

If you have a thousand friends on Facebook, how often do you think something bad happens to them? Once a year? If that’s the case, then on average, you will have more than two negative things on your feed every day.

And because bad news is viral, you’re fairly likely to see bad news every day on Facebook, if you visit Facebook every day.

Depending on the definition of “bad things”, this number could be wildly more (or perhaps significantly less), but it’s far more than if you were to sample, say, 150 people.

And that number happens to be a proposed number of people we can cognitively maintain meaningful relationships with. It’s called Dunbar’s number.

Meaningful Relationships

Your past is nothing to necessarily throw away. Don’t get me wrong, I love the people in my past.

However, I am responsible primarily for my present and my future. When my past stands in the way of my present and my future, it’s time to cut something.

My most meaningful relationships are the ones I intend to cultivate in my present and my future. Expending energy to cultivate relationships that were primarily from my past (as in, I don’t talk to the person even on a yearly basis) should always take second seat to the relationships I’m cultivating now.

And here’s the kicker: if I’m reading the sad news about my long lost high school friend, I’m adopting anxiety at the expense of celebrating the good news from my most meaningful relationships.

A Culture of Permanence: Learning to Say Goodbye

We live in a culture where everything is preservable (except snapchats). And why not? It’s supported by zeroes and ones, so anything is possible.

The problem is, our human brains are not computers; we can’t expand our cognitive ability to retain meaningful relationships. And as we’ve said before, putting energy into our least meaningful relationships takes energy away from our most meaningful relationships. And quite often, this energy is spent consoling and listening to patently bad news.

So the answer? Say goodbye. Cut yourself off from your past. Do so with very specific intentionality, understanding that you will love and live better with the people you care about most. Don’t spread yourself thin and risk living in a constant state of depression and distant relationship; instead, live and breathe deeply with those you are closest with.

Steal these Startup Ideas: Collection One

I want you to steal these ideas.

Seriously. Make these things a reality.

There have been a LOT of people who have said this in recent years: ideas are relatively of no value. Until someone actually executes and makes them valuable, ideas are about as value-less as dreams.

Okay, sure – the genesis of creativity is an idea. But that doesn’t mean the idea is the thing of value.

For the sake of brevity, I’m going to go ahead and post some ideas here that I have discussed recently, and I will continue to post more ideas in the future. The hope is that someone will take these ideas and execute; I certainly can’t do all of them.

So, my only request is that if you are inspired by these ideas (even if you don’t execute them directly), contact me and let me know. You can find me easily. Google “Jonathan Cutrell”.

Without further ado:

Coffee subscription drive-thru service

Credit actually is due to @taylorleejones for most of this one.

Coffee is one thing almost everyone I know has in common. So much so that many of us have a coffee budget that we write off on our taxes. Subscriptions simplify our lives to a great extent. The idea is simple: create a subscription service that takes advantage of passive Bluetooth at a drive-thru and provides a reliably great cup of coffee any time I want it (24 hours). Heck, you could create learning algorithms to do auto-ordering and preparations schedules. I just want my same coffee, and I want it to be good. And I’d love data on my coffee drinking habits (because I’m a part-time data nerd).

Make sure the coffee is awesome. On the flip side, make it cheap, too. You’re clearly going to trade personal data (think iBeacons) for coffee. Luckily, coffee IS cheap, especially in bulk, so don’t worry about the margins. They’d be silly good, especially if you leverage that aforementioned data well. If people come by who don’t have a subscription, just charge them a flat fee for a cup. Then at the very least, you likely have a viable drive-thru service.

On-Demand Task Service (Crowd-sourced)

TaskRabbit is awesome. But it doesn’t take advantage of the ultimate scalability model that Craigslist, Ebay, AirBnB, Kickstarter, etc have captured over the years: the crowd is more powerful than the individual. So build a thing that connects people (people means ANYONE) who need something done now and are willing to pay for it with the people (anyone) who are willing to do that thing.

How does it make money? Be the payment service, too. You should easily be able to complete a task and both parties press a button to get paid. Every time someone gets paid, you do too. Make the un-scalable part provide monetary value: vetting. Allow people to pay to become “verified.”

Scaled Micro-Investment for the Financially Clueless Laymen

I know almost nothing about investment.

There, I said it.

Perhaps this is because I’ve never received investment money myself, so I’ve never been pressured to learn.

But I do want to invest. Not a lot – just a bit of my money that would otherwise go into savings. And I don’t want to go and meet with a broker, nor do I want to learn everything about stock trading. And honestly, I want to invest in very early stage companies, not huge national corporations.

I bet there are more people like me. Probably a LOT more people like me. And the truth is, we have MONEY that we want to INVEST in awesome things.

Not donate – invest.

Not pre-order a product – invest.

(In a dream world, I would also receive tiny bits of equity for these tiny investments.)

Build an iPhone app that lets me throw a thousand dollars at a private startup doing something awesome, and pays me just a little bit when they succeed. I understand everything I need to understand to make a bet. Let me make a bet. (And you take some of that money, by the way.) Make it like Monopoly instead of business school.

Personal Privacy Intelligence, Automated

Want to know who is looking at your stuff, where they are, and what they want? If you don’t already, you probably will. Alexis Ohanian (yes, I mention him a lot right now) relates people invading our data to someone opening our mailbox and reading our mail. Yes, I absolutely want to know exactly where the packets of information are traveling, and who opens them. If you create a startup that tells me with some level of confidence where my data is and what is being read, when, by whom, I would pay a body part.

This has significant business implications too; think Google Analytics on steroids, plus a private investigator in the form of intelligent algorithms and tracking techniques. The privacy war is coming, and there’s a lot of money in war. If someone is spying on me, I also want to spy on them. This has a lot of physical-world cost in the long run, but whoever owns this will probably own it for a long time. They can also be sure that they will receive a lot of resistance and shutdown requests, so it’s probably wise to do this in a country where the government is… small.

A REAL, widely accepted solution to this:

convoluted_mess.jpg
remotes.jpg
But seriously, how is this not completely done yet? I know the XBox One is heading this direction, but how close is it? I’ll answer your question with a question: when will my Dad buy an XBox One? Now, provide a simple, beautiful solution to the problem of discrete boxes doing discrete things that can benefit from all of the automation and remote-ness (read: not remote control) of the cloud. Give me a way to schedule EVERYTHING.

Give me a way to throw away Comcast’s horrible channel surfing interface. I still want the things cable provides me, like reliable sports – but please, for the love of God, make things look better than TiVo circa 1999. FIFTEEN YEARS, guys. And if you think your one Raspberry Pi with XBMC is enough, then you probably don’t watch sports. And you’re probably not willing to keep paying for cable and Netflix, but I am. Someone make a Nest for my home entertainment system, and I’ll buy. Now, do a deal with cable companies and/or Netflix to be the single solution for any home, and you win the long term game.

Appified Personal Article Insurance

I came up with this idea recently when the apartments around mine started having pipes burst, destroying a good bit of their stuff. Let me ask you this: did you update your homeowners or renter’s insurance right after the holiday influx of new Christmas toys? No? Why not? Certainly not because you don’t want to pay to protect your stuff. It’s about the inconvenience of the call to the insurance agent. If only there was a way to take a picture of your stuff and find it in a database, and update your policy to cover your stuff…

I, and many others, would LOVE to add 10 cents instantly to my renter’s insurance whenever I get something new that I’d like to protect. Oh, and by the way – think about the ENORMOUS potential of having the data of peoples’ belongings indexed. Give them deals in a trade for their stuff, and ad revenues would be stupid good.

Oh, you have a collection of president bobbleheads? Looks like your missing George W. Throw that in your cart, and we’ll auto insure it for less than 2c a month.

Seriously, why isn’t this a thing already? (I didn’t say all of my ideas were ethically good… they just would make money. For the record, I’d totally use this, but I bet a lot of people hate the thought of it.)

Job Hunting Meets Matchmaking

LinkedIn sucks at this, let’s be honest. Sure, it has a pretty decent connection-map for your professional relationships, but have you ever tried to hire on LinkedIn? It’s terrible. And really, there doesn’t seem to be a GREAT solution to the recruiting problem. Maybe that’s short-sighted, but the existing solutions are either old school (phone calls and vague recruiting emails) or are so chock full of horrible fits and spam and people who don’t maintain their portfolios.

Take a cue from high-end dating websites. People who want to get hired will probably pay to put their profile on a curated site dedicated purely to hire matchmaking. If you’re hiring, wouldn’t you love to use a serious matchmaking site for your search to find someone who fits your culture, needs, and budget? Give space to both the hirable people and the hiring people to do the seeking. Develop matchmaking algorithms for personality and job placement. Be vigorous to keep recruiters out, or at least very accountable to not be spammy. Focus on happiness/genuineness and job quality first, money second, and skills third. To jumpstart this effort, make it happen in a niche. Be the ultimate job placement software as a service in the restaurant management market of the southeastern United States.

This is one of hopefully many installments. If you want to take any one of these ideas, like I said, just let me know and then go full-steam ahead. I would want you to succeed, because I would use every one of these things if it was done right.

Discuss on HN

The Anatomy of Surprise and Delight

A chance to surprise and delight someone by doing something a little exceptional goes a long way because it provides a smack of awesome humanity upside the head. – Alexis Ohanian [1]

Bill Murray has a reputation. Sure, to many he is an actor with a strong and highly memorable personality in each of his movies. But Bill Murray’s fame goes deeper.

If you have had the chance to experience what I’m talking about here, I’m certain you would agree: Bill Murray is a delightful person.

We know the norm for the famous population amongst us is to show up almost exclusively with “their kind”, highly guarded from much personal interaction with their fans.

Bill Murray has quite an opposite approach to this mindset. On occasion, Murray shows up in an unexpected place and acts in unexpected ways. These stories have become somewhat mythical, enough that people have adopted a practice of telling these stories, even if they never even happened.

What’s the big deal? Who cares that Bill Murray did something ordinary?

Well, the answer is quite simply that for Bill Murray, that ordinary thing was out of the ordinary. And not in the crazy Kanye-interruption kind of out of the ordinary, but rather in the “I’m going to give you a car for no good reason” kind. Bill Murray becomes what other actors won’t: a real life human being, doing real life things. What a delightful surprise indeed.

Ordinary Actions Aren’t Always Ordinary

A friend of mine once sent an email to Steve Jobs. If you have read anything about Jobs, you’ll know that he, on occasion, would send short (as in single-sentence) replies to random emails that hit his inbox.

What’s the big deal? Why does anyone care?

Because it’s out of the ordinary. It’s almost like winning the lottery in some sense – out of the seeming millions of emails that hit Steve’s inbox, he picked yours to respond to.

That email – a normal, ordinary thing – now hangs framed next to my friend’s desk to remind him every day what customer service looks like.

Steve knew his customer’s context. He knew his fans, and he knew what gets good press. He knew that the experience of seeing “Sent from my iPhone” tagged on an email from him would mean the world to someone, and yet it only took a few seconds for him. He knew that keeping the emails short actually added to the experience, to the lore: “and then he responded with a simple yes” sounds much more like the cold, in-the-elevator-firing Steve than “and then he responded.”

It’s not about fame.

Of course, fame gives you a much larger platform. Like a newborn baby learning how to walk, if you’re famous, people fawn over every little thing you do. So, when a famous person does something out of the ordinary, it is elevated. But it doesn’t require fame to surprise and delight people.

What it requires is context and personal connection.

In the early years of Reddit, Alexis Ohanian surprised and delighted authors whose posts hit #1 on Reddit with a digital golden alien email sent personally from him. Reddit hadn’t hit superfamous status, and yet this quirky, personal email elevated Ohanian in these authors’ minds.

Photojojo created a simple interface enhancement that gives users a small bit of shock: pulling a lever unleashes the arm of a cartoon monster on the page. Kickstarter’s footer lets you cut the bottom off, revealing the message “Eureka! You’ve found
our little secret.”, and inviting the discoverer to subscribe to their mailing list.

What does surprise and delight look like?

It really seems simple: do something outside of the expected behavior that will make someone smile. Take the routine out of what your users experience, and instead give them something dynamic and unpredictable. Provide a random, good (and perhaps even undeserved) customer service experience. Give things away on occasion for no reason, and chalk it up to PR investment. Make individual customers feel special just for being around.

Whatever you do, don’t fake it.

If you fake it, people will know. Don’t send out mass emails that attempt to make people feel individually noticed. Instead, let them know it is a mass email; this communicates that you respect their right to filter emails based on personal importance. Don’t provide something for free with stipulations. Don’t go halfway with these things; if you are going to surprise and delight your customers, you actually have to care primarily about surprising and delighting them, and secondarily about the effect that will have on your business. This isn’t business 101, where profits are the only thing that counts; this is about human intuition. If all you care about is money, you can wrap that in as many compliments as you want – I will eventually feel the weight of your fakeness. Cultivate real care for your customers, their problems, and their joys.

[1]Alexis Ohanian. Without Their Permission: How the 21st Century Will Be Made, Not Managed (Kindle Locations 1174-1175). Grand Central Publishing.

Discussion on Hacker News

Nonchalant Arrogance, Intellect, and Caring About Your Work

I recently encountered a demeanor that I couldn’t quite place. I anonymously overheard a conversation and, unfortunately, let it get under my skin enough to tell you about it.

I (somewhat ashamedly) tried to find some kind of a meme that described the person who portrayed this demeanor, which forced me to put it into words: nonchalant arrogance.

The “yeah, it’s a big deal, but I know you’re going to think it is, so instead of aligning with you, I’m going to downplay my accomplishment so you think it’s the tip of my intellectual iceberg” attitude.

The “if you like that, there’s more where that came from, but I’m under an NDA” guy.

The “eh, their third album is okay, but the early stuff you don’t have access to is the best” attitude.

I’m not sure why this attitude is still somehow effective in shifting perception, but it is. Perhaps it has something to do with a perceived sense of humility from the general audience, or maybe it portrays some kind of rare, cultured superiority and curation of “good ideas” that should be followed, like a good Instagram-er. Like the guy who turns his nose up at certain kinds of wine if they are paired with the wrong kinds of food, but gets a column in the paper as an expert sommelier.

I hate it, and I don’t want to be it, but at the same time I do want to communicate a sense of intellectual superiority. (For those of you who don’t want to be perceived as smart, throw the first stone.) I want others to value my opinion at a level of excellence.

The difference is, I don’t want it to be because I have some exclusive access to information that they don’t have; rather, that I have done the hard work to uncover that information, and that access is granted only to those who sweat for it.

So I have this struggle, as many others might, that I don’t have enough knowledge to properly and fully convey an idea. Certainly I feel confident in my vocabulary and in my writing style, and I truly don’t experience writer’s block very often. What I do experience is a sense of fear that once I write something out, or build something to release, that it’s going to be subpar. It’s going to be like the band’s 3rd album, or a badly paired wine.

I refuse to adopt nonchalant arrogance. If I am proud of something I’ve done, I’m not going to put on a charade of humility in hopes of you noticing – I’m going to tell you how excited I am, and show you my project. Who knows if you will like it. From my point of view, honesty and transparency are just as valuable as humility. I’m not above my own work. I’m certainly not above my own writing, or the subjects I write about. Nor am I above building for the web, or the people for which I build. I love what I do, and I’m really quite excited to tell you about it, especially if you have an open ear.

I vow never to post with a contrived ironic space between myself the creator, and my creation. I want my fingerprints all over my creations.

The chase for the external perception of intellect can be a dangerous path. That chase leads us to stop being excited when we learn something new. Do you remember when you first made a successful jQuery transition, or when you first learned how to remove something from a picture in Photoshop? The love for the work often dies when you chase a sense of intellect in hopes of an elevated position in the field. You can easily lose respect for the joys and simple highs of your craft. You begin to see the seemingly trivial nature of what once kept you up late at night, reading and hacking and intoxicated with hope of building something of personal value to show the world.

As Alexis Ohanian says in his book Without Their Permission and in the video below, I want everyone who comes into contact with me to know that I “give lots of damns.” That as a creator, I don’t want to separate myself from the work that I do for the sake of perception. I want the things I create to be so closely tied to me as a person that I fight for them like they’re a living, breathing extension of myself.

I’m Using Buffer to Segment My Working Day, and it’s Awesome

I have a lot of different responsibilities on a day-to-day basis. I’m guessing you probably do too.

Family and home responsibilities, like loving my wife, paying bills, and taking my dog on walks.

Personal responsibilities like sleeping enough, exercising, chasing my own goals, and making time for intentional sanity.

Work responsibilities – now there’s a big (and awesome) list. In particular, let me highlight two types of work I do, at work.

  • Reactive work – work that requires me to respond to external resources, like emails, phone calls, meetings, etcetera
  • Creative work – work that requires me to build something out of nothing (or out of a predetermined specification)

As a company, Whiteboard employees recently read 99U’s Managing Your Day to Day, an excellent book about building an effective creative routine. We’ve all adopted a good number of practices proscribed in the book to start out the year, and let me tell you, it has been fantastic. A few simple thoughts on these practices, as they will inform what this article is really about.

Don’t check email, social media, or content sources until 2PM or later.

Note that this is making space for the creative work, where nothing is needed. Quite a few successful creative folks agree that it’s best to do this kind of work in the morning, so we’re trying it. The basic concept is to avoid getting into response mode, as we tend to allow problems and tensions to linger, but instead to start our day out with a clean brain after sleep, which will theoretically encourage what Cal Newport calls deep work.

Maintain a stopping point.

At some point during the day, your routine needs to shift away from working and onto the other parts of your life, like hiking or relaxing or basket weaving. This allows for you to not only fulfill your family and personal responsibilities and/or projects, but also forces you to do only the most important things for projects while you are working on a day to day basis.

Learn this: The rest of the world is not on your schedule.

With these two thoughts in mind, we must also realize that the rest of the world isn’t on our schedule. So, emails will come in at night. (Ignore them until 2PM the next day.) People around the world will continue to live their schedules, and in fact even in the United States, people on one coast will have a different schedule than I will.

So, in a very narrow sense, people are asynchronous from one another.

Before you continue, if you think social media is useless, then you can stop here and hopefully still gain something from the article. No one else needs to hear why you’re quitting Twitter and Facebook and throwing your phone away and selling your car and moving out to the back woods to get away from the noise in the world. (You already told us… on Twitter and Facebook.)

If you take social media to be important to your job (it is for mine) or for your personal aspirations (again, it is for mine), then you should understand that schedule is everything.

Why does schedule matter?

First of all, professional engagement on social media isn’t about people wanting a glimpse into your life. (Unless, of course, they are particularly interested in your personal affairs. Generally not the case for me, other than my mother.) Instead, it is about what your followers can gain from you.

What we have to understand is that our followers don’t gain anything from us if they don’t see relevant content, but content isn’t enough on it’s own; it must also be timed well.

Open your Twitter timeline, and leave it for 20 minutes. I can almost guarantee, unless you follow a small number of people, that tweets from 20 minutes ago have effectively been buried in those 20 minutes.

So imagine that your next opportunity could come from a Twitter follower who is 4 hours separated from you, time-zone wise. How can you engage with this person in a meaningful way?

As far as social media goes, the answer is to post whenever they are looking.

This has absolutely nothing to do with my segmented work schedule; no one cares that I’m not posting to social media until after 2 PM except my family and my coworkers.

So how do I maintain my sane, segmented daily schedule while also increasing my chances of meaningful engagement on Twitter?

A good answer: Buffer (or a similar tool).

Buffer is a tool that allows you to setup a regular tweeting schedule. You fill up your queue however you see fit, and let Buffer auto-tweet for you. And here’s the kicker:

All of your content discovery and sharing can be done in a single block of your day.

Let me rephrase:

You can now engage with social media asynchronously instead of treating it like a chat room.

Let me re-rephrase:

You can now have a constant presence on Twitter without inundating your followers and sucking your time away from other (more) important things.

If you aren’t getting how this can be insanely valuable if done properly, then you probably need to try it for a while to learn.

A challenge.

Use a tool like Buffer to write your posts and share content for a limited, concentrated block in a day. Experience the peace of limiting social media distraction throughout your day, and the benefit of increasing intentionality and regularity of your online presence as a result of smarter computing.

(Disclaimer: I’m in no way affiliated with Buffer, nor do I receive any benefit for touting their service, but it is in my opinion the prettiest and generally the most popular tool for this particular use case. If I’m missing the mark here, please let me know.)

The war of privacy is coming in 2014

What will you do when you have the opportunity to trade your privacy as a currency?

Of course, it’s not a sustainable model, but that’s not the point. The point is that as long as we can trade our info for goods and services, we will set new standards for technological boundaries on our lives. And we’ve already seen it coming fast – mobility has been tackled, wearability is next, and embedded/environmentally ubiquitous will come after.

Apple released a phone that knows you by the same way you are identified by if you commit a crime or two. (This is a gross over-generalization, but stick with me.) On the flip-side (read: not the private sector) the NSA can listen in on your conversations. Without a warrant. Endorsed by the president. He doesn’t really want a call made on whether that’s okay.

And what will this bring? With movies like The Fifth Estate coming into mainstream (albeit fairly unsuccessfully) and with technological literacy being pushed with efforts to get everyone to code, there will eventually be a click moment where people understand the seriousness of the NSA’s deal to weaken RSA. Eventually there will be an enlightenment of what “surveillance state” means as it relates to all of these wearable devices and Xbox eyes and webcams and…

We’ve heard about Luddites, and I think this may be their birthplace: a strong, deep-rooted hatred for the corruption and terror of privacy-destroying devices like Apple’s iPhone 6. They reject the need for technology, first as a hipster trend (like leaving Facebook), but evolving into a real movement.

Obviously this is absurdist in many ways. (At least hopefully that’s obvious.) The truth is, the general population will take longer to shift to technological literacy enough to understand the seriousness of the RSA deal. (By the time that click moment happens, RSA will have become obsolete anyway.) But the underlying pattern is emerging: people will start caring more about privacy than ever before. They will understand that their need to be “always-connected” puts that privacy up for crucifixion, and that creates a direct conflict with the rapidly advancing personal device world. And that will be the war of privacy.

How We Adopted an Agency-wide Grunt Workflow

tldr; When adopting tools, do so to eliminate waste. It’s not worth adopting a tool for the sake of the clout of adopting it. For development, automate things you do the same often (or should/could do the same often). Build shareable processes that require little training overhead. Identify pieces of your process that require a common language; these places are usually where tools can be introduced to solidify that common language.

Don’t mess with my flow.

If you are a leader of a development team, you know that it can be hard to adopt any team-wide change in workflow. This is especially true if the new project tools are a significant shift away from the way you already work. The truth is, the overhead of managing the tools (instead of working on the project itself) can bog down your team, make for some confusion, and ultimately cause over-engineering and waste of time.

But the truth is, the evolving tools of web design are rising for a reason. Dependency management tools (or any kind of tool, for that matter) that are rising in fame should be evaluated. But where is the line? How can you know when its time to bite the bullet, buckle down, and learn the details of these tools? I think the answer is ultimately subjective, but I’ll share an anecdote with you about how we decided to move our team to a shared workflow that involves dependency management through Grunt, GitHub-centric code control, etcetera, while generally avoiding overhead.

A Note About Dependency Management

The goal of dependency management is to abstract away the details of manually managing toolsets that a project uses. In the Rails world, this is done in a Gemfile. In Node, it’s in a package.json file. Almost every project has some kind of dependency; it’s your job as a developer to make sure the dependencies are met in a suitable fashion. Furthermore, every project has different “build processes” – for some, this means compiling code. For others, this means setting environment variables or incrementing a “revision” count. Grunt is a highly-configurable tool that does many of these things for web-based projects. Powered by Node.js, Grunt and related projects have gained an enormous amount of support and active development contributions.

At Whiteboard, we are constantly starting new projects. This can happen even on a daily basis. What’s more, the developers are constantly iterating on and reviewing projects. Our work is highly communication-centric, with a focus primarily on a consumption orientation that is driven to develop brand voice. That’s a long way of saying we work more heavily with content publishing platforms than we do “web apps”.

For this reason, we adopted WordPress long ago as our primary project platform, and have made WordPress knowledge a core competency of our agency. We work in other areas (Rails, specifically) as well, but for spinning up a content publishing platform for a client, WordPress is our go-to.

Manual Dependency Management

A year ago, our processes were very slim. I like to think of this as a Good Thing™. We worked quickly, and used tools as they popped up. In the WordPress world, we found a few base themes (like Bones), and then threw our own self-brewed stuff on top. The development team is experienced enough to adopt a wide variety of tools, and this worked fine. But we started to notice problems creeping into our system: our tools were all quite similar amongst a set of projects, but none of them were dependably exactly the same. We also knew that the tools could be unified – we used the same basic types of tools/libraries/themes/structure on every single project.

We had adopted LESS, but were using CodeKit on our private machines without any global configuration. (CodeKit is awesome, and has these types of project-level options available, but we weren’t using them.) After a few accidental overwrites and other issues, we realized that everyone’s process, like our toolsets, were very similar, but just off enough to show cracks in our system.

Makefiles

Our first step towards a solution was to adopt a Bootstrap-inspired approach to compilation and project builds. Before Bootstrap 3, the process for compiling assets primarily revolved around a Makefile. We brewed up our own makefile, and created the first version of a theme we called Launchframe. This unified a lot of our tools, and immediately this increased our ability to communicate about projects to one another, without much hassle. The powerful element here is that our code started looking and feeling exactly the same (rather than relatively the same). We also all adopted native (Mac OS)AMP + phpMyAdmin stacks on our Mac OS machines, using Homebrew to get everything installed. This makes for predictable and very easily executable PHP-based projects. (There are quite a few guides for how to do this, including this Homebrew-specific one.)

Moving to Grunt

The Makefile approach eventually started showing its flaws. Most specifically, some of the error reporting and watch scripts didn’t quite work as expected. While Make is certainly a powerful way to handle problems, we realized that people in our field were handling these same problems in a much more actively supported way through Grunt (and associated CLI tools). When Bootstrap 3 moved to Grunt, we made the move to Grunt, and once again adopted a lot of the techniques in the Bootstrap build process.

The Trick

The best way to reduce overhead for any kind of development process is to first find your consistencies and near-consistencies, and commit to them. Once you’ve made this commitment, build your tools to automate these consistencies. For us, we always use jQuery, we always use LESS, we always start with our base theme, and we always use a particular file structure. To make the process as easy as possible, we chose to commit to these consistencies, and build our workflow so that our developers need to only know the basic overview of the process. To start a new project at Whiteboard, you install WordPress, change into that directory and type npm install. This will install all dependencies for the Grunt tasks to work properly. Then, run grunt watch. Develop on the project like you always do, and push live.

A Step Further

Who wants to install WordPress? Wouldn’t it be nice if we could automate the whole process from front to back, and have a few prompts with configuration options along the way? Of course it would. So I made this script. Running this on a configured machine with the right tools does everything to open up the project, watching and ready to be edited. It’s also a lot of fun to run it, considering the colors lolcat provides. 🙂 It utilizes a few tools here and there, particularly wpcli, to get things going. This could probably be grunt-ified, but ask yourself: why would that be valuable?

#!/bin/bash
command -v lolcat >/dev/null 2>&1 || { echo >&2 "I require lolcat but it's not installed. Run gem install lolcat."; exit 1; }
command -v wp >/dev/null 2>&1 || { echo >&2 "I require WordPress CLI but it's not installed. \n Run the following:\n curl https://raw.github.com/wp-cli/wp-cli.github.com/master/installer.sh | bash
."; exit 1; }
command -v git >/dev/null 2>&1 || { echo >&2 "I require git. For more information, visit: http://git-scm.com/book/en/Getting-Started-Installing-Git "; exit 1; }

purple='\x1B[0;35m'
NC='\x1B[0m' # No Color


echo '

LAUNCHFRAME 0.1 #########
####### A WHITEBOARD TOOL

       !
       !
       ^
      / \
     /___\
    |=   =|
    |     |
    |     |
    |     |
    |     |
    |     |
    |     |
    |     |
    |     |
    |     |
   /|##|##|\
  / |##|##| \
 /  |##|##|  \
|  / ^ | ^ \  |
| /  ( | )  \ |
|/   ( | )   \|
    ((   ))
   ((  :  ))
   ((  :  ))
    ((   ))
     (( ))
      ( )
       .
       .
       .
' | lolcat

if [[ $1 == "" ]]; then
    read -p "Enter the site folder you want to create for installation: " sitefolder
else
    sitefolder=$1
fi

echo -e "${purple}Downloading WordPress... Please wait a moment.${NC}"

mkdir -p "${sitefolder}" && cd "${sitefolder}"

wp core download

echo -n "Enter database name (press enter for wp_${sitefolder}) "
read dbname
if [[ $dbname == "" ]]; then
    dbname="wp_$sitefolder"
fi

echo -n "Enter database username (press enter for root) "
read dbuser
if [[ $dbuser == "" ]]; then
    dbuser="root"
fi
read -p "Enter database password (required): " dbpass
while [[ $dbpass = "" ]]; do
    read -p "You cannot continue without entering a database password (required): " dbpass
done

echo -n "Enter site url (press enter for http://localhost/${sitefolder}) "
read siteurl
if [[ $siteurl == "" ]]; then
    siteurl="http://localhost/${sitefolder}"
fi

echo -n "Enter site title (press enter for ${sitefolder}) "
read sitetitle
if [[ $sitetitle == "" ]]; then
    sitetitle="${sitefolder}"
fi
echo -n "Enter admin email (press enter for admin@example.com) "
read adminemail
if [[ $adminemail == "" ]]; then
    adminemail="admin@example.com"
fi

echo -e "\n"
echo -e "${purple}Creating the wp-config file.${NC}"
echo -e "\n"

wp core config --dbname=$dbname --dbuser=$dbuser --dbpass=$dbpass

echo -e "\n"
echo -e "${purple}Creating the database.${NC}"
echo -e "\n"

adminpw='[filtered]'
adminun='admin'
wp db create
wp core install --url=$siteurl --title=$sitetitle --admin_name=$adminun --admin_password=$adminpw --admin_email="$adminemail"

echo -n "Install Multiple Post Thumbnails? (y/N) "
read a
if [[ ${a:0:1} == "Y" || ${a:0:1} == "y" ]]; then
    wp plugin install multiple-post-thumbnails
    wp plugin activate multiple-post-thumbnails
else
    echo -e "\n"
    echo -e "${purple}Run wp plugin install multiple-post-thumbnails to install later.${NC}"
    echo -e "\n"
fi

echo -n "Install Yoast SEO? (y/N)"
read a
if [[ ${a:0:1} == "Y" || ${a:0:1} == "y" ]]; then
    wp plugin install wordpress-seo
    wp plugin activate wordpress-seo
else
    echo -e "\n"
    echo -e "${purple}Run wp plugin install wordpress-seo to install later.${NC}"
    echo -e "\n"
fi

echo -e "\n"
echo -e "${purple}Downloading Launchframe...${NC}"
echo -e "\n"

wp theme install https://github.com/Whiteboard/launchframe/archive/master.zip

echo -e "\n"
echo -e "${purple}Activating Launchframe...${NC}"
echo -e "\n"

mv wp-content/themes/launchframe-master wp-content/themes/launchframe
wp theme activate launchframe
echo -n "Install Custom Meta Boxes? (y/N)"
read a
if [[ ${a:0:1} == "Y" || ${a:0:1} == "y" ]]; then
  git clone git@github.com:jaredatch/Custom-Metaboxes-and-Fields-for-WordPress.git wp-content/themes/launchframe/inc/cmb
  echo "Custom Meta Boxes requires a manual include and setup - be sure to add this in functions.php or somewhere similar."
fi

cd wp-content/themes/launchframe
npm install


echo -e "\n"
echo -e "${purple}Opening the site install...${NC}"
echo -e "\n"

open $siteurl

echo "Done!"
echo '
  ______   _______  _______  _______  _______ 
(  ___ \ (  ___  )(  ___  )(  ___  )(       )
| (   ) )| (   ) || (   ) || (   ) || () () |
| (__/ / | |   | || |   | || |   | || || || |
|  __ (  | |   | || |   | || |   | || |(_)| |
| (  \ \ | |   | || |   | || |   | || |   | |
| )___) )| (___) || (___) || (___) || )   ( |
|/ \___/ (_______)(_______)(_______)|/     \|


 ' | lolcat
subl ../../..
grunt watch

Do What Keeps You Moving

The thing we’ve learned about learning new tools is to find ways of constantly doing something new. This means stop doing the same things over and over. Wasting your time doing the same things over and over means you aren’t innovating, and you aren’t creating change. Don’t stop learning, but learn, implement, and move on to learning more and doing more. This is perhaps an opinionated understanding of the purpose of learning as it applies to development, but it certainly offers a strong method for balancing intellectual progress and business-oriented productivity.

My Solution for Quantified Self: Prompted Data Aggregation

The quantified self is really quite a hot topic. Ivan Kirigin talks about it in his post here as a potential startup idea. I’ve created something simple I’d like to share with all of you.

It is really quite simple, but also very flexible. Before I explain what it is, I’ll cover some of the conceptual reasoning behind the solution.

I believe that to do lists are generally quite hard to deal with, and overall don’t help my productivity. They require me to return to them over and over throughout the day, managing them, and often only serve as a place to mark things as done (rather than a place to ensure that I am being productive).

However, I don’t mind prompts. I don’t mind alerts. Certainly too many of irrelevant alerts can be annoying. But if I am motivated to use the alerts, I will.

As a developer, I am used to constant feedback. I am used to my machine telling me when I have compile errors. I’m used to having reports. These reports are what I take action on. To-do lists stay dormant until I put effort into them. The same can be said for calorie tracking applications. The same can be said for most tracking applications.

So, I created a small script to ask me a random question. I set up a YAML file to track my answers and the dates of my answers. I then created a simple plist file to load the script every 8 minutes via launchctl. This will give me about 50 data points per workday.

While they may be simple data points, and while the questions will repeat, the concept is simple: my computer asks me a question, and tracks my answer for me. My answers can be arbitrary; I also have two types of questions. One is directly actionable, the other is subjective. (“Tell your wife you love her.” vs “What have you eaten today?”)

Here is the Ruby code:

#!/Users/jonathancutrell/.rvm/rubies/ruby-2.0.0-p247/bin/ruby
require 'yaml'
y = YAML::load_file(File.join(__dir__, "stretchr.yml"))
if (rand(10).to_f/10.0).round == 1
    @msgs = y["msgs"]
    @msg = @msgs.sample
    ret = `osascript -e 'set question to display dialog "#{@msg}" buttons {"Nope", "Did it"}'`
    ans = ret.split(":")[1]
else
    @questions = y["questions"]
    @msg = @questions.sample
    ret=`osascript -e 'set question to display dialog "#{@msg}" default answer ""' -e 'text returned of result' 2>/dev/null`
    ans = ret
end
@answers = y["answers"]
@answers[@msg] ||= []
@answers[@msg]<< [ ans, Time.now ]
File.open('stretchr.yml', 'w+') do |file|
  puts file.write(y.to_yaml)
end

And here’s the yaml file.

---
msgs:
- Stand up and stretch.
- Live healthy, think healthy
- Tell your wife you love her.
- Do something to show appreciation to your coworkers and employees.
- Text a family member.
- Value, now. Stop doing things that don't matter.
- Have you kissed your wife today?
questions:
- Is your desk clean?
- Have you had 10 minutes of quiet thinking time today?
- What word are you thinking of right now?
- Who was the last person you spoke to?
- Is Hacker News open?
- What are you building now for tomorrow?
- Text a family member.
- What have you eaten today?
- On a scale from 1 to 10, how energetic are you?
- On a scale from 1 to 10, how productive do you feel today?
- How many hours did you sleep last night?
answers: {}

And finally the plist.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>org.jcutrell.stretchr</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/jonathancutrell/stretchr.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>480</integer>
</dict>
</plist>

Some of these you can clearly see come from personal goals. Some of them, though, are much more related to aggregating some sort of arbitrary data. Later, I hope to gain some kind of insights from this into very specific areas of my life.

Notice the name stretchr.sh – this was originally built to be a simple reminder to stand up and stretch at my desk. I would go hours on end without stretching simply because it wasn’t on my mind. So many things we should, could, and want to do go undone because we simply let them slip our mind. I’m interested to see how much of an impact these more consistent reminders will have.

It’s obviously very easy to add new data points. Of course, as you add more questions or imperative messages, it’s more likely that you will have more time between data points on average, assuming an even distribution of the random range generator over time.

It would be easy to take this YAML data somewhere else, like for instance to JSON to be fed into something like D3:

require 'yaml'
require 'json'
y = YAML::load_file(File.join(__dir__, "stretchr.yml")) # I think this may be v>=2.0
puts y.to_json

Interested in doing something similar? Or interested in making this more than it is? Let me know. I’d love to let this grow.