<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>awe.sm &#124; Blog</title>
	<atom:link href="http://blog.awe.sm/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.awe.sm</link>
	<description>Performance measurement for social media marketing</description>
	<lastBuildDate>Thu, 16 May 2013 14:04:57 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>It’s an awesome time to be awe.sm</title>
		<link>http://blog.awe.sm/2013/05/16/an-awesome-time-to-be-awe-sm/</link>
		<comments>http://blog.awe.sm/2013/05/16/an-awesome-time-to-be-awe-sm/#comments</comments>
		<pubDate>Thu, 16 May 2013 12:59:09 +0000</pubDate>
		<dc:creator>Fred McIntyre</dc:creator>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Featured]]></category>

		<guid isPermaLink="false">http://blog.awe.sm/?p=1851</guid>
		<description><![CDATA[This morning, we’ve announced that I’ve joined the team as awe.sm’s new chief executive officer. I’m sharing this post to give an idea of why I’m so excited about where the market is headed and why I think that the &#8230; <a href="http://blog.awe.sm/2013/05/16/an-awesome-time-to-be-awe-sm/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This morning, <a href="http://techcrunch.com/2013/05/16/social-analytics-startup-awe-sm-hires-former-cbsi-and-aol-exec-fred-mcintyre-as-ceo/" target="_blank">we’ve announced</a> that I’ve joined the team as awe.sm’s new chief executive officer. I’m sharing this post to give an idea of why I’m so excited about where the market is headed and why I think that the work our team at awe.sm is doing is so important.</p>
<h3>Social is big, and getting bigger…</h3>
<p>Last year, there were <a href="http://www.mckinsey.com/insights/high_tech_telecoms_internet/the_social_economy" target="_blank">1.4 billion social network users</a>; by the end of this year, <a href="http://www.emarketer.com/Article/Which-Social-Networks-Growing-Fastest-Worldwide/1009884" target="_blank">60% of Internet users are expected to be on Facebook alone</a>, which represents an increase of nearly 20% this year.</p>
<div id="attachment_1852" class="wp-caption aligncenter" style="width: 810px"><a href="http://socialcommercetoday.com/speed-summary-ft-special-report-on/"><img src="http://blog.awe.sm/wp-content/uploads/2013/05/chart-3.png" alt="source: FT" width="600" height="465" class="size-full wp-image-1852" /></a><p class="wp-caption-text">source: FT</p></div>
<p>This growth rate and the size of this opportunity are staggering: within four years, <a href="http://idg.wpengine.com/wp-content/uploads/2013/02/Digital-ad-mktg-projections-Myers-2.4.13.pdf" target="_blank">brands’ social marketing spending will pass $11 billion per year</a>, <a href="http://www.mediapost.com/publications/article/183450/companies-prepare-to-share-14-bil-in-social-comm.html" target="_blank">$14 billion will be spent in social commerce</a>, and <a href="http://www.gartner.com/newsroom/id/1826814" target="_blank">50% of e-commerce will be referred by social and mobile posts</a>. In the face of year-over-year declines in traditional media advertising, it isn’t an exaggeration to describe social as the future of advertising.</p>
<h3>…but it needs to be measured</h3>
<p>What’s possibly most amazing about this growth is that it comes even though companies’ social investments have basically been blind gambles. <a href="http://www.gse.org/Portals/2/docs/GSE%20Docs/SocialMedia_BI_SurveyReport_Final.pdf" target="_blank">According to a recent survey</a>, 47% of marketers do not monitor social communities at all. Of those who do, 40% only measure superficial metrics such as “likes” and comment volume; and fewer than 25% measure the ROI of their campaigns.</p>
<div id="attachment_1854" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.infosysblogs.com/brandedge/images/Are_you_monitoring_what_matters.png"><img src="http://blog.awe.sm/wp-content/uploads/2013/05/Are_you_monitoring_what_matters-1024x586.png" alt="Infosys" width="600" height="343" class="size-large wp-image-1854" /></a><p class="wp-caption-text">Infosys</p></div>
<p>Demand clearly exists for measurement and accountability in this space, and the market has responded — <a href="http://www.emarketer.com/Article/Companies-Incorporate-Social-Media-Monitoring-Bottom-Line/1008951" target="_blank">there is growth in the category of sales and measurement tools</a>. But awe.sm is the only technology that measures <strong>social performance</strong>, and performance — customers acquired, visitors converted, dollars and cents — is the only measure that matters.</p>
<h3>Brands and agencies are next</h3>
<p>awe.sm has spent the past four years developing extensible and powerful technology for measuring the outcomes of every single social post. Since the company took its first round of funding, we rolled out <a href="http://blog.awe.sm/2011/12/01/meet-the-new-developers-awe-sm/" target="_blank">a toolkit of powerful developer APIs</a>, and <a href="http://blog.awe.sm/2012/12/04/try-the-new-awe-sm-today/" target="_blank">developed innovative reporting tools</a> used by some of the industry’s most interesting social-enabled software.</p>
<p>These developments make it possible to visualize the success of <strong>earned media</strong> — that is, how does sharing lead to business? Now, it’s time to bring this visibility to <strong>owned media</strong> — the work brands and agencies do to start conversations and spread the word on social networks.</p>
<p>In coming weeks, awe.sm will be rolling out a tool to view, on one screen, the entire social funnel: how many retweets, likes, and engagements did each social post receive?; how many clicks back to a site does each drive?; and what business impact — in registrations, pageviews, and transactions — resulted?</p>
<h3>Let’s do this</h3>
<p>I will be applying my two decades of experience in the media industry to introduce this technology to the brands and agencies on the leading edge of innovative social marketing. Meanwhile, our talented — <a href="http://jobs.awe.sm" target="_blank">and expanding</a> — team continues to innovate and improve our powerful performance measurement tools. The ultimate goal is no less than <strong><em>revolutionizing social marketing by bringing full visibility and performance optimization to every social action</em></strong>.</p>
<p>This is ambitious, exhilarating, and … totally awe.sm.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.awe.sm/2013/05/16/an-awesome-time-to-be-awe-sm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails v Express v Zend</title>
		<link>http://blog.awe.sm/2013/03/26/rails-v-express-v-zend/</link>
		<comments>http://blog.awe.sm/2013/03/26/rails-v-express-v-zend/#comments</comments>
		<pubDate>Tue, 26 Mar 2013 17:59:24 +0000</pubDate>
		<dc:creator>Andrew Grieser</dc:creator>
				<category><![CDATA[Engineering]]></category>

		<guid isPermaLink="false">http://blog.awe.sm/?p=1738</guid>
		<description><![CDATA[If I were to oversimplify, I would bucket awesm&#8217;s infrastructure in two categories: core APIs and products built on top of core APIs. In Bennett&#8217;s blog post he talked about the process of selecting java as the right solution for &#8230; <a href="http://blog.awe.sm/2013/03/26/rails-v-express-v-zend/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>If I were to oversimplify, I would bucket awesm&#8217;s infrastructure in two categories: core APIs and products built on top of core APIs.</p>
<p>In <a title="Bennett's blog post" href="http://blog.awe.sm/2012/12/10/how-to-choose-the-right-tool-for-the-job-awe-sms-language-journey/" target="_blank">Bennett&#8217;s blog post</a> he talked about the process of selecting java as the right solution for our core APIs.</p>
<p>When we started discussing platforms for writing  products, <a title="Rails" href="http://rubyonrails.org/" target="_blank">Rails</a>, <a title="Express" href="http://expressjs.com/" target="_blank">Express</a>, and <a title="Zend" href="http://www.zend.com/" target="_blank">Zend</a> were all considered. We discussed many aspects, but when we got to performance I realized I didn&#8217;t really know how they compared. I mean, I had rough guesses, but no actual data. So I decided to run a quick experiment to give myself a bit more perspective on how these frameworks compare.</p>
<p><strong>At this point I should include a disclaimer</strong>: this is not intended to be a rigorous scientific benchmark of these platforms. This is more along the lines of anecdotal evidence to satisfy personal curiosity. It was my intent to keep the playing field as level as I reasonably could. I would definitely encourage you to run your own tests and benchmarks before making any decisions.</p>
<h2>Test setup</h2>
<p>I built a simple application in each framework, limited in scope to one model and controller. The versions used as follows: Rails: 3.2.12, Zend: 1.12.1, Express: 3.0.5.  You can check out the source <a title="here" href="https://github.com/agrieser/benchmarks" target="_blank">here</a>. Obviously, a feature identical, complete application written in all three frameworks would be best, but writing three complete applications in different frameworks is a fairly big time commitment.</p>
<p>I made an effort to make these applications reflect real applications. They use sessions, cookies, and CSRF middleware. Additionally, I didn&#8217;t take shortcuts on the models: this isn&#8217;t about streaming raw query results to the client, objects were instantiated to encapsulate each record returned to get a real object oriented model (Except for Zend, where I followed the normal awesm convention of keeping database results in associative arrays).</p>
<p>Tests were run in an Ubuntu 12.04 virtual machine on a 4 core i7 laptop. The database was postgres 9.2 and the web server was Nginx 1.2.7. Requests were made and data was collected using <a title="apache benchmark" href="http://httpd.apache.org/docs/2.2/programs/ab.html" target="_blank">apache benchmark</a>. Each data point is an average of 1024 requests.</p>
<p>I wanted to put each platform&#8217;s best foot forward, so for Zend I used <a title="FastCGI" href="http://www.fastcgi.com/" target="_blank">FastCGI</a>, for Rails I used <a title="Unicorn" href="http://unicorn.bogomips.org/" target="_blank">Unicorn</a> with unix sockets, and for Express I used an http proxy. You can view the configuration files for <a title="Fast CGI" href="https://gist.github.com/agrieser/ba01a36d88f2cfd6059e" target="_blank">FastCGI</a>, <a title="Unicorn" href="https://gist.github.com/agrieser/c19f0ec56d651a1e6d4d" target="_blank">Unicorn</a>, and <a title="Nginx" href="https://gist.github.com/agrieser/2628ad58b171784f1d47" target="_blank">Nginx</a>.</p>
<h2>Test results</h2>
<h3>Concurrency vs Request Time</h3>
<h3><a href="http://blog.awe.sm/wp-content/uploads/2013/03/concurrency.png"><img class="alignnone  wp-image-1743" alt="concurrency" src="http://blog.awe.sm/wp-content/uploads/2013/03/concurrency.png" width="600" /></a></h3>
<p>The first thing I wanted to see was how well each of the frameworks handled load. As the number of concurrent requests increased, how did the applications perform? The results show very similar trends for each of the frameworks, roughly linear increases in response time as the number of concurrent requests increase.</p>
<p>The first thing that stood out when looking at this data was how much faster Express was. Since the data is plotted on a log-log scale, the difference between Express and Rails is nearly an order of magnitude. Additionally, I was surprised at how similar Rails and Zend were. I would have expected Zend to be substantially faster than Rails.</p>
<h3>Records Returned vs Request Time</h3>
<p><img class="alignnone  wp-image-1742" style="font-size: 12px; line-height: 18px;" alt="records_returned" src="http://blog.awe.sm/wp-content/uploads/2013/03/records_returned.png" width="600" /></p>
<p>The next aspect I was interested in was the impact of the number of records returned on the response time. The results show that Rails has the highest impact, which makes sense given that a new Active Record object is created for each record returned. Express is less impacted by the number of records, which makes sense given that the objects created for each record are lighter weight than Active Record. Surprisingly, Zend seems to not be affected by the number of records it is processing at all. This makes sense as the records returned in Zend are simple associative arrays, and new class instances are not being created to wrap each result. I chose to use that style in Zend as it matches how our existing Zend applications are written.</p>
<p>I wouldn&#8217;t read too far into this particular test, as it&#8217;s uncommon to render a large number of result to the client. Both Rails and Express have ways of dealing with large number of records without instantiating objects, if the situation calls for it.</p>
<h2>Conclusion</h2>
<p>The goal of these tests was to satisfy my personal curiosity about the performance characteristics of these three platforms. My expectations were that Express or Zend would be the fastest, and Rails would be the slowest. The results were surprising. I wasn&#8217;t sure how much difference to expect between Express and Rails, but I didn&#8217;t think it would be as large as an order of magnitude. Additionally, I expected Zend to be substantially faster than Rails, but it appears to only be slightly faster. Compared to my initial guesses, this takes a bit of wind out of Zend&#8217;s sails, and makes me look at Express more seriously than I initially had.</p>
<p>These tests have helped make the performance differences between the three frameworks a little less murky for me. When we talk about tradeoffs such as development speed vs framework performance, I now have a bit more perspective. If you are considering some of these frameworks, I encourage you to run your own set of tests to evaluate them in the context you care about. If you have run similar benchmarks, let me know as I&#8217;d love to look at the results.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.awe.sm/2013/03/26/rails-v-express-v-zend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How’m I doing? Easy ways to see if your social efforts are working</title>
		<link>http://blog.awe.sm/2013/03/18/howm-i-doing-easy-ways-to-see-if-your-social-efforts-are-working/</link>
		<comments>http://blog.awe.sm/2013/03/18/howm-i-doing-easy-ways-to-see-if-your-social-efforts-are-working/#comments</comments>
		<pubDate>Mon, 18 Mar 2013 16:37:23 +0000</pubDate>
		<dc:creator>Beth</dc:creator>
				<category><![CDATA[Product]]></category>

		<guid isPermaLink="false">http://blog.awe.sm/?p=1713</guid>
		<description><![CDATA[With awe.sm&#8217;s Reports, it’s easy to understand your own contributions to a marketing effort’s social performance. If you’re part of a large team with many projects, this is a great way to drill down to view your specific data. In &#8230; <a href="http://blog.awe.sm/2013/03/18/howm-i-doing-easy-ways-to-see-if-your-social-efforts-are-working/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>With awe.sm&#8217;s <strong>Reports</strong>, it’s easy to understand your own contributions to a marketing effort’s social performance. If you’re part of a large team with many projects, this is a great way to drill down to view your specific data.</p>
<p>In <a title="How do I categorize and organize my shares?" href="http://blog.awe.sm/2013/01/11/how-do-i-categorize-and-organize-my-shares/">my last post</a>, I showed you how to categorize and organize shares for a given project, in the context of promoting a movie. Organizing your own shares isn’t much different — let’s revisit that data.</p>
<p><img class="alignnone size-full wp-image-1724" style="font-size: 12px; line-height: 18px;" alt="Screen Shot 2013-03-15 at 5.05.25 PM" src="http://blog.awe.sm/wp-content/uploads/2013/03/Screen-Shot-2013-03-15-at-5.05.25-PM.png" width="396" height="350" /></p>
<p>Start with the report I made last time, <em>Godzilla Movie Shares</em>. Now, I want to know which of <em>my</em> shares are generating the most traffic, so I’ll create a new Group Table, and name it “Godzilla Shares by Beth.” (It’s always good to use descriptive names; this provides some context if I share this report with my team.) For this table, I’ll set up a <em>Filter</em>: filter by Username: Beth, and <em>group</em> by awe.sm ID, to see only the links that I shared.</p>
<p><img class="alignnone size-large wp-image-1725" style="font-size: 12px; line-height: 18px;" alt="Screen Shot 2013-03-15 at 5.04.58 PM" src="http://blog.awe.sm/wp-content/uploads/2013/03/Screen-Shot-2013-03-15-at-5.04.58-PM.png" width="640" height="270" /></p>
<p>I can see my San Francisco premiere is still beating my Austin premiere in terms of traffic — but how much of that was from my social posts? To find out, let’s make a new graph, named “Clicks from Beth’s Shares.” I want to understand my shares in the context of my San Francisco and Austin premiere campaigns, so I’ll group by campaign. Now, I can see that on March 14th, 945 clicks for the San Francisco campaign were from my shares.</p>
<p><img class="alignnone size-large wp-image-1726" style="font-size: 12px; line-height: 18px;" alt="Screen Shot 2013-03-15 at 5.08.27 PM" src="http://blog.awe.sm/wp-content/uploads/2013/03/Screen-Shot-2013-03-15-at-5.08.27-PM.png" width="640" height="276" /></p>
<p>If I’ve fully integrated with awe.sm’s <a href="http://developers.awe.sm/apis/conversions/" target="_blank">Conversion Tracking</a>, then I can even understand how my posts drive revenue.</p>
<p>The Godzilla Movie project is tracking several goals, including box set purchases, app downloads, VIP ticket sales and iTunes streams. I want to know how much revenue in VIP ticket sales my sharing drove, so I’ll create a new <em>Spark Graph</em> named “VIP Ticket Sales.” Once again, I’ll filter my visualization by Username, to see only my own shares, and I’ll select that I wish to view the count and value for VIP Tickets in Conversions.</p>
<p><a href="http://blog.awe.sm/wp-content/uploads/2013/03/Screen-Shot-2013-03-15-at-5.18.20-PM.png"><img class="alignnone size-large wp-image-1727" alt="Screen Shot 2013-03-15 at 5.18.20 PM" src="http://blog.awe.sm/wp-content/uploads/2013/03/Screen-Shot-2013-03-15-at-5.18.20-PM.png" width="393" height="346" /></a></p>
<p>Now I can see that my sharing resulted in 64 VIP ticket sales, for a total of $9,800. I can instead choose <em>total conversions</em> to see the total value of my contribution to all tracked revenue generated on this campaign.</p>
<p><small><strong>COOL, HUH?</strong></small> But of course this is just the tip of the … giant radioactive tail. among the <a href="http://www.youtube.com/watch?v=4bCLSHKsrPc" target="_blank">countless features of the new awe.sm</a> is the ability to slice and dice across literally <a title="How do I categorize and organize my shares?" href="http://blog.awe.sm/2013/01/11/how-do-i-categorize-and-organize-my-shares/" target="_blank">any dimension of your data</a>.</p>
<p>And don’t forget: with great power comes great user support. We’re always here to help, by <a onclick="_gaq.push(['_trackEvent', 'Call-To-Action Links', 'Submit', 'bloglivechat']); AWESM.convert('goal_6', 0); return SnapABug.startLink();" href="#">live chat</a>, <a href="http://support.awe.sm/customer/portal/emails/new" target="_blank">email</a>, or with <a href="mailto:questions@awe.sm">free custom training</a> for you and your team. Don’t be a stranger!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.awe.sm/2013/03/18/howm-i-doing-easy-ways-to-see-if-your-social-efforts-are-working/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What are you learning at lunch?</title>
		<link>http://blog.awe.sm/2013/03/11/what-are-you-learning-at-lunch/</link>
		<comments>http://blog.awe.sm/2013/03/11/what-are-you-learning-at-lunch/#comments</comments>
		<pubDate>Mon, 11 Mar 2013 16:01:47 +0000</pubDate>
		<dc:creator>bennett</dc:creator>
				<category><![CDATA[Culture]]></category>

		<guid isPermaLink="false">http://blog.awe.sm/?p=1666</guid>
		<description><![CDATA[For the past two years, every Thursday, we’ve had a Show &#38; Tell lunch where a speaker presents a topic to the rest of the team.  It started as a way to get to know each other, and it’s evolved &#8230; <a href="http://blog.awe.sm/2013/03/11/what-are-you-learning-at-lunch/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p dir="ltr">For the past two years, every Thursday, we’ve had a <strong>Show &amp; Tell</strong> lunch where a speaker presents a topic to the rest of the team.  It started as a way to get to know each other, and it’s evolved to be one of my favorite days of the week because it gives us a way for the team to share our skill and experience beyond what we pick up from just working with each other.</p>
<h1 dir="ltr"><img class="alignnone size-large wp-image-1694" style="font-size: 12px; line-height: 18px;" alt="lunch" src="http://blog.awe.sm/wp-content/uploads/2013/03/lunch-1024x764.jpg" width="640" height="477" /></h1>
<h1 dir="ltr">Format</h1>
<p>The format has evolved over time, and this is what’s working for us right now.  We have one speaker present every week.  The presentations last between 15 and 30 minutes.  Every team member takes a turn as a presenter.  The topics are usually on technical introductions/explanations, product ideas/demos, or we have external speakers.  Although they are presentations we encourage everyone to interrupt with questions and comments.  Finally, we keep a calendar of past and upcoming speakers.</p>
<h1 dir="ltr">Why do it?</h1>
<h2 dir="ltr">Improve your skills</h2>
<p>If the presenter doesn’t have something to talk about, they can <strong>learn about something new</strong> and show it off.</p>
<p>Get <strong>better at communicating</strong>.  It’s really difficult to talk about how code functions.  Getting time to focus on a single topic and explain it really well has helped me learn how to simplify what I want to communicate.</p>
<p>Spend time on <strong>presentation skills</strong>.  Crafting your message is a hard task, so the more time you spend practicing doing that helps you figure out what works and what doesn’t.</p>
<h2 dir="ltr">Share your knowledge</h2>
<p>We are constantly teaching one another about new technologies, libraries, and ideas, but usually this sharing just involves pointing someone to a blog post or giving a brief explanation.  Presentations allow you to <strong>explain a topic in depth</strong> to many people and <strong>provide a forum to ask questions</strong>.  We’ve learned a lot about each other’s skills and interests through these presentations.</p>
<p>Our team is 13 people, and even with this few people not everyone is aware of all the projects happening.  Sometimes for our presentations, we give an in-depth look at a product we are working on to make sure everyone on the team is aware of it and can offer their insight.</p>
<h2 dir="ltr">Making it part of your routine</h2>
<p>We could always schedule a meeting when someone wants to present a topic, but by making this a weekly event it becomes part of our weekly routine.  This has lead to <strong>good attendance</strong> and <strong>made learning and communication part of our culture</strong>.  Also, it is easier to find a designated spot when everyone can be available week after week, than to find a time that works for everyone when someone wants to make a presentation.</p>
<h1 dir="ltr">What we’ve got to show for it</h1>
<ul>
<li dir="ltr">2 years of Show &amp; Tells</li>
<li dir="ltr">15 different speakers</li>
<li dir="ltr">32 presentations</li>
<li dir="ltr">Some particularly great presentations
<ul>
<li><span style="font-size: 16px;"><a href="https://speakerdeck.com/asterick/intro-to-angular">Intro to Angular.js</a> (disclaimer: we swear a lot) </span></li>
<li dir="ltr"><a href="http://agrieser.github.com/ember_demo">Intro to Ember.js</a> (out of date with the current Ember.js)</li>
<li dir="ltr"><a href="http://www.slideshare.net/seldo/distributed-systems-and-consistency">Distributed Systems and Consistency</a></li>
</ul>
</li>
</ul>
<p>We hire people who want to give talks.  People with a diverse set of interests who are interested in learning and want to help the rest of the company learn as well.  A great example of this was after we hired <a href="https://twitter.com/agrieser">@agrieser</a>.  He gave a <a href="http://agrieser.github.com/ember_demo">great presentation about Ember.js</a> and raised the bar for all of us. I personally have learned a lot about many company projects and new technologies.  I’ve also gotten much better at presenting.</p>
<h1 dir="ltr">How you can do it as well</h1>
<ul>
<li dir="ltr">Pick a day</li>
<li dir="ltr">Works best over lunch</li>
<li dir="ltr">Presentation length should be 15-30 minutes</li>
<li dir="ltr">Pick topics that will appeal to your audience</li>
<li dir="ltr">Keep a calendar of presenters, topic, and presentation deck</li>
<li dir="ltr">At the end of a presentation mention who is up next and their topic</li>
<li dir="ltr">Stop thinking and get started!</li>
</ul>
<h1 dir="ltr">Tools and tips</h1>
<p><a href="http://www.google.com/drive/start/apps.html#product=slides">Google Docs presentations</a> are easy to get setup and use.  Another simple yet powerful tool aimed at developers is <a href="http://lab.hakim.se/reveal-js/">Reveal.js</a>.</p>
<p><strong>Know your audience</strong>.  Our team is small so we try to make sure any topic chosen will appeal to at least a few people.</p>
<p><strong>Presentations take time to make</strong>.  A presentation isn’t an excuse to neglect your existing work.  It takes time to make polished presentation, but our Show &amp; Tells are meant to convey ideas more than be perfect presentations, so we try to not take too much time to prepare.  Also, over time you will learn how to quickly gather materials and effectively use the presentation tools so you preparation time will be reduced.</p>
<h1 dir="ltr">And more</h1>
<p>We are still getting better at this, creating better presentations and adding more guest speakers to come in and talk.  So if you&#8217;d like to attend or present <a href="mailto:developers+showandtell@awe.sm">give us a shout</a>.  And if you&#8217;d like to be part of the fun take a look at <a href="http://totally.awe.sm/jobs/">our jobs page</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.awe.sm/2013/03/11/what-are-you-learning-at-lunch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Medium Data: things to try before abandoning SQL</title>
		<link>http://blog.awe.sm/2013/02/25/medium-data-things-to-try-before-abandoning-sql/</link>
		<comments>http://blog.awe.sm/2013/02/25/medium-data-things-to-try-before-abandoning-sql/#comments</comments>
		<pubDate>Mon, 25 Feb 2013 18:04:59 +0000</pubDate>
		<dc:creator>seldo</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[medium data]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://blog.awe.sm/?p=1534</guid>
		<description><![CDATA[Disclaimer: the following blog post is deeply imperfect. It&#8217;s not totally comprehensive, and it doesn&#8217;t justify every claim I make with quantitative data. It&#8217;s full of anecdotal evidence and subjectivity. But I&#8217;ve concluded that by the time I found the &#8230; <a href="http://blog.awe.sm/2013/02/25/medium-data-things-to-try-before-abandoning-sql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.awe.sm/wp-content/uploads/2013/02/corgi-computer.jpeg"><img class="size-medium wp-image-1653 alignright" alt="corgi-computer" src="http://blog.awe.sm/wp-content/uploads/2013/02/corgi-computer-300x220.jpeg" width="300" height="220" /></a>Disclaimer: the following blog post is deeply imperfect. It&#8217;s not totally comprehensive, and it doesn&#8217;t justify every claim I make with quantitative data. It&#8217;s full of anecdotal evidence and subjectivity. But I&#8217;ve concluded that by the time I found the time to do all the research and write the footnotes needed to bullet-proof it, we&#8217;d be more worried about the sun going out than our data storage and manipulation technology. I hope it contains a few data points that you find useful, despite its flaws.</p>
<p>First, my thesis: <b>a lot of less-experienced developers are using big data<sup><a href="#ft1">[1]</a></sup> and NoSQL technologies because they are new and cool, and because SQL is old and hard. A lot of these people would save themselves time and effort by learning more about SQL and tuning their databases and hardware just a little bit.</b> Rather than just gripe about it, I&#8217;m going to suggest a grab-bag of basic techniques of varying complexity that can help a lot (especially if you are using MySQL), and later I&#8217;m going to follow up with another post about more complex strategies for more experienced devs.</p>
<p>My task has been made easier by some other recent posts by other people that made most of my argument for me. Namely:</p>
<ol>
<li>
<h3><a href="http://zef.me/4235/pick-your-battles">Pick your battles</a> by Zef Hemel</h3>
<p>The money quote is this:</p>
<blockquote><p>go and build amazing applications. Build them with the most boring technology you can find. The stuff that has been in use for years and years. Where every edge case has been covered. Where every library you will ever need has been in production for years. Where every part of the release cycle has been ironed out. Where the best practices on how to do testing are known.</p></blockquote>
<p>In essence: <b>trying to solve a problem by using a technology stack you&#8217;ve never tried before gives you, at minimum, two problems</b>. Big data tool chains are very different from more general purpose data-stores, and newer data stores are less reliable at scale, simply because fewer of their edge-cases have been met and managed.</li>
<li>
<h3><a href="http://lucumr.pocoo.org/2012/12/29/sql-is-agile/">SQL is agile</a> by Armin Ronacher</h3>
<p>Armin&#8217;s post has fewer pithy quotes, but the key point is that early in the life of your project, when your data is small<sup><a href="#ft1">[1]</a></sup> but your ideas and use-cases can change dramatically, <b>the structure and flexibility of an RDBMS trumps the single-case-optimized performance of a document store</b>.</li>
<li>
<h3><a href="http://grimoire.ca/mysql/choose-something-else">MySQL: choose something else</a> by Owen Jacobson</h3>
<p>Opinionated and inflammatory as this post is, what I took away from it is: <b>don&#8217;t judge all RDBMS by the failures of MySQL</b>. MySQL is not the best database in the world, it&#8217;s just the easiest<sup><a href="#ft2">[2]</a></sup>. It&#8217;s getting <a href="https://blogs.oracle.com/MySQL/entry/mysql_5_6_is_a">better all the time</a>, but Postgres is really good <i>right now</i><sup><a href="#ft3">[3]</a></sup>. Check to make sure the problem you have with &#8220;SQL&#8221; is really just a problem with MySQL. Further disclaimer: I still mostly use MySQL myself, out of familiarity and habit, and all of my tips are from that perspective.</li>
</ol>
<p>So if you&#8217;re not on board with the premise that new technologies require substantial up-front investment that will delay your actually building anything useful, that old and tested technologies can be great, and that SQL in particular is cruelly maligned, take it up with those guys. What I&#8217;m going to be sharing are some strategies for making MySQL work better in a lot of common use-cases.</p>
<h2>Don&#8217;t use vanilla MySQL</h2>
<p>A while back, <a href="http://www.mysql.com/news-and-events/sun-to-acquire-mysql.html">Sun Microsystems bought MySQL AB</a>, the MySQL company. Then Oracle, maker of a major competitor to MySQL, <a href="http://www.oracle.com/us/corporate/press/018363">bought Sun Microsystems</a>. Conspiracy theories abound, but I don&#8217;t believe they really bought the whole company just to kill MySQL.<sup><a href="#ft4">[4]</a></sup> Nevertheless, <a href="http://techcrunch.com/2012/08/18/oracle-makes-more-moves-to-kill-open-source-mysql/">Oracle suffers from a clear conflict of interest</a> as the steward of MySQL, and the company who in my opinion have taken up the torch as the true home of MySQL are <a href="http://www.percona.com/software/percona-server">Percona</a>.</p>
<p>Percona Server is MySQL, just fully patched and cared for, and you can <a href="http://www.percona.com/doc/percona-server/5.5/installation/apt_repo.html">install it with apt-get</a> just like Oracle&#8217;s version. I think switching to Percona MySQL has the highest ratio of performance improvement to effort of any of these strategies. If you try nothing else, try using Percona.</p>
<h2>Use a great in-memory database: MySQL</h2>
<p>If your data is small enough that it can fit in memory, then the sadly under-appreciated <a href="https://dev.mysql.com/doc/refman/5.5/en/innodb-buffer-pool.html">innodb_buffer_pool</a> configuration settings can be trivially modified to make MySQL behave like an in-memory database, like MongoDB. Don&#8217;t be put off by all the caveats in the documentation: if you have less than 50GB of data, buy a server with 64GB of RAM, set innodb_buffer_pool_size to 50GB, and watch it fly<sup><a href="#ft5">[5]</a></sup>. Of course, if your data all fits in memory, almost any database will fly, because you don&#8217;t have big data. You don&#8217;t even have medium data. You have no problems at all: <a href="http://stackoverflow.com/questions/1371400/how-much-faster-is-the-memory-usually-than-the-disk">memory is 100,000 times faster than disk access</a>, so you can do really, <i>really</i> inefficient things without issue.</p>
<h2>Cache it if you can</h2>
<p>Caching is a solution so obvious I hesitate to put it in, and yet also such a big, varied solution that I could never cover it in one post. At its most basic: if some subset of your data is more frequently accessed than other parts, for instance because it&#8217;s popular, or because it&#8217;s recent, and if that data changes less than about once per second, you can put that data in an in-memory cache, and speed up reads by an order of magnitude or more (remember: <a href="http://stackoverflow.com/questions/1371400/how-much-faster-is-the-memory-usually-than-the-disk">100,000 times faster</a>).</p>
<p>For a huge variety of applications, caching can be enough to take you a long way: for example, if you have a list of your top articles, or recent posts, and you are serving 100 requests per second, implementing a cache that lasts <i>only 1 second</i> will reduce the number of reads to your database from 100 to 1, i.e. two orders of magnitude (but beware of <a href="http://en.wikipedia.org/wiki/Thundering_herd_problem">thundering herds</a> when that cache expires).</p>
<p>You will also need to solve the problem of cache invalidation, i.e. knowing when to use the cache and not. That&#8217;s a case with endless nuance, one of the <a href="http://martinfowler.com/bliki/TwoHardThings.html">two hard problems of computer science</a>, but frequently solvable for simpler use-cases simply by automatically expiring cache entries after a certain amount of time (a feature built into <a href="http://memcached.org/">memcached</a>, the most popular in-memory cache).</p>
<h2>Replicate to handle more reads<sup><a href="#ft6">[6]</a></sup></h2>
<p>If your data-access pattern is not (or not entirely) amenable to caching, then a complementary solution for scaling reads may be replication. RDBMS like MySQL and Postgres have <a href="http://dev.mysql.com/doc/refman/5.0/en/replication.html">replication</a> <a href="http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling">built-in</a>, and while the details vary, the central idea is simple: instead of having one database that all your reads come from, have many &#8220;slaves&#8221;, each a continuously-updated copy of the primary, &#8220;master&#8221; database.</p>
<p>Replication works well if your read-queries are competing with each other for resources on your master database, by providing more memory, disk time and processing power for each query. It can also help if you simply have too many incoming connections to your database<sup><a href="#ft7">[7]</a></sup>.</p>
<p>Replication&#8217;s major complication is &#8220;replication delay&#8221;, i.e. the time it takes for a write on the master to turn up on one of the slaves. This means you can read an out-of-date value from a slave while the new value is en route from the master &#8212; particularly a problem if your app writes a record to the master and then immediately reads it back for confirmation, and that read goes to a slave.</p>
<p>Replication is also frequently used as a backup/high-availability solution. As the <a href="http://en.wikipedia.org/wiki/Gnolia">ill-fated Ma.gnolia</a> famously learned, a replicated database is in no way a backup (though it can <a href="http://blog.awe.sm/2013/02/21/backups-ebs-and-awe-sm/">help in creating them</a>, by making snapshots and dumps more convenient). However, it can help to some degree with availability, especially if your application can tolerate a period of read-only activity while the master is upgraded/repaired or a slave is promoted.</p>
<h2>Use indexes, but carefully</h2>
<p>This is another one that falls into the &#8220;duh&#8221; category for the experienced, but indexing is very poorly understood by new developers. In essence, an index is a sub-set of your data, held in memory like a cache, but ordered in such a way as to make a particular type of lookup quicker, and unlike a cache <b>guaranteed to always be accurate</b>. That sounds basic but can be incredibly powerful:</p>
<ul>
<li>If your data is on a disk, locating the record via an in-memory index means that instead of hitting the disk dozens of times, your database needs to hit the disk exactly once: to retrieve the record itself. Once again: <a href="http://stackoverflow.com/questions/1371400/how-much-faster-is-the-memory-usually-than-the-disk">memory is 100,000 times faster than disk</a> for this kind of access. Cutting out even a single disk read helps enormously.</li>
<li>If your query is only on a subset of your data, MySQL has the concept of a &#8220;covered query&#8221;: for instance, if you just need to look up a username and password, put those together as an index and queries that need only those two values will be pulled directly from that index in memory, without hitting disk at all.</li>
</ul>
<p>The most common pitfall of indexing is to index every column individually. It is seldom the case that you do equally frequent lookups on all your database columns, and each index comes with a cost &#8212; it has to be held in memory. If you index too aggressively, some of your indexes will be written to disk instead of held in memory, greatly slowing access. Also remember that every time a column is changed, the related index must be updated, so indexing a frequently-updated value that is seldom used as a primary lookup (such as a user&#8217;s score, or last login date) will leave your database doing a lot of extra work for no reason.</p>
<p>The simplest, first pass rule for indexing is: find the columns you use in your WHERE clause, and put them into a single index. But with the right indexing strategy you can go a lot further: Keith Murphy of MySQL magazine has a pretty good slide deck on <a href="http://www.slideshare.net/manikandakumar/mysql-query-and-index-tuning">index tuning and query optimization</a>.</p>
<h2>Shard your data, but only after you&#8217;ve tried everything else</h2>
<p>The principle of data sharding is simple: instead of having one big table, split it into many tables across multiple boxes. This allows you to store more data than can fit on a single box, and can also speed up queries by limiting the size the index needs to be on any given box.</p>
<p>Sharding is a powerful, potentially very useful design pattern. It&#8217;s also difficult to get right, with lots of potential pitfalls. Unlike lots of the other patterns mentioned in this post, it&#8217;s also been quite extensively discussed and explained recently &#8212; almost everybody I&#8217;ve interviewed in the last three years has mentioned sharding to solve database problems, even people who hadn&#8217;t heard of caching or replication. So I won&#8217;t be covering it in this post. Eric Ries wrote a pretty good <a href="http://www.startuplessonslearned.com/2009/01/sharding-for-startups.html">practical introduction to sharding</a> over at Startup Lessons Learned; they also rely on sharding <a href="http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram">at Instagram</a>.</p>
<h2>Shard your queries</h2>
<p>The name of this pattern is not, as far as I&#8217;m aware, an industry term &#8212; it&#8217;s just what we call it internally at awe.sm. In data sharding, you split your data across multiple boxes, and run all types of queries on these subsets of your data. In query sharding, you instead copy all of your data (for instance, via replication) to multiple boxes, and run subsets of your queries on each box.</p>
<p>This allows you to optimize each box for a given type of query: for instance, one could be optimized for quick key-value lookups (large numbers of connections, a small amount of memory for each one) and another for large aggregations (few connections, lots of memory). It also allows for more effective indexing: put exactly one index on each shard, tailored to the requirements of that query. Your box will be able to fit more or even all of that single index in memory, and it will also spend less time updating unused indexes.<sup><a href="#ft8">[8]</a></sup></p>
<h2>Coming up later: more!</h2>
<p>Because this post was already hella long, I decided to split the next batch of patterns into a second blog post, to follow a week or two after this one. More experienced users should find that post of more interest.</p>
<hr />
<p><a name="ft1"></a>[1] In an early version of this post, I spent a long time defining big data. Suffice to say that it&#8217;s a tricky thing to nail down, but a good rule of thumb is that if you have less than 100GB of data, you definitely don&#8217;t have big data, and if you have less than a terabyte of actively-used data (not just logs) you probably still don&#8217;t. These claims are horribly unsubstantiated, but spending a lot of time on them distracts from my point.</p>
<p><a name="ft2"></a>[2] You read my disclaimer about subjective calls, right? But what I mean is: MySQL is a classic disruptive technology. When it first became popular 15 years ago, it&#8217;s because it was cheaper than all commercial solutions, and a hell of a lot easier to get running than Postgres was (especially on Windows, where a lot of junior developers like myself got started, and in multi-tenant environments like shared hosting). In the subsequent decade and a half, hundreds of competitors have arisen and Postgres has done much to close the newbie-friendliness gap, but MySQL has remained &#8220;good enough&#8221; to stay the most popular open-source database.</p>
<p><a name="ft3"></a>[3] And if you can afford Oracle, then by all means do. Evil they may be, expensive as all hell they certainly are, but Oracle does everything you&#8217;ve ever dreamed of in a relational datastore and is unbelievably performant. If you&#8217;ve got the budget, it&#8217;s a magic wand of awesome.</p>
<p><a name="ft4"></a>[4] Apart from being a very expensive way to force startups using MySQL to upgrade to Oracle even though they can&#8217;t afford it, MySQL is open source, so buying the parent company doesn&#8217;t give you control. It seems Oracle wanted Java, and Sun&#8217;s hardware business, and MySQL just came along as a freebie, but that&#8217;s pure speculation, so let&#8217;s please not have a bunch of comments about it.</p>
<p><a name="ft5"></a>[5] Percona&#8217;s performance blog has a realy useful post on <a href="http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/">tuning innodb_buffer_pool_size</a>.</p>
<p><a name="ft6"></a>[6] I would have listed replication as &#8220;too obvious&#8221; as well, but after three years of interviewing junior developers, I&#8217;ve concluded that replication is neither widely known nor well-understood; it apparently falls into the &#8220;too scary/too hard&#8221; feature category.</p>
<p><a name="ft7"></a>[7] If too many connections is your issue and you&#8217;re using PHP, you may get further faster by looking into using <a href="http://php.net/manual/en/pdo.connections.php">persistent connections</a>.</p>
<p><a name="ft8"></a>[8] This is one of those times when I wish I&#8217;d had time to gather some quantitative data on the effectiveness of query sharding. Instead, all I can say is that it works for us.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.awe.sm/2013/02/25/medium-data-things-to-try-before-abandoning-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backups, EBS, and awe.sm</title>
		<link>http://blog.awe.sm/2013/02/21/backups-ebs-and-awe-sm/</link>
		<comments>http://blog.awe.sm/2013/02/21/backups-ebs-and-awe-sm/#comments</comments>
		<pubDate>Thu, 21 Feb 2013 15:00:42 +0000</pubDate>
		<dc:creator>Tim Sogard</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Backups]]></category>
		<category><![CDATA[EBS]]></category>

		<guid isPermaLink="false">http://blog.awe.sm/?p=1570</guid>
		<description><![CDATA[Following up on our post AWS: The Good the Bad and the Ugly we wanted to answer the most commonly asked question: &#8220;If you don&#8217;t use EBS, how do you handle backups?&#8221; The short answer is: &#8220;We use EBS.&#8221; To &#8230; <a href="http://blog.awe.sm/2013/02/21/backups-ebs-and-awe-sm/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Following up on our post <a href="http://blog.awe.sm/2012/12/18/aws-the-good-the-bad-and-the-ugly/">AWS: The Good the Bad and the Ugly</a> we wanted to answer the most commonly asked question: &#8220;If you don&#8217;t use EBS, how do you handle backups?&#8221; The short answer is: &#8220;We use EBS.&#8221;</p>
<p>To clarify: while we do not allow EBS in our critical path (as bootable/attached instance volumes[<a href="#note_1">1</a>] or from EBS backed services[<a href="#note_2">2</a>]), we do make significant use of EBS for backups. Over our 3+ years using AWS we have learned a lot about building a highly available service using virtual hardware, and have found EBS to be too much of a risk for the reward.</p>
<p>In this post we are going to discuss our usage of EBS, and specifically how we manage backups and recovery procedures to get the best mix of durability and speed.</p>
<h1>Recap: EBS vs Instance storage</h1>
<p>For those just tuning in: <a href="http://aws.amazon.com/ebs/">EBS</a> (Elastic Block Store) is a service that provides block device storage to instances running in <a href="http://aws.amazon.com/ec2/">EC2</a>. At the OS level, EBS looks like a block device (just like a real, physical hard drive), so EBS volumes can be used as bootable storage for EC2 instances. This allows portability between instances and simplifies backups and restores. Because of this it is considered an <a href="http://alestic.com/2012/01/ec2-ebs-boot-recommended">EC2 best practice</a> to use EBS backed instances.</p>
<p>Due to concerns of performance and reliability of the EBS service (covered in our <a href="http://blog.awe.sm/2012/12/18/aws-the-good-the-bad-and-the-ugly/">previous post</a>) we have migrated to ephemeral storage. Amazon recommends <b>against</b> using ephemeral storage for one critical reason: as the name implies, it&#8217;s not permanent. If the instance shuts down for any reason other than a warm reboot the data cannot be recovered[<a href="#note_3">3</a>]. Ephemeral instances also cannot be paused, since unused capacity is quickly recycled in EC2.</p>
<p>On the upside, ephemeral storage:</p>
<ul>
<li>has relatively consistent I/O</li>
<li>has isolation from EBS availability and performance issues</li>
<li>is included in the base instance cost</li>
</ul>
<p>For awe.sm, consistent I/O is the most important benefit of ephemeral storage. Before migrating off EBS our database machines suffered from noisy neighbors, network turbulence, and eventually the workload exceeded the I/O performance that EBS was delivering. It was for these reasons that we moved to instance storage. As our data and workload has grown over the past year we have also begun RAIDing the ephemeral storage[<a href="#note_4">4</a>] of our database machines for increased I/O throughput and storage capacity.</p>
<h1>awe.sm&#8217;s backup strategy</h1>
<p>Now we&#8217;re going to look at some backup and recovery strategies. The most important factor in selecting a backup method is the time it takes for recovery. In order to minimize downtime we use a tiered backup plan involving redundancy, recycling (cannibalizing) backup hardware, and progressively slower layers of persistent storage. The first layer, redundancy, allows for seamless operation in the face of failure at the cost of keeping additional capacity on hand. The next layer, recycling, comes into play when capacity dips too low. Hardware may be promoted to fill gaps, or backups may be suspended while the EBS volumes are moved around to avoid copying large data over the public EC2 network. Lastly, all backups are persisted to EBS or S3, both of which are extremely durable, though slow.</p>
<h2>Redundancy in EC2</h2>
<p>The first line of defence in backups is redundancy. awe.sm is mirrored into 2 logical groups, each group covering 2 zones within us-east-1. We distribute traffic and manage configuration using HAproxy and DNS. This grouping helps us maintain availability during the loss of a single instance or an entire zone. While it is not ideal to run with only one logical group, it gives us enough capacity to focus on a proper recovery.</p>
<h2>Backing up MySQL databases</h2>
<h3>Percona Xtrabackup</h3>
<p>For MySQL databases over 1GB, backing up and restoring from raw SQL is impractical. Our MySQL backup tool of choice is <a href="http://www.percona.com/software/percona-xtrabackup">Percona Xtrabackup</a>. Xtrabackup allows non-blocking incremental backups of InnoDB databases and produces a usable MySQL data directory as its output.</p>
<h3>Backing up small MySQL databases</h3>
<p>For our smaller databases we use the streaming mode of Xtrabackup to create a compressed tarball of the MySQL data directory. These are stored on S3 for portability and the convenience of auto-expiration.</p><pre class="crayon-plain-tag">innobackupex --stream=tar /backups/tmp --slave-info \
     --user=backups --password=xxxxxxxx | gzip - &gt; /backups/2013/02/hostname.tgz</pre><p></p>
<h3>Restoring from a streaming backup</h3>
<p>To restore a streaming backup: uncompress the backup and prepare it with the apply-log command. <b>Note</b>: Be sure to use the -i option to tar (ignore EOFs) when unpacking the tarball[<a href="#note_5">5</a>].</p><pre class="crayon-plain-tag">mkdir /var/lib/MySQL.new
tar zxvif /backups/2013/02/hostname.tgz -C /var/lib/MySQL.new/
innobackupex --apply-log /var/lib/MySQL.new/</pre><p>Once prepared: move the new directory into place, change ownership to the MySQL user, and start MySQL. To reconfigure replication use the replication values found in the xtrabackup_slave_info file in the restored MySQL directory.</p>
<h3>Backing up large MySQL databases</h3>
<p>Our main dataset is a group of MySQL databases weighing in around 500GB. A script performs incremental backups to EBS volumes and inintiates snapshots of the volumes at appropriate intervals.<br />
<br />
First a base backup is made:</p><pre class="crayon-plain-tag">/usr/bin/innobackupex --user=backups --password=xxxxxxxx --slave-info \
     /backups/groupset-2013-01-20/base</pre><p>Subsequent backups are made incrementally, and applied against the base backup.</p><pre class="crayon-plain-tag">/usr/bin/innobackupex --user=backups --password=xxxxxxxx --incremental --slave-info \
     --safe-slave-backup --incremental-basedir=/backups/groupset-2013-01-20/base \
     /backups/groupset-2013-01-20/incremental
/usr/bin/innobackupex --apply-log --redo-only /backups/groupset-2013-01-20/base \
     --incremental-dir=/backups/groupset-2013-01-20/incremental/2013-02-01_07-15-05</pre><p></p>
<h3>Restoring from an incremental backup</h3>
<p>After copying the data to the host (from the backup host or a new snapshot clone) a final apply log step needs to be performed on the base backup to create the InnoDB log files:</p><pre class="crayon-plain-tag">innobackupex --apply-log /restore_mount/groupset-2013-01-20/base</pre><p>Then move the base directory to the MySQL data directory location, change ownership of the directory to the MySQL user, and start MySQL. To reconfigure replication use the values from the xtrabackup_slave_info file in the <b>latest incremental backup directory</b> within the backup set.</p>
<h2>A word about EBS snapshots</h2>
<p>Snapshots of EBS drives are stored on S3, which has slower transfer speeds than EBS. When a volume is created from a snapshot EBS mocks the volume, attaches it to the instance and begins a background operation to sync the snapshot from S3. During this sync period, read operations on un-synced sectors will be proxied to S3 directly[<a href="#note_6">6</a>]. For this reason restoring from an EBS snapshot is the slowest method of recovery, and avoided where possible.</p>
<h2>Other data</h2>
<h3>Riak</h3>
<p>We’re beginning to use Riak here at awe.sm, and once again we find ourselves ignoring best practices[<a href="#note_7">7</a>] and running with our Riak data stored on ephemeral drives instead of EBS. Having our Riak data on EBS would allow portability and simplify recovery from lost instances. However, performance is more valuable to us than the flexibility EBS provides.</p>
<p>Our backup strategy is new and subject to change, but so far it looks like this: an exclusive lock is coordinated using a monitoring server. The host with the lock confirms the ring is healthy with the <code>riak-admin ringready</code> command to ensure the ring is ready for the loss of a node. The Riak service is stopped on the backup host and the ring, data, and config directories are copied to an EBS drive, which is snapshotted at regular intervals.</p>
<p>Restoring Riak requires copying the data back into place, confirming the node config (especially node name), configuring the ring for a node replacement, and letting Riak’s read-repair handle the rest. <b>Note:</b> When replacing a crashed riak node, make sure to explicitly &#8216;down&#8217; the missing node before running the force-replace command. Otherwise the missing node will cause the riak cluster to be unable to converge ring changes.</p>
<h3>Non database data</h3>
<p>For small non-database data we primarily use S3. The tools <a href="http://s3tools.org/s3cmd">s3cmd</a> and <a href="http://jets3t.s3.amazonaws.com/downloads.html">jets3t</a> have been especially useful for synchronizing files and directories to S3.</p>
<h1>Another note on redundancy</h1>
<p>While rare, there are times when being available in multiple zones within one region is not enough. For that contingency we maintain a warm backup cluster in us-west-1.</p>
<p>If your service has a critical need for uptime you should at minimum have an executable disaster recovery plan. Sync custom AMIs when they’re updated, have AWS launch configurations or scripts for spinning up instances and make sure your puppetmaster/chef server/ansible repository has its own backup and restore plan. The only thing worse than losing critical instances is the hopeless feeling of starting from scratch when you realize your build/deploy server went down with the fleet.</p>
<h1>Final words</h1>
<p>As a web service that connects our clients&#8217; customers to the content they want, we aim to never get in the way, so we take availability extraordinarily seriously at awe.sm. Through the use of tiered redundancy and backups, and careful use of AWS services we have found a balance between convenience and stability. We enjoy the benefits of the flexibility of AWS while protecting ourselves from some of the risks of running in a cloud environment. For any service having a layered, tested backup strategy is paramount to preserving continuity. Remember that no system is perfect, but with proper preparation you can greatly reduce your risk in the chaos of the cloud.</p>
<p>Notes:<br />
<a name="note_1"></a>[1] The linux kernel can hang if it attempts to poll a mounted block device which is completely unresponsive. This can be dimished with mount options, but is still a pain.<br />
<a name="note_2"></a>[2] <a href="http://serverfault.com/questions/459197/which-aws-features-are-ebs-backed">An unofficial list of EBS backed AWS services.</a><br />
<a name="note_3"></a>[3] While decreeing that ephemeral drives can never be recovered is a layer 8 decision, it is understandable in terms of efficiently utilizing resources in EC2. However not having a way to recover data off of *crashed* ephemeral instances is one hell of a stick for leading customers to pick EBS-backed instances.<br />
<a name="note_4"></a>[4] There is no guarantee that the instance storage drives of an instance are on different physical spindles of the host machine. Use a tool to test the performance of the disks separately and in parallel when building new ephemeral storage RAID arrays.<br />
<a name="note_5"></a>[5] From the Xtrabackup documentation on <a href="http://www.percona.com/doc/percona-xtrabackup/innobackupex/streaming_backups_innobackupex.html#examples-using-tar">on streaming backups</a>.<br />
<a name="note_6"></a>[6] From the section on persisting snapshots from the <a href="http://aws.amazon.com/ebs/">EC2 EBS Doc</a><br />
<a name="note_7"></a>[7] This time from our friends at <a href="http://www.basho.com">Basho</a>, great folk who were nice enough to come to our office recently and attempt to dissuade us from our crazy notions.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.awe.sm/2013/02/21/backups-ebs-and-awe-sm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Export awe.sm data to CSV</title>
		<link>http://blog.awe.sm/2013/02/12/export-awe-sm-data-to-csv/</link>
		<comments>http://blog.awe.sm/2013/02/12/export-awe-sm-data-to-csv/#comments</comments>
		<pubDate>Wed, 13 Feb 2013 00:44:21 +0000</pubDate>
		<dc:creator>jec</dc:creator>
				<category><![CDATA[Product]]></category>

		<guid isPermaLink="false">http://blog.awe.sm/?p=1593</guid>
		<description><![CDATA[One of the design objectives guiding awe.sm’s new web tool has been reducing the amount of work you need to do on your own in a spreadsheet. Marketers already spend too much time wrestling with data, when what we want &#8230; <a href="http://blog.awe.sm/2013/02/12/export-awe-sm-data-to-csv/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>One of the design objectives guiding <a href="http://blog.awe.sm/2012/12/04/try-the-new-awe-sm-today/" title="Try the new awe.sm today!" target="_blank">awe.sm’s new web tool</a> has been reducing the amount of work you need to do on your own in a spreadsheet. Marketers already spend too much time wrestling with <em>data</em>, when what we want are <em>insights</em>.</p>
<p>That being said, sometimes you need the raw numbers, so we’ve got your back. In addition to awe.sm’s <a href="https://docs.google.com/a/snowballfactory.com/spreadsheet/ccc?key=0Ak27Jk6TEouYdGxlaUVRZTFVVTA5Z3hJbElYVGo0SFE" target="_blank">live Google Spreadsheet tool</a>, starting today you can export the data from any awe.sm module directly into a CSV for slicing and dicing in a spreadsheet application.</p>
<p>After you’ve <a href="http://blog.awe.sm/2013/01/11/how-do-i-categorize-and-organize-my-shares/" title="How do I categorize and organize my shares?" target="_blank">used our query builder and explorer</a> to save a module displaying the data you need, export in two easy steps.</p>
<ol>
<li>Mouse over the module’s title to reveal a gear icon, and select <strong>Export</strong>:<br /><img src="http://blog.awe.sm/wp-content/uploads/2013/02/Screen-Shot-2013-02-12-at-4.12.31-PM.png" alt="Exporting an awe.sm module, step 1" width="573" height="329" class="aligncenter size-full wp-image-1594" /></li>
<li>In the <em>Export</em> dialog that appears, ensure the option for <strong>Download</strong> is selected, then click the <strong>Get CSV</strong> icon.<br />
<img src="http://blog.awe.sm/wp-content/uploads/2013/02/Screen-Shot-2013-02-12-at-6.20.12-PM.png" alt="export awe.sm to CSV, step 2" width="500" height="247" class="aligncenter size-full wp-image-1609" /></li>
</ol>
<p>Your browser will begin downloading a CSV file. Save it to your local drive, and open it into your favorite spreadsheet app.<br />
<img src="http://blog.awe.sm/wp-content/uploads/2013/02/Screen-Shot-2013-02-12-at-4.26.29-PM.png" alt="exporting awe.sm data to CSV, step 3" width="349" height="181" class="aligncenter size-full wp-image-1598" /></p>
<h3>A Few Notes</h3>
<ul>
<li>This feature is available to every awe.sm user once you <a href="http://blog.awe.sm/2012/12/04/try-the-new-awe-sm-today/" title="Try the new awe.sm today!" target="_blank">switch over to our new version</a>. (There are so many reasons to make the switch. <a href="http://so.awe.sm/settings/enable-beta" target="_blank">Try it now</a>!)</li>
<li><strong><small>INTERNET EXPLORER USERS:</small></strong> If you’re having trouble getting the file you’ve downloaded to open into Excel, try manually adding “.csv” to the end of its filename.</li>
<li>If you really do have a “favorite” spreadsheet application, you almost certainly need a vacation.</li>
</ul>
<p>Happy crunching! And never forget: if you have any questions or feedback, we’re just a <a href="http://support.awe.sm/">live chat</a> or <a href="https://totally.awe.sm/about/#contact-form">email</a> away. Or <a href="mailto:questions@awe.sm">sign up for our free training webinars</a> — they’re a blast.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.awe.sm/2013/02/12/export-awe-sm-data-to-csv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Watch the geographic spread of viral sharing</title>
		<link>http://blog.awe.sm/2013/01/29/watch-the-geographic-spread-of-viral-sharing/</link>
		<comments>http://blog.awe.sm/2013/01/29/watch-the-geographic-spread-of-viral-sharing/#comments</comments>
		<pubDate>Tue, 29 Jan 2013 17:59:42 +0000</pubDate>
		<dc:creator>jec</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[bones brigade]]></category>
		<category><![CDATA[child sharing]]></category>
		<category><![CDATA[social media marketing]]></category>
		<category><![CDATA[topspin media]]></category>

		<guid isPermaLink="false">http://blog.awe.sm/?p=1523</guid>
		<description><![CDATA[Here’s a quick followup to last week’s profile of the Bones Brigade’s incredibly successful marketing efforts. As part of the filmmakers’ presentation of their efforts at this year’s Sundance Film Festival, our team paired awe.sm sharing data &#038; attributed signups &#8230; <a href="http://blog.awe.sm/2013/01/29/watch-the-geographic-spread-of-viral-sharing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Here’s a quick followup to <a href="http://blog.awe.sm/2013/01/18/how-the-bones-brigade-tweeted-their-way-to-6-figure-sales/" title="How the Bones Brigade tweeted their way to 6-figure sales">last week’s profile</a> of the Bones Brigade’s incredibly successful marketing efforts.</p>
<p>As part of <a href="http://filmguide.sundance.org/film/13249/now_playing_two_release_models_for_the_new_world" target="_blank">the filmmakers’ presentation of their efforts at this year’s Sundance Film Festival</a>, our team paired awe.sm sharing data &#038; attributed signups and purchases with <a href="http://blog.awe.sm/2012/11/16/awe-sm-hack-week-mapping-clicks-in-realtime/" title="awe.sm Hack Week: Mapping Clicks in Realtime">IP-based geolocation click data</a> to create a beautiful 3D visualization of how word spread throughout the campaign.</p>
<p>We’ve been playing with a working interactive demo of the project on an internal server, and our aspiration is someday to package displays like this as an off-the-shelf product for our marketer customers. To provide a taste of the kind of tracking that’s possible, here’s a quick video showing the campaign’s kickoff:</p>
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/2-XedHfAINA?version=3&amp;hl=en_US&amp;rel=0" frameborder="0" allowfullscreen></iframe></p>
<p>It’s striking to watch how quickly a single Facebook post in Los Angeles spawned clicks and child-shares elsewhere around the globe (the outgoing arrows), which in turn led to an impressive volume of mailing-list registrations and purchases (the inbound arrows). Any marketer curious to know the viral dynamics of a social post can instrument her marketing campaigns with awe.sm, track multiple generations of sharing and their outcomes, and understand <em>exactly</em> how posts lead to business results.</p>
<ul>
<li><a href="http://blog.awe.sm/2013/01/18/how-the-bones-brigade-tweeted-their-way-to-6-figure-sales/" target="_blank">Learn more about the Bones Brigade campaign</a></li>
<li><a href="http://developers.awe.sm/key-concepts/" target="_blank">Understand how awe.sm tracks multiple generations of sharing</a></li>
<li><a href="mailto:developers@awe.sm">Ask us how to use awe.sm data to power similar visualizations of your own</a></li>
<li><a href="http://totally.awe.sm/jobs">Come work here, and build more cool stuff like this!</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.awe.sm/2013/01/29/watch-the-geographic-spread-of-viral-sharing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working with External Development Teams</title>
		<link>http://blog.awe.sm/2013/01/28/working-with-external-development-teams/</link>
		<comments>http://blog.awe.sm/2013/01/28/working-with-external-development-teams/#comments</comments>
		<pubDate>Mon, 28 Jan 2013 15:30:05 +0000</pubDate>
		<dc:creator>Jeremiah Lee Cohick</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Engineering]]></category>

		<guid isPermaLink="false">http://blog.awe.sm/?p=1524</guid>
		<description><![CDATA[While we grew our engineering team and maintained an existing product, working with an external development team enabled us to build an entirely new product. Here's how we did it and what we learned. <a href="http://blog.awe.sm/2013/01/28/working-with-external-development-teams/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Shortly after awe.sm&#8217;s <a title="Meet the new awe.sm for Developers" href="/2011/12/01/meet-the-new-developers-awe-sm/">series A funding</a>, we were eager to begin building the larger products we envisioned. There were only 3 of us writing code at the time and we needed to rapidly expand our development bandwidth. So while we looked for talented engineers to join our team full-time, we evaluated several web application development companies to help us get a head-start in parallel.</p>
<p>We asked our investors and other startups for referrals. We also looked on GitHub to find contributors to the open source tools we were planning to use. After narrowing the list to three companies, we reached out and interviewed each company.</p>
<p><a href="http://quickleft.com/blog/looking-awe-sm"><img src="http://blog.awe.sm/wp-content/uploads/2013/01/quickleftawesm.jpg" alt="QuickLeft is awe.sm" width="540" height="360" class="aligncenter size-full wp-image-1541" /></a></p>
<p>Our selection criteria:</p>
<ul>
<li><strong>Expertise:</strong> We had decided to use <a href="http://backbonejs.org/">Backbone.js</a>. The framework has few opinions on The Right Way of doing things, so we wanted a team that had opinions about using it in a large application and could justify them with their experiences.</li>
<li><strong>Cost:</strong> We expected a rate of $100–$150 / hour and hoped to negotiate down by agreeing to a monthly minimum and a 3–6 month engagement.</li>
<li><strong>Similar engineering ideologies:</strong> No CoffeeScript. Appreciation of <a href="http://javascript.crockford.com/">Douglas Crockford</a>&#8216;s opinions. Use of native DOM methods over jQuery when possible. Only performant uses of LESS.</li>
<li><strong>Size of team:</strong> We wanted a team, not a single developer. This is the &#8220;hit by a bus&#8221; factor: would we have to start over if the lead developer suddenly became unavailable? We also liked the option to have additional engineers working on self-contained features in parallel with primary development.</li>
<li><strong>Pair programming, if any, only when necessary:</strong> In our opinion, the primary beneficiaries of pair programming are the apprentice, who&#8217;s gaining experience, and the company employing the engineers, which is creating a sustainable workforce. The benefits of pair programming to awe.sm would be minimal. That said, pair programming is useful when beginning large features, as it allows engineers to have a common understanding of integration considerations when working independently on features. We wanted a team that had this pragmatic approach.</li>
<li><strong>Direct access to engineers who were fluent English speakers within 3 timezones of San Francisco:</strong> We wanted a company that felt like an extension of our team, not a middle manager that proxied information asynchronously. We knew that we were going to build a product with complex data handling and GUI interactions. The ability to communicate by text and video chat throughout the workday would allow us to most effectively discuss features, bugs, and details we hadn&#8217;t considered.</li>
<li><strong>Previous customers we could interview candidly about their experiences:</strong> We were making a big investment and needed to move quickly. We wanted to know the team&#8217;s strengths and weaknesses upfront.</li>
</ul>
<p>After the interviews and contract negotiation, awe.sm chose <a href="http://quickleft.com">Quick Left</a>. I traveled to Boulder, CO to kick off the project with them. We discussed the features, interactions, and motivations for every detail in the spec and wireframes. They broke the user stories down in <a href="https://www.pivotaltracker.com/">Pivotal Tracker</a>, which awe.sm also used. With the stories agreed upon, I returned to San Francisco.</p>
<p>We used <a href="http://campfirenow.com/">Campfire</a> for text chat and <a href="http://skype.com/">Skype</a> for video chat daily. I was able to review their commits in <a href="https://github.com/">GitHub</a>. We prioritized stories and bugs in Pivotal Tracker weekly. Six months and 70,000 lines of JavaScript later, <a title="A More Awesome awe.sm!" href="/2012/10/05/coming-soon-a-more-awesome-awe-sm/">the new awe.sm</a> was ready for beta testers.</p>
<p>I learned a few things along the way and I&#8217;d do some things differently in the future:</p>
<ul>
<li>Text chat is great, but <strong>be quick to take conversations to video chat</strong>. We seem to express ourselves better with speech than text. Screen sharing is also useful.</li>
<li><strong>Gigantic specs with every minor detail in a single document don&#8217;t get used.</strong> Break each section of the application into a separate document. Kick off each section with a video chat. The spec should contain wireframes with relevant interactions, features within the context of user flows, and any forgettable specific technical details. If developers understand why features are valuable to the user and how the user will interact with them, many of the details don&#8217;t need to be documented. You spend less time writing specs and developers can more easily find the details they need to reference. Help the team understand your goals and they&#8217;ll make smart decisions.</li>
<li><strong>Expect fluctuations in workload when dealing with multiple parties.</strong> awe.sm was responsible for delivering additional server-side capabilities for the front-end application Quick Left was building. We also used another contractor for the visual design. Every interdependency increases the probability of lulls and spikes in workload.</li>
<li><strong>Managing external teams takes more time than you think.</strong> Coordinating assets, testing, and dealing with unknown unknowns is a full time job.</li>
</ul>
<p>By the time our application launched, awe.sm had hired a front-end team. Quick Left <a title="Quick Left Training" href="http://quickleft.com/training">trained our engineers on Backbone.js</a> and helped us transition to internal development. Quick Left gave us a solid technical foundation for the new product they helped launch that we&#8217;re now rapidly iterating upon. Their quality of code matched awe.sm&#8217;s own high standard and their expertise helped us make the right engineering decisions for this product.</p>
<p>By working with Quick Left, awe.sm was able to take the time it needed to hire the right people and launch a new product without hampering the development of its existing products. When time-to-market is important and you have the cash available, using an outside development team can be a useful strategy for startups.</p>
<hr />
<p><small>Also: <a href="http://totally.awe.sm/jobs/">We&#8217;re still hiring!</a></small></p>
<p><small>Thank you, Quick Left (<a href="https://twitter.com/intent/user?screen_name=electromute">Ingrid Alongi</a>, <a href="https://twitter.com/intent/user?screen_name=wookiehangover">Sam Breed</a>, <a href="https://twitter.com/intent/user?screen_name=alexmcpherson">Alex McPherson</a>, <a href="https://twitter.com/intent/user?screen_name=davidmaragon">David Aragon</a>, <a href="https://twitter.com/intent/user?screen_name=jessicard">Jessica Dillon</a>, <a href="https://twitter.com/intent/user?screen_name=nico_valencia">Nico Valencia</a>, <a href="https://twitter.com/intent/user?screen_name=rachelryle">Rachel Ryle</a>)!</small></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.awe.sm/2013/01/28/working-with-external-development-teams/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How the Bones Brigade tweeted their way to 6-figure sales</title>
		<link>http://blog.awe.sm/2013/01/18/how-the-bones-brigade-tweeted-their-way-to-6-figure-sales/</link>
		<comments>http://blog.awe.sm/2013/01/18/how-the-bones-brigade-tweeted-their-way-to-6-figure-sales/#comments</comments>
		<pubDate>Fri, 18 Jan 2013 08:55:46 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[bones brigade]]></category>
		<category><![CDATA[customer]]></category>
		<category><![CDATA[influencer marketing]]></category>
		<category><![CDATA[social commerce]]></category>
		<category><![CDATA[topspin]]></category>

		<guid isPermaLink="false">http://blog.awe.sm/?p=1498</guid>
		<description><![CDATA[One of the coolest things about working at awe.sm (in addition to the team, and the view ) is seeing all the exciting things our customers are doing with our platform. That&#8217;s especially true of our friends at Topspin Media, &#8230; <a href="http://blog.awe.sm/2013/01/18/how-the-bones-brigade-tweeted-their-way-to-6-figure-sales/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>One of the coolest things about working at awe.sm (in addition to <a href="http://totally.awe.sm/about">the team</a>, and the view <img src='http://blog.awe.sm/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ) is seeing all the exciting things our customers are doing with <a href="http://developers.awe.sm">our platform</a>. That&#8217;s especially true of our friends at <a href="http://topspinmedia.com">Topspin Media</a>, who have made us a part of projects for some of our team&#8217;s favorite artists, like <a href="http://beastieboys.com/">the Beastie Boys</a>, <a href="http://www.yeasayer.net/">Yeasayer</a>, and in <a href="http://twitter.com/intent/user?screen_name=misstillytilly">Tilly</a>&#8216;s case, <a href="http://kreayshawn.com">Kreayshawn</a> <img src='http://blog.awe.sm/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . But for several of us, having what we&#8217;ve built be an integral part of the amazing and amazingly successful <a href="http://topspinmedia.tumblr.com/post/40824431982/topspin-indie-film-the-sundance-direct-to-fan">direct-to-fan release of the Bones Brigade documentary</a> made our jobs cool to our 12 year-old selves.</p>
<p><a href="http://bonesbrigade.com"><img src="http://blog.awe.sm/wp-content/uploads/2013/01/BonesBrigade_Posters.png" alt="Bones Brigade!" width="500" class="aligncenter size-full wp-image-1504" /></a></p>
<p>Personal satisfaction aside, this project and the data that <a href="http://filmguide.sundance.org/film/13249/now_playing_two_release_models_for_the_new_world">the filmmakers and Topspin will be sharing at Sundance this week</a> are nothing short of a revolution in film distribution. If you&#8217;re into the business of content, you should <a href="http://topspinmedia.tumblr.com/post/40824431982/topspin-indie-film-the-sundance-direct-to-fan">read more about the overall release on Topspin&#8217;s blog</a>. The quick summary is that through an innovative combination of viral marketing, well-designed windowing, and creatively tiered pricing the producers were able to build an email list <strong>from 0 to more than 46,000 fans in just 2 months</strong> and ultimately <strong>make nearly 4 times the money they were offered in a conventional distribution deal</strong>.</p>
<p>Sharing drove 10% of the total revenue from the release. And thanks to deep awe.sm integration excellently implemented by the experts at <a href="http://theuprisingcreative.com/">The Uprising Creative</a>, we tracked the value generated by each individual Tweet and Facebook post. Measuring the ROI of sharing is what awe.sm was built to do, and we have fascinating data on conversions from sharing across our hundreds of customers. But the unprecedented transparency of the Bones Brigade filmmakers is allowing us for the first time to publicly share some of the incredible insights we deliver our customers everyday.</p>
<p><a href="http://blog.awe.sm/2013/01/18/how-the-bones-brigade-tweeted-their-way-to-6-figure-sales/bonesbrigade_trafficsources/" rel="attachment wp-att-1506"><img src="http://blog.awe.sm/wp-content/uploads/2013/01/BonesBrigade_TrafficSources.png" alt="Overall Conversions" width="700" class="aligncenter size-full wp-image-1506" /></a></p>
<p>Topspin&#8217;s strategy was to use the existing fan-bases of the Bones Brigade members, including Tony Hawk&#8217;s 4.2m Facebook fans and 3.3m Twitter followers, to get the word out to the core most passionate fans first and then encourage those fans to spread the message to their friends. This approach was extremely successful in driving a significant volume of high-value traffic with an average value of <strong>$1.59 per visit</strong> ($2.11 per visit from sharing by the cast and $1.21 per visit from sharing by ordinary fans). Being able to track the value of each share and the relationships between shares gives you visibility into the mechanics of how and why sharing is effective and not just the end results. This is essential to understanding the patterns of success and how to replicate them.</p>
<p>Here are some of the most interesting patterns we observed in the Bones Brigade sharing data:</p>
<ul>
<li>Fans were more than 7 times as likely to share to Facebook than to Twitter (87.8% of fans shared to Facebook vs 12.2% to Twitter);</li>
<li>The value per visit from a fan&#8217;s Facebook share was more than 2 times higher than that from a fan&#8217;s Twitter share ($1.29/visit from Facebook vs $0.60 from Twitter);</li>
<li>Sharing by the cast (i.e. &#8220;Celebrities&#8221;) was roughly even to both Facebook and Twitter but drove 82.0% of revenues from shares to Twitter and 18.0% from Facebook;</li>
<li>However, the value per visit from the cast&#8217;s shares to Facebook and Twitter was roughly equal ($1.93/visit from Facebook vs $2.07/visit from Twitter);</li>
<li>Sharing by the cast to Twitter drove more than twice as many visits per share as Facebook and more than 2.5 times the visits per fan/follower (1.10% eCTR for Facebook vs 2.82% eCTR for Twitter).</li>
<p><a href="http://blog.awe.sm/2013/01/18/how-the-bones-brigade-tweeted-their-way-to-6-figure-sales/bonesbrigade_sharingrevenue/" rel="attachment wp-att-1505"><img src="http://blog.awe.sm/wp-content/uploads/2013/01/BonesBrigade_SharingRevenue.png" alt="Sharing Revenue" width="650"  class="aligncenter size-full wp-image-1505" /></a></p>
<p>This stark contrast between the performance of sharing by celebrities vs ordinary fans across Facebook and Twitter demonstrates several underlying (and somewhat related) phenomena:</p>
<ol>
<li><strong>Normal people primarily use Twitter to discover content and Facebook to share it with friends –</strong> The overwhelming volume of fan sharing to Facebook (87.8%) clearly demonstrates that most people do not view Twitter as an important personal sharing channel, but the fact that Twitter was still able to drive 40.3% of the traffic and 47.3% of the revenue (primarily from celebrity sharing) shows that there is still a significant audience discovering and consuming content through Twitter despite their lack of sharing;</li>
<li><strong>Twitter is a network of loose ties and Facebook is a network of strong ties –</strong> Visits driven by celebrities had roughly equivalent value across Facebook and Twitter while visits driven by regular fans were more than twice as valuable on Facebook than on Twitter, which demonstrates that consumers have tighter connections with and are more swayed by the recommendations of their friends on Facebook than by the non-celebrities they follow on Twitter;</li>
<li><strong>Twitter followers are more likely to click than Facebook fans –</strong> Whether it&#8217;s an impact of <a href="http://readwrite.com/2012/11/13/mark-cuban-facebooks-sponsored-posts-are-driving-away-brands">NewsFeed Optimization</a> or just a side-effect of the fact that normal people are primarily using Facebook to share with and consume from their friends and family, the numbers show that celebrity sharing to Twitter is driving over 2.5 times more visits per follower than sharing to Facebook is driving visits per fan with a roughly equal value per visit.</li>
</ol>
<p>We&#8217;ll be taking a deeper look at each of these topics in upcoming blog posts. So <a href="http://twitter.com/intent/user?screen_name=awesm">follow @awesm on Twitter</a> to learn more about this amazing campaign.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.awe.sm/2013/01/18/how-the-bones-brigade-tweeted-their-way-to-6-figure-sales/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
