Reducing complaints for Email Campaigns to Facebook Email Addresses

Most email advertising web-applications track a complaint rate for each campaign or mailing-list. We use Mailchimp for PosterMyWall’s campaigns, which tracks the number of times an email is marked as spam. If the complaint rate goes above a certain percentage, Mailchimp sends a warning message.

A few months back, as our mailing-list grew we started seeing an increase in the amount of complaints per campaign. A vast majority of complaints were from Facebook-based users, who unlike email account users had not seen the ‘Send me promotions and updates via email’ checkbox when signing-up.

To fix this, we decided to add such a checkbox after the ‘login with Facebook’ flow. The dialog shown below would appear once a new user went through Facebook’s dialogs.


The checkbox in this dialog is checked by default. After this was rolled out, the initial couple of campaigns still had a high complaint rate, but as more newer users who’d gone through this dialog during the sign-up process were added to the list, the overall rate of complaints dropped.

I’m surprised I haven’t seen any other website, which integrates Facebook into their signup process, do something like this. Granted Facebook’s developer policy allows developers to send advertisement campaigns to email addresses fetched via the Graph, it’s still good to give the user the option to opt-out of newsletters and other advertisement campaigns.

If you’ve been in this position, I’d love to know how you handled high complaint rates specifically related to Facebook users.

FB.login doesn’t work on Google Chrome–Facebook doesn’t seem to care

If your web application’s login mechanism integrates with Facebook’s Login functionality, and if you’re using the latest Javascript SDK from Facebook, you might have noticed that users cannot login if you use the FB.login() Javascript function. This issue’s been there for quite some time now, although I only came across it a few weeks back when I updated PosterMyWall’s Facebook integration (from the legacy ‘REST’ API to the latest graph based API).

So far I haven’t gotten any response from Facebook as to when they’ll get around to fixing this critical issue. I’ve created a question over at Stackoverflow; FB.login dialog does not close on Google Chrome. If you have any non-hacky work-arounds, please respond over at Stackoverflow. Also, be sure to vote-up the Facebook bugzilla ticket linked to in the question.

Mirrored Bitmap Graphics in Flex SDK 4.1 Anyone?

A few days ago I decided to upgrade my PosterMyWall* Flash/Flex development environment from Flex Builder 3 to the latest IDE, Flash Builder 4 (Adobe can’t seem to decide on a name …). Flash Builder 4 comes with the latest version of the Flex SDK, 4.1.*.

When I compiled and ran the poster maker with the new SDK, I was appalled to notice that all my BitmapImage’s were mirrored horizontally. After Googling around for a bit, and going through Flex bug-fix logs, I came across this bug which gave me a clue as to what might be wrong.

The culprit is the default value of the layoutDirection property of some elements. Sometimes, based on how an element is located in the DOM, the value of layoutDirection might not be set properly. You’ll need to manually set it to LTR (or RTL) so that your images show up correctly.

*If you haven’t checked it out already, PosterMyWall is a great online poster maker that allows you to create posters and collages from your photos, which you can share online or get printed as large high quality posters.

Tagged , , , , ,

PosterMyWall.Com Redesign – Lessons Learned

Yesterday I updated with the latest build, and with that went out the new visual design that Nida’s been working hard on. A side-by-side comparison of the home pages is below, with the new design on the right.

June 2010

old ui

November 2010

new ui

Although it’s still too early to know if the new design will do better than the previous one in terms of conversion rates and user experience, it is still interesting to compare our goals for the original design, the problems we faced, and how it changed over time.

Problem 1: Facebook Lookalike

Continue reading

Tagged , , , ,

The Come Back Post

Wow it’s almost been a year since I posted anything here. Time to dust off the virtual cobwebs and get back in action!

A lot has happened since my last post, here’s a 30,000ft view:

  • My MSE program at Carnegie Mellon University wrapped up in December 2009. After waiting for the holiday season travel insanity to die down, I and Nida flew back from Pittsburgh in January 2010. Being at CMU was a great experience, one I will cherish forever. The MSE program was really grueling, but rewarding at the same time. A big shout out to my CMU team mates, Sam, Soo-Yung, Benjamas, and Guido! You guys rock!
  • Since coming back (actually a little before that) I’ve been working on PosterMyWall with a partner in Silicon Valley. Working independently on a new product where you make every decision (and thus are responsible for it) has been an interesting experience. I’m glad I took this route, as its been a lot of fun and I’ve learned a lot. All we need to do now is start selling posters …
  • I’ve got a sweet home office setup. Much better than before. Will upload pictures one of these days.

That’s all the personal stuff I’m willing to divulge on the Internet for now :p

