<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Signal blog</title>
	
	<link>http://blog.signalhq.com</link>
	<description>Signal is a dead simple product for mobile, social and email marketing. This is our blog in which we write about our product, company and industry news.</description>
	<lastBuildDate>Tue, 14 Feb 2012 21:27:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/signalhq" /><feedburner:info uri="signalhq" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>signalhq</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Signal Introduces Locations</title>
		<link>http://feedproxy.google.com/~r/signalhq/~3/qXcKRi4gGMo/</link>
		<comments>http://blog.signalhq.com/2012/02/14/signal-introduces-location-segmentation/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 21:27:57 +0000</pubDate>
		<dc:creator>Julian Rockwood</dc:creator>
				<category><![CDATA[Product Announcements & Updates]]></category>
		<category><![CDATA[franchise]]></category>
		<category><![CDATA[Locations]]></category>
		<category><![CDATA[multi-location]]></category>
		<category><![CDATA[QSR]]></category>

		<guid isPermaLink="false">http://blog.signalhq.com/?p=7769</guid>
		<description><![CDATA[<p>For the past few weeks we&#8217;ve been working with a small group of pilot customers to beta test a new feature called Locations. Things have been going so well that we are ready to introduce Locations to the world!</p>
<p>What is Locations? It helps your multi-location business better communicate with customers at a local level vs. forcing customers to only have a relationship with a brand, not a store. While people certainly have preferences for brands (“I love In-N-Out Burger. Animal style FTW!”), they have experiences with stores. When you want to buy gas or grab a burger, you don’t buy these things from a brand, you buy them from stores near where you live, work and play.</p>
<p>Based on &#8230; <a href="http://blog.signalhq.com/2012/02/14/signal-introduces-location-segmentation/" class="read_more">Keep reading</a></p>]]></description>
			<content:encoded><![CDATA[<p>For the past few weeks we&#8217;ve been working with a small group of pilot customers to beta test a new feature called Locations. Things have been going so well that we are ready to introduce Locations to the world!</p>
<p>What is Locations? It helps your multi-location business better communicate with customers at a local level vs. forcing customers to only have a relationship with a brand, not a store. While people certainly have preferences for brands (“I love In-N-Out Burger. Animal style FTW!”), they have experiences with stores. When you want to buy gas or grab a burger, you don’t buy these things from a brand, you buy them from stores near where you live, work and play.</p>
<p>Based on that, we aimed to create a solution by which the multi-location marketer can allow people to build relationships with the stores they frequent most and subsequently create campaigns that are targeted locally, not nationally. Here’s how it works.</p>
<p>With Locations, you can import all of your stores into Signal based on name, address and any store ID you might have. These stores can then be mapped to Lists, which allows your customers to subscribe to receive information from the specific stores that they frequent.</p>
<p>The real magic happens when you assign attributes to these locations. <a href="http://blog.signalhq.com/2012/01/20/serious-customer-segmentation/">You’re probably familiar with our awesome segmentation tools</a>, which allow you to target your campaigns based on data you know about your subscribers, such as demographics and preferences. Locations allows you to segment based on attributes of a location, which are unique features that some of your locations might share. For example, if you’re a convenience store business, you may have some locations with an attached car wash and others without one. If you want to offer customers a $5 off coupon for your car wash to drive interest, you wouldn’t want customers who visit locations without car washes to receive that offer. Locations allows you to create a segment of just those stores with car washes and target your campaign to only customers who visit those stores.</p>
<p>Locations segmentation also allows you to group your stores based on geography. For example, if you plan to send a campaign that’s only relevant to your stores in Illinois, you can create a Locations segment for just your Illinois stores, which would prevent people who visit stores in other states from receiving the message.</p>
<p><strong>Here are some more examples of what Locations empowers you to do:</strong></p>
<ul>
<li>Target geographic groupings of stores (e.g. send to all locations in Iowa)</li>
<li>Send messages to stores based on specific qualities they share (e.g. send to all stores with ATMs installed)</li>
<li>Send messages based upon multiple location-specific attributes (e.g. send to locations with a car wash and are in Minnesota)</li>
<li>Differentiate your messaging strategy based upon the uniqueness of your individual locations (think global, act local)</li>
<li>Track customer engagement &amp; marketing ROI at the local level (e.g. Compare locations to determine which ones are having the most success)</li>
<ul>
<li>This applies not only to the store level, but by geographic groups of stores such as regions, cities, and states</li>
</ul>
<li>Review and manage your locations database in simple way.  Editing and adding locations is easy, as is reviewing existing locations by city, state, or segment</li>
</ul>
<p>Whether you&#8217;re a casual restaurant who wants to target an offer solely to diners of your newly opened Memphis stores, or a convenience store who wants to message subscribers of your stores that carry Bud Light Platinum, Location segmentation will allow the targeting on the geographic (in Dakota) and physical data (has an ATM) required to meet your needs.</p>
<p><strong>Locations opens up tons of interesting targeting &amp; reporting opportunities, such as:</strong></p>
<ul>
<li>Deliver a coupon or notification to all people subscribed to locations that have a car wash</li>
<li>Deliver a coupon or notification to all people subscribed to locations in Indiana</li>
<li>Send a survey question to all people subscribed to locations in Indiana</li>
<li>Test effectiveness of content in different locations (same subject line different regions / different message, different cities, same region)</li>
</ul>
<p><strong>Next Steps: </strong></p>
<p>Watch the introduction video below, read the <a href="http://support.signalhq.com/kb/locations/using-locations">KB article</a> and let us know if you&#8217;d like access to Locations for your account. While it is obviously advantageous for businesses with over ten locations, businesses with less than ten can usually manage their segmentation capabilities easily as is. We&#8217;re excited for the direction of this feature, and look forward to evolving it with you (the users) over the next few months!</p>
<p>Feel free to leave feedback below or shoot me a line julian (at) signalhq.com. For all the latest news on Signal, you should also sign up for our newsletter <a href="http://www.signalhq.com#newsletter_signup">here</a>.</p>
<p><a href="http://blog.signalhq.com/2012/02/14/signal-introduces-location-segmentation/"><em>Click here to view the embedded video.</em></a></p>
<div id="tweetbutton7769" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fblog.signalhq.com%2F2012%2F02%2F14%2Fsignal-introduces-location-segmentation%2F&amp;via=signal&amp;text=Signal%20Introduces%20Locations&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fblog.signalhq.com%2F2012%2F02%2F14%2Fsignal-introduces-location-segmentation%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.signalhq.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><img src="http://feeds.feedburner.com/~r/signalhq/~4/qXcKRi4gGMo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.signalhq.com/2012/02/14/signal-introduces-location-segmentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.signalhq.com/2012/02/14/signal-introduces-location-segmentation/</feedburner:origLink></item>
		<item>
		<title>Build your own email templates in Signal</title>
		<link>http://feedproxy.google.com/~r/signalhq/~3/0-tvmOCNE9M/</link>
		<comments>http://blog.signalhq.com/2012/02/07/build-email-templates-signal/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 19:48:08 +0000</pubDate>
		<dc:creator>Drew Myler</dc:creator>
				<category><![CDATA[Email Marketing]]></category>

		<guid isPermaLink="false">http://blog.signalhq.com/?p=7715</guid>
		<description><![CDATA[<p>If you send a regular email newsletter that&#8217;s highly customized to your company&#8217;s branding, build an email template in Signal to make the process of creating and sending those emails fast and simple. Templates also let anyone in your company or organization send properly formatted emails without having to touch HTML.</p>
<p>Here&#8217;s a brief overview of building an email template in Signal. You&#8217;ll need to be comfortable working with HTML; we built the template editor for those who are familiar with dynamic tags and who can tackle the often-challenging use of tables to control email formatting.</p>
<p>Full documentation can be found in our <a href="http://support.signalhq.com/kb/email/build-email-templates-in-signal">knowledgebase</a>, along with a demo video (get the popcorn because it&#8217;s 20 min, but it really &#8230; <a href="http://blog.signalhq.com/2012/02/07/build-email-templates-signal/" class="read_more">Keep reading</a></p>]]></description>
			<content:encoded><![CDATA[<p>If you send a regular email newsletter that&#8217;s highly customized to your company&#8217;s branding, build an email template in Signal to make the process of creating and sending those emails fast and simple. Templates also let anyone in your company or organization send properly formatted emails without having to touch HTML.</p>
<p>Here&#8217;s a brief overview of building an email template in Signal. You&#8217;ll need to be comfortable working with HTML; we built the template editor for those who are familiar with dynamic tags and who can tackle the often-challenging use of tables to control email formatting.</p>
<p>Full documentation can be found in our <a href="http://support.signalhq.com/kb/email/build-email-templates-in-signal">knowledgebase</a>, along with a demo video (get the popcorn because it&#8217;s 20 min, but it really helps illustrate these concepts).</p>
<h2>1) Start with a finished email</h2>
<p>Your email template will include all the possible types of formatted content you might send. If your email contains latest news, a reminder of upcoming events and links to the five most recent posts on your company blog, you want to start with an email that includes an example of each. Every email you send using this template doesn&#8217;t have to include all of those content types, but you want the option to add them as needed.</p>
<p>To illustrate, I&#8217;ll templatize our monthly newsletter. <em>Signal Received</em> always includes a letter from the CEO, and can (but doesn&#8217;t always) contain product updates, news and tips.</p>
<p style="text-align: center;"><img class="size-full wp-image-7719 aligncenter" title="Signal Received" src="http://blog.signalhq.com/wp-content/uploads/2012/02/01-signal-received.jpg" alt="01 signal received Build your own email templates in Signal" width="460" height="1102" /></p>
<h2>2) Get to know our code snippets</h2>
<p>Creating an email template in Signal is a lot like integrating a website into a CMS. You&#8217;ll determine which parts of the email need to be editable and repeatable, and use our code snippets to make it happen. There are multiple types, and each is fully covered in our <a href="http://support.signalhq.com/kb/email/build-email-templates-in-signal">knowledgebase article</a>.</p>
<p style="text-align: center;"><img class="wp-image-7720 aligncenter" title="Code snippets" src="http://blog.signalhq.com/wp-content/uploads/2012/02/02-code-snippets.png" alt="02 code snippets Build your own email templates in Signal" width="602" height="186" /></p>
<p>For <em>Signal Received</em>, we&#8217;ll use a mix of these code snippets to create editable regions and layouts.</p>
<p style="text-align: center;"><img class="size-full wp-image-7730 aligncenter" title="Signal Received, with snippets" src="http://blog.signalhq.com/wp-content/uploads/2012/02/03-signal-received-snippets1.jpg" alt="03 signal received snippets1 Build your own email templates in Signal" width="460" height="760" /></p>
<h2>3) Make repeatable layouts &amp; regions</h2>
<p>Layouts can be whatever you need. A link to a blog post is a layout. An article with headline, image and excerpt is another layout.</p>
<p>A layout becomes repeatable when you save it as such in the email template builder tab.</p>
<p style="text-align: center;"><img class="size-full wp-image-7727 aligncenter" title="Repeatable layout drawer" src="http://blog.signalhq.com/wp-content/uploads/2012/02/04-layout-drawer.jpg" alt="04 layout drawer Build your own email templates in Signal" width="532" height="278" /></p>
<p>To call this layout in your email, create a repeatable region (via code snippet) and assign the layout to that region.</p>
<pre>&lt;div data-signal-editable="Maincol" data-signal-content-type="layout"&gt;&lt;/div&gt;</pre>
<p style="text-align: center;"><img class="size-full wp-image-7728 aligncenter" title="Assign a layout to a region" src="http://blog.signalhq.com/wp-content/uploads/2012/02/05-assign-layout.jpg" alt="05 assign layout Build your own email templates in Signal" width="600" height="267" /></p>
<p>Create as many regions as you need, and assign different layouts to each one if you&#8217;d like. Don&#8217;t want the blog post links showing up in your sidebar? No problem.</p>
<p><strong>Each repeatable snippet must have a unique name</strong> so you can assign layouts to that region.</p>
<p>For <em>Signal Received</em>, we&#8217;ll need just one repeatable region, and we&#8217;ll create two layouts: the green header, and the article itself.</p>
<p style="text-align: center;"><img class="size-full wp-image-7725 aligncenter" title="Signal Received layouts" src="http://blog.signalhq.com/wp-content/uploads/2012/02/Screen-shot-2012-02-07-at-2.06.24-PM.png" alt="Screen shot 2012 02 07 at 2.06.24 PM Build your own email templates in Signal" width="458" height="269" /></p>
<p>Signal Received&#8217;s news, product and tip layouts follow the same convention (headline, copy left, image flush right) but layouts can be totally unique. For example, our Spartan template has four different layouts:</p>
<p style="text-align: center;"><img class="size-full wp-image-7729 aligncenter" title="Spartan email template layouts" src="http://blog.signalhq.com/wp-content/uploads/2012/02/06-layouts.jpg" alt="06 layouts Build your own email templates in Signal" width="600" height="184" /></p>
<h2>4) Add required tags</h2>
<p>In your code snippets drawer, you&#8217;ll find a set of tags that must be added to your template in order to send the email, including &#8216;unsubscribe&#8217; and &#8216;update preferences&#8217;. You&#8217;ll call these tags in the href of an anchor tag:</p>
<pre>&lt;a href="{{unsubscribe_link}}"&gt;Unsubscribe&lt;/a&gt;</pre>
<h2>5) Preview your work</h2>
<p style="text-align: center;"><img class="size-full wp-image-7731 aligncenter" title="Signal Received, templatized" src="http://blog.signalhq.com/wp-content/uploads/2012/02/07-signal-received-template.jpg" alt="07 signal received template Build your own email templates in Signal" width="460" height="630" /></p>
<p><em>Signal Received</em> looks a lot different now that it&#8217;s been &#8216;templatized&#8217;. To add content, I click the &#8216;plus&#8217; button, and the app presents the layouts I&#8217;ve assigned to this repeatable region:</p>
<p style="text-align: center;"><img class="size-full wp-image-7732 aligncenter" title="Choose a layout for Signal Received" src="http://blog.signalhq.com/wp-content/uploads/2012/02/08-choose-layout.jpg" alt="08 choose layout Build your own email templates in Signal" width="587" height="346" /></p>
<p>Here&#8217;s how the email looks after adding a header and an article. Notice that each can be deleted, and more can be added.</p>
<p><img class="aligncenter size-full wp-image-7763" title="Signal Received with layouts" src="http://blog.signalhq.com/wp-content/uploads/2012/02/09-layouts1.jpg" alt="09 layouts1 Build your own email templates in Signal" width="560" height="384" /></p>
<p>Hopefully this gives you a sense of how much you can do with code snippets and layouts to make even the most complex email easy to send with Signal. Again, there&#8217;s a whole heck of a lot more in-depth information on this process at the <a href="http://support.signalhq.com/kb/email/build-email-templates-in-signal">knowledgebase</a>, and the video is well worth a watch.</p>
<div id="tweetbutton7715" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fblog.signalhq.com%2F2012%2F02%2F07%2Fbuild-email-templates-signal%2F&amp;via=signal&amp;text=Build%20your%20own%20email%20templates%20in%20Signal&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fblog.signalhq.com%2F2012%2F02%2F07%2Fbuild-email-templates-signal%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.signalhq.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><img src="http://feeds.feedburner.com/~r/signalhq/~4/0-tvmOCNE9M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.signalhq.com/2012/02/07/build-email-templates-signal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.signalhq.com/2012/02/07/build-email-templates-signal/</feedburner:origLink></item>
		<item>
		<title>Three Segments in Three Minutes</title>
		<link>http://feedproxy.google.com/~r/signalhq/~3/z_lluAeBQcY/</link>
		<comments>http://blog.signalhq.com/2012/01/27/segments-minutes/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 19:34:55 +0000</pubDate>
		<dc:creator>Julian Rockwood</dc:creator>
				<category><![CDATA[Email Marketing]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[segmentation]]></category>
		<category><![CDATA[segments]]></category>

		<guid isPermaLink="false">http://blog.signalhq.com/?p=7683</guid>
		<description><![CDATA[<p>We blogged last week about our advances <a href="http://blog.signalhq.com/2012/01/20/serious-customer-segmentation/">in customer segmentation </a>but didn&#8217;t offer you a visual walk through.</p>
<p>To bring these concepts to life and show just how quick and easy it is, I created a 3 minute video that shows you how to create 3 customer segments that you can use to target your messaging.</p>
<p>&#160;&#8230; <a href="http://blog.signalhq.com/2012/01/27/segments-minutes/" class="read_more">Keep reading</a></p>]]></description>
			<content:encoded><![CDATA[<p>We blogged last week about our advances <a href="http://blog.signalhq.com/2012/01/20/serious-customer-segmentation/">in customer segmentation </a>but didn&#8217;t offer you a visual walk through.</p>
<p>To bring these concepts to life and show just how quick and easy it is, I created a 3 minute video that shows you how to create 3 customer segments that you can use to target your messaging.</p>
<p><a href="http://blog.signalhq.com/2012/01/27/segments-minutes/"><em>Click here to view the embedded video.</em></a></p>
<p>&nbsp;</p>
<div id="tweetbutton7683" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F27%2Fsegments-minutes%2F&amp;via=signal&amp;text=Three%20Segments%20in%20Three%20Minutes&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F27%2Fsegments-minutes%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.signalhq.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><img src="http://feeds.feedburner.com/~r/signalhq/~4/z_lluAeBQcY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.signalhq.com/2012/01/27/segments-minutes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.signalhq.com/2012/01/27/segments-minutes/</feedburner:origLink></item>
		<item>
		<title>Getting off the Couch(DB)</title>
		<link>http://feedproxy.google.com/~r/signalhq/~3/yHQAaae8etk/</link>
		<comments>http://blog.signalhq.com/2012/01/24/getting-off-the-couchdb/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 16:43:57 +0000</pubDate>
		<dc:creator>John Wood</dc:creator>
				<category><![CDATA[Behind the Scenes]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[elasticsearch]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[MongoDB]]></category>

		<guid isPermaLink="false">http://blog.signalhq.com/?p=7516</guid>
		<description><![CDATA[<p>In 2009 we were were growing fast. Very fast. So fast in fact that we were beginning to crush our MySQL database while running queries against a few tables that had grown to contain between 10 and 30 million rows. We moved the data from some of our largest tables into <a href="http://couchdb.apache.org">CouchDB</a> to help us reduce the load on our MySQL server (see <a href="http://johnpwood.net/2009/06/15/couchdb-a-case-study/">this series of blog posts</a> for more info).</p>
<p>The move to CouchDB went well. Pages in our web application that would occasionally time out were now loading in a couple of seconds. And, our MySQL database was much, much happier. We liked CouchDB so much that we started planning a feature that would make heavy use of &#8230; <a href="http://blog.signalhq.com/2012/01/24/getting-off-the-couchdb/" class="read_more">Keep reading</a></p>]]></description>
			<content:encoded><![CDATA[<p>In 2009 we were were growing fast. Very fast. So fast in fact that we were beginning to crush our MySQL database while running queries against a few tables that had grown to contain between 10 and 30 million rows. We moved the data from some of our largest tables into <a href="http://couchdb.apache.org">CouchDB</a> to help us reduce the load on our MySQL server (see <a href="http://johnpwood.net/2009/06/15/couchdb-a-case-study/">this series of blog posts</a> for more info).</p>
<p>The move to CouchDB went well. Pages in our web application that would occasionally time out were now loading in a couple of seconds. And, our MySQL database was much, much happier. We liked CouchDB so much that we started planning a feature that would make heavy use of CouchDB&#8217;s schema-less nature.</p>
<p>And that&#8217;s when the wheels came off.</p>
<p>The feature in question is what we now call our <a href="http://www.signalhq.com/features/subscriber-profile">Subscriber Profile</a>. The Subscriber Profile feature allows you to collect any information you&#8217;d like from your subscribers, and use that data later to send them custom, targeted messages.  We knew that the variety of different information our customers would want to collect was wide.  Understandably, everyone&#8217;s needs are custom so we wanted to build a framework that could handle the array of unique information our customers wanted to store. A document database was a great fit for this problem.  The schema-less nature of a document database lets you store anything, allowing one subscriber&#8217;s document to be completely different from another&#8217;s.</p>
<p>Since CouchDB does not support ad-hoc queries, we used the popular <a href="https://github.com/rnewson/couchdb-lucene">couchdb-lucene</a> add-on to allow us to search the documents. This powered our segmentation capabilities, enabling us to find the subscribers that matched criteria defined by our user.</p>
<p>This approach worked just fine for customers with smaller databases, but struggled to keep up for customers with millions of subscribers. Looking back, there are several reasons why CouchDB and couchdb-lucene were not a good fit for this project.</p>
<h2>Why CouchDB and couchdb-lucene Were Not the Right Fit</h2>
<h3>HTTP is a Very Slow Database Protocol</h3>
<p>You can do some amazing things when using HTTP as your database protocol. Anybody who can talk HTTP can be a client (which is pretty much everybody). Load balancing between multiple CouchDB instances is a breeze. And, you open the door to do some pretty innovative things, like allowing your web application to live side by side with your data, and serving it directly from the database to the client without the need for a separate web server (<a href="http://couchapp.org/">CouchApps</a>).</p>
<p>But, HTTP is incredibly slow compared to a binary database protocol. Consider the simple task of fetching a piece of information from the database. According to our simple tests, fetching a document by ID in CouchDB takes 20ms. Compare that to 5ms when fetching a document from MongoDB (by an indexed field), and 0.4ms when fetching a row from MySQL by ID.</p>
<p>When using <a href="http://guide.couchdb.org/draft/views.html">CouchDB views</a>, the speed at which CouchDB fetches and returns the pre-computed view results more than makes up for the latency introduced by HTTP. However, when performing many operations on a document by document basis, this latency starts to add up.</p>
<h3>MVCC Overhead</h3>
<p><a href="http://en.wikipedia.org/wiki/Multiversion_concurrency_control">MVCC (multiversion concurrency control)</a> is an important part of CouchDB&#8217;s design, and a key part of how replication works. Every write to a document in CouchDB creates a new version of that document in the database. The old versions of the document stick around, eating up disk space, until they are cleaned up by running a compaction operation on that database.</p>
<p>Database compactions themselves can be resource intensive and time consuming operations. If you&#8217;re not taking advantage of the benefits provided by MVCC, then the work required compact your database, and the extra disk space used by the older versions of the documents, are simply overhead. This is especially true in a write heavy database.</p>
<h3>Large Databases Beat Up the Hard Disk</h3>
<p>Our CouchDB instances (one primary, and one backup) were running on two 8 core 2.2 GHz machines, each with 32GB of RAM and 6 15,000 RPM hard drives in a RAID 10 configuration. Despite these database servers being fairly capable machines, it was uncommon to see the disk utilization (as reported by iostat) drop below 80%. In other words, CouchDB kept the disks on these database servers <strong>very</strong> busy.</p>
<p>Although we are not entirely sure what was causing this, we believe it had something to do with the size of our databases and views, and them being constantly swapped in and out of the disk cache (which was set to use almost all of the system memory).</p>
<h3>CouchDB is not a Distributed Database (by default)</h3>
<p>Apache CouchDB is not a distributed database. It is a stand alone database with powerful replication capabilities. While it is certainly possible to build a distributed solution using those replication capabilities (see <a href="https://github.com/cloudant/bigcouch">BigCouch</a>), nothing like this exists in the base CouchDB project right now.</p>
<p>We were at the point where we really needed a distributed database. The size of our databases and the number of requests they were handling were simply becoming too much for a single machine to handle. While moving to something like BigCouch was certainly possible, it would not have solved the other issues outlined above.</p>
<h3>Lucene (used by couchdb-lucene) is not a Distributed Search Solution</h3>
<p>Couchdb-lucene is a project that pipes changes made in CouchDB to the <a href="http://lucene.apache.org/">Apache Lucene</a> full text search engine. This project is great because it essentially adds the ability to perform ad-hoc queries back to CouchDB. However, our search index had grown to the size where we needed a distributed search solution.</p>
<p>Again, while switching to use ElasticSearch (which integrates with CouchDB nicely) would have addressed this pain point, it would not have addressed the other issues we were facing.</p>
<h3>Other General Complaints</h3>
<p>We had some other general complaints with CouchDB as well.</p>
<p>First and foremost is that we found CouchDB difficult to develop for. The map/reduce paradigm takes a while to get used to. But, even after you understand how to build views to query your data, issues remain. Like the amount of time it takes to build a view against a large data set. We would sometimes wait days for a view to finish building. And, if by chance you found an error in the view flushed out by some edge case in the production data, you would have to scrap the view and start over after fixing the issue in the map/reduce code. This resulted a slower development process.</p>
<p>Second, databases and views are <strong>gigantic</strong> on disk. I know, I know&#8230;disk space is cheap, right? Well, not for everybody. Because of the size of the views, we had to upgrade to a pair of very expensive database servers that increased our monthly hosting bill by a substantial amount. Also, since the database and views are stored as single files on disk, it dramatically increased the amount of time it took to run our nightly backups. Even if only a single document in your 500GB database changed, you&#8217;d have to back up the entire 500GB file.</p>
<p>Third, we even ran into a few problems with replication, which is CouchDB&#8217;s main strength. When migrating CouchDB to a pair of beefier database servers, we ran in to a problem where replication would forget where it was in the process. This resulted in CouchDB having to churn through the entire 240GB database in order to determine the sequence number that it should start replication from, a process which took 4 days. This happened on more than one occasion, and was a huge time suck.</p>
<h2>The New Solution</h2>
<p>We have been playing around with <a href="http://www.mongodb.org/">MongoDB</a> for quite some time. We first used it to back our <a href="http://www.signalhq.com/features/mobile-store-locator" target="_blank">mobile store locator</a> feature. MongoDB has fantastic support for geo-spatial queries. From there, we used it to <strong>dramatically</strong> <a href="/2011/05/31/fast-queries-large-datasets-mongodb-summary-documents/">speed up the performance of our subscription list reporting capabilities</a>. It had handled these two tasks very well, and after doing some research, we determined that it may also be a better fit for our Subscriber Profile feature.</p>
<p>Why use MongoDB instead of CouchDB for this feature?</p>
<ul>
<li>When it came to fetching and updating single documents, MongoDB was considerably faster than CouchDB</li>
<li>MongoDB doesn&#8217;t use MVCC, so there was less overhead to deal with</li>
<li>MongoDB doesn&#8217;t beat up the hard disk</li>
<li>While using <a href="http://www.mongodb.org/display/DOCS/Replica+Sets">replica sets</a>, MongoDB is more of a distributed database, distributing read requests, and handling fail overs</li>
</ul>
<p>This left us with one question. How would we go about implementing our segmentation capabilities, or, the ability to find a group of subscribers based on some criteria specified by the user? Unlike CouchDB, MongoDB supports ad-hoc queries. But, like a relational databases, the proper indices need to be defined in order to make those queries fast.</p>
<p>In the hopes of removing the need for a separate full text search engine, we spent some time trying to determine if we could use MongoDB indices to implement the segmentation logic. Despite our best efforts, we were unable to make this work. Since our users can create any number of properties, and search for subscribers based on any of them, we would have had to index <strong>every property in every document</strong> . This would have required way to much memory.</p>
<p>So, we needed a full text search engine after all. Already knowing that we needed a distributed solution, we took a look at <a href="http://lucene.apache.org/solr/">Apache Solr</a> (Lucene&#8217;s distributed cousin) and <a href="http://www.elasticsearch.org/">ElasticSearch</a> (also backed by Lucene). Using a Lucene backed search solution meant that we would be able to keep a good chunk of the code that we had already written to segment subscribers based on their profile data. We chose ElasticSearch based on it&#8217;s impressive feature set, strong community, and the fact that the project has a whole lot of momentum right now.</p>
<h2>What All of this Means For Our Customers</h2>
<p>Moving to a distributed solution for holding the subscriber profile data offers the immediate benefit of quicker response times when interacting with customer profile data.  Also, this solution offers a more reliable service moving forward.  You can rest assured that we have the capability to grow our infrastructure as you grow your subscriber base.</p>
<p>In addition, we have already been able to take advantage of our new distributed full text search engine. Shortly after standing up our ElasticSearch cluster, we <a href="/2011/10/28/sms-message-search-updates/">moved our SMS message search functionality from Lucene to ElasticSearch</a>. This added the ability to search for SMS messages up to a year old (previously you could only go back 90 days), as well as provided the ability to search for messages based on their “type”.</p>
<p>More recently, we were able to utilize ElasticSearch&#8217;s Facets API to power the data you see on the <a href="/2011/12/16/analyze-subscribers-social-fans-signals-people-analytics/">People Dashboard</a>.</p>
<h2>The future of CouchDB at Signal</h2>
<p>As I mentioned at the beginning of this post, the Subscriber Profile was just one feature using CouchDB, and by far the one that caused us the most trouble. CouchDB and Lucene were simply not the right tools for this job.</p>
<p>The fact that we changed this feature to use MongoDB and ElasticSearch does not mean that we do not continue to use CouchDB, or would never use it for anything again. CouchDB views are an incredibly powerful feature. They&#8217;re not as flexible as some other options, but they really do allow you to query a large amount of data very quickly. And, CouchDB&#8217;s replication capabilities, and it&#8217;s ability to run on Android and iOS devices make it a very compelling choice for mobile devices, especially for applications that need to operate without a internet connection.</p>
<p>We are still using CouchDB in other areas of our application. While we have plans to move some of these features off of CouchDB and onto MongoDB, we currently have no plans to move the others.</p>
<p>I would never throw out a hammer because it didn&#8217;t help me drive in a screw.</p>
<div id="tweetbutton7516" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F24%2Fgetting-off-the-couchdb%2F&amp;via=signal&amp;text=Getting%20off%20the%20Couch%28DB%29&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F24%2Fgetting-off-the-couchdb%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.signalhq.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><img src="http://feeds.feedburner.com/~r/signalhq/~4/yHQAaae8etk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.signalhq.com/2012/01/24/getting-off-the-couchdb/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://blog.signalhq.com/2012/01/24/getting-off-the-couchdb/</feedburner:origLink></item>
		<item>
		<title>Scheduled Maintenance: Thursday, January 26th at 10:00 PM CDT</title>
		<link>http://feedproxy.google.com/~r/signalhq/~3/V8__XRKZjWQ/</link>
		<comments>http://blog.signalhq.com/2012/01/23/maintenance-scheduled-thursday-jan-26-10pm-central/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 20:13:30 +0000</pubDate>
		<dc:creator>Ray Krueger</dc:creator>
				<category><![CDATA[Product Announcements & Updates]]></category>
		<category><![CDATA[maintenance]]></category>

		<guid isPermaLink="false">http://blog.signalhq.com/?p=7658</guid>
		<description><![CDATA[<p>The Signal application and messaging will be unavailable for one hour starting at 10 PM Central on Thursday Jan 26. We will be performing system maintenance on our database infrastructure. This maintenance will help us improve database performance and reliability. Please email our support team (<a href='&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#117;&#112;&#112;&#111;&#114;&#116;&#64;&#115;&#105;&#103;&#110;&#97;&#108;&#104;&#113;&#46;&#99;&#111;&#109;'>&#115;&#117;&#112;&#112;&#111;&#114;&#116;&#64;&#115;&#105;&#103;&#110;&#97;&#108;&#104;&#113;&#46;&#99;&#111;&#109;</a>) if you have any questions.&#8230; <a href="http://blog.signalhq.com/2012/01/23/maintenance-scheduled-thursday-jan-26-10pm-central/" class="read_more">Keep reading</a></p>]]></description>
			<content:encoded><![CDATA[<p>The Signal application and messaging will be unavailable for one hour starting at 10 PM Central on Thursday Jan 26. We will be performing system maintenance on our database infrastructure. This maintenance will help us improve database performance and reliability. Please email our support team (<a href='&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#117;&#112;&#112;&#111;&#114;&#116;&#64;&#115;&#105;&#103;&#110;&#97;&#108;&#104;&#113;&#46;&#99;&#111;&#109;'>&#115;&#117;&#112;&#112;&#111;&#114;&#116;&#64;&#115;&#105;&#103;&#110;&#97;&#108;&#104;&#113;&#46;&#99;&#111;&#109;</a>) if you have any questions.</p>
<div id="tweetbutton7658" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F23%2Fmaintenance-scheduled-thursday-jan-26-10pm-central%2F&amp;via=signal&amp;text=Scheduled%20Maintenance%3A%20Thursday%2C%20January%2026th%20at%2010%3A00%20PM%20CDT&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F23%2Fmaintenance-scheduled-thursday-jan-26-10pm-central%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.signalhq.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><img src="http://feeds.feedburner.com/~r/signalhq/~4/V8__XRKZjWQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.signalhq.com/2012/01/23/maintenance-scheduled-thursday-jan-26-10pm-central/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.signalhq.com/2012/01/23/maintenance-scheduled-thursday-jan-26-10pm-central/</feedburner:origLink></item>
		<item>
		<title>Introducing Serious Customer Segmentation</title>
		<link>http://feedproxy.google.com/~r/signalhq/~3/GMPGMMasOrE/</link>
		<comments>http://blog.signalhq.com/2012/01/20/serious-customer-segmentation/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 21:57:36 +0000</pubDate>
		<dc:creator>Julian Rockwood</dc:creator>
				<category><![CDATA[Product Announcements & Updates]]></category>
		<category><![CDATA[personalization]]></category>
		<category><![CDATA[segmentation]]></category>

		<guid isPermaLink="false">http://blog.signalhq.com/?p=7558</guid>
		<description><![CDATA[<p>Have you ever wanted to send a message out to all of your female subscribers? What if you don&#8217;t have that information&#8230;wouldn&#8217;t it be nice to send a coupon for a free compact with makeup purchase to those that you know are women, and send a different offer to those that you don&#8217;t have gender data for?</p>
<p>Also, what if your makeup offer is valid everywhere except for Alaska? You know, since those free compacts might just crack in the cold arctic air. Wouldn&#8217;t it be great to be able to send a message to everyone in your database that you know do not live in Alaska?  To do this, not only would you need to be able to send the &#8230; <a href="http://blog.signalhq.com/2012/01/20/serious-customer-segmentation/" class="read_more">Keep reading</a></p>]]></description>
			<content:encoded><![CDATA[<p>Have you ever wanted to send a message out to all of your female subscribers? What if you don&#8217;t have that information&#8230;wouldn&#8217;t it be nice to send a coupon for a free compact with makeup purchase to those that you know are women, and send a different offer to those that you don&#8217;t have gender data for?</p>
<p>Also, what if your makeup offer is valid everywhere except for Alaska? You know, since those free compacts might just crack in the cold arctic air. Wouldn&#8217;t it be great to be able to send a message to everyone in your database that you know do not live in Alaska?  To do this, not only would you need to be able to send the message to people who you know live in the other 49 states, but you&#8217;d also want to exclude everyone who you haven&#8217;t collected state data for, since those people could live in Alaska and therefore shouldn&#8217;t receive the message.</p>
<p>Finally, wouldn&#8217;t it be great to easily collect this data upon reply?</p>
<p>I&#8217;m excited to announce that you can now make all of these things happen within Signal. We just wrapped up a project to enhance our segmentation capabilities by enabling you to create more sophisticated segments for all of the scenarios above, and more. This will greatly improve your <a href="http://www.signalhq.com/products/email-marketing/" title="Signal email marketing overview">email marketing</a> and <a href="http://www.signalhq.com/products/mobile-marketing/" title="Signal mobile marketing overview">mobile marketing</a> efforts. Here are the details:</p>
<h3>Learn More About Your Customers With &#8220;Absent/Present&#8221; Data Segmentation</h3>
<p>Some specific improvements around data segmentation on existing, and non-existing data have opened a whole new world of opportunity that was not previously possible.  For example, you can now send a message to everyone on your list that you have a mobile phone number for (ie &#8211; they’ve opted in via SMS) but that you <strong>do not have</strong> an email address for with Signal. This is a great way to gauge interest in your email newsletter and build your subscriber base. This unique ability to message on the lack of data is a great way to learn more about your customers, without annoying those who’ve already shared that information with you. Here are some examples:</p>
<ul>
<li>Find contacts who do not have an email address</li>
<li>Find contacts who do not have a mobile phone number</li>
<li>Find contacts who do not have a city</li>
<li>Find contacts who do not have a zip code (helpful for targeting at a local level)</li>
</ul>
<p>For even more advanced needs you can combine absent and present value filtering. Say you’re a Chicago business in the clothing industry, and want to invite all of your subscribers that live outside the city of Chicago to a special event. You can do this with the <strong>Has value and is not</strong> filter criteria. This will help you reduce your marketing spend on this campaign by leaving out the unknowns, and focusing on the people you have data for. For example, the following filter would find all contacts that can be identified as having a city in their user profile, but exclude those that live in Chicago:</p>
<ul>
<li>Find contacts who have a city present in their user profile, and also where the city is not Chicago</li>
</ul>
<h3>Testing A Hypothesis With &#8220;Is Not&#8221; Attribute Segmentation</h3>
<p>In addition to the benefits of the absent/present value segmentation, you can take advantage of is not or negated conditions. In this instance, you may or may not know if someone is a male, but as long as the answer is not female, you’re willing to send them a message. This type of segment is better for testing a hypothesis and messaging people you know have an interest in something, as well as those you think may be interested in something. For example, you could have collected Diet/Allergy data about your customers and can assume as long as vegetarian is not listed for your contacts, they might be interested in a meat lovers pizza. To set this up your criteria might look like this:</p>
<ul>
<li>Only show contacts that meet this criteria: Diet/Allergy: Is not: Vegetarian</li>
</ul>
<p>While all of our filter methods using &#8220;is,&#8221; &#8220;is in list,&#8221; &#8220;is not in list,&#8221; before, at/on, and after work as usual, we’ve gained new functionality in the arena of absent/present, and is not attributes that can help you learn more about your customers, and test hypothesis.  We’re confident this can help you be a better marketer, and send more relevant content. We’ve even spent time improving the interface around creating segments to encourage this behavior. While this may sound confusing at first, it’s actually quite simple and delightful to use.</p>
<p>We&#8217;re really excited about this new functionality and think you will be to. We&#8217;ll be putting together a video of this functionality in action for you early next week.</p>
<div id="tweetbutton7558" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F20%2Fserious-customer-segmentation%2F&amp;via=signal&amp;text=Introducing%20Serious%20Customer%20Segmentation&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F20%2Fserious-customer-segmentation%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.signalhq.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><img src="http://feeds.feedburner.com/~r/signalhq/~4/GMPGMMasOrE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.signalhq.com/2012/01/20/serious-customer-segmentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.signalhq.com/2012/01/20/serious-customer-segmentation/</feedburner:origLink></item>
		<item>
		<title>Find The Right Cross-Channel Marketing Solution With Signal’s New RFP Template</title>
		<link>http://feedproxy.google.com/~r/signalhq/~3/NYgSJGKvibA/</link>
		<comments>http://blog.signalhq.com/2012/01/19/signal-cross-channel-marketing-rfp/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 22:11:58 +0000</pubDate>
		<dc:creator>Tim Grace</dc:creator>
				<category><![CDATA[Cross Channel Marketing]]></category>
		<category><![CDATA[Tips, Trends and Best Practices]]></category>
		<category><![CDATA[RFP template]]></category>

		<guid isPermaLink="false">http://blog.signalhq.com/?p=7512</guid>
		<description><![CDATA[<p>Congratulations! If you&#8217;re searching for a single platform to unify your customer database and email, mobile &#38; social marketing efforts, you already understand the critical importance of using <a href="http://www.signalhq.com" target="_blank">one tool to rule cross-channel marketing</a>. You&#8217;re one step ahead of your competition.</p>
<p>That said, you&#8217;re probably also struggling with how to make sense of this emerging space. Lots of providers claim to unify these channels and it&#8217;s hard to really understand the specifics of what they mean by that.  It&#8217;s also hard to know what to look for &#8211; what are the key ingredients a provider must bake into their product in order to offer you a successful cross-channel solution?</p>
<p>Enter Signal. In working with our <a href="http://www.signalhq.com/customer-solutions/" target="_blank">terrific roster of customers</a>, &#8230; <a href="http://blog.signalhq.com/2012/01/19/signal-cross-channel-marketing-rfp/" class="read_more">Keep reading</a></p>]]></description>
			<content:encoded><![CDATA[<p>Congratulations! If you&#8217;re searching for a single platform to unify your customer database and email, mobile &amp; social marketing efforts, you already understand the critical importance of using <a href="http://www.signalhq.com" target="_blank">one tool to rule cross-channel marketing</a>. You&#8217;re one step ahead of your competition.</p>
<p>That said, you&#8217;re probably also struggling with how to make sense of this emerging space. Lots of providers claim to unify these channels and it&#8217;s hard to really understand the specifics of what they mean by that.  It&#8217;s also hard to know what to look for &#8211; what are the key ingredients a provider must bake into their product in order to offer you a successful cross-channel solution?</p>
<p>Enter Signal. In working with our <a href="http://www.signalhq.com/customer-solutions/" target="_blank">terrific roster of customers</a>, we&#8217;ve seen countless RFPs and been asked the same questions often enough that we realized we could make your life easier by simply publishing what we know.  So, we&#8217;ve done just that.<span style="text-align: center;"> </span></p>
<p><a href="http://www.signalhq.com/uploaded_resources/signalcrosschannelmarketingrfp.pdf" target="_blank" onClick="_gaq.push(['_trackEvent', 'Downloads', 'Cross-Channel Marketing RFP', 'Downloaded Cross-Channel Marketing RFP from the blog']);"><img class="size-full wp-image-7527 alignright" title="Signal's Cross-Channel Marketing RFP template" src="http://blog.signalhq.com/wp-content/uploads/2012/01/Screen-shot-2012-01-19-at-3.07.46-PM.png" alt="Screen shot 2012 01 19 at 3.07.46 PM Find The Right Cross Channel Marketing Solution With Signals New RFP Template" width="388" height="461" /></a></p>
<p>Our <a href="http://www.signalhq.com/uploaded_resources/signalcrosschannelmarketingrfp.pdf" target="_blank" onClick="_gaq.push(['_trackEvent', 'Downloads', 'Cross-Channel Marketing RFP', 'Downloaded Cross-Channel Marketing RFP from the blog']);">Cross-Channel Marketing Request For Proposal Template</a> gives you the definitive roadmap for what questions to ask potential providers, why those are the right questions to ask and what a winning answer might be. The best part? These questions and insights are all sourced from <strong>actual</strong> RFPs and questions we&#8217;ve received from our customers who are now seeing proven results in unifying their customer data and digital marketing in a single product.</p>
<p>You can <a href="http://www.signalhq.com/uploaded_resources/signalcrosschannelmarketingrfp.pdf" target="_blank"  onClick="_gaq.push(['_trackEvent', 'Downloads', 'Cross-Channel Marketing RFP', 'Downloaded Cross-Channel Marketing RFP from the blog']);">download the RFP right now</a>, no strings attached.  No form to fill out or sales pitch to listen to.  We want as many marketers as possible to benefit from the right cross-channel solution, so please spread the word!</p>
<p>Still asking what&#8217;s in it for us? Well, we&#8217;re obviously confident that Signal has a unique solution to power cross-channel marketing and are comfortable stacking our response against anyone in the space.  Feel free to <a href="http://www.signalhq.com/contact-us/" target="_blank">challenge us</a> by asking us to submit our own RFP response for your business and compare it to other providers your considering. We love challenges :)</p>
<p>As always, please let us know what you think about the RFP, what we could do better and what you think we should write next by emailing us at <a href="mailto:feedback@signalhq.com" target="_blank">feedback@signalhq.com</a>.</p>
<div id="tweetbutton7512" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F19%2Fsignal-cross-channel-marketing-rfp%2F&amp;via=signal&amp;text=Find%20The%20Right%20Cross-Channel%20Marketing%20Solution%20With%20Signal%26%238217%3Bs%20New%20RFP%20Template&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F19%2Fsignal-cross-channel-marketing-rfp%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.signalhq.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><img src="http://feeds.feedburner.com/~r/signalhq/~4/NYgSJGKvibA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.signalhq.com/2012/01/19/signal-cross-channel-marketing-rfp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.signalhq.com/2012/01/19/signal-cross-channel-marketing-rfp/</feedburner:origLink></item>
		<item>
		<title>Plainly Speaking, We Now Support Plain Text Email</title>
		<link>http://feedproxy.google.com/~r/signalhq/~3/Ywb_6E7Rr0s/</link>
		<comments>http://blog.signalhq.com/2012/01/19/signal-adds-plain-text-email/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 00:22:15 +0000</pubDate>
		<dc:creator>Julian Rockwood</dc:creator>
				<category><![CDATA[Email Marketing]]></category>
		<category><![CDATA[Product Announcements & Updates]]></category>

		<guid isPermaLink="false">http://blog.signalhq.com/?p=7479</guid>
		<description><![CDATA[<p>Despite nearly universal HTML support by email clients and near extinction of slow internet connection speeds, plain text email still has it&#8217;s place.  That&#8217;s why we&#8217;re happy to introduce support for sending plain text emails to complement our terrific HTML email builder.</p>
<p>Why is plain text email still relevant?  A couple reasons:</p>
<ul>
<li>Improved deliverability:  It&#8217;s well known that some people configure their email clients (and devices) to block HTML.  Also, you reduce your chances of getting dinged by spam filters, as the addition of a plain text option indicates you&#8217;re more likely to be a safe sender (spammers are usually lazy and don&#8217;t take the extra step).</li>
<li>Plain text emails work better for certain people and certain situations: Some people </li>&#8230; <a href="http://blog.signalhq.com/2012/01/19/signal-adds-plain-text-email/" class="read_more">Keep reading</a></ul>]]></description>
			<content:encoded><![CDATA[<p>Despite nearly universal HTML support by email clients and near extinction of slow internet connection speeds, plain text email still has it&#8217;s place.  That&#8217;s why we&#8217;re happy to introduce support for sending plain text emails to complement our terrific HTML email builder.</p>
<p>Why is plain text email still relevant?  A couple reasons:</p>
<ul>
<li>Improved deliverability:  It&#8217;s well known that some people configure their email clients (and devices) to block HTML.  Also, you reduce your chances of getting dinged by spam filters, as the addition of a plain text option indicates you&#8217;re more likely to be a safe sender (spammers are usually lazy and don&#8217;t take the extra step).</li>
<li>Plain text emails work better for certain people and certain situations: Some people find plain text more readable and there is content, such as a simple daily notification, that lends itself better to plain text delivery.  Plain text is also a safer option for mobile email clients, as some still don&#8217;t display HTML properly.</li>
</ul>
<p>With the addition of a plain text option, you now have increased odds that your message will reach inboxes and be presented in a format people can read, no matter their device.  While we don&#8217;t require you create a plain text version of your emails, it’s recommended that you take the time to create a plain text alternative.  It&#8217;s best practice and we&#8217;ve made it very easy to do!  Also, no need to worry that people will get two versions (HTML &amp; plain text) of the same email. Each recipient will only ever get their preferred version of the message, never both.</p>
<p>You&#8217;ll find the plain text configuration option on step 2 of our email builder.</p>
<p style="text-align: center;"><a href="http://blog.signalhq.com/wp-content/uploads/2012/01/Slide21.jpg"><img class="aligncenter size-full wp-image-7481" title="Slide2" src="http://blog.signalhq.com/wp-content/uploads/2012/01/Slide21.jpg" alt="Slide21 Plainly Speaking, We Now Support Plain Text Email " width="576" height="143" /></a></p>
<p>You can create the plain text alternative after you&#8217;ve created the HTML version. This offers the added benefit of being able to copy  text straight from your HTML version and edit it inline.</p>
<p style="text-align: center;"><a href="http://blog.signalhq.com/wp-content/uploads/2012/01/Slide32.jpg"><img class="aligncenter size-full wp-image-7482" title="Slide3" src="http://blog.signalhq.com/wp-content/uploads/2012/01/Slide32.jpg" alt="Slide32 Plainly Speaking, We Now Support Plain Text Email " width="576" height="432" /></a></p>
<p>It&#8217;s also just as easy to send yourself a test message of the plain text version to ensure you&#8217;re happy with it&#8217;s content.</p>
<p style="text-align: center;"><a href="http://blog.signalhq.com/wp-content/uploads/2012/01/Slide41.jpg"><img class="aligncenter size-full wp-image-7484" title="Slide4" src="http://blog.signalhq.com/wp-content/uploads/2012/01/Slide41.jpg" alt="Slide41 Plainly Speaking, We Now Support Plain Text Email " width="567" height="258" /></a></p>
<p>We hope you&#8217;re just as happy with this new feature as we are.  Feel free to let us know how happy, or offer any feedback, in the comments or by sending us a note at <a href="mailto:feedback@signalhq.com" target="_blank">feedback@signalhq.com </a></p>
<div id="tweetbutton7479" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F19%2Fsignal-adds-plain-text-email%2F&amp;via=signal&amp;text=Plainly%20Speaking%2C%20We%20Now%20Support%20Plain%20Text%20Email&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F19%2Fsignal-adds-plain-text-email%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.signalhq.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><img src="http://feeds.feedburner.com/~r/signalhq/~4/Ywb_6E7Rr0s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.signalhq.com/2012/01/19/signal-adds-plain-text-email/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.signalhq.com/2012/01/19/signal-adds-plain-text-email/</feedburner:origLink></item>
		<item>
		<title>Signal updates for January 13, 2012</title>
		<link>http://feedproxy.google.com/~r/signalhq/~3/esri8YgYMlw/</link>
		<comments>http://blog.signalhq.com/2012/01/17/january-13-release-notes/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 22:57:40 +0000</pubDate>
		<dc:creator>Julian Rockwood</dc:creator>
				<category><![CDATA[Release Notes]]></category>

		<guid isPermaLink="false">http://blog.signalhq.com/?p=7461</guid>
		<description><![CDATA[<div id="release-notes">
<h4>Date: January 13, 2012</h4>
<div id="release-notes-heading">
<h2>Features</h2>
<ul>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1230">Move user attributes from CouchDB to MongoDB</a></li>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1801">Create repeatable content regions in email</a></li>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1802">Create People Dashboard</a></li>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1841">Add Selectable Custom Styles to Email Editor </a></li>
</ul>
<h2>Enhancements / Improvements</h2>
<ul>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1832">Create Consistent (Sent/Scheduled/Draft/Pending) Message Views for Email and SMS </a></li>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1872">Allow for creation of user attributes during subscriber upload</a></li>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1933">Turn on image support for coupons</a></li>
</ul></div>
<div class="release-notes-details">
<h2><a name="1230"></a>Move user attributes from CouchDB to MongoDB</h2>
<p>    Migrated our user attributes to to Mongo to allow for more advanced segmentation (negated attributes), and better housing on user attributes(merged contacts).
  </p></div>
<div class="release-notes-details">
<h2><a name="1801"></a>Create repeatable content regions in email</h2>
<p>    Added the flexibility to use customizable content blocks in email templates.
  </p></div>
<div class="release-notes-details">
<h2><a name="1802"></a>Create People Dashboard</h2>
<p>    Added a People Analytics dashboard to enhance our customer&#8217;s understanding of who their subscribers, fans, and </p></div>&#8230; <a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/" class="read_more">Keep reading</a></div>]]></description>
			<content:encoded><![CDATA[<div id="release-notes">
<h4>Date: January 13, 2012</h4>
<div id="release-notes-heading">
<h2>Features</h2>
<ul>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1230">Move user attributes from CouchDB to MongoDB</a></li>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1801">Create repeatable content regions in email</a></li>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1802">Create People Dashboard</a></li>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1841">Add Selectable Custom Styles to Email Editor </a></li>
</ul>
<h2>Enhancements / Improvements</h2>
<ul>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1832">Create Consistent (Sent/Scheduled/Draft/Pending) Message Views for Email and SMS </a></li>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1872">Allow for creation of user attributes during subscriber upload</a></li>
<li><a href="http://blog.signalhq.com/2012/01/17/january-13-release-notes/#1933">Turn on image support for coupons</a></li>
</ul></div>
<div class="release-notes-details">
<h2><a name="1230"></a>Move user attributes from CouchDB to MongoDB</h2>
<p>    Migrated our user attributes to to Mongo to allow for more advanced segmentation (negated attributes), and better housing on user attributes(merged contacts).
  </p></div>
<div class="release-notes-details">
<h2><a name="1801"></a>Create repeatable content regions in email</h2>
<p>    Added the flexibility to use customizable content blocks in email templates.
  </p></div>
<div class="release-notes-details">
<h2><a name="1802"></a>Create People Dashboard</h2>
<p>    Added a People Analytics dashboard to enhance our customer&#8217;s understanding of who their subscribers, fans, and followers are and position them to create more relevant content.
  </p></div>
<div class="release-notes-details">
<h2><a name="1841"></a>Add Selectable Custom Styles to Email Editor</h2>
<p>    Added the ability for users to predefined a drop-down of available (brand-approved) text styles. Reduces time to create an email that is aligned with brand-standards.
  </p></div>
<div class="release-notes-details">
<h2><a name="1832"></a>Create Consistent (Sent/Scheduled/Draft/Pending) Message Views for Email and SMS</h2>
<p>    We made awesome improvements to the &#8220;all messages&#8221; views for both email and text, to ensure consistency and promote utilization of existing functionality throughout the interface. Recap here: <a href="http://blog.signalhq.com/2012/01/12/year-signal/">http://blog.signalhq.com/2012/01/12/year-signal/</a>
  </div>
<div class="release-notes-details">
<h2><a name="1872"></a>Allow for creation of user attributes during subscriber upload</h2>
<p>    Changed the contact upload process to allow for creation of custom user attributes at the time of upload. The new process makes it easier for customers to import their customer data and build out their customer profiles.
  </p></div>
<div class="release-notes-details">
<h2><a name="1933"></a>Turn on image support for coupons</h2>
<p>    Just as we added the ability for our users to simply add images to their email campaigns, we also added the ability for people to add images to their Signal coupons via the WYSIWYG editor.
  </p></div>
</div>
<div id="tweetbutton7461" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F17%2Fjanuary-13-release-notes%2F&amp;via=signal&amp;text=Signal%20updates%20for%20January%2013%2C%202012&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F17%2Fjanuary-13-release-notes%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.signalhq.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><img src="http://feeds.feedburner.com/~r/signalhq/~4/esri8YgYMlw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.signalhq.com/2012/01/17/january-13-release-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.signalhq.com/2012/01/17/january-13-release-notes/</feedburner:origLink></item>
		<item>
		<title>Signal updates for January 1, 2012</title>
		<link>http://feedproxy.google.com/~r/signalhq/~3/G7lJk5gAEms/</link>
		<comments>http://blog.signalhq.com/2012/01/17/january-1st-release-notes/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 22:54:30 +0000</pubDate>
		<dc:creator>Julian Rockwood</dc:creator>
				<category><![CDATA[Release Notes]]></category>

		<guid isPermaLink="false">http://blog.signalhq.com/?p=7448</guid>
		<description><![CDATA[<div id="release-notes">
<div id="release-notes-heading">
<h2>Features</h2>
<ul>
<li><a href="http://blog.signalhq.com/2012/01/17/january-1st-release-notes/#1804">Add locations visualization</a></li>
</ul>
<h2>Enhancements / Improvements</h2>
<ul>
<li><a href="http://blog.signalhq.com/2012/01/17/january-1st-release-notes/#1838">Add date picker / summary stats to email reporting </a></li>
<li><a href="http://blog.signalhq.com/2012/01/17/january-1st-release-notes/#1769">Activity unclear in weekly digest</a></li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>Should not display &#8220;Older Tweets&#8221; link when there are not older Tweets</li>
<li>Character count does not change when shortening a link</li>
<li>Used character count in social post does not actually change when you shorten a URL (unless you start typing)</li>
<li>Lack of &#8220;list description&#8221; pulls 2 duplicate error notifications</li>
<li>Pie-chart gone from messages sent report</li>
<li>Message search doesn&#8217;t show messages in order</li>
<li>Email upload stats show &#8220;3 subscribers&#8221; already added to this list which is impossible because it&#8217;s a confirmed new account</li>
<li>Approving a Segmented Message</li>
<li>Tags visible in error message</li>
<li>Fix broken file upload behavior</li>
<li>Disable </li></ul></div>&#8230; <a href="http://blog.signalhq.com/2012/01/17/january-1st-release-notes/" class="read_more">Keep reading</a></div>]]></description>
			<content:encoded><![CDATA[<div id="release-notes">
<div id="release-notes-heading">
<h2>Features</h2>
<ul>
<li><a href="http://blog.signalhq.com/2012/01/17/january-1st-release-notes/#1804">Add locations visualization</a></li>
</ul>
<h2>Enhancements / Improvements</h2>
<ul>
<li><a href="http://blog.signalhq.com/2012/01/17/january-1st-release-notes/#1838">Add date picker / summary stats to email reporting </a></li>
<li><a href="http://blog.signalhq.com/2012/01/17/january-1st-release-notes/#1769">Activity unclear in weekly digest</a></li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>Should not display &#8220;Older Tweets&#8221; link when there are not older Tweets</li>
<li>Character count does not change when shortening a link</li>
<li>Used character count in social post does not actually change when you shorten a URL (unless you start typing)</li>
<li>Lack of &#8220;list description&#8221; pulls 2 duplicate error notifications</li>
<li>Pie-chart gone from messages sent report</li>
<li>Message search doesn&#8217;t show messages in order</li>
<li>Email upload stats show &#8220;3 subscribers&#8221; already added to this list which is impossible because it&#8217;s a confirmed new account</li>
<li>Approving a Segmented Message</li>
<li>Tags visible in error message</li>
<li>Fix broken file upload behavior</li>
<li>Disable new list scheduled message approval for accounts with sub accounts</li>
<li>Uploading subscribers with opt-in dates in the past fails</li>
<li>List reports &#8211; List Opt-Out Export not working</li>
<li>Fields cleared if new email template selected</li>
<li>Insert landing page links are not cached during page rendering</li>
<li>Fix passing a bad zip into the locations campaign</li>
<li>Unsubscribes not being properly tracked for emails</li>
</ul>
</div>
<div class="release-notes-details">
<h2><a name="1804"></a>Add support for location visualization</h2>
<p>Added phase one, minimum required location visualizations to enhance the location segmentation product.
</p></div>
<div class="release-notes-details">
<h2><a name="1838"></a>Add date picker / summary stats to email reporting</h2>
<p>Users we&#8217;re not able to customize the date of their email reports, so we added a date picker.
</p></div>
<div class="release-notes-details">
<h2><a name="1769"></a>Activity unclear in weekly digest</h2>
<p>Made improvements to the design of the Weekly Digest notification email to improve clarity for our customers.
</p></div>
</div>
<div id="tweetbutton7448" class="tw_button" style=""><a href="http://twitter.com/share?url=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F17%2Fjanuary-1st-release-notes%2F&amp;via=signal&amp;text=Signal%20updates%20for%20January%201%2C%202012&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fblog.signalhq.com%2F2012%2F01%2F17%2Fjanuary-1st-release-notes%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.signalhq.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><img src="http://feeds.feedburner.com/~r/signalhq/~4/G7lJk5gAEms" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.signalhq.com/2012/01/17/january-1st-release-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.signalhq.com/2012/01/17/january-1st-release-notes/</feedburner:origLink></item>
	</channel>
</rss>

