Monthly Archives: June 2012

Building a Rocket in 4 Days – A Kicksend Story

Kicksend lets you send tons of photos to people you love. A month ago, we released a revamped version of the awesome Kicksend web app. The relaunch was closely tied to making Kicksend a lot friendlier towards everyday people. To push that along a little further, we were brainstorming a new photo-sending flow for our users. Here’s how it all came together technically, and how this exercise helped influence Kicksend’s current branding.

Whiteboarding
At Kicksend, we whiteboard new product flows as a team. For this session, we were wondering what we could show users that would give them something interesting to look at while photos were sending. We decided that everytime someone sent photos from Kicksend on the web, we’d show them a subtle animation of a rocket blasting off, which was in line with Kicksend’s existing characteristics as a speedy photo delivery service. Here’s Derrick’s first attempt at fleshing it out on paper

First Draft
We had our illustrator, the mighty Mike Kus, come up with visual assets for the animation, which he created for us in a day. This included the actual rocket, flames, support structures for the rocket, a gauge that indicates photo sending progress and a beautiful moonlit background to set the stage. Here’s the result:

 

As photos send, we wanted the dial to fill up, and have the rocket blast off into the night sky, becoming smaller and receding into the distance.

To make the animation as close to reality as possible, we initially opted for HTML5 with an actual physics-based acceleration engine. Essentially, we would be animating the rocket using projectile motion and then scaling it to be smaller as it blasted off into the background. This involved setting up the HTML5 canvas with a coordinate system that made sense, and scaling/rotating/accelerating the rocket as a function of it’s position on the x-axis, while moving the rocket along the canvas using a projectile function tied again to the rocket’s position on the x-axis.

After a few experiments with Mathematica, we found a few custom projectile functions that worked well, and we had a pretty decent proof of concept. When we decided to test performance, however,  we ran into serious issues with every browser except Chrome. The problem seemed to lie less with doing math in the browser at a rapid execution rate and more towards browser compatibility of the HTML5 Canvas. Animations over a big Canvas were lagging most of the time, and we weren’t confident enough to move forward with it, even though animations on a smaller canvas object seemed to be consistent.

Second Draft
At this point, we were considering scrapping the rocket altogether when we realized we should probably give the new CSS3 animation functions a shot. A little digging showed wider compatibility on multiple browsers so we decided to spend a little time poking around.

20 minutes later – surprise! CSS3 animation support is actually quite powerful, and we wound up replacing most of the rocket animation with CSS3 properties. We scrapped the projectile motion equations completely and also moved off HTML5 Canvas for the most part.

The new way of animating the rocket was now a combination of the following CSS3 properties: transition and transform (for rotation) operating on a rocket image. The actual movement of the rocket (slow start, then speedup) is governed by a custom Cubic-Bezier path that the transition property supports.

 

This method was significantly smoother, was supported on many more browsers and essentially gave us a solid foundation on top of which we could build out more of the photo sending interface confidently.

Rocket Gauge
We still had some trouble with animating the rocket gauge. Since it was shaped like an arc, filling in backgrounds using transparent foregrounds didn’t really work cross-browser. This is when our realization that HTML5 Canvas actually works consistently with smaller canvas sizes helped.

The rocket gauge was then coded up as a simple canvas arc that gets drawn on the canvas as the photos send. We also used the aforementioned CSS3 properties to make the gauge’s needle move along with the arc drawing. For IE 8, we reverted to a simple progress bar since it didn’t support Canvas.

 

We pushed the rocket to production and were super happy with the response from our users. Time from whiteboarding to production push: 4 days.

Send some photos on Kicksend to see the animation in action.

And Then…
A few days later, we were wondering what to do about our email newsletter, nurture campaigns and notifications. At that point in time, the layouts were quite terrible, with very limited Kicksend branding. Worse, they looked unfriendly and unapproachable, which directly affected our conversion rates.

When we gave Mike Kus the mandate to redesign our email newsletters and notifications, he used the new rocket to guide his work, resulting in a fresh new look for all our email nurture campaigns, newsletters and notifications, and one that improved the overall cohesiveness and conversions of the app dramatically.

 

 

Looking back…
We’ve been working on Kicksend for over a year now and as a team we’ve gotten to know each other’s strengths very well. This web app relaunch was some of our best work together as a team, where every person on the team stepped up to make our product shine.

Thanks for reading!

PS: If you’re interesting in working on a tight product team, we’re always hiring stellar folk.

Kicksend Practices Part I – Backend and Web

Kicksend is a multiple platform application, we have clients on iOS, Android, OS X, Windows and the web. All of this is powered by a Rails backend, which we treat as an API server. Here are a couple of practices we have in play right now.

The Backend

(Taken by Tom Raferty)

Avoid to_json

Responses are the equivalent of views for your API; your presentation layer. Hence, you shouldn’t use to_json to generate your response, the same way you wouldn’t put presentation logic in your model. Use a templating system/builder like RABL (which we use) or Jbuilder.

Action cache

We use action caching, based on the principals of key based cache expiration. This keeps cache invalidation very simple for us as they auto-expire whenever an object or a collection is updated. We use a couple of helpers to simplify our cache key generation.

The Web App

The Kicksend web app is made with Backbone.jsHandlebars in Coffeescript. We treat it as a standalone entity, and it consumes our API the same way as our other apps do. There’s no special treatment.

