Re-structuring project teams
As we prepare for a fall/winter release schedule that’s very ambitious, we’ve been trying something new on the technology team at Emma. Rather than working on one project at a time and breaking it into individual tasks, we’ve split ourselves into small cross-departmental teams, and we’re working on several projects all at once. It sounds fairly straightforward, but it’s a departure from what we’ve done in the past — and it’s improving our speed and communication.
Most of these small teams include one or two developers, one or two UXers, one product owner and one project manager. We’ve kept the teams small so each individual is involved in the planning process and discovery phase. Turns out, this is a very good thing. It’s helped us set feasible goals, and it’s given us a true sense of ownership of our projects. A few of the teams, mine included, even lugged their monitors and laptops up to the third floor of the Nashville office so they could sit together while collaborating. (Typically, developers and UXers are on separate floors.)
A sneak peek at a coming feature
Let’s get to the good stuff. You want to know which features are coming up, right?
The project I’ve been working on for the past few months is Social Posting — what we’re calling SPX in-house (the ‘X’ is for EXTREME!) — and it allows users to share their mailing on their social networks, like Twitter and Facebook, right after they’ve sent it out to their email audience. Quite simply, you’re getting your campaign in front of your email audience, Twitter followers and Facebook fans all at once — and right within Emma.
Let’s take a peek, courtesy of Social Posting’s resident UXer, Trey. Once you’ve sent your campaign, you’ll see the option to post it socially. Just add a comment in the dialogue box, and choose when to share.
How we did it
In order to build this, we needed to use the Facebook and Twitter APIs, and we needed permission to access users’ Facebook and Twitter accounts. For this, we used OAuth. Specifically, the Twitter documentation recommended that we use Brosner’s python-oauth2. This interface does most of the heavy lifting that’s needed when using OAuth to authenticate with Twitter.
Once we finished with the OAuth dance for both Facebook and Twitter, we were given an access token that we stored for later use. That token will allow us to post campaigns to social networks from Emma on the user’s behalf, without having to leave Emma or open a new browser tab to Facebook or Twitter.
Next, we needed to figure out how to shorten the campaign webview links so that our customers will be able share the URL plus more text, like the subject line and a comment, on Twitter. All within 140 characters or less, of course. We thought about rolling our own URL shortener or using a third party shortener API like goo.gl or bit.ly. We also knew about Twitter’s shortener (t.co), but we couldn’t find much documentation for API use. Turns out they hadn’t rolled it out to the API users yet. Then, as if on cue, Twitter rolled out the URL shortener to the API right when we needed it. All we had to do was turn on the link shortener in our app settings or send the right parameter with each API call.
But, we weren’t done yet. We encountered another hurdle: how would we allow users to schedule Social Posting? We wanted to give our forward-thinking customers a way to post campaigns to their social networks at 11:00 pm or 2:00 am — or whenever they wanted — without having to turn on their computer. Okay, maybe 2:00 am is a little unreasonable, but it’s not unreasonable to think that someone would want to schedule in advance, say, if they’re going on vacation next week.
To do this, we set up a Redis queue coupled with Tantu to publish these posts at the scheduled times. Tantu is a Python work queue that is fed by Redis, and we wrote it in-house. It’s pretty cool because it lets you have concurrent threaded workers so it can handle your workload.
We’re pretty excited about unveiling Social Posting to our customers. Stay tuned for more news here and over on the main Emma blog, and let us know if you have any questions.