Minimally Viable

Yves Hanoulle has been a marvelous supporter and evangelist of Entaggle. And on occasion he’s been really pushy. But it’s all been good. Entaggle would not be where it is today if not for his pushing.

At the end of February he was nagging me: “You should announce Entaggle to the general public,” he said. This was after he had already started tweeting and writing about it on LinkedIn (with my blessing).

I resisted, “It’s not ready. I still have a to do list a mile long before I’ll feel like it’s ready.”

“What are you waiting for?” he asked.

I looked at my backlog. I had weeks worth of stories to implement before I hit my “Announce” milestone. But as I looked at the list, I thought about what he said. “What exactly am I waiting for?” I challenged myself.

So I went through every single backlog item standing between me and a public announcement.

Some of them were about moderation features: the ability for users to flag something as inappropriate or spammy. Others were about what I saw as core capabilities of the system. All of them represented my first pass approximation of a minimally viable feature set.

But perhaps I hadn’t stripped it down to the truly minimal set.

So for each and every item I asked myself: “What is the absolute worst thing that could happen if the system doesn’t have this thing when we announce it to the general public?”

In each case, the answer was, “not much.”

Sure, I wanted moderation features to protect people from spam. But in the absolute worst case if someone decided to try to use Entaggle to spam people, I could delete the offending content through the Rails Console. I didn’t actually need a special interface to manage content.

Besides, the probability that a spammer would find Entaggle to be an enticing spam vector was low: the system only supported text; no links. And users were protected from having spam show up on their profile by the simple mechanism of requiring taggings to be “accepted” before they showed up anywhere.

So I decided to go for it. I announced Entaggle. People signed up in droves: 172 signups that week. I was amazed.

Predictably, I spent a good chunk of time that week on support issues. But here’s the kicker: none of those support issues had anything at all to do with any of the items in the backlog that had been holding up my announcement.

Not one.

Most of the feature requests were for things I hadn’t thought about or hadn’t thought were important enough to be at the top of my list. All the serious bug reports were for things I hadn’t thought (enough) about. No one said, “Gee, I wish I could flag something as inappropriate or block a user from tagging me.”

In fact, the worst thing that happened in production during that first week was not related to spam at all. Rather, it was test content from well-meaning testers wanting to exercise the system. They created tags with names like “<script>alert(“HI!”)</script>” that cluttered up the list and made it look like no one cared about the data in the system.

(Little did those folks know that Rails 3 handles javascript insertion attacks out of the box.)

So I solved that problem not through moderation, but by making my staging server available to the public and telling everyone they could create all the test content they wanted over there.

The bottom line was that the risks I imagined turned out to be completely different from the risks that manifested.

To put it another way, empirical evidence trumps speculation Every. Single. Time.

When Entaggle users write in to ask, “Is there a way to…”, I often I find myself replying, “No, I’m sorry, there’s not a way to do that yet.” I feel a tiny twinge of regret every time I have to say that, so I sometimes add a wry, “Ah, the joys of a minimally viable product.”

That feeling of regret lasts no more than a nanosecond before it is replaced with gratitude. By having released a minimally viable product, I am getting a huge amount of feedback about what people using the system actually care about. Every one of those “is there a way to…” is a story that goes into the backlog (if it’s not there already). The more people ask for it, the higher I prioritize it.

As a result, I’ve learned the difference between what people actually want and what I imagined they might want or need.

They wanted a list of new tags and users since their last login more than they wanted twitter integration. They want a better interaction model for tagging with the ability to do bulk tagging. They want email notifications.

At least for now, there is not spam in the system. So the moderation features I envisioned are an incredibly low priority. That will change if spammers discover Entaggle, of course. But getting the interaction model right is currently more important than mitigating a non-existent risk.

This means that if I had taken the time to “do it right,” and finished all the things on my list before announcing Entaggle officially, I would not have been any better off. No one would have cared about all the bells and whistles I added. I would have wasted a huge amount of time.

By releasing early, and continuing to release often, I make much better use of my time and limited resources.

Behold the power of releasing a minimally viable product.

Have you tagged anyone yet?

logoLate last year I started working on what was then known as my “seekrit (not really) project.”

The idea was simple: provide a mechanism for people to give and get public recognition. The result was I announced the project officially on March 1 and the enthusiastic response has been amazing!

Of course, giving and getting recognition online is not a new idea. The now-defunct WeVouchFor was built for exactly this purpose. And sites like Linked In let you publicly endorse people. But Entaggle uses a slightly different model: tags. To recognize someone, you tag them. (And yes, you can tag yourself.)

This project has given me a great opportunity to put all the techniques I teach into practice. In some cases the experience has reinforced things I already knew; in other cases it’s helped me see the depth of my ignorance.

It’s likely that for the next several months (at least) this will become the All-Entaggle-All-the-Time blog. Entaggle is a great case study because it’s all mine, so I have no privacy, intellectual property, or NDA concerns. That means I can tell real stories without disguising the details. Besides, whenever I’m not actively working with clients, Entaggle occupies all my brain cells.

You’ve been warned.

Oh, and while you’re thinking about it, go sign up and tag someone.

Files shuffled around

When I moved my blog, I didn’t do a good enough job of verifying that all the assets moved over. Several folks have contacted me asking for their favorite content to be restored. Whoopsie!

Many many thanks to everyone who contacted me. Please accept my apologies both for breaking links and also for taking so long to fix the issue.

I’ve finally started putting things back to rights. However, the media uploader automatically put all the content I restored into the uploads folder for April 2011. And in the interest of getting the content back as quickly as possible, I’m leaving it there. That means the old PDF links don’t work, and unless I hear a great outcry I’m probably not going to spend the time to put everything back exactly where it was.

Instead, you can find the most requested items under “Quick Links” on the right side of the page.

If you notice something still missing that you want access to, please let me know. I’ll be happy to restore it and put a link under Quick Links to it.