Keep the UI responsive

As much as possible, keep your app responsive and don’t block the user. People have the expectation that rich clients are snappy. Some tips:

  1. Design your app such that you don’t have to use { wait: true }.
  2. Assume that the request will be a success, and have an error state with a retry otherwise.
  3. Load commonly used collections in the background, regardless of the page the user visits.
  4. Keep things asynchronous.

Modularize

Keep your models and collections independent from your views. This makes our views easily reusable (and even nestable). We instantiate individual models in our router and app wide collections on load, and never within the view. In the rare event you need to instantiate a model/collection from within a view, ensure that they are used only within the lifecycle of the view.

Have a single representation of each resource

For each resource (eg. api/lists/1), we maintain a single model representation of it as much as possible. This ensures that the right models are used by our views, so that the any model changes are appropriately reflected in the UI. We use our app wide collections to maintain the “gold” model representation of each resource. Here’s an example:

  1. You navigate to “kicksend.com/home#/lists/1/edit″ to edit your Family list.
  2. To reduce wait time, we make an API call to “/api/lists/1″, and instantiate a single List model – let’s called it Model 1. We then render the list edit page with Model 1.
  3. In the background, we load up our collection of all your lists (KS.lists), which will contain another model of your Family list – we’ll call this Model 2. The rest of the app operates off Model 2.
  4. Any changes to Model 1 is synced back to Model 2 within KS.lists.

Use a view manager

In a single page app, instantiating and destroying your view is important. Mismanagement can lead to a bloated DOM and stray event bindings. Taking a cue from Derick Bailey, we use a singleton to handle all view transitions and cleanups. The Kicksend app has two “containers” that we render views in – within the page or in a modal. With our View Manager, we can easily render any view in either container.

Over the next couple of months, we’ll be discussing more practices we use throughout the Kicksend ecosystem, so stay tuned. As always, we are always looking to improve and we love to hear any suggestions or improvements you may have!

Catch us on Twitter at @Kicksend and @derrickko. Sounds interesting? We’re hiring.

Mike Denny – Our New Android Product Engineer

Have you seen our new Android app yet? It’s the first app ever on Android that allows you to send & receive photos so easily, and we’re planning to make it 200x better. On that note, today we’re ecstatic to announce that we’ve added Mike Denny to our small product team as our first full-time Android product engineer.

Mike will now be working non-stop to constantly improve the user experience and functionality of the Kicksend Android app. As a result, expect to so see many new updates often. He’ll also be the guy you reach when you send feedback through the Android app – so make sure you do!

Before Kicksend, Mike built the Scan app for Android, which is a QR and barcode scanner used by many, many people all over the world. Mike studied Information Systems Management at Brigham Young University.

When he’s not killing it at Kicksend, Mike likes to hang out with family & friends, tinker with new tech, and die over and over in Inferno mode. You can follow Mike on Twitter or Google+.

Sending Photos Just Got Easier with Kicksend 2.0 for iPhone

We’re extremely excited to announce that we’ve just launched Kicksend 2.0 on the iPhone, a truly unique mobile photo & video sharing experience. The latest version of Kicksend’s iPhone app allows you to easily send large batches of photos privately with just one swipe. Easily swipe to the left to reveal your photo library and select all of the photos that you want to share.

Kicksend iphone App 2.0

 

Throughout the development and user experience testing of the new Kicksend app we were trying to find the quickest and easiest way to access your photos. Our goal was to have your photos easily accessible at anytime, anywhere in the application. We found that quickly swiping to reveal your photos was the easiest way to do this. Also, gone is the old tab bar on the bottom of the screen. You can easily access your Inbox, Sent files, Friends, and Lists by swiping to the right. We’ve also added brand new guided steps to help new users quickly get started with Kicksend.

Kicksend Guided Steps for New Users

Even though we’ve already revamped the application, we’re still nowhere near finished. Expect to see some amazing new changes to our iPhone app within the next few weeks. Our new iPhone app is truly is one of the easiest ways to send large batches of photos or videos privately to the people you care about. If you haven’t downloaded it yet, you can get it for free on the App Store.

 

Wells Riley – Our New Product Designer

Kicksend empowers everyday, non-technical people to connect better with people they love. One very important way we accomplish this is through carefully constructed interaction design on all of our web and mobile products. As such we’re always searching intensely for amazing new talent to join our small product team.

Today, we’re ecstatic to announce that Wells Riley will be joining the Kicksend team full-time as our very first product designer. He’s now tasked with taking Kicksend’s interaction design and UI up multiple notches in the next few months – i.e, Wells will be fighting for the users.

You might be familiar with Wells’ work already. He was the creator of ‘Startups, This is How Design Works‘ – a very popular and stunningly beautiful online treatise on interaction design and how it applies to tech products.

Prior to Kicksend, Wells was also the founder and Creative Director of Bionic Hippo, an experimental design and development consultancy based out of Boston. He has a BFA in Graphic Design from Northeastern University.

When he’s not helping our product engineers sweat the small stuff, Wells likes to hike, restore vintage Mac hardware and buy copious amounts of design books.

You can reach him at wells [at] kicksend [dot] com, or on Twitter @wellsriley.

P.S: We’re always hiring.