Stay tuned for more Web/Usability/Tech posts!

Brainstorming a Tech company name

Brainstorming a name for a software company that I’m a part of (well, as soon as we sign an LLC with this name). A post on 10 company name types on TechCrunch is useful.

Tagged , , ,

Encouraging User contributions online – the Community Activity Awareness pattern

As part of a homework for a Social Web course, I had to consider factors that research showed had an effect on user contribution on social websites (contribution can be anything from commenting, to rating, to making edits on a wiki page), and link them with popular design patterns used for crafting the user experience for such websites.

We primarily looked at the Yahoo! Design Pattern Library and tried to enhance patterns with more details, rationale for why they work, and more importantly, back our claims with credible references.

I didn’t find an equivalent design pattern in Yahoo’s library for the method of encouraging contribution that I was thinking of. I’ve seen this pattern used a lot on the Internet. I thought it might be good to give it some rigor and analyze why it works, in what situations it would work well, and how can it be improved. Below is the description of the Community Activity Awareness design pattern that I proposed (yes I know, I’m not good with names). The gist of the pattern is “When providing a user with the opportunity to contribute to the website, show information about how other users have responded (positively) to that particular contribution action”.

Continue reading

Tagged , , , , ,

The complete solution for implementing a deep-copy clone() method in ActionScript 3

When I started out to write a clone method for a few of my AS3 classes, I looked online and didn’t find any official information about cloning classes from Adobe. There were however a few solutions that were hacked together to provide the same functionality (here and here). These solutions have one big problem though, they don’t work with classes which have non-primitive properties.

My solution mostly builds on top of these solutions but it also provides the ability to clone classes which have properties that are custom class. And it also works with inheritance.

I’ve placed all helper methods in a CloneUtility class for better modularity. We’ll be using these methods in the code examples below.

Continue reading

Tagged , ,

Code Complete 2; The Missing Link in Software Education

CodeComplete2_thumb_3I recently bought a copy of Code Complete 2, one of the many books on software engineering that I’ve been meaning to read for a long time. It focuses on a very small part of what I’ve been studying and practicing at my MSE program; software construction. 

By construction the book means the actual writing of code. It is the central part of software development since the requirements elicitation that precedes it is aimed at finding out what is to be constructed, and the testing phase that follows aims to verify the construction.

After going through the table of contents and skimming some chapters, I was amazed at why I wasn’t taught anything like this in my undergraduate Computer Science degree. In fact, I think one of the reasons why programs such as the MSE program at Carnegie Mellon exist is to fill in the deficiency of sound software engineering skills in CS undergrads. During my undergrad program, even though we had a ‘software engineering’ course, we were still not taught about basic construction techniques such as version control, peer reviews, and managing quality at the code level. I’m pretty sure this is the case for a lot of other programs out there as well.

Perhaps it is due to the fact that software engineering is still a very young field, but there is a huge gap between what is being taught in Computer Science undergraduate courses and what is required out there in the industry. I’m not sure about the statistics on how many undergrads get jobs in the industry right away, but in countries like Pakistan where research is not a priority, I’m willing to bet a majority of CS undergrad students look for jobs in the industry instead of pursuing higher studies and research.

This is exactly why programs need to prepare students for writing industry ready code. Books such as CC2 are vital tools for polishing your skills as a software engineer. I firmly believe that we would have a lot less failed projects and more happy customers if people looking to write code for a living would catch up on their reading first.

Tagged , , ,

Windows 7 – Finally a worthy successor to XP

I installed the long awaited RC to Windows 7 last week, finally upgrading from Windows XP. I didn’t particularly loath Vista as most people did, but I never felt the need to upgrade to Vista. But Windows 7 blew me away in the first few minutes of using it. I’m probably not going back to XP ever again.

I installed 7 on my Dell Vostro 1500, and the first thing that amazed me was that it downloaded and installed all the right drivers. And not generic OEM drivers, official vendor drivers that I had had to manually install in Windows XP.

The new taskbar in my opinion is the best of both worlds; the Mac dock and the old taskbar. Pinning applications to the taskbar is really handy, and now I never have to worry about how many windows I’m going to open.

HomeGroups and the ability to share and stream media across Windows 7 machines is something that I’m looking forward to using on a home server setup. The concept of libraries is also very handy, although perhaps a little unintuitive at first.

Performance, especially hibernate and restore times have been vastly improved, especially if you compare with XP.

Microsoft has been working on some really cool stuff lately. Live Mesh, Windows Live Essentials, IE8, MEDV, and now Windows 7. I’m waiting impatiently for their vision of 2019 to come true. 🙂

Tagged , ,