ShopTalk Blog

How and why we are building ShopTalk

Archive for September 2009

Convince me to ride roller coasters

written by David Shoemaker, on Sep 29, 2009 9:12:00 AM.

Sometimes people just don't know what's good for them.

I can't even count the times I've tried to convince friends and family members of the usefulness of a new product. Whether it's a Mac or a TiVo or an iPhone, I feel like it's my job to try out the new stuff and sing its praises to my not-so-early-adopting cohorts. And I must be a decent evangelist, because I've left a long string of grateful converts in my wake.

Sometimes, I'm the one who needs convincing. As a child, I refused to ride roller coasters. I was afraid of them. No matter what my friends said, there was no convincing me. The resistance finally ended one day when I was in the eighth grade. The mounting peer pressure became too much to bear. I hopped onto an enormous maze of twisted metal, gritted my teeth, and held on for dear life. It was an exhilarating experience. My perspective changed almost immediately. Suddenly, I couldn't get enough roller coasters.

Even if the product in question is spectacular, convincing people to use it is often like pulling teeth. People resist change. They fear it. There might be very little rational risk involved, but there is a ton of perceived risk. Lately I've been thinking about how I might convince people to ride our proverbial roller coaster. I had forgotten what it took to convince me. It goes something like this:

Make your product so life-changing that every user wants to spread the gospel

It's no wonder that my friends spent years trying to convince me to ride roller coasters. Roller coasters are fun. Lots of fun. Much more fun than chatting with your coworkers online. However, we've seen how ShopTalk can transform the way people work. Our job now is to build it so that it reaches its full potential. There are about a thousand features and enhancements in our backlog right now. We'll get to them all eventually. Even more important than filling out the feature checklist is that every one of those features is well executed. We want using ShopTalk to be an absolute pleasure. It needs to be the type of application that just gets out of your way while you use it so that you don't even notice it's there. The user experience should be second to none (including customer service). Only then will our users feel compelled to spread the word.

Fuel peer pressure: everyone's doing it

If all my friends are riding roller coasters and loving it (and surviving it), there must be something to it, right? This line of thinking gradually erodes resistance to change. This is why companies put logos on their products and give them a distinctive look. You want potential customers to notice that a lot of people have already bought into your idea. ShopTalk is intentionally a private service. Your company gets its own host name for its account and everything is nicely partitioned off and secure from the outside world. This creates a problem for us. Even if we had thousands of companies using ShopTalk every day, nobody outside those companies would ever know it! We're brainstorming ways to fix this. One idea is to allow our users to designate one chat room as "public", which would allow anyone to enter that room via a unique URL without login credentials. In an effort to give back to the communities that have given so much to us, we could host public rooms for free for open source projects and events like PyCon. Speaking of giving back, we're not afraid to open source our own software as well.

Create a product whose utility is directly proportional to the number of friends a person can convince to use it

My friends didn't just want me to experience the thrill of roller coasters, they wanted me to go to the amusement park with them. Why? Because amusement parks are much more fun when you go with a group of friends. Fortunately for us, ShopTalk shares some similar characteristics. It's basically useless for one person, unless that person enjoys chatting with himself. It's not really necessary for two people, although it does provide some cool advantages over instant messaging. It becomes much more useful with three people, and it's a real life saver if you have twenty people (or more). We're fairly confident that it can gain momentum quickly within an organization. We've seen it happen. However, getting over that three person hump has often proved difficult. In our latest release we've added a couple of features which make it easier for the initial user(s) to invite their colleagues. We're hoping that will help it reach critical mass.

In Summary

Your future users trust their friends' recommendations; they don't trust advertisements. Give your users something to talk about. And give them a strong reason to talk about it.

Do you instant message your coworkers? Try ShopTalk instead. It's better.

Announcing Diesel

written by Jamie Turner, on Sep 23, 2009 12:06:00 AM.

Here at Boomplex, we're thrilled to see that everyone is excited about async!

We get excited about async too; in fact, the guys at Boomplex have used async approaches in Python for years to tackle many kinds of network applications and protocols. We've dabbled with Twisted, asyncore/asynchat, libevent, eventlet, py's greenlets, stackless, as well as a few iterations/variations of our own thing.

Heck, part of the reason we even made ShopTalk our first product was because we knew it played to our technical strengths and interests--we had learned time and time again how great a match long-polling HTTP and async are for each other. So, we gathered up everything we'd learned and examined it. Then, we tried to design a system that was an amalgamation of the best ideas we'd been exposed to over the years... a system that let us write async the way we really wanted to.

And now, given the community's interest in the general topic, we've decided to open source it. Meet diesel.

It's generator-based to retain a blocking feel, and writing protocol handlers is a cinch. It comes with a complete HTTP/1.1 implementation, so you can get started doing Real Work with it right away.

Here's what an echo server looks like:

from diesel import Application, Service, until_eol

def echo(remote_addr):
    their_message = yield until_eol()
    yield "you said: %s\r\n" % their_message.strip()

app = Application()
app.add_service(Service(echo, 7050))
app.run()

And yes, it's fast; very fast.

The big picture is that we're building a larger framework to make web apps that use scalable, event-driven push behavior, simple and fun to write. What we have right now is just the geeky, low-level core--the "engine".

We plan on rolling out the next two components soon. In the mean time, give diesel a whirl, and drop us a line with any questions, bugs... or just tell us what you're doing with it.

And, like any good Python project, it's in the cheeseshop and on bitbucket.

Do you instant message your coworkers? Try ShopTalk instead. It's better.