<?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>Hartley Brody</title>
	<atom:link href="http://blog.hartleybrody.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.hartleybrody.com</link>
	<description>Hartley is a 20-something trying to learn as much as he can while adjusting to the lifestyle of a grown-up. He works on the marketing team at HubSpot where he gets to build cool things and work with great people. He&#039;s a world-class marketer with a hacker mentality. Author of Marketing for Hackers.</description>
	<lastBuildDate>Tue, 21 May 2013 18:32:46 +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>A Quick Primer on Writing Readable Python Code</title>
		<link>http://blog.hartleybrody.com/python-style-guide/</link>
		<comments>http://blog.hartleybrody.com/python-style-guide/#comments</comments>
		<pubDate>Tue, 23 Apr 2013 17:48:10 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2218</guid>
		<description><![CDATA[In general, code is written once in a few minutes (or hours) and then read and maintained for years to come. Ensuring that the code you write today is readable and makes sense to other engineers down the line is a Really Good Thing and you should always keep readability in mind as you&#8217;re writing [...]]]></description>
				<content:encoded><![CDATA[<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/04/python-style-guide-150x150.png" alt="python-style-guide" width="150" height="150" class="alignright size-thumbnail wp-image-2219" />In general, code is written once in a few minutes (or hours) and then read and maintained for years to come. Ensuring that the code you write today is readable and makes sense to other engineers down the line is a Really Good Thing and you should always keep readability in mind as you&#8217;re writing code, even for small one-off scripts.</p>
<p>This is an adaption of an article I wrote on the engineering wiki at <a href="http://bufferapp.com/r/f4de6">Buffer</a>, where I work as a growth hacker.</p>
<p><span id="more-2218"></span></p>
<h3>The Zen of Python</h3>
<p>Run <code>import this</code> from a python interpreter to see the official &#8220;zen of python&#8221;</p>
<ul style="list-style-type:none">
<li>
<pre class="brush: python; title: ; notranslate">
&quot;&quot;&quot;
 Beautiful is better than ugly.
 Explicit is better than implicit.
 Simple is better than complex.
 Complex is better than complicated.
 Flat is better than nested.
 Sparse is better than dense.
 Readability counts.
 Special cases aren't special enough to break the rules.
 Although practicality beats purity.
 Errors should never pass silently.
 Unless explicitly silenced.
 In the face of ambiguity, refuse the temptation to guess.
 There should be one-- and preferably only one --obvious way to do it.
 Although that way may not be obvious at first unless you're Dutch.
 Now is better than never.
 Although never is often better than *right* now.
 If the implementation is hard to explain, it's a bad idea.
 If the implementation is easy to explain, it may be a good idea.
 Namespaces are one honking great idea -- let's do more of those!
&quot;&quot;&quot;
</pre>
</li>
</ul>
<h3>PEP8</h3>
<p><strong>tl;dr:</strong> Whatever IDE or text editor you&#8217;re using probably has a plugin that will notify you when the code you&#8217;re writing doesn&#8217;t match these styles. Installing one was the best decision I ever made as a python programmer. (Besides reading &#8220;<a href="http://blog.hartleybrody.com/data-centric-programming/" title="Data Centric Programming">Dive into Python</a>&#8220;)</p>
<p>Ideally, there should be One Correct Way or writing a given statement or expression. If everyone decides their own conventions for spacing, variable naming, etc. then code becomes harder to read and maintain. The <a href="http://www.python.org/dev/peps/pep-0008/" target="_blank">PEP8 style guide</a> is the most commonly used convention for addressing this problem in python. Written by Guido van Rossum &#8212; the creator of python &#8212; it recommends the following conventions:</p>
<ul>
<li>
Use 4 spaces for indentation, not tabs
</li>
<li>
A single space after every comma and between every operator:</p>
<pre class="brush: python; title: ; notranslate">
# BAD
v1,v2=0,0
my_dict={&quot;key1&quot;:1,&quot;key2&quot;:2}

# GOOD
v1, v2 = 0, 0  # much easier to quickly scan and read
my_dict = {&quot;key1&quot;: 1, &quot;key2&quot;: 2}
</pre>
</li>
<li>
Two blank lines between classes and top-level function definitions, one blank line between class methods.</p>
<pre class="brush: python; title: ; notranslate">
def function():
    pass


class MyClass(object):

    def __init__(self, arg):
        super(MyClass, self).__init__()
        self.arg = arg

    def get_arg_offset(self):
        return self.arg * 10
</pre>
</li>
<li>
Imports should be on separate lines, and should be explicit:</p>
<pre class="brush: python; title: ; notranslate">
# BAD
import sys, time, os
    
# GOOD
import sys
import time
import os

# this is okay, multiple imports from same package
from os import environ, chdir

# NEVER do wildcard imports. Lots of badness ahead.
from somereallybigpackage import *

# Explicitly import the things you need. Avoids
# collisions and makes later code way more readable.
# Ie: &quot;Where is this function defined? Oh, I see it 
# was imported from somereallybigpackage&quot;
from somereallybigpackage import func1, func2, func3, class1, CONSTANT

# If you really need everything, then just
# import the module and use it as a namespace.
import somereallybigpackage
...
somereallybigpackage.func1()
somereallybigpackage.func2()
</pre>
</li>
<li>
Variables are where you give your code meaning and context. Variable names should err on the side of being long and explicit. It may take a few extra seconds to type, but it saves other engineers hours of trying to figure out what you meant. If your variable names are shorter than five characters, they&#8217;re probably too short. <br/> P.S. They say one of the <a href="http://martinfowler.com/bliki/TwoHardThings.html" target="_blank">hardest problems in programming is naming things</a>. </p>
<pre class="brush: python; title: ; notranslate">
# BAD, what do these variables mean?
t = datetime.datetime.strptime(strdate, &quot;%Y%m%d&quot;)
ts = int(time.mktime(t.timetuple()))
t2 = t - timedelta(1)
ts2 = int(time.mktime(t2.timetuple()))

# GOOD, very explicit
current_cohort_user_query = build_cohort_query(joined_at__gte=current_cohort_month, joined_at__lt=next_cohort_month)
current_cohort_users = UserMetrics.objects.raw_query(current_cohort_user_query)
</pre>
</li>
<li>
Comments can be super useful when there&#8217;s a lot of &#8220;magic&#8221; going on or if you&#8217;re worried that there&#8217;s a lot of logic that might be hard for a new reader to understand. But beware the out-of-date comment! Whenever you change code, be sure to change any nearby comments if they&#8217;re no longer true. Comments that contradict the code are worse than no comments.</p>
<pre class="brush: python; title: ; notranslate">
def function():
    &quot;&quot;&quot;
    Any function that's longer than a few lines
    should have a docstring that explains, at minimum:
      1. what params the function takes, if any
      2. what it should be expected to return
    Docstrings should be immediately after the function
    definition and are usually multi-line comments that 
    use the triple-quote syntax, not hashtags.
    &quot;&quot;&quot;

    # If you need to use in-line comments, you can either put them
    # above a big block of code, like this...
    while True:
       counter_var += 1  # or put them inline, with two spaces between the code and the hashtag

    # Note there's always a space between the hashtag and first letter of the comment.
</pre>
</li>
</ul>
<h3>Final Thought</h3>
<p>It may seem like splitting hairs, especially if the code still functions regardless of whether it follows the style guide. But having clean, easy-to-read code is a huge investment in your code base and saves you from piling up mountains of technical debt down the line. If any engineer can open a file and quickly figure out exactly what&#8217;s happening and make edits, you become a much faster engineering team.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/python-style-guide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Become an Unsuspecting Hero</title>
		<link>http://blog.hartleybrody.com/unsuspecting-hero/</link>
		<comments>http://blog.hartleybrody.com/unsuspecting-hero/#comments</comments>
		<pubDate>Tue, 16 Apr 2013 17:25:24 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2209</guid>
		<description><![CDATA[In the moments immediately after yesterday&#8217;s bombings, there were lots of volunteers and bystanders who didn&#8217;t expect to become heroes, but did. Their immediate actions saved lives. Every single citizen should know CPR and how to handle major blood loss events. If you don&#8217;t, please please read up and take a class. Spending a few [...]]]></description>
				<content:encoded><![CDATA[<p>In the moments <a href="http://deadspin.com/explosions-reported-at-the-boston-marathon-473008941" target="_blank">immediately after yesterday&#8217;s bombings</a>, there were lots of volunteers and bystanders who didn&#8217;t expect to become heroes, but did. Their immediate actions saved lives.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/04/boston-marathon-leg-pressure.jpg" alt="BOSTON - APRIL 15: Passersby put pressure on a victim&#039;s leg to try to stop the bleeding at the scene of the first explosion near the finish line of the Boston Marathon. (Photo by John Tlumacki/The Boston Globe via Getty Images)" width="500" class="aligncenter size-full wp-image-2212" /></p>
<p>Every single citizen should know CPR and how to handle major blood loss events. If you don&#8217;t, please please read up and take a class. Spending a few hours learning these things now could give you the skills that end up saving the life of a loved one or a stranger.</p>
<p>It only takes a few hours to learn, and then you can go on with your life. But when a moment of potential tragedy catches you off-guard, you won&#8217;t become a passive, helpless observer. You&#8217;ll be a life saver. An unsuspecting hero.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/04/boston-marathon-mass-victims.jpg" alt="" width="500"  class="aligncenter size-full wp-image-2213" /></p>
<p>Here are some excellent ways to get started:</p>
<p><a href="http://www.redcross.org/take-a-class" target="_blank"><strong>The American Red Cross</strong></a> offers a class called &#8220;CPR, First Aid, and AED for Lay Responders.&#8221; It takes five hours and is an excellent way to spend a Saturday morning. Everyone should take this class, or a local equivalent.</p>
<p><a href="http://www.nols.edu/wmi/courses/wfr.shtml" target="_blank"><strong>NOLS Wilderness First Responder Course</strong></a> is probably the most comprehensive first aid course you can take, short of becoming an EMT. These classes usually take a solid week and are focused on backcountry first aid, when getting someone to a hospital isn&#8217;t an immediate option. This is more for people who find themselves in remote situations.</p>
<p>Many larger schools offer student-run ambulance associations which you could either join or take classes with.</p>
<p>Read articles like this one on <a href="http://www.artofmanliness.com/2012/03/21/how-to-save-lives-like-an-army-medic-using-a-tourniquet-to-control-major-bleeding/" target="_blank">How to Use a Tourniquet</a> or some of the questions on the <a href="http://www.quora.com/First-Aid" target="_blank">First Aid tag on Quora</a> to build out more of an intuition for how our bodies work and things to be aware of when administering first aid.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/04/boston-marathon-first-responder.jpg" alt="BOSTON - APRIL 15: (EDITOR&#039;S NOTE: THIS IMAGE CONTAINS GRAPHIC CONTENT) A person who was injured in an explosion near the finish line of the 117th Boston Marathon is taken away from the scene on a stretcher. (Photo by David L. Ryan/The Boston Globe via Getty Images)" width="500" class="aligncenter size-full wp-image-2211" /></p>
<p>I&#8217;ve seen lots of people posting statuses about wanting to help in some way, maybe donating blood. My advice: take a first aid class as soon as you can. God forbid you ever need to use your training, you&#8217;ll have the opportunity to be someone&#8217;s hero.</p>
<p>-</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/unsuspecting-hero/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Convert New Users to Evangelists: Understanding the Post Sign Up Funnel</title>
		<link>http://blog.hartleybrody.com/post-sign-up-funnel/</link>
		<comments>http://blog.hartleybrody.com/post-sign-up-funnel/#comments</comments>
		<pubDate>Thu, 28 Mar 2013 02:12:40 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2195</guid>
		<description><![CDATA[What do you want your users to do after they sign up? While getting people into your product is obviously A Very Good Thing, it isn&#8217;t time to pat yourself on the back just yet. To build an awesome product experience and an engaged user base, you really need to carefully focus on what happens [...]]]></description>
				<content:encoded><![CDATA[<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/03/clipboard-sign-up.jpg" alt="clipboard-sign-up" width="173" height="290" class="alignright size-full wp-image-2206" />What do you want your users to do after they sign up? </p>
<p>While getting people into your product is obviously A Very Good Thing, it isn&#8217;t time to pat yourself on the back just yet. To build an awesome product experience and an engaged user base, you really need to carefully focus on what happens <em>after</em> a user has signed up.</p>
<p>Once they&#8217;re in the door, you want to show them value quickly. Help them avoid common pitfalls and show them how to get the most of your product. Walk them through the process of moving from beginner to power user to evangelist.</p>
<p>Not only does this make for happy users, but it also make it easy to ask for referrals, product reviews and up-sells, while simultaneously avoiding churn and abandonment. That all sounds pretty awesome, right?</p>
<p>I&#8217;ll walk you through a few basic ideas and then we&#8217;ll look at how some of the hottest startups have built out their post sign up funnels.</p>
<p><span id="more-2195"></span><br />
<h3>What Is All This Talk About Funnels?</h3>
<p>The concept of &#8220;the funnel&#8221; is very common in business-to-business (B2B) marketing, where potential customers make slower, deliberate decisions &#8212; often taking weeks or months &#8212; before deciding to sign up for a product. </p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/01/landing-page.png" alt="A B2B Marketing Funnel" class="alignright" width="180px">In that context, the funnel helps businesses realize that there are stages consumers go through before signing up. In order to market and sell successfully, businesses need to move people through those stages, and not just jump right to the end by trying to sell, before the potential buyer is ready. Very rarely does someone show up on a B2B website for the first time and whip out their credit card, ready to purchase.</p>
<p>The funnel tapers because you expect to lose people along the way: not everyone who visits your website will become a good lead for your business, and not every lead will end up signing up. That&#8217;s totally expected. But you want to minimize the loss between each stage, so that a higher percentage of visitors become leads, and a higher percentage of leads become customers. </p>
<h3>An Example Post Sign Up Funnel</h3>
<p>For products that are tailored to consumers (so-called &#8220;B2C&#8221;), sign up is often much faster and less calculated. But there are still stages that a user goes through between when they first find out about your product and when the become an evangelical customer. </p>
<p>Let&#8217;s look at what an example post sign up funnel might look like for a typical B2C product:</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/03/post-signup-funnel.jpg" alt="The Post Sign Up Funnel" width="500" height="400" class="aligncenter size-full wp-image-2196" /></p>
<p><strong>Stage 1: Receives Tour</strong><br />
We start by giving them a tour so they understand how things work. Hopefully, every user that signs up will go through the tour so we get a chance to show them all that our product can do. There shouldn&#8217;t really be any drop off at this early of a stage.</p>
<p><strong>Stage 2: Performs Primary Action</strong><br />
Next, we drive the user to actually use our product. If there are multiple things a user can do with our product, we should drive them to the action that proves the &#8220;stickiest,&#8221; which we&#8217;ll talk about later. </p>
<p>If there&#8217;s a lot of drop off between stage 1 and 2 &#8212; that is, lots of people go through the tour but don&#8217;t perform the primary action &#8212; then you probably means you should tighten things up and make the tour shorter. Maybe even skip the tour altogether and drive them right into the primary action.</p>
<p><strong>Stage 3: Receives Positive Feedback/Value</strong><br />
This is the most important stage you want to drive a user through &#8212; the moment where they experience the value of your product first-hand. If a new user doesn&#8217;t make to the stage quickly, you&#8217;re likely to lose them forever.</p>
<p>Maybe they started uploading their information, but it was taking too long so they never ended up getting your sweet analysis. Or maybe there were too many steps between taking the picture and sharing it with friends.</p>
<p>If someone starts performing your product&#8217;s primary action but doesn&#8217;t make it all the way, <em>this is very bad</em>. Sure, you might lose a few people for random reasons, but most people who start using your product should get to see the value for their effort. If they&#8217;re not, then you have a product issue and should probably address that before anything else.</p>
<p><strong>Stage 4: Comes Back Later</strong><br />
At this stage, a user has already taken your product for a spin once. Some users might only ever use your product once, and never come back. And for some businesses, this might not be an issue. But ideally, the user liked it so much that they come back and use it again later. Encouraging regular, habitual use of your product is a great way to build a strong, loyal fan base. </p>
<p>Some startups only report on &#8220;active users&#8221; &#8212; that is, users who have come back to the product recently &#8212; rather than total users, since it gives a clearer picture of how valuable users find the product. In fact, looking at the percentage of &#8220;daily active&#8221; or &#8220;monthly active&#8221; users to total users is a great way to understand how loyal your user base is.</p>
<p>You&#8217;re going to have a hard time trying to encourage  referrals or reviews or up-sells if people aren&#8217;t coming back to use your product regularly. </p>
<p><strong>Stage 5 &#038; 6: Invites Friends &#038; Write Review</strong><br />
If a user is so excited about your product that they&#8217;re using it regularly, the next stage is to get them to share their experience. Encouraging them to invite their friends or leave a review somewhere is a great way to leverage your current user base to help bring in new users. This is where the &#8220;viral loop&#8221; kicks in and new users lead to more new users.</p>
<p>But, just like the B2B marketing funnel, you shouldn&#8217;t jump to this stage right away or it could come off as pushy. Make sure you&#8217;re walking your users through all the necessary steps from curious first-timer to dedicated power user.</p>
<h3>Finding Your Own Post Sign Up Funnel</h3>
<p>The above is just an example funnel, but I think it&#8217;s roughly accurate for a lot of B2C products. Ultimately though, you need to figure out what the funnel looks like for your product. Maybe it ends with referring friends, or maybe it&#8217;s simply getting the user to come back on a regular basis.</p>
<p>For a lot of freemium products, one of the main goals is to get a user to upgrade and start paying for premium features. But even once they do that, it doesn&#8217;t mean that the user has come all the way through the funnel. You could still potentially drive more upgrades if you have multiple price points, or encourage users to try new parts of the product.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/03/sticky-features.jpg" alt="Gum on the bottom of your shoe keeps you stuck to the sidewalk" width="120" class="alignright size-full wp-image-2202" />A good way to come up with your own funnel is to find the &#8220;stickiest&#8221; feature in your product &#8212; that is, the feature that&#8217;s mostly strongly correlated with low user churn &#8212; and drive the user to that. A sticky feature is one where, once the user starts using it, they&#8217;ll have a hard time stopping. </p>
<p>It could be that the value from the feature is unavailable elsewhere, or it could be that the switching costs of that feature are so high that users would rather stay put than move to another product. </p>
<p>Some people bristle at the idea of locking a user in, but it&#8217;s not necessarily about keeping their data. It&#8217;s about creating value they can&#8217;t find elsewhere. </p>
<p>For example:</p>
<p>Even if I found a better photo sharing site than Facebook, I still want to tag my friends in all my photos. Since my friends are all on Facebook already, I&#8217;m pretty much locked into Facebook for photo sharing. </p>
<p>Even if I wanted to switch from Gmail, I&#8217;ve given out my email address to so many people that the switching costs of moving to a new email address would make it nearly impossible. </p>
<p>I <em>could</em> export my data from either service, but where would I take it to get the same value? Once I start using those services, it&#8217;s very hard to stop. Photos and email are both sticky features for Facebook and Google, respectively.</p>
<h3>The Growth Hacking Tool Belt</h3>
<p>Just like with the marketing funnel, you want to constantly be helping your users move from one stage to the next, losing as few along the way as possible. Drive them from sign up to first use, then to regular use, then to becoming evangelists. </p>
<p>At any given point in time, you&#8217;ll have users that are at every stage of the funnel. This means it&#8217;ll be tricky to manage things manually, so you should think about ways to build encouragement into your product so that it happens automatically.</p>
<p>There are a few categorical ways to build growth into your product. We&#8217;ll go through some of them and then look at examples of hot startups that have successfully used these techniques to drive huge user growth.</p>
<p><strong>Lifecycle or &#8220;Drip&#8221; Emails</strong><br />
Lifecycle emails are a series of pre-written emails that are automatically sent to users based on certain triggers. The triggers are either related to how a user is using the product, or simply keyed off a time delay where users receive an email every few days.</p>
<p>The time-delayed emails are the easiest to setup. Every user receives the same series of emails based on when they signed up. Here&#8217;s an example of a time delayed &#8212; or &#8220;drip&#8221; &#8212; campaign:</p>
<ul>
<li>Day 0: Thanks for signing up!</li>
<li>Day 2: Here are some tips for getting started.</li>
<li>Day 5: Here&#8217;s what other user are doing.</li>
<li>Day 8: Advanced tips for our product.</li>
<li>Day 12: Let us know if we can help.</li>
</ul>
<p>To be a bit smarter about it, you can send these emails based on how users are interacting with your product. If you noticed they signed up but haven&#8217;t performed your product&#8217;s primary action with a day or two, you might send an email to see if they have questions. </p>
<p>If they haven&#8217;t logged in in awhile, let them know what they&#8217;ve been missing. Or you can use email to encourage users to keep doing what they&#8217;ve been doing.</p>
<p>Twitter does a great job of this with their &#8220;Suggestions similar to&#8221; emails. Clearly, they&#8217;ve discovered that a user is more likely to be active on Twitter if they follow lots of other accounts &#8212; following new accounts is a sticky feature for Twitter because it creates a ton of value (seeing what friends and celebs are saying) in a way that a user can&#8217;t find elsewhere. </p>
<p>When a user first sign up, Twitter is constantly suggesting other accounts to follow on their website. But once the user has followed a certain number of accounts, they&#8217;ve moved to the next stage of the funnel, and the on-site recommendations start to be less intrusive.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/03/twitter-who-to-follow.jpg" alt="Twitter suggests who to follow" width="500" class="aligncenter size-full wp-image-2203" /></p>
<p>However, whenever when a user follows someone new, Twitter sends them an email with suggestions for similar accounts they might want to follow. I personally get a lot of these emails, but I don&#8217;t mind because they&#8217;ve helped me discover a ton of interesting people. It helps me get more value from the service as a user, and it helps Twitter ensure that I&#8217;m coming back again and again.</p>
<p>In fact, Twitter has a number of email notifications that are all designed to pull users back to the site. They offer tips on getting more out of the product, things a user has missed since the last time they logged in, as well as top tweets and stories from around Twitter. </p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/03/twitter-emails.jpg" alt="Twitter email notification preferences" width="500" class="aligncenter size-full wp-image-2204" /></p>
<p><strong>Lifting Restrictions</strong><br />
One of the best ways to encourage behavior is to reward it. If your product has a freemium version that comes with certain restrictions, lifting those restrictions is a super easy way to incentivize users to perform an action you&#8217;d like them to take.</p>
<p>There are tons of great examples of this but I think Dropbox&#8217;s is the most well-known. They give away free storage space for literally every single part of their post sign up funnel:</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/03/dropbox-growth.jpg" alt="Dropbox offers a ton of ways to get free space, all of which pull me through their post sign up funnel." width="500" class="size-full wp-image-2201" /></p>
<ul>
<li>500MB for everyone I invite to Dropbox, up to 16GB</li>
<li>250MB for taking a product tour</li>
<li>125MB for hooking up both my Twitter &#038; Facebook accounts</li>
<li>125MB for following them on Twitter</li>
</ul>
<p>By completing all of these steps, a user is not only unlocking more storage space, but also becoming both a power user (product tour + following Dropbox on twitter for updates) as well as an evangelist (inviting all their friends).</p>
<p>Performing each of these steps helps the user get more out of Dropbox, and helps Dropbox ensure that they have a well-educated user base full of evangelists.</p>
<p><strong>Gamification</strong><br />
If your product has any game mechanics built into it, you can use those to incentivize behavior that drives users through the post sign up funnel. </p>
<p>A site that does this well is Q&#038;A site StackOverflow. While you can obviously win badges for asking good questions and providing helpful answers, they have a number of other badges that simply encourage users to become competent, regular users.</p>
<ul>
<li><strong>Analytical</strong> (bronze): Visited every section of the FAQ.</li>
<li><strong>Autobiographer</strong> (bronze): Completed all user profile fields</li>
<li><strong>Informed</strong> (bronze): Read the entire about page</li>
<li><strong>Enthusiast</strong> (silver): Visited the site each day for 30 consecutive days</li>
<li><strong>Fanatic</strong> (gold): Visited the site each day for 100 consecutive days</li>
</ul>
<p>These badges don&#8217;t really involve any participation beyond just setting up your profile, reading about the site, and then checking back regularly. A simple but effective way to keep users coming back, even if they&#8217;re unsure about participating in the community just yet.</p>
<p><strong>Have Your Active Users Do The Heavy Lifting</strong><br />
If your product has a strong social component, you can ask your active users to do the hard work of pulling other, less-engaged users back in. </p>
<p>Every once in awhile, Facebook shows an area on the side of the news feed that suggested friends to &#8220;reconnect with.&#8221; While the feature is ostensibly designed to help you refresh old relationships, it has the curious property of only showing profiles of users who hadn&#8217;t been active on Facebook in a few months.</p>
<p>Facebook is essentially encouraging its most active users to help pull back in the least active users. Presumably, the old friend will receive an email saying that you have written on their wall or want to reconnect, and they would want to click through to see what you had said &#8212; by logging into Facebook for the first time in awhile.</p>
<p>Very clever, and I&#8217;m sure it is very effective at pulling unengaged users back in.</p>
<h3>Using the Metaphor</h3>
<p>Getting a user signed up for your product is really only the beginning of your relationship with them. In order to build a viable business, the product needs to show value, pull users back, and create evangelists. </p>
<p>How each product does this varies widely, but the post sign up funnel provides a great metaphor for thinking about the relationship you want to have with new users, and how you want to grow that relationship over time.</p>
<p>Not every user will end up inviting all their friends, paying you money, or otherwise making it to the &#8220;bottom&#8221; of your funnel. But if you really think about each of the funnel stages and how you can gently nudge your users between them, you&#8217;ll build an awesome product experience and a highly-engaged user base.</p>
<p>Now that you now how to retain them, ready to attract new users? Check out my eBook <a href="http://marketingforhackers.com/" target="_blank">Marketing for Hackers</a>, the step by step guide to turning your weekend project into paying customers.</p>
<p>Discussion on <a href="https://news.ycombinator.com/item?id=5453087" target="_blank">Hacker News</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/post-sign-up-funnel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Set Up WordPress for Maximum Awesomeness</title>
		<link>http://blog.hartleybrody.com/set-up-wordpress/</link>
		<comments>http://blog.hartleybrody.com/set-up-wordpress/#comments</comments>
		<pubDate>Wed, 20 Mar 2013 02:55:24 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2180</guid>
		<description><![CDATA[When most people set up their personal WordPress blog, they&#8217;ll pick a theme, throw the Google Analytics tracking code on it, and stop there. And while WordPress gives you a decent website out of the box, there&#8217;s a lot left to be desired. With an extra hour or two of setup, you can have a [...]]]></description>
				<content:encoded><![CDATA[<p>When most people set up their personal WordPress blog, they&#8217;ll pick a theme, throw the Google Analytics tracking code on it, and stop there. And while WordPress gives you a <em>decent</em> website out of the box, there&#8217;s a lot left to be desired. </p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/03/wp-logo-300x300.png" alt="wp-logo" width="200" height="200" class="alignright size-medium wp-image-2185" />With an extra hour or two of setup, you can have a well-optimized, secure blog that pulls in new visitors and keeps out intruders. Most of these things are one-time setups that you won&#8217;t have to think about again. </p>
<p>These are the tricks I&#8217;ve learned after setting up dozens of WordPress blogs for myself and for friends &#8212; some tiny niche sites and some massive content destinations attracting 10k+ visitors a day.</p>
<p>Before you get started, make sure you&#8217;re running the latest version of WordPress by going to <code>Dashboard > Updates</code> and checking for any upgrades. </p>
<p>Since the WordPress software is the <a href="http://trends.builtwith.com/cms" target="_blank">most used CMS on the internet</a>, it&#8217;s a huge target for hackers and spammers, and new security updates come out frequently. You wanna make sure you&#8217;re starting with the latest, most secure version.<br />
<span id="more-2180"></span><br />
<h3>Optimize for Search Engines</h3>
<p>You want your website to be easy for search engines to find, crawl and understand. Despite its reputation, SEO isn&#8217;t all that scary. A little bit of structural work up-front will help your content rank more highly and drive search traffic to your blog, forevermore.</p>
<p><strong>URL Structure</strong><br />
The first thing you need to do is change the default permalink structure that WordPress comes with. Unless your content is really time-sensitive, you probably don&#8217;t want all those date numbers pushing the keyword-rich part of your URL further to the right. </p>
<p>Search engines generally give preference to pages where keywords appear closer to the left in both the URL and the page title (which we&#8217;ll adjust in a minute). Go to <code>Settings > Permalinks</code> and make sure you choose the &#8220;Post Name&#8221; permalink option that doesn&#8217;t add the unnecessary year and month numbers.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/03/wordpress-permalinks.jpg" alt="wordpress-permalinks" width="500" height="177" class="aligncenter size-full wp-image-2186" /></p>
<p>Now that you&#8217;ve got that setting out of the way, you&#8217;re going to install two of the more popular WordPress plugins: <a href="https://wordpress.org/extend/plugins/all-in-one-seo-pack/" target="_blank">All in One SEO Pack</a> and <a href="https://wordpress.org/extend/plugins/robots-meta/" target="_blank">Robots Meta</a>.</p>
<p><strong>All in One SEO Pack</strong><br />
Once you&#8217;ve installed the <strong><a href="https://wordpress.org/extend/plugins/all-in-one-seo-pack/" target="_blank">All in One SEO Pack</a></strong>, go to <code>Settings > All in One SEO</code> and make sure &#8220;enabled&#8221; is selected. There are a lot of options in here and most of the defaults are pretty good, but there are a few things you should consider:</p>
<ul>
<li><strong>Home Description</strong> This is the snippet of text that someone sees when your site shows up in search engine result pages (SERPs). Use it to briefly explain your site (160 characters max) in a way that entices people to check it out.</li>
<li><strong>Google Plus Profile Sitewide Default</strong> If you have a Google+ account, you can link your site&#8217;s content to your Google+ account and benefit from <a href="http://support.google.com/webmasters/bin/answer.py?hl=en&#038;answer=1408986&#038;expand=option2" target="_blank">authorship snippets in search results</a>. If you&#8217;re writing a personal blog where you&#8217;re the only author, this is a great idea.</li>
<p>        <img src="http://blog.hartleybrody.com/wp-content/uploads/2013/03/wordpress-author-snippet.jpg" alt="wordpress-author-snippet" width="500" height="250" class="aligncenter size-full wp-image-2188" /></p>
<li><strong>noindex for Categories, Archives and Tags</strong> These pages will almost always create duplicate content issues for your site. Unless you really use Categories or Tags to create special sections of your site with unique content that doesn&#8217;t show up on your homepage, you probably don&#8217;t want these to be indexed by search engines.</li>
</ul>
<p>The other cool thing that All in One SEO Pack does is provide additional space for you to provide a custom meta description and title tag for each one of your posts.</p>
<p>If you go to <code>Posts > Add New</code> and click &#8220;Screen Options&#8221; at the top, make sure &#8220;All in One SEO Pack&#8221; is checked, and then you can scroll down to add that information to each article.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/03/wordpress-seo-pack.jpg" alt="wordpress-seo-pack" width="500" height="214" class="aligncenter size-full wp-image-2189" /></p>
<p>You should consider updating the &#8220;Title&#8221; &#8212; or page title tag &#8212; for each post. This can, and often should be, different than the actual title of the article that visitors see on your blog. The title tag has a big impact on a post&#8217;s ranking in search results, so it&#8217;s important to pick a good, keyword-rich title.</p>
<p>The &#8220;Description&#8221; &#8212; or meta description &#8212; is the text snippet that shows up in SERPs for each post, just like what you filled out for the Home Description earlier for your homepage. It&#8217;s also the preview text that Facebook grabs when someone shares a link to your content. Unlike the title, the meta description has no impact on search rankings for an article.</p>
<p>If you&#8217;d like to learn a bit more about things you can do on your site to optimize it for search engines (so called &#8220;On-Page SEO&#8221;) check out <a href="http://www.seomoz.org/learn-seo/on-page-factors" target="_blank">this awesome article by SEOmoz</a>.</p>
<p><strong>Robots Meta</strong><br />
The <strong><a href="https://wordpress.org/extend/plugins/robots-meta/" target="_blank">Robots Meta</a></strong> plugin gives you tons of control over how search engines crawl and index your content. These can get a bit advanced, but we&#8217;ll just set up some sensible defaults. Once you&#8217;ve installed the plugin, go to <code>Settings > Robots Meta</code> and make sure the following options are checked:</p>
<ul>
<li>Prevent Indexing
<ul>
<li>This site&#8217;s search result pages</li>
<li>All Admin Pages</li>
<li>Author Archives</li>
<li>Date-Based Archives</li>
<li>Category Archives</li>
<li>Tag Archives</li>
</ul>
</li>
<li>Archive Settings
<ul>
<li>Disable the author archives (only if your site is a single-author site)</li>
<li>Disable the date-based archives</li>
<li>Redirect search results pages when referrer is external</li>
</ul>
</li>
</ul>
<p>This should take care of all of the major duplicate content issues that WordPress sites often face. If you&#8217;re a particularly savvy webmaster, you can also integrate the plugin with your existing Google Webmaster Tools account. If not, not worries.</p>
<h3>Build an Engaged Following</h3>
<p>Now that your site is well-optimized for search engines, you want to think about how you can start to retain visitors, and keep them coming back to see your latest content. The easiest way to do this is to start building a following of email and social subscribers.</p>
<p><strong>Set Up a Free Email Subscription Service</strong><br />
It&#8217;s common to think that it&#8217;s not worth setting up an email distribution list, but you&#8217;d be surprised by how many people like to get subscriptions in their inbox. Maybe it&#8217;ll just be your mom at first, but over time, that email list will grow if you promote it well. Plus, it&#8217;s surprisingly easy to set one up.</p>
<p>To get started, create a <a href="http://eepurl.com/wFwo9" target="_blank">free account with MailChimp</a> and then create an RSS-Driven campaign. Just tell them where your blog&#8217;s RSS feed is (by default, it&#8217;s <code>&lt;blog_domain&gt;.com/feed/</code>), pick a cool email template, and then it&#8217;ll automatically send out an email to your subscribers whenever you publish a new article.</p>
<p>Once you&#8217;ve gotten that configured, make sure you make it easy for readers to give you their email address and subscribe to your content. <a href="http://eepurl.com/wFwo9" target="_blank">MailChimp has their own WordPress plugin</a> that lets you put a &#8220;subscribe&#8221; box in the sidebar of your website &#8212; just like the one you see in my sidebar, above.</p>
<p>You should also build out a dedicated &#8220;blog subscription landing page&#8221; on your site that you can send visitors to if they want to subscribe. This gives you more room to explain a bit about the content you write, how frequently you post, and what the visitor should expect by subscribing. <a href="http://blog.hartleybrody.com/design-sign-up-page/">I&#8217;ve written about effective landing pages before</a>, so check that out for more info.</p>
<p><strong>Optimize for Social Sharing</strong><br />
If you&#8217;re already active on Twitter and Facebook, you probably don&#8217;t need to build out a dedicated Facebook page or Twitter profile just for your blog. If you&#8217;re only writing articles once or twice a week, you should simply encourage your blog&#8217;s visitors to subscribe to your updates on Twitter or Facebook, so that they&#8217;ll also see later articles you publish.</p>
<p>If you want to make sure your content looks good when it&#8217;s shared on social media, you might consider adding Facebook Open Graph tags or Twitter Cards to your post. These are special markup tags that ensure both social networks can understand your posts and provide proper previews when people share links to your content. There are plugins can help with that, if you&#8217;re interested (<a href="https://wordpress.org/extend/plugins/wp-facebook-open-graph-protocol/" target="_blank">Facebook</a>, <a href="https://wordpress.org/extend/plugins/twitter-cards/" target="_blank">Twitter</a>).</p>
<p><a href="https://dev.twitter.com/docs/cards" title="More info on Twitter cards"><img src="https://dev.twitter.com/sites/default/files/images_documentation/card-web-summary_0.png" alt="wordpress twitter card" width="500px" class="aligncenter" /></a></p>
<h3>Security &#038; Spam</h3>
<p>There are two broad classes of undesirables on the internet &#8212; hackers and spammers. As mentioned earlier, WordPress sites are widely targeted by hackers and spammers because of how common the software is.</p>
<p>Even if you&#8217;re just creating a small site in a tiny corner of the internet, there are all sorts of robots spidering the web and looking for sites with vulnerabilities. Don&#8217;t think you&#8217;re too small to be a target, you <em>will</em> be. </p>
<p>Fortunately, you can set up some basic, simple defenses that&#8217;ll go a long way to keeping your site safe and spam-free.</p>
<p><strong>Keeping out the Hackers</strong><br />
If an attacker is able to login to your dashboard, that&#8217;s obviously a really bad thing. While they could do something dramatic like delete all your articles or post a bunch of spam on your blog, they&#8217;re more likely to do something subtle to try and remain undetected. </p>
<p>They might add some links to the footer of your site, or change the content of older posts. Don&#8217;t assume that you&#8217;ll notice if your site is compromised. Make sure your dashboard has rock solid defenses by installing the following two plugins: <a href="https://wordpress.org/extend/plugins/limit-login-attempts/" target="_blank">LimitLoginAttempts</a> and <a href="https://wordpress.org/extend/plugins/google-authenticator/" target="_blank">Google Authenticator</a>.</p>
<p>LimitLoginAttempts is a crucial WordPress plugin that does exactly what it says &#8212; it prevents attackers and robots from trying to repeatedly guess your password, a common technique known as <a href="https://en.wikipedia.org/wiki/Brute-force_attack" target="_blank">brute forcing</a>. </p>
<p>If the plugin detects too many failed login attempts from a particular computer, the plugin will automatically block that machine from trying to login again for a set period of time. The defaults on this are pretty good, but you can make them stricter by going to <code>Settings > Limit Login Attempts.</code></p>
<p>Installing Google Authenticator will add an extra field to the login screen making it even harder for a hacker to get in. In order to login, you need to provide a username, password AND a random code generated by an app on your phone. This means that even if someone were to guess your password, they still wouldn&#8217;t be able to login unless they also had access to your phone. </p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/03/wordpress-two-factor.jpg" alt="wordpress-two-factor" width="500" height="371" class="aligncenter size-full wp-image-2190" /></p>
<p>This is a super secure login method known as <a href="https://en.wikipedia.org/wiki/Two_factor_auth" target="_blank">two factor authentication</a> and it&#8217;s a no-brainer to add another layer of security.</p>
<p>With those two plugins installed, it&#8217;s going to be nearly impossible for someone to gain unauthorized access to your blog.</p>
<p><strong>Keeping Out Spammers</strong><br />
The other group of undesirables are the spammers. If you don&#8217;t put any anti-spam measures in place, you&#8217;ll end up with hundreds of useless blog comments that link back to spammy websites, which are a huge pain to deal with. </p>
<p>By default, <a href="https://codex.wordpress.org/Akismet" target="_blank">WordPress ships with Akismet</a>, which is a basic spam prevention service that&#8217;ll flag comments that seem spammy and let you review them before posting them on your site. </p>
<p>The alternative that I prefer is to use the <a href="https://wordpress.org/extend/plugins/facebook-comments-plugin/" target="_blank">Facebook comments plugin</a>. This requires visitors to be logged into Facebook in order to post a comment, and ties their identity to their message. While it&#8217;s not explicitly designed to reduce spam, I haven&#8217;t seen a single spam comment since I switched my blog over to it a few years ago. </p>
<p>For sites that prefer to allow anonymous comments, this might not be the best option, and you might consider <a href="https://wordpress.org/extend/plugins/disqus-comment-system/" target="_blank">Disqus</a> instead.</p>
<h3>Hosting &#038; Monitoring</h3>
<p>At this point, you&#8217;ve set up a well-optimized website that&#8217;s ready to grow a loyal audience over time. Hackers and spammers are no match for your defenses.</p>
<p>But even if all of the software runs properly, some things are out of your control. Servers crash and files get corrupted. Networks go offline and can bring down your website. Here are a few tips to handle common problems every website will run into eventually.</p>
<p><strong>Automatic Nightly Site Backups</strong><br />
Just like backing up your music and movies, you want to keep a fresh copy of all your website&#8217;s content stored in a safe place. The best plugin I&#8217;ve found for this is <a href="https://wordpress.org/extend/plugins/wp-db-backup/" target="_blank">WP DB Backup</a>. </p>
<p>Once you install the plugin, go to <code>Tools > Backup</code> and go to the &#8220;Schedule Backup&#8221; section. Make sure you schedule the backup for &#8220;Once Daily&#8221; and have it emailed to yourself, then click &#8220;Schedule Backup.&#8221; By automating nightly backups, you&#8217;ve just proven yourself smarter than the vast majority of website owners. </p>
<p>Now, if your site every crashes or gets hacked, you&#8217;ll always have a spare copy of your data that&#8217;s no more than a few hours old, making it really easy to get your content back up and your site running again in no time. Without a fresh backup, you stand to lose a lot.</p>
<p><strong>Free Website Monitoring</strong><br />
Websites go down for all sorts of reasons. I cancelled my credit card when I lost my wallet a few years ago, and forgot to update my billing information with my hosting provider. After a few failed charge attempts, they took my websites offline.</p>
<p>Fortunately, I had set up free website monitoring from <a href="https://www.pingdom.com/" target="_blank">Pingdom</a>, so I was notified via text message within a minute of my site going offline. Pingdom checks your website every minute from data centers around the world and notifies you as soon as something goes offline.</p>
<p>You&#8217;ll know as soon as there&#8217;s a problem and can take steps to get your site back online quickly. In my case, I updated my credit card information and my sites were back up after about 5 minutes of downtime. Not bad!</p>
<p><strong>Totally Managed Hosting</strong><br />
If you&#8217;re looking for a secure, reliable, fully-managed WordPress hosting service, I switched to <a href="http://hartbro.com/138Fb9Q" target="_blank">WP Engine</a> about a year ago and haven&#8217;t regretted it at all. They&#8217;re the experts on keeping a WordPress site running fast and secure.</p>
<p>So far this year, my blog has only had 20 minutes of downtime (99.98% uptime) and is averaging less than half a second page response times (351ms), which is pretty good considering I didn&#8217;t have to lift a finger to manage any of that. They also gracefully handle huge traffic spikes if (&#8230;when <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) an article becomes popular. </p>
<p>You give up some control versus hosting and managing a blog yourself, but I&#8217;ve found the peace of mind and reliability to be worth it. Plus migrating your existing site over to them is super easy. <a href="http://hartbro.com/138Fb9Q" target="_blank">Definitely worth checking out</a>.</p>
<p>&#8212;</p>
<p>Once you&#8217;ve gotten all of this set up, the final step is to start writing! Growing a blog audience takes a bit of patience and consistency, but it&#8217;s a great investment and can be really rewarding.</p>
<p>If you&#8217;re thinking about blogging to grow interest in a product or business, you should check out my eBook called <a href="http://marketingforhackers.com/" target="_blank">Marketing for Hackers</a>. It&#8217;s a step by step guide to turn your weekend project into paying customers.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/set-up-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;ll be Joining the Team at Buffer</title>
		<link>http://blog.hartleybrody.com/joining-buffer/</link>
		<comments>http://blog.hartleybrody.com/joining-buffer/#comments</comments>
		<pubDate>Mon, 18 Mar 2013 21:39:46 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2182</guid>
		<description><![CDATA[I&#8217;m really excited to announce that, on April 1st, I&#8217;ll be joining the awesome team at Buffer as a growth hacker. I&#8217;ve been an avid Buffer user for a long time, and I&#8217;ve been following their company blog for all of the life hacking and interesting social psych Leo writes about. They&#8217;re a small team [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m really excited to announce that, on April 1st, I&#8217;ll be joining the awesome team at <a href="http://bufferapp.com/r/f4de6">Buffer</a> as a <a href="http://blog.hartleybrody.com/growth-hacker-definition/">growth hacker</a>.</p>
<p><a href="http://bufferapp.com/r/f4de6"><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/03/buffer-logo.png" alt="buffer-logo" width="500" class="aligncenter size-full wp-image-2183" /></a></p>
<p>I&#8217;ve been an avid Buffer user for a long time, and I&#8217;ve been following <a href="http://blog.bufferapp.com/" target="_blank">their company blog</a> for all of the life hacking and interesting social psych Leo writes about.</p>
<p>They&#8217;re a small team that&#8217;s made a huge impact already &#8212; 10 employees, 550k users, $100k MRR &#8212; and are a fairly well known name in startup and social media circles. </p>
<p><span id="more-2182"></span>But beyond their product, I&#8217;m really interested in being a part of their company&#8217;s culture. Even as an outsider, it&#8217;s clear that Joel and Leo have nurtured an environment that trusts team members to find what makes them happy and effective, and to constantly be learning from each other.</p>
<p>I also love their focus on living smarter, not harder.</p>
<p><iframe src="http://www.slideshare.net/slideshow/embed_code/16707113" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe>
<p style="margin:-5px 0px 5px"> <strong> <a href="http://www.slideshare.net/joelg2/buffer-culture-01-16707113" title="Buffer culture 0.1" target="_blank">Buffer culture 0.1</a> </strong> from <strong><a href="http://www.slideshare.net/joelg2" target="_blank">Joel Gascoigne</a></strong> </p>
<p>I see them as the poster child of how most startups will operate in 10 years. </p>
<p>The team is distributed all around the world, so I&#8217;ll be working remotely and staying in the Boston area for the foreseeable future, which I&#8217;m also really excited about. </p>
<p>Boston has a great community of startup peeps and I&#8217;m going to focus more on giving back to the community that&#8217;s given so much to me these past few years.</p>
<p>Thanks to everyone I&#8217;ve worked with &#8212; directly and indirectly &#8212; over the past two years at HubSpot. It&#8217;s been an awesome journey, and I&#8217;m looking forward to the next saga!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/joining-buffer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Startups: Get More Customers From Your Website by Understanding the Funnel</title>
		<link>http://blog.hartleybrody.com/startup-marketing-funnel/</link>
		<comments>http://blog.hartleybrody.com/startup-marketing-funnel/#comments</comments>
		<pubDate>Thu, 28 Feb 2013 03:42:09 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2158</guid>
		<description><![CDATA[One of the rookie mistakes first-time entrepreneurs often make is to assume that visitors on their website are ready to buy their product or service right away. I&#8217;ve made this mistake myself. But in reality, the average visitor to your website isn&#8217;t ready to make a buying decision&#8230; yet. In order to grow a successful [...]]]></description>
				<content:encoded><![CDATA[<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2014/01/startup-marketing-funnel.jpg" alt="An actual funnel for pouring water is a good analogy for startup marketing." width="200" class="alignright" /></p>
<p>One of the rookie mistakes first-time entrepreneurs often make is to assume that visitors on their website are ready to buy their product or service right away. <a href="http://blog.hartleybrody.com/two-startups/">I&#8217;ve made this mistake myself.</a> </p>
<p>But in reality, the average visitor to your website isn&#8217;t ready to make a buying decision&#8230; yet. </p>
<p>In order to grow a successful business, you need to understand the concept of <strong>&#8220;the funnel&#8221;</strong> and the stages that fall between &#8220;casual website visitor&#8221; and &#8220;evangelical customer.&#8221;</p>
<p>This concept of a funnel is something that applies especially well to B2B products, since your prospects will tend to move more slowly and make more deliberate decisions. </p>
<p><span id="more-2158"></span><br />
<h3>Stage 1: Top of the Funnel</h3>
<p>At this stage, a visitor might be hearing about you for the first time. Maybe they saw a link to your blog article on Twitter or found your homepage through a non-branded search query. </p>
<p><strong>They&#8217;re probably not ready to buy yet,</strong> they&#8217;re just checking things out. They don&#8217;t know much about you and your product yet, so your goal at this stage should be to start a relationship and build trust, not to sell them.</p>
<p>There are a few specific things you can do at this stage to begin a relationship:</p>
<ol>
<li><strong>Get them to subscribe to your blog.</strong> You are blogging, right? You want them to trust your brand and think of you as a thought leader. Get them clicking through your content and encourage them to subscribe to get the latest articles. This gets you in their inbox regularly, and you become seen as a source of information, not just a company trying to sell.</li>
<li><strong>Suggest your free tool.</strong> If they&#8217;re on your site, they&#8217;re probably looking for help with <em>something</em>. Having a basic, free tool is a great way to help them solve their problems without requiring them to open their wallet. HubSpot does this well with our free <a href="http://marketing.grader.com/" target="_blank">Marketing Grader</a> tool &#8212; it gives you free analysis of your website and has run millions of reports since it was launched.</li>
<li><strong>Offer a free eBook or webinar.</strong> The goal is to help them while only requiring some basic contact info &#8212; like an email address &#8212; in exchange. Use <a href="http://blog.hartleybrody.com/design-sign-up-page/">a landing page</a> to collect their email address and other follow-up information, and then send them a copy of your eBook, or invitation to a webinar.</li>
</ol>
<h3>Stage 2: Middle of the Funnel</h3>
<p>At this point, the prospect knows who you are, and has exchanged their contact information for some useful content or service you&#8217;ve provided them.</p>
<p>At this point, <strong>they may be ready to buy</strong>. You&#8217;re not 100% sure how long it&#8217;ll take them to be ready. But you keep nurturing the relationship by regularly following up and sending them more useful, targeted information. </p>
<p>Usually, this stage of the relationship happens via email since it ensures you&#8217;re getting in front of them again. It&#8217;s sometimes known as &#8220;lead nurturing&#8221; or &#8220;marketing automation&#8221; but the general idea is the same. You should have a pre-planned series of emails you can use to follow up with someone once they&#8217;ve provided their email address.</p>
<p>Send them a few of your top-performing blog articles, or a new eBook you&#8217;ve written. It&#8217;s got to be something useful that will continue to help them solve their problems. You don&#8217;t want them to open the email and see a sales pitch &#8212; they&#8217;ll likely never open another email from you again.</p>
<p>But you also want to make it easy for them to get in touch with you when they&#8217;re ready to buy, so that you don&#8217;t lose a sale. Allow them to respond to emails with feedback (don&#8217;t use a &#8220;noreply&#8221; email address), or direct them to a &#8220;get in touch&#8221; landing page where you can answer their questions more directly to begin the sales process.</p>
<h3>Stage 3: Bottom of the Funnel</h3>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/01/landing-page.png" alt="the buying funnel" class="alignright" width="200px"> At this point your prospect knows who you are, has come to see you as a trusted source of information, and has raised their hand to say they want to get in touch. They might have signed up for a free trial, or requested a demo of your product.</p>
<p>Their behavior indicates that they&#8217;re seriously in the process of evaluating your product and want to learn more about it. This is the easiest kind of sale to make, since they&#8217;re an inbound lead and have demonstrated that they&#8217;re sales-ready.</p>
<p>&#8212;</p>
<p>You&#8217;re much more likely to acquire customers when you set up a sales and marketing funnel that&#8217;s focused around your prospects&#8217; needs. Get in front of them with shareable content, help them with free tools and more useful information, and then nurture the relationship to keep your company top of the mind for them.</p>
<p>This stuff is all super high level. If you&#8217;re looking for more tactical ways to execute some of this, check out the eBook I&#8217;m working on called &#8220;<a href="http://marketingforhackers.com/">Marketing for Hackers</a>.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/startup-marketing-funnel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Overthinking Things</title>
		<link>http://blog.hartleybrody.com/over-thinking/</link>
		<comments>http://blog.hartleybrody.com/over-thinking/#comments</comments>
		<pubDate>Wed, 27 Feb 2013 03:42:57 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2170</guid>
		<description><![CDATA[I&#8217;ve always been one to shoot from the hip. I go with my gut, and then reevaluate if necessary. After all, smart people change their minds a lot. But I&#8217;ve found it&#8217;s also really easy to get stuck overthinking some things. What tie should I wear? Which apartment should I live in? What do I [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve always been one to shoot from the hip. I go with my gut, and then reevaluate if necessary. After all, <a href="https://37signals.com/svn/posts/3289-some-advice-from-jeff-bezos" target="_blank">smart people change their minds a lot</a>.</p>
<p>But I&#8217;ve found it&#8217;s also really easy to get stuck overthinking some things. What tie should I wear? Which apartment should I live in? What do I want to do with my life?</p>
<p>Sometimes there are so many options that we&#8217;re overwhelmed. Sometimes we get competing feedback from our trusted advisors. We waste so much time thinking about it, that we never pull the trigger. Opportunity passes us by.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/02/hot-air-balloon.jpg" alt="Overthinking the decision about generating lift." width="500px" class="aligncenter size-full wp-image-2171" /></p>
<p><span id="more-2170"></span>I stumbled across an apt analogy the other day that really framed the issue of overthinking things.</p>
<p>A friend of a friend saw my article about <a href="http://blog.hartleybrody.com/in-space/">the weather balloon I sent to space</a>. He reached out with a few questions and we started a good discussion via email.</p>
<p>At one point, he mentioned that he needed to do a bunch of calculations to figure out the amount of helium he would need in order to generate enough lift to send the balloon into the atmosphere with all of its cargo.</p>
<p>It struck me that I had never even given any thought to those calculations when I sent up my balloon. At the time, I wanted to make the launch happen quickly. My intuition simply said to keep things light, and use as much helium as I could. </p>
<p>If I did that, it would just kinda go upwards. <a href="https://www.youtube.com/watch?v=x5gkXjssO-8" target="_blank">And it did</a>.</p>
<p>But suddenly I panicked that I had missed something. There must have been a bunch of science that I totally skipped over that would help me figure out <em>exactly</em> what I needed. So I dug out my <a href="https://en.wikipedia.org/wiki/Ideal_gas_law" target="_blank">Ideal Gas Law</a> notes from my high school AP Chemistry class, and started coming up with a model for the balloon&#8217;s flight.</p>
<p>Okay, let&#8217;s see. <code>PV = nRT</code></p>
<p><strong>P is for pressure</strong> and I&#8217;m sure we can calculate that based on how tight the balloon is. Not exactly sure how we&#8217;d measure that thought. But wait, won&#8217;t the pressure on the outside of the balloon change as it rises into thinner air? Hmm, we&#8217;ll skip that and come back to it.</p>
<p><strong>V is volume</strong> and that should be easy to measure on the ground. Get the diameter of the balloon, then cut it in half and plug it into <code><sup>4</sup>/<sub>3</sub> &pi; r <sup>3</sup></code>. I&#8217;d have to make sure I keep track of my units.</p>
<p><strong>T is for temperature</strong> and I <em>definitely</em> know that&#8217;ll be changing from the surface going upwards. Would wind chill factor into this? What about winds that might blow the balloon up or down? Hmm&#8230; We&#8217;ll come back to this one too.</p>
<p><strong>n is the amount of gas</strong>, measured in&#8230; moles? Oh boy.</p>
<p>What am I trying to do? Calculate lift? In pounds?</p>
<p>That&#8217;s when I stop scratching my head and took a step back. If I really wanted to, I could spend hours diving into this problem and doing a bunch of calculus. But even if I did all that, there would still would be a lot of variables that would be hard to measure and predict at all!</p>
<p>So even if I did all that work to try and come up with an approximation, I&#8217;d still wouldn&#8217;t learn much more than I already knew &#8212; that I need the highest helium:weight ratio in order to maximize success. Even without all the math and consternation, the balloon would still rise if I went with my instincts.</p>
<p>Why overthink it, if I already knew the answer?</p>
<p>&#8212;</p>
<p>One of the greatest ironies of life is that often, the answers we spend so long looking for end up being right in front of our faces the whole time.</p>
<p>Don&#8217;t overthink things. Trust you instincts.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/over-thinking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Two Startups in 9 Months: Lessons Learned as a Technical Co-Founder</title>
		<link>http://blog.hartleybrody.com/two-startups/</link>
		<comments>http://blog.hartleybrody.com/two-startups/#comments</comments>
		<pubDate>Wed, 16 Jan 2013 21:04:55 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2140</guid>
		<description><![CDATA[The past few months, I&#8217;ve worked on a half-dozen side projects that were web-based applications. Two of them were even so big that I formed an LLC with my co-conspirators, did some marketing and tried my hand at a few sales, and even looked at raising a bit of money. The first product was a [...]]]></description>
				<content:encoded><![CDATA[<p>The past few months, I&#8217;ve worked on a half-dozen side projects that were web-based applications. Two of them were even so big that I formed an LLC with my co-conspirators, did some marketing and tried my hand at a few sales, and even looked at <a href="http://blog.hartleybrody.com/3-ways-to-raise-your-first-capital/">raising a bit of money</a>.  </p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/11/mvsic-stickers.jpg" alt="" title="mvsic-stickers" width="180px" height="180px" class="alignright" />The first product was a social network where students could share outfits and fashion ideas [<a href="http://web.archive.org/web/20120517150738/http://www.rompbomp.com/" target="_blank">archive</a>]. </p>
<p>The second was a music distribution service for artists that want to tap into how listener behavior has shifted to blogs and free downloads [<a href="http://web.archive.org/web/20121015035843/http://mvsic.co/" target="_blank">archive</a>].  </p>
<p>Unfortunately, as of this writing, both startups are no longer functioning.</p>
<p>While I was mostly on the technical side of things, I learned a ton of business lessons about startups that I wanted to share. </p>
<p><span id="more-2140"></span><br />
<h3>You&#8217;re Probably Over Engineering It</h3>
<p>It&#8217;s good to read articles about how Facebook and Netflix and Reddit solve their scaling and hosting challenges. It&#8217;s bad to think those lessons apply to your startup.</p>
<p>When you&#8217;re constantly devouring those articles on Hacker News, it&#8217;s easy to get caught up in architecting some super-advanced system. When we were building the music distribution service, I came up with this elaborate architecture that required multiple technologies and instances and CNAMEs:</p>
<p><a href="http://blog.hartleybrody.com/wp-content/uploads/2013/01/mvsic-achitcture.jpg"><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/01/mvsic-achitcture.jpg" alt="mvsic-achitcture" width="500" height="500" class="aligncenter size-full wp-image-2159" /></a></p>
<p>I built up all this complexity, and ended up stripping it back to two ec2 micros and an s3 bucket, which held up just fine. A simple stack will get you surprisingly far.</p>
<p>We did start to grow traffic to the point where scale became a sporadic issue, but the problems were always bugs in my code that I hadn&#8217;t anticipated. A complex hosting environment wouldn&#8217;t have helped, and would probably have made issues harder to debug.</p>
<p><a href="https://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it" target="_blank">You ain&#8217;t gunna need it</a>. Plus, if you get to the point where scaling your infrastructure <em>really</em> becomes an issue, you&#8217;ll probably have gotten some money which you can use to hire someone smarter than yourself to fix it.</p>
<h3>Always be Validating Your Idea</h3>
<p>The basic premise behind validation is that you shouldn&#8217;t waste time building something that nobody wants. It sounds simple enough, but it&#8217;s easy to get caught up in the excitement of building something and end up doing a poor job on validation.</p>
<p><strong>Find Strangers to Validate Your Idea</strong><br />
Both startups began essentially the same way &#8212; first there was an intriguing idea, then we kicked it around for a few weeks, and finally decided it had enough promise to dive in and start building. Fast forward a few month and all we had was a big pile of code and no customers to show for it.</p>
<p><em>How could this happen!</em> we thought. We <em>did</em> customer validation: our friends all said they loved the idea! Wasn&#8217;t that enough?</p>
<p>In hind sight, it&#8217;s obvious that I made two key mistakes, both times:</p>
<ol>
<li>Our friends weren&#8217;t our target customers.</li>
<li>Our friends didn&#8217;t really understand what the fuck we were doing so they&#8217;d just smile and nod to make us feel better.</li>
</ol>
<p>The takeaway from these mistakes is that you need to find people outside your friends and family that actually like your idea.</p>
<p><strong>Find People Who <em>Need</em> Your Product</strong><br />
Which brings me to the next point. Validation doesn&#8217;t mean that people &#8220;like&#8221; your idea. People, even strangers, will usually say they like it because it&#8217;d be rude to say otherwise.</p>
<p>You want people who <em>need</em> your idea. People who need it so much they&#8217;re willing to put up with downtime and a bad UI and constantly changing features and all the other issues that nascent products often face.</p>
<p>Paul Graham says it well in an essay called <a href="http://paulgraham.com/startupideas.html" target="_blank">How to Get Startup Ideas</a>:</p>
<blockquote><p>
When a startup launches, there have to be at least some users who really need what they&#8217;re making—not just people who could see themselves using it one day, but who want it urgently.</p>
<p>Usually this initial group of users is small, for the simple reason that if there were something that large numbers of people urgently needed and that could be built with the amount of effort a startup usually puts into a version one, it would probably already exist. </p>
<p>Which means you have to compromise on one dimension: you can either build something a large number of people want a small amount, or something a small number of people want a large amount. Choose the latter. Not all ideas of that type are good startup ideas, but nearly all good startup ideas are of that type.
</p></blockquote>
<p>Even if we had looked a little further outside our friend group, we should have noticed the lack of raving fanatics. If people are kinda &#8220;meh&#8221; on your idea, you&#8217;re going to have a hard time getting them to pay you for it. Find someone who wants to put their money where their mouth is before you consider the idea totally validated.</p>
<h3>Selling is Really Hard</h3>
<p>Until recently, sales always seemed like an unnecessary soft skill. If I had a strong product, customers would find me. If you build it, they will come. The product sells itself. How hard could it be?</p>
<p><strong>Selling Sausage</strong><br />
While I was spending my time thinking about features and implementation, I got bogged down in the messy details. Certain things didn&#8217;t work out how I thought they would. I found myself making arbitrary deicions cause I didn&#8217;t have enough data to go off of. Once we had a few users, it seemed like they were always finding new bugs or turning up edge cases I hadn&#8217;t planned for.</p>
<p>As a result, most of the time both products felt like sloppy, creaky messes full of mistakes and bugs just waiting to fall over. I was embarrassed to ask for money for them.</p>
<p>I found solace in the fact that this is a rather common phenomenon for startups to be in. Reid Hoffman (LinkedIn co-founder) famously said: </p>
<blockquote class="twitter-tweet"><p>Reid Hoffman: “If you’re not embarrassed by your first product release, you released too late.” <a href="https://twitter.com/search/%23PandoMonthly">#PandoMonthly</a></p>
<p>&mdash; PandoDaily (@PandoDaily) <a href="https://twitter.com/PandoDaily/status/233753441783119872" data-datetime="2012-08-10T02:35:38+00:00">August 10, 2012</a></p></blockquote>
<p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>And while it is comforting to know that other entrepreneurs have felt the same way, no one mentions how hard it makes it to actually sell the damn thing you&#8217;re building.</p>
<p>I&#8217;d go from monkeypatching some javascript compatibility issue to jumping on a call to talk about how stable and secure our product was. Inevitably, I had to defend it against some well-entrenched competitor with a huge engineering team that&#8217;s already attracting top-notch talent.</p>
<p>Seeing how messy and haphazard the prototype of a product is makes it almost impossible to sell. If you&#8217;re the one <a href="http://www.urbandictionary.com/define.php?term=sausage%20factory" target="_blank">making sausage</a>, you probably shouldn&#8217;t be the one selling it.</p>
<p><strong>Benefits vs Features</strong><br />
It&#8217;s really easy to fall into the mindset that your product is simply a bundle of features. After all, that&#8217;s how you&#8217;re building it &#8212; going down the list of things you need for your first prototype.</p>
<p>But features don&#8217;t sell a product, <a href="http://www.entrepreneur.com/article/34942" target="_blank">benefits do</a>. Unfortunately, you don&#8217;t built benefits, you build features. Hence the disconnect.</p>
<p>At one point, I typed up a one-page summary of all the features we had built or were planning to build (mostly the latter) and sent it off to a hot prospect. She was the CEO of a music label whom I knew personally. She was excited about our idea and had asked for a proposal before she started getting all of her artists using our product. We figured it&#8217;d be a layup sale.</p>
<p>She said no. In retrospect, sending someone a one-page list of features and expecting that to convince them to spend hundreds of dollars a month on our service seems extremely naïve. </p>
<p>Selling is now a skill I hope to work on this coming year.</p>
<h3>Startup Incubators are Like College</h3>
<p>You can waste a ton of time filling out paperwork and applying to them or you can focus on getting shit done. If you get into a top tier one, it will add to your brand and look good on a resume, which helps people take you seriously. But other than that, they&#8217;re mostly useless.</p>
<p>Everyone seems to think they&#8217;re a good idea even though most have questionable value. But, if you&#8217;re good, you probably don&#8217;t need to waste your time in one. <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I built that extended metaphor after applying and failing to get into Mass Challenge for the first startup. Actually filling out the applications was a good experience since it forced us to think about a lot of questions we hadn&#8217;t directly answered yet.</p>
<p>But the application process took up several days that would&#8217;ve been better spent working on the product and talking to potential customers (did I mention how important validation is?). We should have waited till we had more traction before applying. There probably would have been more value for us if we had a clearer sense of what we really needed.</p>
<p>I don&#8217;t think I&#8217;d do it again.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2013/01/startup-lessons.jpg" alt="startup-lessons" width="500" height="342" class="aligncenter size-full wp-image-2160" /></p>
<p>My New Year&#8217;s Resolution for 2013 is actually &#8220;no new startups.&#8221; I want to commit more time to working with and learning from great people this year, so that I can hopefully raise my batting average and take another swing in 2014.</p>
<p>If you have an idea, <a href="http://blog.hartleybrody.com/find-a-coder/" target="_blank">here&#8217;s what you need to know to get started</a>.</p>
<p><a href="https://news.ycombinator.com/item?id=5070814" target="_blank">Discuss on HN</a></p>
<p><strong>PS:</strong> I&#8217;m also planning on spending this year finishing up <a href="http://marketingforhackers.com/" target="_blank">Marketing for Hackers, a step-by-step guide to turn your weekend project into paying customers</a>, which you should check out right now.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/two-startups/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Growth Hacking: The Tale of a Marketer Who Writes Code</title>
		<link>http://blog.hartleybrody.com/growth-hacker-definition/</link>
		<comments>http://blog.hartleybrody.com/growth-hacker-definition/#comments</comments>
		<pubDate>Mon, 24 Dec 2012 18:41:20 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2148</guid>
		<description><![CDATA[Last spring, I graduated from college and began working as a software engineer on the Product team at HubSpot. But a few weeks ago, I switched to the Marketing team, where I now work on SEO and driving leads from organic search and referral traffic. My path is an unusual one, and it puts me [...]]]></description>
				<content:encoded><![CDATA[<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/12/stash-640-4fcd2530d2431.jpeg" alt="" title="" width="190" height="142" class="alignright size-full wp-image-2155" />Last spring, I graduated from college and began working as a software engineer on the Product team at <a href="http://blog.hartleybrody.com/what-does-hubspot-do/" target="_blank">HubSpot</a>.</p>
<p>But a few weeks ago, I switched to the Marketing team, where I now work on SEO and driving leads from organic search and referral traffic.</p>
<p>My path is an unusual one, and it puts me in quite a hybrid position. My day-to-day work is much different than it was on engineering &#8212; there are no UIs to build or deploys to coordinate. But it also looks much different from the other members of the marketing team &#8212; none of them spend all day in Sublime Text and terminal windows. </p>
<p>So I&#8217;m not exactly a marketer, but I&#8217;m probably not what you&#8217;d call an engineer. I am: a growth hacker.</p>
<p><span id="more-2148"></span><br />
<h3>A Clearer Definition of &#8220;Growth Hacker&#8221;</h3>
<p>I believe it was <a href="http://andrewchen.co/2012/04/27/how-to-be-a-growth-hacker-an-airbnbcraigslist-case-study/" target="_blank">Andrew Chen&#8217;s famous article from last spring</a> that really crystallized what it meant to be a growth hacker. But kudos if you can survive reading through the buzz words:</p>
<blockquote><p>
Growth hackers are a hybrid of marketer and coder, one who looks at the traditional question of “How do I get customers for my product?” and answers with A/B tests, landing pages, viral factor, email deliverability, and Open Graph. On top of this, they layer the discipline of direct marketing, with its emphasis on quantitative measurement, scenario modeling via spreadsheets, and a lot of database queries. If a startup is pre-product/market fit, growth hackers can make sure virality is embedded at the core of a product. After product/market fit, they can help run up the score on what’s already working.
</p></blockquote>
<p>Unfortunately, a lot of people drowned in the slew of topics and channels he lists and ended up missing the point of the article. Growth hacking isn&#8217;t just a new channel for marketers to use. And it isn&#8217;t another worthless buzz word for startups to throw around. </p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/12/growth-hacker-definition.jpg" alt="" title="Growth Hacker is a fusion of Marketing and Engineering" width="500" height="300" class="aligncenter" /></p>
<p>Growth hacking represents the fusion of two fields that were previously discrete. A true growth hacker possesses two separate sets of skills and finds ways to combine them to drive marketing metrics.</p>
<h3>What <em>Isn&#8217;t</em> A Growth Hacker?</h3>
<p>I think Andrew&#8217;s definition would have been much clearer if he had stopped at: <strong>Growth hackers are a hybrid of marketer and coder.</strong></p>
<p>There&#8217;s been a lot of confusion and misinformation around the position, which weakens the community&#8217;s understanding of what makes a growth hacker valuable, and why it&#8217;s a new position and not just a buzzword for a plain-old marketer. </p>
<p>I think most of the confusion stems from competing definitions of the word &#8220;hacker&#8221;. Paul Graham has a <a href="http://paulgraham.com/gba.html" target="_blank">great essay about hackers</a> where he starts by saying:</p>
<blockquote><p>&#8230;the noun &#8220;hack&#8221; also has two senses. It can be either a compliment or an insult. It&#8217;s called a hack when you do something in an ugly way. But when you do something so clever that you somehow beat the system, that&#8217;s also called a hack.
</p></blockquote>
<p>A lot of people are using the &#8220;beat the system&#8221; part of the definition, presenting clever ways to secure guest blogging opportunities or <a href="http://www.trendslide.com/blog/12-growth-hacks-to-get-most-out-of-slideshare/" target="_blank">get more SlideShare views</a> as &#8220;Growth Hacking.&#8221; </p>
<p>One article even made a list of ways to &#8220;growth hack&#8221; PR that says:</p>
<ol>
<li>Be creative.</li>
<li>Build Relationships as you pitch.</li>
<li>Create interesting content</li>
<li>Take advantage of Social Media.</li>
</ol>
<p>To anyone who has actually spent time in marketing, it&#8217;s obvious that these aren&#8217;t new ideas. It certainly doesn&#8217;t take a new type of employee to execute them. It&#8217;s dubious whether they&#8217;d even be considered &#8220;hacks&#8221; at all &#8212; it sounds more like marketing best practices, dressed up with a new name.</p>
<p>While the internet has ushered in tons of new channels for acquiring customers, marketers as a whole have responded fairly well. The new concept of inbound marketing centers around ways that non-technical marketers can leverage increasingly online buyer behavior to get leads and customers.</p>
<p>Optimize your website for search engines. Interact on social media. Blog and create interesting content. Use email intelligently. Track everything and do more of what&#8217;s working. These are things that savvy marketers can do thanks to a whole bunch of marketing tools that have sprung up in the last decade. But it&#8217;s not necessarily growth hacking.</p>
<h3>So What Does a Growth Hacker Actually <em>Do</em>?</h3>
<p>So how does the combination of marketing and engineering manifest itself in a day-to-day sense? I see my role as a growth hacker as three-fold:</p>
<ol>
<li>Build tools that drive visits, leads and customers.</li>
<li>Dive into our data and find interesting trends and statistics.</li>
<li>Automate boring stuff so my coworkers have more time to focus on being awesome marketers.</li>
</ol>
<p>These are all different ways to use code to drive marketing metrics.</p>
<p>I should mention the caveat that I work at a 400+ employee company that sells a complex B2B software product. Our marketing team is focused on generating qualified leads that our sales team can follow up with. There is no concept of a user-to-user &#8220;viral loop&#8221; that most growth hacking seems to focus on.</p>
<p><strong>Building Tools (Look, Engineering!)</strong><br />
Besides our blog, the biggest source of referral traffic and new leads on hubspot.com is our <a href="http://marketing.grader.com/" target="_blank">free Marketing Grader tool</a>.</p>
<p>A visitor puts in their website and we do some custom scraping and analysis to give back their site&#8217;s &#8220;Marketing Grade.&#8221;  Optionally, we ask for an email address, and allow them to sign-up in order to unlock more analysis.</p>
<p>The tool has proved extremely popular, driving hundreds of thousands of visits to our website each month. It&#8217;s also very targeted &#8212; we&#8217;ve seen that referral traffic from Marketing Grader converts very highly into leads and customers.</p>
<p>If a visitor provides an email address, we email them regularly with updates to their grade, in order to pull them back to our site. Each recommendation in the report has a call-to-action that encouraged visitors to check out our main website and download our content, which would get them in front of a sales person.</p>
<p>It&#8217;s a great example of writing code that helps generate leads and customers &#8212; growth hacking at its finest.</p>
<p><strong>Moonlighting as a Data Scientist</strong><br />
As you&#8217;re probably aware, the profession of marketing has become very data driven over the past decade. This is especially true for businesses that drive most of their leads and customers through online channels, where everything can be measured.</p>
<p>All of our tracking and analytics tools hold tons of insights, but it can be non-trivial &#8212; and sometimes impossible &#8212; to build reports that surface the most interesting information if all you have is an overwhelmed javascript UI and some pivot tables (although I&#8217;ve learned to never underestimate the power of a marketer who knows pivot tables&#8230;)</p>
<p>As an engineer, I think in terms of data &#8212; how it&#8217;s organized and structured, and how to break down complex relationships into simple, reusable pieces. Thinking about programming as data manipulation was one of the big breakthroughs for me <a href="http://blog.hartleybrody.com/data-centric-programming/">as a Python programmer</a>.</p>
<p>By combining and manipulating data from APIs, I&#8217;ve discovered all sorts of interesting insights that were largely inaccessible to my coworkers.</p>
<p>We not only use these insight to help measure our marketing, but we package the data and use it to create content that helps us drive even more leads and customers. Some of our highest performing blog articles and content offers center around stats that we&#8217;ve discovered by diving into huge data sets and using code to pick out patterns.</p>
<p><strong>Being a Super Hero (Automating Mundane Stuff for Others)</strong><br />
I&#8217;m a big believer that everyone should learn how to code. That doesn&#8217;t mean that I think everyone should <em>build software</em> &#8212; just that everyone should understand how powerful raw computation can be, and how much easier it can make your life.</p>
<p>From automating college research assignments to looking up interesting data <a href="http://blog.hartleybrody.com/olympics-data/">correlating GDP and Olympic Medal counts</a>, I&#8217;ve used code to solve lots of interesting problems that have nothing to do with building software.</p>
<p>Unfortunately, not everyone has the time or patience to learn how to code &#8212; so I try to find ways to use my skills to help my coworkers be more productive.</p>
<p>A great example is a small app I wrote for a coworker that saved her a few hours each week. She was spending a ton of time exporting data from several different tools, reformatting it in excel and then uploading it into another system every week. </p>
<p>For me, it was only a few hours to chain together some webhooks, reformat the data on the fly, and automatically insert it into the desired system through a simple API call. Now the data was flowing between systems in real time, and she had a few extra hours in her week. </p>
<p>It was a huge win that saved someone a bunch of time, and it felt great.</p>
<h3>Growth Hacking Isn&#8217;t a Meme</h3>
<p>I take a lot of pride in my role. I love trailblazing a new type of career, and I believe the message that &#8220;Growth Hacker is the new VP of Marketing&#8221; will become increasingly true in the coming years.</p>
<p>With all the new excitement around growth hackers, the term has been tossed around with a bunch of other buzz words in the tech press recently, causing some people to dismiss it as Yet Another Startup Meme like &#8220;Coding Ninja&#8221; or &#8220;Social Media Guru&#8221;:</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/12/growth-hacker-comment-2.png" alt="" class="aligncenter" width="100%" /><br />
<img src="http://blog.hartleybrody.com/wp-content/uploads/2012/12/growth-hacker-comment-1.png" alt="" class="aligncenter" width="100%" /></p>
<p>Sorry to ruin the fun, but growth hacking is here to stay. </p>
<p>According to a <a href="http://my.gartner.com/portal/server.pt?open=512&#038;objID=202&#038;mode=2&#038;PageID=5553&#038;resId=1871515&#038;ref=Webin" target="_blank">Gartner report from earlier this year</a>, marketing departments are expected to spend more on technology than IT departments by 2017. And if you follow the startup space, you&#8217;re constantly hearing (and dreaming) about &#8220;viral growth&#8221; and &#8220;user acquisition&#8221; and the importance of building that into your product. </p>
<p><script type="text/javascript" src="//www.google.com/trends/embed.js?hl=en-US&#038;q=%22growth+hacker%22,+%22social+media+guru%22,+&#038;date=1/2009+48m&#038;cmpt=q&#038;content=1&#038;cid=TIMESERIES_GRAPH_0&#038;export=5&#038;w=500&#038;h=330"></script></p>
<p>Marc Andreessen wrote that &#8220;<a href="http://online.wsj.com/article/SB10001424053111903480904576512250915629460.html" target="_blank">Software is Eating the World</a>&#8221; but I think it&#8217;s even bigger than that. People who can write code are eating the world. And right now, we&#8217;ve got our sights set on marketing.</p>
<p>&#8212;</p>
<p>I love to do marketing, and the fact that I can write code means that I can do marketing in new and exciting ways. Ways that are fundamentally different from how it&#8217;s been done in the past.</p>
<p>I know that I have a fairly unique background, but I believe it will become more ubiquitous in the next 3-5 years. As more non software engineers <a href="http://www.slideshare.net/mattangriffel/how-to-teach-yourself-to-code" target="_blank">learn how to code</a>, we&#8217;ll see the field mature into a more widely recognized profession, with its own best practices and literature.</p>
<p>I&#8217;m excited for the day when every marketing team has someone who can write code.</p>
<p>Discuss on <a href="http://news.ycombinator.com/item?id=4963690" target="_blank">Hacker News</a>.</p>
<p><strong>PS:</strong> I&#8217;m working on an eBook called Marketing for Hackers that takes the lessons I&#8217;ve learned and helps you market your side project, maybe even turning  it into a business. <a href="http://www.marketingforhackers.com/" target="_blank">Check it out&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/growth-hacker-definition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I Don&#8217;t Need No Stinking API: Web Scraping For Fun and Profit</title>
		<link>http://blog.hartleybrody.com/web-scraping/</link>
		<comments>http://blog.hartleybrody.com/web-scraping/#comments</comments>
		<pubDate>Sun, 09 Dec 2012 04:48:31 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2145</guid>
		<description><![CDATA[If you&#8217;ve ever needed to pull data from a third party website, chances are you started by checking to see if they had an official API. But did you know that there&#8217;s a source of structured data that virtually every website on the internet supports automatically, by default? That&#8217;s right, we&#8217;re talking about pulling our [...]]]></description>
				<content:encoded><![CDATA[<p>If you&#8217;ve ever needed to pull data from a third party website, chances are you started by checking to see if they had an official API. But did you know that there&#8217;s a source of structured data that virtually every website on the internet supports automatically, by default?</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/12/scraper-tool.jpg" alt="scraper tool" title="scraper-tool" width="150" height="119" class="alignright" />That&#8217;s right, we&#8217;re talking about pulling our data straight out of HTML &#8212; otherwise known as web scraping. Here&#8217;s why web scraping is awesome: </p>
<p><strong>Any content that can be viewed on a webpage can be scraped. Period.</strong></p>
<p>If a website provides a way for a visitor&#8217;s browser to download content and render that content in a structured way, then almost by definition, that content can be accessed programmatically. In this article, I&#8217;ll show you how.</p>
<p>Over the past few years, I&#8217;ve scraped dozens of websites &#8212; from music blogs and fashion retailers to the USPTO and undocumented JSON endpoints I found by inspecting network traffic in my browser.</p>
<p>There are some tricks that site owners will use to thwart this type of access &#8212; which we&#8217;ll dive into later &#8212; but they almost all have simple work-arounds.</p>
<p><span id="more-2145"></span><br />
<h3>Why You Should Scrape</h3>
<p>But first we&#8217;ll start with some great reasons why you should consider web scraping first, before you start looking for APIs or RSS feeds or other, more traditional forms of structured data.</p>
<p><strong>Websites are More Important Than APIs</strong><br />
The biggest one is that site owners generally care way more about maintaining their public-facing visitor website than they do about their structured data feeds.</p>
<p>We&#8217;ve seen it very publicly with Twitter clamping down on their developer ecosystem, and I&#8217;ve seen it multiple times in my projects where APIs change or feeds move without warning.</p>
<p>Sometimes it&#8217;s deliberate, but most of the time these sorts of problems happen because no one at the organization really cares or maintains the structured data. If it goes offline or gets horribly mangled, no one really notices.</p>
<p>Whereas if the website goes down or is having issues, that&#8217;s a more of an in-your-face, drop-everything-until-this-is-fixed kind of problem, and gets dealt with quickly.</p>
<p><strong>No Rate-Limiting</strong><br />
Another thing to think about is that the concept of rate-limiting is virtually non-existent for public websites.</p>
<p>Aside from the occasional captchas on sign up pages, most businesses generally don&#8217;t build a lot of defenses against automated access. I&#8217;ve scraped a single site for over 4 hours at a time and not seen any issues. </p>
<p>Unless you&#8217;re making concurrent requests, you probably won&#8217;t be viewed as a DDOS attack, you&#8217;ll just show up as a super-avid visitor in the logs, in case anyone&#8217;s looking.</p>
<p><strong>Anonymous Access</strong><br />
There are also fewer ways for the website&#8217;s administrators to track your behavior, which can be useful if you want gather data more privately.</p>
<p>With APIs, you often have to register to get a key and then send along that key with every request. But with simple HTTP requests, you&#8217;re basically anonymous besides your IP address and cookies, which can be easily spoofed.</p>
<p><strong>The Data&#8217;s Already in Your Face</strong><br />
Web scraping is also universally available, as I mentioned earlier. You don&#8217;t have to wait for a site to open up an API or even contact anyone at the organization. Just spend some time browsing the site until you find the data you need and figure out some basic access patterns &#8212; which we&#8217;ll talk about next.</p>
<h3>Let&#8217;s Get to Scraping</h3>
<p>So you&#8217;ve decided you want to dive in and start grabbing data like a true hacker. Awesome.</p>
<p>Just like reading API docs, it takes a bit of work up front to figure out how the data is structured and how you can access it. Unlike APIs however, there&#8217;s really no documentation so you have to be a little clever about it.</p>
<p>I&#8217;ll share some of the tips I&#8217;ve learned along the way.</p>
<p><strong>Fetching the Data</strong><br />
So the first thing you&#8217;re going to need to do is fetch the data. You&#8217;ll need to start by finding your &#8220;endpoints&#8221; &#8212; the URL or URLs that return the data you need.</p>
<p>If you know you need your information organized in a certain way &#8212; or only need a specific subset of it &#8212; you can browse through the site using their navigation. Pay attention to the URLs and how they change as you click between sections and drill down into sub-sections.</p>
<p>The other option for getting started is to go straight to the site&#8217;s search functionality. Try typing in a few different terms and again, pay attention to the URL and how it changes depending on what you search for. You&#8217;ll probably see a GET parameter like <code>q=</code> that always changes based on you search term.</p>
<p>Try removing other unnecessary GET parameters from the URL, until you&#8217;re left with only the ones you need to load your data. Make sure that there&#8217;s always a beginning <code>?</code> to start the query string and a <code>&#038;</code> between each key/value pair.</p>
<p><strong>Dealing with Pagination</strong><br />
At this point, you should be starting to see the data you want access to, but there&#8217;s usually some sort of pagination issue keeping you from seeing all of it at once. Most regular APIs do this as well, to keep single requests from slamming the database.</p>
<p>Usually, clicking to page 2 adds some sort of <code>offset=</code> parameter to the URL, which is usually either the page number or else the number of items displayed on the page. Try changing this to some really high number and see what response you get when you &#8220;fall off the end&#8221; of the data.</p>
<p>With this information, you can now iterate over every page of results, incrementing the <code>offset</code> parameter as necessary, until you hit that &#8220;end of data&#8221; condition.</p>
<p>The other thing you can try doing is changing the &#8220;Display X Per Page&#8221; which most pagination UIs now have. Again, look for a new GET parameter to be appended to the URL which indicates how many items are on the page.</p>
<p>Try setting this to some arbitrarily large number to see if the server will return all the information you need in a single request. Sometimes there&#8217;ll be some limits enforced server-side that you can&#8217;t get around by tampering with this, but it&#8217;s still worth a shot since it can cut down on the number of pages you must paginate through to get all the data you need.</p>
<p><strong>AJAX Isn&#8217;t That Bad!</strong><br />
Sometimes people see web pages with URL fragments <code>#</code> and AJAX content loading and think a site can&#8217;t be scraped. On the contrary! If a site is using AJAX to load the data, that probably makes it even easier to pull the information you need. </p>
<p>The AJAX response is probably coming back in some nicely-structured way (probably JSON!) in order to be rendered on the page with Javscript.</p>
<p>All you have to do is pull up the network tab in Web Inspector or Firebug and look through the XHR requests for the ones that seem to be pulling in your data.</p>
<p>Once you find it, you can leave the crufty HTML behind and focus instead on this endpoint, which is essentially an undocumented API.</p>
<h3>(Un)structured Data?</h3>
<p>Now that you&#8217;ve figured out how to get the data you need from the server, the somewhat tricky part is getting the data you need out of the page&#8217;s markup.</p>
<p><strong>Use CSS Hooks</strong><br />
In my experience, this is usually straightforward since most web designers litter the markup with tons of <code>class</code>es and <code>id</code>s to provide hooks for their CSS. </p>
<p>You can piggyback on these to jump to the parts of the markup that contain the data you need.</p>
<p>Just right click on a section of information you need and pull up the Web Inspector or Firebug to look at it. Zoom up and down through the DOM tree until you find the outermost <code>&lt;div&gt;</code> around the item you want.</p>
<p>This <code>&lt;div&gt;</code> should be the outer wrapper around a single item you want access to. It probably has some <code>class</code> attribute which you can use to easily pull out all of the other wrapper elements on the page. You can then iterate over these just as you would iterate over the items returned by an API response.</p>
<p>A note here though: the DOM tree that is presented by the inspector isn&#8217;t always the same as the DOM tree represented by the HTML sent back by the website. It&#8217;s possible that the DOM you see in the inspector has been modified by Javascript &#8212; or sometime even the browser, if it&#8217;s in quirks mode. </p>
<p>Once you find the right node in the DOM tree, you should always view the source of the page (&#8220;right click&#8221; > &#8220;View Source&#8221;) to make sure the elements you need are actually showing up in the raw HTML. </p>
<p>This issue has caused me a number of head-scratchers.</p>
<p><strong>Get a Good HTML Parsing Library</strong><br />
It is probably a horrible idea to try parsing the HTML of the page as a long string (although there are times I&#8217;ve needed to fall back on that). Spend some time doing research for a good HTML parsing library in your language of choice.</p>
<p>Most of the code I write is in Python, and I love <a href="http://www.crummy.com/software/BeautifulSoup/" target="_blank">BeautifulSoup</a> for its error handling and super-simple API. I also love its motto:</p>
<blockquote><p>You didn&#8217;t write that awful page. You&#8217;re just trying to get some data out of it. Beautiful Soup is here to help. <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p></blockquote>
<p>You&#8217;re going to have a bad time if you try to use an XML parser since most websites out there don&#8217;t actually validate as properly formed XML (sorry XHTML!) and will give you a ton of errors.</p>
<p>A good library will read in the HTML that you pull in using some HTTP library (hat tip to the <a href="http://docs.python-requests.org/en/latest/" target="_blank">Requests library</a> if you&#8217;re writing Python) and turn it into an object that you can traverse and iterate over to your heart&#8217;s content, similar to a JSON object.</p>
<h3>Some Traps To Know About</h3>
<p>I should mention that some websites explicitly prohibit the use of automated scraping, so it&#8217;s a good idea to read your target site&#8217;s Terms of Use to see if you&#8217;re going to make anyone upset by scraping.</p>
<p>For two-thirds of the website I&#8217;ve scraped, the above steps are all you need. Just fire off a request to your &#8220;endpoint&#8221; and parse the returned data.</p>
<p>But sometimes, you&#8217;ll find that the response you get when scraping isn&#8217;t what you saw when you visited the site yourself.</p>
<p><strong>When In Doubt, Spoof Headers</strong><br />
Some websites require that your User Agent string is set to something they allow, or you need to set certain cookies or other headers in order to get a proper response.</p>
<p>Depending on the HTTP library you&#8217;re using to make requests, this is usually pretty straightforward. I just browse the site in my web browser and then grab all of the headers that my browser is automatically sending. Then I put those in a dictionary and send them along with my request.</p>
<p>Note that this might mean grabbing some login or other session cookie, which might identify you and make your scraping less anonymous. It&#8217;s up to you how serious of a risk that is.</p>
<p><strong>Content Behind A Login</strong><br />
Sometimes you might need to create an account and login to access the information you need. If you have a good HTTP library that handles logins and automatically sending session cookies (did I mention how awesome <a href="http://docs.python-requests.org/en/latest/user/advanced/#session-objects" target="_blank">Requests</a> is?), then you just need your scraper login before it gets to work.</p>
<p>Note that this obviously makes you totally non-anonymous to the third party website so all of your scraping behavior is probably pretty easy to trace back to you if anyone on their side cared to look.</p>
<p><strong>Rate Limiting</strong><br />
I&#8217;ve never actually run into this issue myself, although I did have to plan for it one time. I was using a web service that had a strict rate limit that I knew I&#8217;d exceed fairly quickly.</p>
<p>Since the third party service conducted rate-limiting based on IP address (stated in their docs), my solution was to put the code that hit their service into some client-side Javascript, and then send the results back to my server from each of the clients.</p>
<p>This way, the requests would appear to come from thousands of different places, since each client would presumably have their own unique IP address, and none of them would individually be going over the rate limit.</p>
<p>Depending on your application, this could work for you.</p>
<p><strong>Poorly Formed Markup</strong><br />
Sadly, this is the one condition that there really is no cure for. If the markup doesn&#8217;t come close to validating, then the site is not only keeping you out, but also serving a degraded browsing experience to all of their visitors.</p>
<p>It&#8217;s worth digging into your HTML parsing library to see if there&#8217;s any setting for error tolerance. Sometimes this can help. </p>
<p>If not, you can always try falling back on treating the entire HTML document as a long string and do all of your parsing as string splitting or &#8212; God forbid &#8212; a giant regex.</p>
<p>&#8212;</p>
<p>Well there&#8217;s 2000 words to get you started on web scraping. Hopefully I&#8217;ve convinced you that it&#8217;s actually a legitimate way of collecting data. </p>
<p>It&#8217;s a real hacker challenge to read through some HTML soup and look for patterns and structure in the markup in order to pull out the data you need. It usually doesn&#8217;t take much longer than reading some API docs and getting up to speed with a client. Plus it&#8217;s way more fun!</p>
<p><strong>PS:</strong> I&#8217;m working on a free guide called <a href="http://marketingforhackers.com/" target="_blank">Marketing for Hackers</a> which you should totally check out right now. <a href="http://marketingforhackers.com/" target="_blank">Click here to check it out now&#8230;</a></p>
<p><strong>Disclaimer</strong><br />
While scraping can sometimes be used as a legitimate way to access all kinds of data on the internet, it&#8217;s also important to consider the legal implications. As was <a href="http://news.ycombinator.com/item?id=4896590" target="_blank">pointed out in the comments on HN</a>, there are many cases where scraping data may be considered illegal, or open you to the possibility of being sued. Similar to using a firearm, some uses of web scraping techniques can be used for utility or sport, while others can land you in jail. I am not a lawyer, but you should be smart about how you use it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/web-scraping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning to be Choosy</title>
		<link>http://blog.hartleybrody.com/choosy/</link>
		<comments>http://blog.hartleybrody.com/choosy/#comments</comments>
		<pubDate>Thu, 06 Dec 2012 00:56:26 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2139</guid>
		<description><![CDATA[One of the first emotional responses we must learn as children is how to handle disappointment and loss. Whether it&#8217;s learning to share a toy or coping with the loss of a family member, our formative years offer constant reminders that life doesn&#8217;t always work out how we want it. Coming to terms with that [...]]]></description>
				<content:encoded><![CDATA[<p>One of the first emotional responses we must learn as children is how to handle disappointment and loss. Whether it&#8217;s learning to share a toy or coping with the loss of a family member, our formative years offer constant reminders that life doesn&#8217;t always work out how we want it. </p>
<p>Coming to terms with that is a huge part of growing up.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/11/picky-eater.jpg" alt="" title="..but mom, these vegetables don&#039;t fulfill my soul!" width="400" height="265" class="size-full wp-image-2143" /></p>
<p>But I&#8217;m starting to see the other side of that coin.</p>
<p>As a young adult, I have the autonomy to be relentless in my pursuit of happiness. I don&#8217;t have to go to class. I don&#8217;t have to mow the lawn or do the dishes. There&#8217;s no systematic frustrations I must put up with or tribulations I must survive.</p>
<p>It is 100% up to me to make sure that I&#8217;m enjoying every single day. And if I&#8217;m not, it&#8217;s my own fault. The only constraint is that I provide for myself. Past that, I&#8217;m essentially unencumbered.</p>
<p><span id="more-2139"></span><br />
<h3>&#8220;Choosy&#8221; vs &#8220;Durable&#8221;</h3>
<p>And so I have to start being more choosy with all of my decisions, to make the most of my time. This is something I&#8217;ve had to re-learn.</p>
<p>Do I really enjoy my career? Do the people I surround myself with make me happy? Am I learning new, interesting things? Am I getting enough exercise? If the answer is &#8220;no,&#8221; that might still be okay if there are no better options, but it should certainly give me pause.</p>
<p>It&#8217;s not selfish or egotistical, it&#8217;s just good living.</p>
<p>Growing up, I was constantly operating under what I&#8217;ll call a &#8220;durable&#8221; mindset: &#8220;This isn&#8217;t what I want to be doing, but I must do it so I might as well learn to enjoy it.&#8221;</p>
<p>Sometimes, you consciously put up with discomfort in the short term for some longer term benefit. But when you&#8217;re younger, it&#8217;s mostly because you &#8220;have to.&#8221; </p>
<p><em>You have to go to school and get good grades!</em> they say, <em>or else you won&#8217;t get a job</em>. (<a href="http://blog.hartleybrody.com/how-to-get-hired-in-2012/" title="How To Get Hired in 2012">Not that this is even true anymore.</a>) Just tough it out and things will magically get better! </p>
<p>But when? And how?</p>
<p>Growing up, life didn&#8217;t always work out how I wanted it, but I became mature enough to put up with a decent amount of discomfort. At some points, I became numb to it, and put a lot of my life decisions on auto-pilot. I stopped being choosy about important things in my life.</p>
<p>However, I would notice the discomfort with some of my bigger commitments, like my high school swim team. From a Facebook note I published in the fall of 2006 (I was a junior in high school):</p>
<blockquote><p>
I&#8217;ve [swam] for so long that I&#8217;ve gotten so used to all that it entails: smelling like chlorine, shitty hair, a pretty good body, constant appetite, no free time, shaving your head and legs, being on one of our school&#8217;s best sports teams but getting absolutley no recognition. My recent label as a &#8216;slacker&#8217; has gotten me thinking as to whether I ever will get back in the pool on a regular basis. </p>
<p>I&#8217;ve been taking for granted all these things that define a swimmer, never stopping to ask myself if I was doing something I wanted to do. This might sound corney, but people have always asked me, &#8220;Why do you do it?&#8221; and I&#8217;ve laughed it off, never really being able to answer. Its time for that to change.
</p></blockquote>
<h3>Adulthood</h3>
<p>I bring all this up because I see a lot of other young adults who aren&#8217;t being choosy about important things. They&#8217;re still operating under the durable mindset, sacrificing their quality of life now for some vague future payoff:</p>
<blockquote><p>I don&#8217;t like this job but I need to start my career somewhere.</p></blockquote>
<p>Now, maybe the transition from durable to choosy isn&#8217;t college graduation for everyone. But it should happen at some point. You shouldn&#8217;t have to put up with your life. </p>
<p>There&#8217;s a famous Steve Jobs quote that says:</p>
<blockquote><p>I have looked at myself in the mirror every morning and asked myself, ‘<strong>If today were the last day of my life, would I want to do what I am about to do today?</strong>’ and whenever the answer is ‘no’ for too many days in a row, I know I need to change something.</p></blockquote>
<h3>The Hard Part</h3>
<p>I think the hard part for most people is knowing what to be choosy about, and when to grit your teeth and be durable.</p>
<p><a href="https://twitter.com/garyvee" target="_blank">Gary Vaynerchuck</a> had a great quote in his keynote at Inbound 2012 when he said:</p>
<blockquote><p>People nowadays put more effort into planning their wedding than they do their marriage.</p></blockquote>
<p>We optimize the shit out of some things, and let other more important things go to waste. We&#8217;re choosy when we don&#8217;t need to be, and durable when we could have it so much better if we tried.</p>
<p>There&#8217;s a similar concept from Ramit Sethi in his awesome financial advice book &#8220;<a href="http://www.iwillteachyoutoberich.com/book/" target="_blank">I Will Teach You To Be Rich</a>&#8220;. The book is a great primer for young adults on how to be financially responsible. One of my favorite takeways from the book is what he calls &#8220;<a href="http://blog.hartleybrody.com/first-million/">Conscious Spending</a>&#8220;:</p>
<blockquote><p>
Don’t listen to experts telling you that you should stop [buying mp3s] or how you should brown bag a lunch. Think about your goals. Ask yourself if you’d rather spend $10 on lunch, or save $10 towards a house or car. If you would rather spend the money on lunch, by all means enjoy lunch! You save money so that you can spend it later on things that make you happy. You don’t save money just to watch your account balance grow.
</p></blockquote>
<p>In other words, be choosy where it makes you happy, and then suck it up and cut costs where you don&#8217;t mind it so much.</p>
<p>&#8212;</p>
<p>Of course, being choosy doesn&#8217;t suddenly make me immune to adversity. Tragedies still happen, there are obligations I must meet, some days just suck. I still need to be durable in many situations.</p>
<p>But it&#8217;s important to be aware of whether those situations are <span title="coming from within an organism or system" style="color: #999">endogenous</span> or <span title="coming from an external source" style="color: #999">exogenous</span>, and make deliberate changes when things are going south.</p>
<h3>My Career</h3>
<p>This past week, I moved from the engineering team at HubSpot back to the marketing team. </p>
<p>A few weeks ago, I detected that my passion for my work was starting to wane. Things were progressing one way, when I had hoped they&#8217;d take a slightly different path. I wasn&#8217;t as excited about HubSpot as I used to be. Once I noticed it, it was impossible for me to ignore.</p>
<p>I talked to friends and mentors about it and pretty much everyone said the same things: give it some time. </p>
<p><em>Maybe you haven&#8217;t hit your stride yet. But you&#8217;re learning so much! It&#8217;s normal to hit a slump after 6 months in a position. It looks fishy on a resume if you don&#8217;t stick with things.</em></p>
<p>In a bunch of different ways, they were all encouraging me to be durable about the situation. </p>
<p>And I listened. I talked to my managers and tried to keep an open mind. Maybe the only thing that needed to change was my mindset. I could learn to love it.</p>
<p>But a few weeks later, things still hadn&#8217;t fully clicked. Should I keep trying to just stick it out? A lot of people were telling me yes. But I&#8217;ve found it&#8217;s usually better to zig <a href="http://hartbro.tumblr.com/post/23068643965/disregard" target="_blank">when all signs are telling me to zag</a>.</p>
<p>So I talked to my managers and coworkers about it and was able to keep my career from slipping into something that required me to be durable. </p>
<p>Fortunately, I had chosen to work with really awesome people who care about my happiness and career growth, which made the transition very smooth.</p>
<p>Now, I feel reinvigorated about my work. My job is something I spend half of my waking life thinking about. I didn&#8217;t want to have to put up with it.</p>
<p>&#8212;</p>
<p>On the one hand, life is short and you shouldn&#8217;t waste it with a routine that doesn&#8217;t make you happy. But on the other hand, you don&#8217;t get to live in your ideal world all the time, and you need to be durable if you&#8217;re going to survive life&#8217;s ups and downs.</p>
<p>The first 20 years of our life, society teaches us to be durable, but it&#8217;s up to us to move on from here now and be choosy. Always remember your durability when they doesn&#8217;t work out, but be relentless in choosing the things that make you happy.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/choosy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finding the Weather Balloon That Went to Space</title>
		<link>http://blog.hartleybrody.com/found-balloon/</link>
		<comments>http://blog.hartleybrody.com/found-balloon/#comments</comments>
		<pubDate>Mon, 05 Nov 2012 03:56:05 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2133</guid>
		<description><![CDATA[In my last article, I talked about how I sent a weather balloon and video camera into space, but needed help finding the footage. I posted the article to Hacker News and promptly fell asleep, exhausted after a long day of adventure. When I woke up, my inbox was full of comments from people all [...]]]></description>
				<content:encoded><![CDATA[<p>In <a href="http://blog.hartleybrody.com/in-space/">my last article</a>, I talked about how I sent a weather balloon and video camera into space, but needed help finding the footage. I posted the article to Hacker News and promptly fell asleep, exhausted after a long day of adventure. </p>
<p>When I woke up, my inbox was full of comments from people all over the world showing support and offering to help. Apparently, the post made it to the #3 spot on the front page and drew almost 10,000 views to the article.</p>
<p>One email was from a HN&#8217;er who goes by <code>wavewash</code>, or Mo in real life. He told me <a href="http://nowintelligence.com/" target="_blank">his company</a> was offering to sponsor the search for the missing footage, using a remote control airplane with a camera to fly over the forested area and conduct an aerial search.</p>
<p>He and I went back and forth and, two weeks later (waiting out hurricane Sandy) we were on the road together with his girlfriend, driving up to Maine to continue the search.</p>
<p><span id="more-2133"></span></p>
<h3>The Search, Take 2</h3>
<p>I brought along my trusty <a href="https://buy.garmin.com/shop/shop.do?pID=310" target="_blank">Garmin 60CSx</a> as well as the new <a href="http://www.findmespot.com/en/index.php?cid=101" target="_blank">SPOT Personal Tracker</a> I had just purchased, in preparation for a second balloon launch. <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>We used the second map I had made as our reference area. The map combined four different checkin points from the tracking device in the balloon&#8217;s capsule, as well as my own guesstimates of where it might have drifted due to the wind.</p>
<p><a href="http://blog.hartleybrody.com/wp-content/uploads/2012/10/crash-site-map-02.jpg"><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/10/crash-site-map-02-1024x502.jpg" alt="Crash site map #2" title="click for full size" width="700" class="aligncenter" /></a></p>
<p>Unfortunately, the remote control airplane wasn&#8217;t quite ready for the trip, but we set out into the woods again, hoping that the lack of foliage would make it easier to search the tree canopies.</p>
<p>It took us about 5 minutes to get to the location on my map, and then we started to spread out. </p>
<p>Within about 90 seconds, I spotted a giant white flap of latex blowing in the wind, about 2/3rds of the way up a tall pine tree. I actually wasn&#8217;t sure if it was the balloon at first, or whether it was some sort of giant gross mushroom thing, but then I spotted the capsule and the lens of the camera dangling below.</p>
<p>I couldn&#8217;t believe it &#8212; I had finally found it!</p>
<p>Before I could even start planning how we&#8217;d get it down &#8212; it was about 40ft off the ground &#8212; Mo came crashing through the forest and started scampering up the tree to retrieve the capsule. </p>
<p>It took a minute or two for him to dislodge the parachute and what remained of the weather balloon and then drop it back to us on the ground.</p>
<p><a href="http://blog.hartleybrody.com/wp-content/uploads/2012/11/18385_3998615730326_205941491_n.jpg"><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/11/18385_3998615730326_205941491_n.jpg" alt="" title="18385_3998615730326_205941491_n" width="640" class="aligncenter size-full wp-image-2134" /></a></p>
<h3>Thanks to the Community</h3>
<p>As we were walking back to the car, a homeowner came out to his porch and asked if that was the balloon he had kept hearing about. He said several groups had come by asking if he&#8217;d seen anything, and he was really excited that we recovered it. </p>
<p>It was awesome to know that the community had gotten so involved. </p>
<p>Huge shout out to Mo and his girlfriend for making the three hour trek up to Maine and back, and thanks to everyone in the Bowdoin and Brunswick communities that organized search parties or told their friends, and everyone on the internet who offered to help in some way. You all kept me dedicated to keep searching.</p>
<h3>The Footage</h3>
<p>The GoPro was actually pretty tricky to pry open. I&#8217;m guessing the waterproof seal tightened in the vacuum of the upper atmosphere. Eventually we got the SD card out and found a suitable laptop to play the video on (thanks Toph!)</p>
<p>While the balloon was in the air for over 4 hours from take off till landing, the camera was only able to recorded about 2 and a half hours before the battery died. </p>
<p>Unfortunately, this meant that it didn&#8217;t capture its highest moments in space or its crash landing into Brunswick.</p>
<p>But there&#8217;s still some magnificent footage:</p>
<p><iframe width="500" height="375" src="http://www.youtube.com/embed/x5gkXjssO-8" frameborder="0" allowfullscreen></iframe></p>
<p>It was a beautifully clear day so there were no clouds to shroud the view from the camera&#8217;s soaring heights.</p>
<p>The camera was pointed down at an angle in order to capture both the edge of space, as well as the view of the earth below.</p>
<p>I&#8217;m not entirely sure how high the camera was in its final moments, but I&#8217;m sure it could be calculated based on the distance between landmarks in the video. Let me know if you want to lend a hand with those calculations!</p>
<h3>Do&#8217;s and Don&#8217;ts</h3>
<p>I was inspired by Felix Baumgartner&#8217;s record breaking jump from the edge of space to finally follow my dream and try to reach space myself. Out of excitement, I rushed to put the launch together in a single week. Here&#8217;s what I learned:</p>
<p><strong>You need redundant systems.</strong><br />
Tracking and video recording are the two crucially important systems on your capsule. If either one of them fails, you might not get full video, and you might even lose all your equipment. </p>
<p>I was lucky that my GPS receiver thawed out enough to check in a few times before the battery died. And because of the battery issues with the GoPro, I wasn&#8217;t able to record the entire trip&#8230; <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>It&#8217;s worth putting in a few extra pounds to ensure you can find your capsule and that it&#8217;s able to record footage the entire time. I&#8217;ll definitely be doing this for the next launch.</p>
<p><strong>The upper atmosphere can be a pretty harsh environment for electronics.</strong><br />
It&#8217;s not as easy as you might think to track an object that&#8217;s tens of thousands of feet off the ground in temperatures well below freezing. The Garmin device I tucked into the capsule was pretty much useless &#8212; it only checked in 5 times during the entire 200mi trip.</p>
<p>For people that want to build their own hardware, there&#8217;s lots of information for hobbyists available. Check out the <a href="http://ukhas.org.uk/general:beginners_guide_to_high_altitude_ballooning" target="_blank">UK High Altitude Society</a> for more.</p>
<p>To keep things warm, I wrapped the inside of the capsule with thick air conditioner insulation, and tucked in several hand warmers to keep the batteries from freezing. I should have included a lid on the capsule to keep more heat locked in.</p>
<p><strong>You have to think about the safety of others.</strong><br />
I had <a href="http://news.ycombinator.com/item?id=4681653" target="_blank">several people point out</a> that I made no mention of FAA or FCC regulations regarding this sort of activity in the last article. I didn&#8217;t include them cause I thought they&#8217;d be boring, but they&#8217;re extremely important to be aware of.</p>
<p><a href="http://en.wikipedia.org/wiki/IANAL" target="_blank">IANAL</a>, but according to my reading of the rules, if the capsule is under four pounds and doesn&#8217;t use a cell phone for tracking, you should be in the clear legally. </p>
<p>That said, I also took care to avoid airports and other airspace that might cause issues as the balloon was being launched. One of my coworkers is an amateur pilot and he showed me <a href="http://skyvector.com/" target="_blank">http://skyvector.com/</a> which shows airports as well as other restricted airspace warnings. I didn&#8217;t want my balloon getting tangled with an airplane or causing any other issues. </p>
<p>While the sky might appear to be wide and vast, there are thousands of people flying over our heads every day, and it&#8217;s important to keep their safety in mind.</p>
<p><strong>Be prepared for a long chase.</strong><br />
In all of my excitement and anticipation, I didn&#8217;t really know what was going to happen once we actually launched the thing. There were a few hours of radio silence that would&#8217;ve driven me crazy if my girlfriend hadn&#8217;t suggested we go for a hike and enjoy the foliage &#8212; leaving the tracking device in the car.</p>
<p>We ended up driving almost 400 miles that day from the launch site to crash site and back home. Prepare yourself for this mentally.</p>
<p>&#8212;</p>
<p>As always, <a href="https://twitter.com/hartleybrody" target="_blank">reach out to me on twitter</a> and I&#8217;d be happy to answer any more specific questions. Thanks for all the support!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/found-balloon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sending a Weather Balloon to Space</title>
		<link>http://blog.hartleybrody.com/in-space/</link>
		<comments>http://blog.hartleybrody.com/in-space/#comments</comments>
		<pubDate>Mon, 22 Oct 2012 02:48:24 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2123</guid>
		<description><![CDATA[Like most of the nation, last weekend I watched the Red Bull Stratos live stream of Felix Baumgartner&#8217;s record breaking jump. For me, one of the best parts of the stream was the moment when the cabin finally depressurized and the door slid open. Suddenly, you could see both vastness of space and the bright [...]]]></description>
				<content:encoded><![CDATA[<p>Like most of the nation, last weekend I watched the Red Bull Stratos live stream of Felix Baumgartner&#8217;s record breaking jump. </p>
<p>For me, one of the best parts of the stream was the moment when the cabin finally depressurized and the door slid open. Suddenly, you could see both vastness of space and the bright blue curvature of the earth over his shoulder, and it took my breath away.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/10/photo-1.png" alt="Hartley in Space" width="500px" class="aligncenter" /></p>
<p>It had always been a dream of mine to see the earth like that, and watching Felix&#8217;s live stream got me so amped up, I couldn&#8217;t hold off any longer.</p>
<p><span id="more-2123"></span></p>
<h3>The Setup</h3>
<p>I knew I wouldn&#8217;t actually be able to <em>travel</em> to outer space, but I still wanted to somehow capture the awe of it myself. I decided a video camera rigged to a weather balloon would be a great start.</p>
<p>I found a <a href="http://www.amazon.com/gp/product/B004RK2RAU/ref=oh_details_o02_s00_i00" target="_blank">big weather balloon on Amazon</a> for less than $50, <a href="http://the-rocketman.com/recovery.html" target="_blank">a parachute</a> for $30 and then assembled some supplies from the local hardware store to build the capsule. The video recording device was a GoPro HD Hero that I got for about $130.</p>
<p>But getting the rig to float across the sky and record video along the way was the easy part. Getting it to land safely and then recovering the camera would be the hard part.</p>
<p>I knew the balloon was probably going to ascend to almost 100,000ft (about 19mi up) before it would pop in the vacuum of space and the parachute would carry it in for landing. But I expected the rig to drift pretty far from wherever it was launched. </p>
<p>My biggest concern was that it would land somewhere in the Atlantic Ocean and I&#8217;d never be able to recover the video. Since the prevailing winds generally blow west to east, I knew we couldn&#8217;t launch from the Boston area or it&#8217;d end up in the sea for sure.</p>
<p>But knowing it wasn&#8217;t in the ocean wasn&#8217;t good enough. I found a <a href="http://weather.uwyo.edu/polar/balloon_traj.html" target="_blank">balloon trajectory forecast</a> site that gave me a pretty good sense of which way it would drift, but that still wasn&#8217;t enough precision to actually track it down.</p>
<p>It turns out it is very hard to track a device that is tens of thousands of feet off the ground, but the best solution I could find was <a href="https://buy.garmin.com/shop/shop.do?pID=67686" target="_blank">Garmin&#8217;s GPS tracking device</a>, which uses cellphone service to broadcast its GPS location, which could then be viewed from Garmin&#8217;s website or on a mobile app, in real time.</p>
<p>With all that and a bit of duct tape for good measure, we were ready to go.</p>
<h3>Launch Day</h3>
<p>Sarah and I hit the road at 6am so that we could get west to launch early in the morning, when the winds were calmest. </p>
<p>The launch site was a small Hannafords store in North Brookfield, which I chose because it opened early and had a &#8220;Bring Your Own Balloon&#8221; policy for their helium tank. </p>
<p>Most stores require you to buy the balloon from them &#8212; but I already had my balloon, I just needed helium. Their stated policy was 79 cents per balloon for the helium, but I offered to pay 20x since this wasn&#8217;t an ordinary-sized balloon&#8230;</p>
<p><a href="http://blog.hartleybrody.com/wp-content/uploads/2012/10/DSC_0127.jpg"><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/10/DSC_0127-680x1024.jpg" alt="" width="500" class="aligncenter" /></a></p>
<p>We ran through the pre-flight checklist, and then, at 7:54am, released the balloon with its video-recording payload. It ascended quickly and disappeared in about a minute. And then, we waited.</p>
<p>And waited.</p>
<p>The Garmin device stopped updating its location in the app several minutes after it took off, either because it had risen too high to reach the cellphone towers, or else it was in an area with bad service. This was very frustrating since I had hoped to be able to watch it travel most of the way and try to follow along underneath it.</p>
<p>Sarah and I went for a hike while we waited, enjoying the fall foliage. </p>
<p>Afterwards, we decided we&#8217;d start to drive back east, towards Waltham in case the balloon showed back up on our tracking system. </p>
<p>I had heard the balloon trips often last between 2 and 3 hours before the rigs touch down again, so when lunchtime rolled around and the balloon still hadn&#8217;t shown up, I was ever more frustrated. I figured it had probably blown into the ocean and it was all a waste.</p>
<p>But then, at 12:05pm, an email: &#8220;You Garmin device is running low on battery&#8221; That means it had checked in! And if it checked in, it must have updated its location. I quickly pulled off the highway and checked the app. </p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/10/photo.png" class="alignright" width="300px" />It turns out, the rig had travelled up to Maine &#8212; almost 200 miles northeast &#8212; and was currently floating across the Brunswick High School baseball field. </p>
<p>Wait, Brunswick High School?? Like, 3 minutes down the road from Bowdoin, where I went to college? Yep.</p>
<p>It was pretty incredible that that&#8217;s where it&#8217;d end up of all places, and I knew exactly how to get there so we jumped back in the car and raced 2 and a half hours north, to Brunswick, Maine. We pulled off the road just across from the high school. </p>
<p>Right before the battery in the tracker died, it updated its locations say it had drifted over into the woods across the street, before coming to a rest (several check-ins in a row in the same spot).</p>
<p>Sarah and I headed into the woods, eager to find our precious payload and recover the video. </p>
<p>Alas, after 3 long, agonizing hours, it was starting to get dark, so we had to pack it up and head back to Boston.</p>
<h3>You Can Help</h3>
<p>Unfortunately, that means we never recovered the actual video that the camera shot on its 200 mile trip through the sky and into the edge of space.</p>
<p>Here&#8217;s as much information as I know about its whereabouts. </p>
<blockquote><p>
Nearest Address: 183-207 Maquoit Rd, Brunswick ME<br />
Coordinates: N43.880485, W69.980874<br />
Accuracy 16ft
</p></blockquote>
<p>I wrote my cellphone number on the side of the capsule before launch, in case anyone found it. But this thing is buried in the woods, so I doubt anyone will stumble across it for quite some time.</p>
<p>There&#8217;s also a chance that the video captured the <a href="http://bostinno.com/2012/10/20/how-to-watch-the-orionid-meteor-shower-tonight-images-video/#ss__246729_1_0__ss" target="_blank">meteor shower that took place over Massachusetts this morning</a>, which would be absolutely incredible footage from that vantage point. I really really don&#8217;t want that footage to get lost in the woods.</p>
<p>If anyone is willing to search for it, please, please shoot me an email at hartley.brody@gmail.com I&#8217;d really love to publish the footage and give you a huge shoutout for your assistance. </p>
<p>And if you have any questions about sending your own mission to space, I&#8217;d be happy to answer with a few &#8220;dos&#8221; and a lot of &#8220;don&#8217;ts&#8221;: <a href="http://twitter.com/hartleybrody" target="_blank">@hartleybrody</a>.</p>
<p><strong>Update:</strong> I&#8217;ve gotten a ton of interest from students and community members who are interested in helping me locate the capsule, which is really exciting!</p>
<p>Here&#8217;s some more information I put together to help searchers:</p>
<p><a href="http://blog.hartleybrody.com/wp-content/uploads/2012/10/crash-site-map.png"><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/10/crash-site-map-977x1024.png" alt="Crash site map" title="click for full size..." width="700" class="aligncenter size-large wp-image-2129" /></a></p>
<p>The orange ballon shapes are the places where the GPS checked in. The pink marks are the landmarks I noticed while hunting around, and the white area is my forecast of where I think the balloon might be. It&#8217;s possible that the rig hit a tree, knocking the GPS receiver out, and then kept travelling a little farther east.</p>
<p>Sarah and I searched the area around the 3 orange markers pretty thoroughly, and ventured into the ravine briefly, but didn&#8217;t go much further east, or down the ravine.</p>
<p>The parachute is a dark red color, about 2 feet in diameter. The capsule is a 1 quart cardboard bucket that&#8217;s got a blue and yellow and green design on the outside. It&#8217;s strung together with yellow parachute cord and yellow duct tape. </p>
<p><a href="http://blog.hartleybrody.com/wp-content/uploads/2012/10/photo-21.jpg"><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/10/photo-21-300x224.jpg" alt="" title="photo (2)" width="300" height="224" class="aligncenter size-medium wp-image-2131" /></a></p>
<p>I chose the bright colors, thinking it&#8217;d help it stand out, but it just ended up blending into the fall colors :/</p>
<p><strong>Update 2:</strong> More maps! I haven&#8217;t been able to find a good trail map for the area, but I found some cool stuff on the <a href="http://eis.woodardcurran.com/Brunswick/" target="_blank">Town of Brunswick&#8217;s GIS website</a>:</p>
<p><a href="http://blog.hartleybrody.com/wp-content/uploads/2012/10/crash-site-map-02.jpg"><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/10/crash-site-map-02-1024x502.jpg" alt="Crash site map #2" title="click for full size" width="700" class="aligncenter" /></a></p>
<p>Get in touch if you&#8217;d like to help! hartley.brody@gmail.com</p>
<p><strong>Update 3:</strong> <a href="http://blog.hartleybrody.com/found-balloon/">WE FOUND THE BALLOON!!!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/in-space/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Practical Reasons to Choose Open Source</title>
		<link>http://blog.hartleybrody.com/open-source/</link>
		<comments>http://blog.hartleybrody.com/open-source/#comments</comments>
		<pubDate>Sat, 06 Oct 2012 18:15:42 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2112</guid>
		<description><![CDATA[The Free and Open Source Software movement (FOSS) is almost as old as the market for software itself. Back in the 1980s, Richard Stallman started the Free Software Foundation as a reaction to the growing commercialization of software. He framed the issue not as a commercial one, but as a moral one: Thus, “free software” [...]]]></description>
				<content:encoded><![CDATA[<p>The Free and Open Source Software movement (<a href="http://en.wikipedia.org/wiki/FOSS" target="_blank">FOSS</a>) is almost as old as the market for software itself. </p>
<p>Back in the 1980s, Richard Stallman started the Free Software Foundation as a reaction to the growing commercialization of software. He framed the issue not as a commercial one, but as a moral one:</p>
<blockquote><p>
Thus, “free software” is a matter of liberty, not price. To understand the concept, you should think of “free” as in “free speech,” not as in “free beer”.<br />
&#8212; <a href="http://www.gnu.org/philosophy/free-sw.html" target="_blank">Free Software Definition</a>
</p></blockquote>
<p>To this day, many people still think of FOSS as a matter of liberty. Quoting again for the GNU project&#8217;s answer to &#8220;<a href="http://www.gnu.org/philosophy/free-sw.html" target="_blank">What is Free Software</a>&#8220;:</p>
<blockquote><p>When users don&#8217;t control the program, the program controls the users. The developer controls the program, and through it controls the users. This nonfree or “proprietary” program is therefore <strong>an instrument of unjust power.</strong>
</p></blockquote>
<p>Clearly the FOSS movement is grounded in morals and philosophy. </p>
<p>But for me, I don&#8217;t tend to moralize about software too much. Instead, I work with open-source projects and technologies for more practical reasons. I&#8217;ve found they tend to be more well-documented, efficient, secure and easily extendable than their close-sourced counterparts. </p>
<p>If you&#8217;re starting a project or learning a new language &#8212; or just choosing software as an end-user &#8212; those are all great reasons why you should consider an open-source option.</p>
<p><span id="more-2112"></span>&#8212;</p>
<p>The basic tenet of open-source is that anyone can see the underlying source code that makes a program run. This means that anyone can not only read and study it, but also (usually) modify it and redistribute it as they wish.</p>
<p>Thus, open-source software is exposed to everyone&#8217;s eyes. And &#8212; like a rock eroded by millions of grains of sand over time &#8212; this exposure helps polish it off and smooth over many bumps.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/10/40501752.jpg" alt="A beautiful desert rock, eroded by sand" class="aligncenter" width="500px" /></p>
<h3>Everything is Accessible</h3>
<p>With proprietary software, you&#8217;re relying solely on the original authors of the application to give you a full and accurate description of what it is and how it works. But even at a well-meaning organization, documentation often gets out of date or is incomplete &#8212; or sometimes flat out wrong (real-world example discussed later).</p>
<p>If you encounter strange or inconsistent behavior in a platform like that, your only option is to file a bug or see if anyone else has posted the same issue in a forum somewhere and gotten an answer. </p>
<p>With open-source software however, you can roll up your sleeves and dive in yourself. This empowers you to not only study the software and fix bugs, it also allows you to change existing functionality if it doesn&#8217;t suit your needs out-of-the-box.</p>
<h3>Documentation is Reliable</h3>
<p>As a corollary to the last point, open-source projects usually have <em>excellent</em> documentation. If someone discovers an issue or a feature that isn&#8217;t well described in the project&#8217;s documentation, they can usually go into the docs and update them to be more accurate. </p>
<p>This is a great example of how increased scrutiny, combined with the ability for anyone to edit the project, makes open-source software much nicer to work with than closed-source projects. </p>
<h3>Features are Mature</h3>
<p>With open source projects, you rarely have to worry about small bugs and edge cases that the original application developers might not have tested for. Since the source code has been exposed to the public, buggy or insecure behavior is quickly rooted out and corrected.</p>
<p>Even for larger projects that might have several dozen core contributors, those contributors aren&#8217;t always specialists in the minutiae of the project. By releasing the source code publicly, people with more experience and specialization have the ability to review the code and even correct issues the original developers might not have noticed.</p>
<p>Anyone can essentially audit the project, which ends up making the code more efficient and secure.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/10/s.am_.2004.1082999580.river_rock_erosion.jpg" alt="Smooth rocks on the edge of a river" class="aligncenter" width="500px" /></p>
<h3>Addons and Plugins are Plentiful</h3>
<p>Open-source projects are easily extended by third parties to add on functionality that the original authors didn&#8217;t include.</p>
<p>WordPress is a great example of this &#8212; they have over 1,600 themes and 21,000 plugins available for their system, while closed-source blogging systems like Posterous and Tumblr have only a few hundred themes and a very limited plugin selection.</p>
<p>It&#8217;s worth pointing out that the movement towards <a href="http://en.wikipedia.org/wiki/Service-oriented_architecture" target="_blank">Service Oriented Architectures</a> and exposing public APIs is allowing third parties to extend even closed-source systems. However, in these situations, third parties are relying on the closed-source provider to maintain those APIs consistently over time. And as we&#8217;ve seen, <a href="http://arstechnica.com/business/2012/08/new-api-severely-restricts-third-party-twitter-applications/" target="_blank">this isn&#8217;t always a realistic expectation</a>.</p>
<h3>No Sales People or Commitments</h3>
<p>Obviously, one of the best best benefits of using open-source software is that it&#8217;s almost always free (&#8220;free&#8221; as in &#8220;free beer&#8221;). This means there are no contracts to sign, no commitments to enter, and no sales people to wrestle with.</p>
<p>Just find the project&#8217;s website, download the software or clone the source code, and you&#8217;re on your way. You can get up and running quickly.</p>
<h3>Support is There, But Not Required</h3>
<p>For larger, more complex open-source projects, you can usually pay if you need help or support, but it&#8217;s not required to use the software. </p>
<p>This means it&#8217;s still possible for a profitable business to form around fundamentally free software. <a href="http://www.redhat.com/" target="_blank">Red Hat</a> is the most obvious example of a company doing this right. They offer premium support for Linux, and a bunch of other open-source technologies, and have revenue of <a href="http://investors.redhat.com/releasedetail.cfm?ReleaseID=660156" target="_blank">over $1Bn</a>.</p>
<p>&#8212; </p>
<h3>A Counter Example</h3>
<p>I work with open-source so often that I often take all of these wonderful benefits for granted. I usually build projects using <a href="http://blog.hartleybrody.com/google-python/" title="Google’s Python Lessons are Awesome">Python</a>, <a href="https://www.djangoproject.com/" target="_blank">Django</a> and <a href="http://en.wikipedia.org/wiki/Mysql" target="_blank">MySQL</a> &#8212; all open-source &#8212; and so I&#8217;m used to great documentation (or tutorials where the docs are lacking) and libraries and apps I can use to extend core functionality when I need them.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/10/appengine-logo.png" class="alignright" alt="App Engine logo" width="200px" /><br />
Recently however, I&#8217;ve had to work on two projects using Google&#8217;s closed-source App Engine.</p>
<p>App Engine is Google&#8217;s cloud-computing platform for hosting web applications. However, in order to run your application on their platform, you need to build it specifically around their APIs. </p>
<p>Now, you might think that a company like Google, with some of the best engineers in the world, would be able to develop a fantastic set of APIs and offer world class tools to help you monitor, manage and debug your application. </p>
<p>But even with all that tech talent working on the project, I&#8217;ve found developing for App Engine to be slow and much more frustrating than any of the open-source technologies I use more regularly. </p>
<p>Their documentation is poorly organized and vaguely written. I&#8217;ve even seen code samples in the documentation with incorrect syntax &#8212; they wouldn&#8217;t even run if you tried using them! I&#8217;m sure they were typos by the engineers who wrote them, but those sorts of issues get fixed very quickly in an open-source environment.</p>
<p>Using common Python libraries like <code>simplejson</code> is unsupported. Finding proper tutorials is tricky. Querying for objects can lead to surprising results (although that might just be my nascent familiarity with NoSQL). Getting support from Google is all but impossible.</p>
<p>Plus, there&#8217;s the vendor lock in. If I ever wanted to take my application and host it somewhere else, I&#8217;d have to rewrite huge parts of it in order to make it work with more standard databases.</p>
<p>Working with closed-source App Engine has helped me realize all of the wonderful benefits that I was accustomed to when working with open-source alternatives. </p>
<p>&#8212;</p>
<p>What it comes down to is this: no developer is perfect. No matter how many bright engineers you have under one roof, they&#8217;re never going to be able to test every use case, add every features and support and explain the software exhaustively. </p>
<p>Just as the rough rock gets polished into something smooth and beautiful by exposure over time, scrutiny from a huge community of dedicated developers and part-time hobbyists can turn a project into something really elegant and smooth to work with.</p>
<p>That exposure helps to make open-source projects easier to learn and generally more efficient, secure, easily extendable than their close-sourced counterparts. To me, that makes open-source technologies the most obvious choice.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Real World: A Four Month Retrospective</title>
		<link>http://blog.hartleybrody.com/four-months/</link>
		<comments>http://blog.hartleybrody.com/four-months/#comments</comments>
		<pubDate>Mon, 24 Sep 2012 02:04:03 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2104</guid>
		<description><![CDATA[Just a quick collection of things I&#8217;ve learned as I&#8217;ve transitioned from college into &#8220;the real world&#8221; these past 4 months. You&#8217;re a lot less active. On campus, I was always walking or biking around. Not only cause I enjoyed it, but because I had to. Every class, every meal, and every study group or [...]]]></description>
				<content:encoded><![CDATA[<p>Just a quick collection of things I&#8217;ve learned as I&#8217;ve transitioned from college into &#8220;the real world&#8221; these past 4 months.</p>
<h3>You&#8217;re a lot less active.</h3>
<p>On campus, I was always walking or biking around. Not only cause I enjoyed it, but because I had to. Every class, every meal, and every study group or party meant walking at least a few hundred yards. And I&#8217;d rarely be in one place for more than two hours, so I&#8217;d end up walking or biking a pretty decent amount every day, without meaning to. </p>
<p>Now, on an average day, I only have to bike to work (about a mile) and then back home. I spend hours sitting at a desk during the day, and then again sitting on a couch when I come home. This is actually something I was warned about by a recent alum. It&#8217;s easy to get stuck in one spot for hours.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/09/304464_10100914837929342_176354655_n.jpg" alt="no standing desk for me" class="aligncenter" width="500px" /></p>
<p>Some people try to compensate for their new found sluggishness by joining a gym. These are never cheap, and usually not as good as the world class facilities we had available to us as students, which makes them feel like an even worse deal. Personally, I do calisthenics in the morning and sometimes go for runs or bike rides on the weekend.</p>
<p>You have to really go out of your way to stay active, or else you feel like shit.</p>
<p><span id="more-2104"></span>&#8212;</p>
<h3>The housing process sucks.</h3>
<p>No more complaining about getting stuck in Chambo or having your housing block break up so you couldn&#8217;t get that quad you wanted. Even if you end up with so called &#8220;shitty&#8221; housing on campus, you know it&#8217;s still halfway decent. The real world has no such guarantees. </p>
<p>First, you have to pick a neighborhood, which means getting to know a large area well. Is it safe? Is it noisy? Is it easy to commute? Are there grocery stores nearby? Where can I do laundry around here? How expensive is it compared to other areas? Do my friends live in the area?</p>
<p>Then the hard part &#8212; finding an actual apartment and roommates who also want to live there. People disagree over cost and location and a bunch of other things, so rather than optimizing for living with people I actually knew, I optimized for living in the best spot I could find, and then found roommates through Craigslist. </p>
<p>It was an extremely stressful process, even though I already knew where I wanted to live. My new found Craigslist roommates and I spent weeks going back and forth over who was paying what rent, and people threatened to pull out and not sign the lease, which would have left the rest of us stuck covering their rent.</p>
<p>The stars have to align just right for you to find a nice place, in a good area, at the right price, with great roommates. It&#8217;s very hard to get it right.</p>
<h3>Your friends get married and have babies.</h3>
<p> Until recently, I had never actually known another young adult as a peer who then went on and got married or pregnant. </p>
<p>It was very strange at first to watch a friend transform into a spouse or parent and be responsible for another person. But, in an office that has a lot of young adults, it seems like these transformations are happening every other week. I think I&#8217;ve gotten used to it by now, but it was weird to experience the first few times.</p>
<h3>You&#8217;re totally responsible for your own livelihood.</h3>
<p>I&#8217;ve always been someone who likes to save money and am generally responsible with it. But it&#8217;s a whole new ballgame when you are totally responsible for 100% of your own expenses. Everything from groceries and rent to vacations and unexpected bike maintenance &#8212; it&#8217;s totally up to you to cover those bills and save responsibly.</p>
<p>To grow your savings, you need to either <a href="http://blog.hartleybrody.com/first-million/">earn more, or spend less.</a> </p>
<p>This transition is harder for some people than others.</p>
<h3>Getting drunk is expensive.</h3>
<p>While bars might seem exciting at first, they get expensive really fast. </p>
<p>Last summer while living in Boston, there were months that I&#8217;d spend upwards of $200 at bars, and a few times where I&#8217;d drop that in a single weekend. Most people consider it a <em>deal</em> when you can get a single beer for $4. Fortunately, most places in Boston don&#8217;t charge for cover, but some do, and those little charges add up quick. </p>
<p>Plus, add on an additional $20 for the <a href="http://uber.com/invite/otk0m" target="_blank">Uber fare</a> you&#8217;ll need to get home after the T is closed (past 12:30). Drinking is a much more expensive habit than it was in college, and I&#8217;ve found myself doing a lot less of it as a result.</p>
<h3>No anxiety in the month of August.</h3>
<p>For as long as I can remember, the month of August meant the end of summer and back to school. This meant summer reading, back to school shopping, and saying bye to summer friends.</p>
<p>Now, the month of August just means &#8212; enjoy yourself! It&#8217;s almost time for fall. August no longer brings huge living shifts like it has for the past 17 years.</p>
<h3>Groupons are a lifesaver.</h3>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/09/photo-11.jpg" alt="Handgun lessons" width="200px" class="alignright" /> You want to do fun things, and have an interesting life, but you don&#8217;t have a ton of cash to burn. You absolutely need to subscribe to Groupon and any other daily deal sites. They&#8217;re a great way to explore a city and try new things without blowing through your entire paycheck. </p>
<p>So far I&#8217;ve gotten handgun lessons, a dinner cruise, salsa classes, and a few laps <a href="http://www.youtube.com/watch?v=Nm-ysWPF9ls" target="_blank">driving a Lamborghini</a> &#8212; all for more than 50% off thanks to daily deal sites. It&#8217;s a great way to keep yourself busy for cheap.</p>
<p>&#8212;</p>
<p>There are all sorts of other things like learning the true meaning of &#8220;work-life balance&#8221; or finding out that the liberal arts degree you worked so hard for is essentially worthless in a <a href="http://bowdoinorientexpress.com/post/17143003784/how-to-get-hired-in-2012" target="_blank">Get Shit Done&trade;</a> economy. <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>What are some things you didn&#8217;t know coming out of school?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/four-months/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gangnam Style Parody</title>
		<link>http://blog.hartleybrody.com/gangnam-style-parody/</link>
		<comments>http://blog.hartleybrody.com/gangnam-style-parody/#comments</comments>
		<pubDate>Tue, 18 Sep 2012 19:13:04 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2102</guid>
		<description><![CDATA[It&#8217;s been a while since HubSpot has made a fun video. The last one I was a part of was actually one of my first projects at HubSpot last spring. Huge shout out to HubSpot&#8217;s awesome video team and to all the background dancers (both the volunteers and the unwitting). I&#8217;m glad I get to [...]]]></description>
				<content:encoded><![CDATA[<p><iframe width="500" height="281" src="http://www.youtube.com/embed/2aa8os53_Ac" frameborder="0" allowfullscreen></iframe></p>
<p>It&#8217;s been a while since HubSpot has made a fun video. The <a href="http://www.youtube.com/watch?v=mkhN4L7Mn74" target="_blank">last one I was a part of</a> was actually one of my first projects at HubSpot last spring. </p>
<p>Huge shout out to HubSpot&#8217;s awesome video team and to all the background dancers (both the volunteers and the unwitting). </p>
<p>I&#8217;m glad I get to work for a company that has this much fun.</p>
<p>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/gangnam-style-parody/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asynchronize All The Things</title>
		<link>http://blog.hartleybrody.com/asynchronous/</link>
		<comments>http://blog.hartleybrody.com/asynchronous/#comments</comments>
		<pubDate>Mon, 10 Sep 2012 01:12:52 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.hartleybrody.com/?p=2095</guid>
		<description><![CDATA[One of the first steps of tackling a new web application is figuring out where bottlenecks might arise. Now, you don&#8217;t want to go too far down this route, or you&#8217;ll end up designing yourself into oblivion. As Donald Knuth famously said: Premature optimization is the root of all evil. But it&#8217;s still good to [...]]]></description>
				<content:encoded><![CDATA[<p>One of the first steps of tackling a new web application is figuring out where bottlenecks might arise.</p>
<p>Now, you don&#8217;t want to go <em>too</em> far down this route, or you&#8217;ll end up designing yourself into oblivion. As <a href="http://hartbro.tumblr.com/post/30754830033/premature-optimization" target="_blank">Donald Knuth famously said</a>:</p>
<blockquote><p>Premature optimization is the root of all evil.</p></blockquote>
<p>But it&#8217;s still good to have a sense of where your system might get bogged down under heavy load. For example, database calls are often the first place you&#8217;ll start noticing slowness in your app. Or if you have to make a network request &#8212; say, hitting a third party API &#8212; that can add more than a full second to the amount of time it takes your application to serve a response to a visitor.</p>
<h3>Break It Down</h3>
<p>I&#8217;ve heard it said that good code should only serve a single, specific purpose. If you can take a given process and break it down into two or more simpler processes, that&#8217;s usually the best way to go.</p>
<p>I always kind of <em>knew</em> that was a good design goal, but I didn&#8217;t realize how powerful it was until I started playing around with message queues.</p>
<p><span id="more-2095"></span></p>
<h3>Analytics for Noobs</h3>
<p>I recently started working on a new side project and one of the core parts of the application is an analytics system, that shows artists how their fans are interacting with their music. That might not sound too challenging &#8212; after all, it&#8217;s just writing lines to a database.</p>
<p>But the reason this challenge seemed particularly daunting was because the service would likely receive hundreds or even thousands of bits of analytics information coming in each second during peak load. </p>
<p>I had never designed a system that operated under that type of environment. </p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/09/mvsic-achitcture.jpg" alt="Mvsic Architecture" class="alignright" width="200px" /></p>
<p>I had learned a few lessons in scalability when my blog had <a href="http://blog.hartleybrody.com/surviving-hn-noobs/">made it to the front page of HN</a> for a few hours, but that was expensive and resulted in lots of downtime.</p>
<p>If this was going to be a serious service that paying clients were relying on, I had to do much better.</p>
<h3>&#8220;Log Now, Process Later&#8221;</h3>
<p>At HubSpot, the analytics team has built an incredibly robust analytics pipeline that aggregates information from all of our 7000+ customers&#8217; websites. I talked to a few engineers who work on the system to see how it was built.</p>
<p>At a high level, we log every analytics request immediately into a log file. Then, there are separate processes that constantly chew through the log files, pulling out the data and saving it into our analytics database.</p>
<p>This ensures that we never lose any data &#8212; if something goes wrong with the processors or they get overwhelmed with a sudden burst of traffic, we keep on logging and simply spin up some new processors to chew through the logs faster and get everything up to date. Data is never lost because of a bug.</p>
<p>This separates the <em>serving</em> of our customers&#8217; websites from the actual <em>tracking</em> of that traffic. This allows us to serve the sites as soon as possible, and then process the analytics data asynchronously, so that visitors aren&#8217;t waiting for our analytics system before they can see the page. </p>
<p>Do as little as possible to serve the page, and do the rest asynchronously.</p>
<h3>The Speed/Reliability Tradeoff</h3>
<p>This all sounded great. It allowed for fast page load times with no need to hit a database at all during the request/response cycle. The only problem with it was that the processing of analytics data was slow.</p>
<p>While we never lost any data for our customers, it would take minutes &#8212; occasionally, hours &#8212; before the data our customers were seeing in their dashboard was in line with the actual traffic patterns on their websites. Chewing through logs and rotating them constantly was slow and surprisingly error prone, so our system was always a bit behind.</p>
<p><span style="color:#aaa">Again, I don&#8217;t actually work on these systems at HubSpot, so I can&#8217;t speak to their actual complexity, but this is just what I observed from talking to a few people and keeping an eye on some of our internal dev dashboards.</span></p>
<p>This is all in line with the trade-offs proposed in the <a href="http://en.wikipedia.org/wiki/CAP_theorem" target="_blank">CAP Theorem</a>. Conjectured in 2000 by a UC Berkeley professor, the theorem states that distributed computer system can only provide 2 of the 3 following things:</p>
<ol>
<li style="line-height: 20px"><strong>Consistency:</strong> data that shows up in one part of the system is immediately available to all other parts</li>
<li style="line-height: 20px"><strong>Availability:</strong> the system always responds to every request</li>
<li style="line-height: 20px"><strong>Partition tolerance:</strong> the overall system doesn&#8217;t lose data, even if parts of it fail</li>
</ol>
<p>HubSpot&#8217;s system is essentially focused on #2 &#038; #3. And this is in line with the business goals of the software: traffic and leads information is crucial for our customers &#8212; we can&#8217;t lost any of it &#8212; but our customers don&#8217;t necessarily need that data in real time. So we have developed a system that is slower, but reliable.</p>
<p>But it got me wondering &#8212; what if I conceded #3 in favor of #1? That is, I was willing to lose some data here and there if it meant I could report analytics to my customers in <a href="http://en.wikipedia.org/wiki/Real-time_computing#Criteria_for_real-time_computing" target="_blank">soft real-time</a>. What would that system look like?</p>
<h3>Message Queues</h3>
<p>In a stoke of impeccable timing, the CEO of <a href="http://beta.crashlytics.com/" target="_blank">Crashlytics</a> was scheduled to give a presentation called &#8220;<a href="http://www.meetup.com/TechinmotionBoston/events/76729932/?action=detail&#038;eventId=76729932" target="_blank">Scaling Crashlytics: Designing Web Backends for 100 Million Events per Day</a>&#8221; at the local Boston Tech meetup later that week.</p>
<p>I attended eagerly, and listened as he explained how his company uses RabbitMQ to process millions of events each day, and send those crash reports to their customers in real time.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/09/boston-tech-crashlytics.jpg" alt="Boston Tech meetup" class="aligncenter" width="500px" /></p>
<p>I had heard of RabbitMQ before, but it had sounded complicated and scary. But after his talk, I checked out the <a href="http://www.rabbitmq.com/tutorials/tutorial-one-python.html" target="_blank">well-written tutorials</a> and realized how powerful RabbitMQ &#8212; and message queuing in general &#8212; could be. </p>
<p>Essentially, RabbitMQ is an open-source <strong>M</strong>essage <strong>Q</strong>ueuing service. You can take a &#8220;message&#8221; (any arbitrary data), put it in a queue, and then have one or more &#8220;workers&#8221; that pulls messages from the queue and processes them &#8212; putting them in a database, for example.</p>
<p>RabbitMQ is written in Erlang &#8212; a language designed for fault-tolerant, ultra-reliable telecommunications networks. The CEO described how &#8212; in his experience &#8212; it had extremely low memory and processing requirements. One box could easily handle the volume of requests I was expecting.</p>
<p>But the best part about using RabbitMQ is how easily it scales. </p>
<p>Queues can support an unlimited number of workers, and each worker goes off and does its work independently of the other workers &#8212; they can be on totally different machines. This has a number of awesome benefits:</p>
<ul>
<li style="line-height: 20px"><strong>Tasks are done in parallel.</strong> Rather than doing 10 slow operations in a row, you can have 10 workers each doing the operation at the same time for a 10x speed increase.</li>
<li style="line-height: 20px"><strong>Workers are isolated.</strong> If there&#8217;s an unhandled exception while one of the workers is doing it&#8217;s thang, the other workers can keep chugging right along, pulling messages out of the queue as if nothing&#8217;s happened.</li>
<li style="line-height: 20px"><strong>Messages aren&#8217;t lost.</strong> If something goes wrong while a worker is processing a task, then that message gets rotated back into the queue and passed along to the next worker. The queue can even be setup so that if the machine it&#8217;s running on dies, the messages that were in the queue at the time can still be restored.</li>
<li style="line-height: 20px"><strong>The number of workers is flexible.</strong> If there&#8217;s a big burst of activity or you&#8217;re not processing through your queue fast enough, you simply bind more workers to the queue and your throughput will increase.</li>
</ul>
<p>For the analytics pipeline I&#8217;m building, these are all fantastic benefits, especially that last one. The fact that I can easily dial the number of workers up or down means I can start out small. I don&#8217;t need to have lots of machines running workers when there is little activity on the site. I just need one or two for most of the time, and then I can add more as the site grows over time, or if a sudden burst of activity starts to fill up the queue.</p>
<p>Using a message queuing design for my analytics pipeline means that the analytics processing and storage happens asynchronously, freeing up my web servers to focus exclusively on serving web pages. </p>
<p>By dividing up the services like this, it&#8217;ll be easier to work on, test, and scale each component of the project separately, in accordance with its own specific resource needs.</p>
<h3>A One-Off Project</h3>
<p>With all of its awesome benefits, you might think that RabbitMQ is hard to setup or configure. Fortunately, it&#8217;s not.</p>
<p>Last week, I was working on a project in the office where I needed to lookup several thousand companies&#8217; websites and run them through our Marketing Grader API. At first, I dashed off <a href="http://blog.hartleybrody.com/google-python/">a quick python script</a> that took the list of companies, looked up their websites and then ran the websites through Marketing Grader one at at time.</p>
<p>Twelve hours after it started running, the script was only about half way through the list when it stumbled on a weird character in one of the company names and crashed.</p>
<p>It dawned on me that the slow, potentially buggy API calls would work much better if they were setup as a message queue system. I setup some workers that would take a company name and lookup the website, and other workers that would take that website and look up the Marketing Grade. </p>
<p>If the API calls timed out, or returned some unexpected responses, a worker could be restarted gracefully without having to restart the entire process from the first company.</p>
<p><img src="http://blog.hartleybrody.com/wp-content/uploads/2012/09/rabbit-mq.png" alt="Dozens of workers processing a RabbitMQ queue" class="floatcenter" width="500px" /></p>
<p>With 12 workers running, my desktop got a little hectic, but the script ran through the full list in under an hour. It could have gone even faster if I had spun up more workers.</p>
<p>Using message queues to separate out each step of the process was not only much faster and more reliable, but also really simple to setup.</p>
<p>You can checkout the script I used here: <a href="https://github.com/hartleybrody/py/blob/master/get_inc_5000.py" target="_blank">get_inc_5000.py</a></p>
<h3>Asynchronize All The Things</h3>
<p>A well designed web application should do as little as possible to serve the visitor&#8217;s request, so that it can return a response quickly. Any processing, database hits or network calls that aren&#8217;t necessary for serving a response should be done asynchronously with a message queuing system like RabbitMQ.</p>
<p>And even outside the context of web applications, message queues allow multiple jobs to be run in parallel and are massively horizontally scalable. Whenever you find your code getting tripped up on a slow bottleneck, it&#8217;s worth thinking about whether it makes sense to pull that process out and run it asynchronously.</p>
<p>They don&#8217;t necessarily make sense for every task, but it&#8217;s a great tool to have in your tool belt, and one that I&#8217;m glad I&#8217;ve picked up.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/asynchronous/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Global Dominance: Olympics vs GDP</title>
		<link>http://blog.hartleybrody.com/olympics-data/</link>
		<comments>http://blog.hartleybrody.com/olympics-data/#comments</comments>
		<pubDate>Sat, 04 Aug 2012 19:30:01 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://hart.ly/?p=2084</guid>
		<description><![CDATA[Along with about 35 million other Americans, I&#8217;ve been watching the Olympics in primetime every night after work. And while NBC has done a notoriously bad job at keeping the production fair and balanced, it&#8217;s still pretty easy to tell that some countries are pulling in way more medals than others. Currently, the United States [...]]]></description>
				<content:encoded><![CDATA[<p><img src="http://hart.ly/wp-content/uploads/2012/08/olympic-rings.jpg" class="alignright" width="200px" alt="Olympi Rings" /> Along with about 35 million other Americans, I&#8217;ve been watching the Olympics in primetime every night after work. </p>
<p>And while NBC has done a <a href="http://www.salon.com/2012/08/01/ryan_seacrest_youve_been_replaced/" target="_blank">notoriously bad job at keeping the production fair and balanced</a>, it&#8217;s still pretty easy to tell that some countries are pulling in way more medals than others.</p>
<p>Currently, the United States has the most gold medals while China has the most overall medals and Great Britain is third in both categories. But these totals are changing every few hours, so <a href="http://en.wikipedia.org/wiki/2012_Summer_Olympics_medal_table" target="_blank">check out the latest numbers here</a>.</p>
<p>Seeing the same countries on the podium made me curious: are there patterns between the countries that bring home the most medals? </p>
<p>Specifically, if you controlled for the size of a country&#8217;s economy, would you be able to predict the number of medals they&#8217;d win? </p>
<p>Could Olympic prowess be a leading indicator of a country&#8217;s financial success? Or maybe it worked the other way, and a growing economy was a sign of increasing athletic competitiveness?</p>
<p>The questions were piling up and I needed to find answers.</p>
<p><span id="more-2084"></span>&#8212;</p>
<h3>Collecting Data</h3>
<p>I knew this wasn&#8217;t going to be as rigorous as an academic paper &#8212; it was just scratching an itch for me &#8212; so I started my data collection on Wikipedia. </p>
<p>I build a python scraper that pulled data from Wikipedia&#8217;s &#8220;Summer Olympics medal table&#8221; for every year <a href="http://en.wikipedia.org/wiki/1980_Summer_Olympics_medal_table" target="_blank">back to 1980</a>. I collected both the total number of medals, as well as the number of gold medals for each country in each year.</p>
<p>I decided to skip Winter Olympics since many countries are at a decided disadvantage because of their climate. The games of the Summer Olympics didn&#8217;t seem to favor any particular regions.</p>
<p>Also note that were Olympic boycotts in both <a href="http://en.wikipedia.org/wiki/1980_Summer_Olympics_boycott" target="_blank">1980</a> and <a href="http://en.wikipedia.org/wiki/1984_Summer_Olympics_boycott" target="_blank">1984</a>, so the data set had some holes.</p>
<p>Once I had that data, I needed a way to control for the size of a country&#8217;s economy. I needed time-series data, but I couldn&#8217;t find it on Wikipedia, so I turned to the World Bank instead. They had exactly what I needed: <a href="http://data.worldbank.org/indicator/NY.GDP.MKTP.PP.KD?order=wbapi_data_value_2005%20wbapi_data_value%20wbapi_data_value-last&#038;sort=desc" target="_blank">Real GDP for every country and year back to 1980</a>.</p>
<p>It took a bit of work to re-arrange the data in a way that I could plot it for each country over time, but once I had it all laid out in excel, I started making graphs.</p>
<h3>Results</h3>
<p>The raw numbers were hard to draw meaningful conclusions from &#8212; imagine a graph whose Y-axis has numbers in the teens as well as the tens of billions &#8212; so I converted everything to percentages and tried again.</p>
<p>For countries that occasionally won a medal or two, there was too much variance to really notice anything meaningful. </p>
<p>In an Olympics games, about 900 medals are awarded (300 of which are gold), so a country who picked up six medals one year and only three the next would see their total medal percent drop from 0.67% to 0.33%. However, most GDPs for countries in this range were way more consistent, fluctuating by only tenths of a percent.</p>
<p>But when you start looking at some of the bigger countries with more consistent medal winnings, some patterns emerge.</p>
<p>I originally imagined the percentage of gold and total medals would trend up or down for a given country over time, however it was fairly consistent, even across decades. </p>
<p>Unfortunately, this meant that it was hard to detect any interaction between GDP and Olympic dominance &#8212; with the usual caveat that correlation wouldn&#8217;t even imply causation anyways.</p>
<p>However, what I did notice was that some countries continually over-performed at the Olympics, while others continually under-performed. </p>
<p>By graphing the percentage of medals a country wins against their percentage of world GDP, it was easy to see which countries were more dominant athletically than they were economically, and vice versa.</p>
<p>Surprisingly, the <strong>United States</strong> has actually been under-performing at the Olympics, bringing home only 10%-15% of the medals, compared to our 25% of the world&#8217;s GDP. <img src="http://hart.ly/wp-content/uploads/2012/08/olympics-gdp-usa.png" /></p>
<p><strong>China</strong> has been performing just about as expected, bringing home more and more medals each year as their economy grows. <img src="http://hart.ly/wp-content/uploads/2012/08/olympics-gdp-china.png" /></p>
<p>Other countries to note were <strong>Australia</strong>, who has grown increasingly dominant at the Olympics while their economy has remained largely stagnant. <img src="http://hart.ly/wp-content/uploads/2012/08/olympics-gdp-australia.png" /></p>
<p>Also <strong>Kenya</strong>, who have consistently brought home about 1% of the medals despite having a teeny tiny economy. <img src="http://hart.ly/wp-content/uploads/2012/08/olympics-gdp-kenya.png" /> </p>
<h3>Further Research</h3>
<p>At this point, there&#8217;s still a lot than can be done with this data. For example, what if you also looked at trends in population, or land mass? Would larger countries bring home more medals, or is GDP more closely related to Olympic performance than size? </p>
<p>It would be cool to find some metric that seemed to trend closely with Olympic medals winnings. Then you could potentially make predictions about that metric based on how a country performs every 4 years, or conversely, predict a country&#8217;s medal winnings based on that metric.</p>
<p>But as you can imagine, the athleticism, determination and skill required for each Olympian to bring home a medal is largely determined by their own personal circumstances, and not necessarily those of their country in aggregate. </p>
<p><strong>What do you think, does this surprise you? </strong></p>
<p>You should download my collected data <a href="https://www.dropbox.com/s/2sd2isgqwrkhmu2/olympics-medals-gdp.xlsx" target="_blank">here</a> and <a href="https://twitter.com/hartleybrody" target="_blank">tweet me if you find anything interesting</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/olympics-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chick-fil-A, Boston and Tolerance</title>
		<link>http://blog.hartleybrody.com/tolerance/</link>
		<comments>http://blog.hartleybrody.com/tolerance/#comments</comments>
		<pubDate>Thu, 26 Jul 2012 01:44:44 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://hart.ly/?p=2082</guid>
		<description><![CDATA[Does real tolerance mean tolerating bigots? According to Wikipedia a bigot is (emphasis mine): a person obstinately or intolerantly devoted to his or her own opinions and prejudices; especially : one who regards or treats the members of a group (as a racial or ethnic group) with hatred and intolerance Chick-fil-A Today, Boston&#8217;s mayor &#8212; [...]]]></description>
				<content:encoded><![CDATA[<p>Does real tolerance mean tolerating bigots?</p>
<p>According to <a href="http://en.wikipedia.org/wiki/Bigotry" target="_blank">Wikipedia</a> a bigot is (emphasis mine):</p>
<blockquote><p>a person obstinately or intolerantly devoted to his or her own opinions and prejudices; especially : <strong>one who regards or treats the members of a group</strong> (as a racial or ethnic group) <strong>with hatred and intolerance</strong></p></blockquote>
<h3>Chick-fil-A</h3>
<p>Today, Boston&#8217;s mayor &#8212; Tom Menino &#8212; made quite a stir on the internet when <a href="http://www.boston.com/yourtown/news/downtown/2012/07/boston_mayor_thomas_m_meninos.html" target="_blank">a letter surfaced</a> that he had written to the President of the Chick-fil-A restaurant chain.</p>
<p>The story goes something like this: The President of Chick-fil-A, Mr. Dan Cathy, had recently <a href="http://www.bpnews.net/bpnews.asp?id=38271" target="_blank">conducted an interview with The Baptist Press</a> where he had espoused homophobic beliefs, saying (among other things) that</p>
<blockquote><p>&#8220;We are very much supportive of the family &#8212; the biblical definition of the family unit.&#8221;</p></blockquote>
<p>In response, Menino wrote <a href="http://www.boston.com/yourtown/news/downtown/2012/07/boston_mayor_thomas_m_meninos.html" target="_blank">an open letter</a> essentially saying that the Chick-fil-A franchise was no longer welcome in the city of Boston.</p>
<p>Now &#8212; let me be clear from the outset &#8212; I believe that any kind of discrimination is fucked up. And I think that most of my friends would agree.</p>
<p>But this piece has nothing to do with my personal opinion on gay rights, or anyone&#8217;s rights. Instead, I want to talk about tolerance.</p>
<p><span id="more-2082"></span><br />
<h3>Tolerance</h3>
<p>Some time ago, a good friend of mine was falling into a romantic relationship with someone that he had grown to care very much about. She was a smart girl from a great background and they made each other very happy.</p>
<p>One evening, they were talking about formalizing their relationship and being more than just friends, when she hesitated. &#8220;My parents would be really disappointed if I told them I was dating you&#8230; I mean, someone who wasn&#8217;t Jewish.&#8221;</p>
<p>He was taken aback. He couldn&#8217;t believe they would reject him simply because he didn&#8217;t share their religion. Here were very intelligent people actively discriminating against him because of their beliefs.</p>
<p>Did that really just happen?</p>
<h3>An Ideal World</h3>
<p>Every person holds their own opinion of how the world should be. But problems can arise when those idealistic worlds run contrary to someone else&#8217;s.</p>
<p>If I believe the world should be one way, and you believe it should be the exact opposite, then we both have two courses of action to choose between, in a sort of <a href="http://en.wikipedia.org/wiki/Prisoner%27s_dilemma" target="_blank">prisoner&#8217;s dilemma</a>. (Can you tell I was an econ major?)</p>
<p>We can either choose to try and correct the other person&#8217;s way of thinking, or we can choose to be tolerant of their beliefs and go about our business.</p>
<style>
table, td { border: 1px solid gray }
table { width:100% }
td { padding:5px }
.best{ border: 2px solid green }
.worst{ border: 2px solid red }
</style>
<table border="1px" cellpadding="5px" cellspacing="0px">
<tr>
<td></td>
<td colspan="4" style="text-align:center">
<h4>My Choices</h4>
</td>
</tr>
<tr>
<td rowspan="3">
<h4>Your Choices</h4>
</td>
<td>
        </td>
<td>
            I tolerate you
        </td>
<td>
            I persecute you
        </td>
</tr>
<tr> <!--third row--></p>
<td>
            You tolerate me
        </td>
<td class="best">
            me: <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  you <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
        </td>
<td>
            me: <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  you <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />
        </td>
</tr>
<tr> <!--fourth row--></p>
<td>
            You persecute me
        </td>
<td>
            me: <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  you <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
        </td>
<td class="worst">
            me: <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  you <img src='http://blog.hartleybrody.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />
        </td>
</tr>
</table>
<p>The problem is, if I choose to be tolerant and you choose to persecute, then I lose. And so, to correct for this, we as a society have come to make intolerance very taboo. </p>
<p>It&#8217;s extremely awkward now for someone to make a claim against a group of people. Some demographics are protected by stronger taboos than others &#8212; but in general &#8212; there is strong backlash whenever someone tries to publicly persecute a group of people.</p>
<p>This attempts to steer all players towards the most efficient outcome &#8212; where everyone is tolerant and can go about their business, free from any sort of persecution.</p>
<p>The problem is, when that backlash goes too far, we as a society actually end up moving to the least efficient outcome, where everyone is persecuting everyone. We end up fighting intolerance with intolerance.</p>
<p>If you say that I&#8217;m not welcome in your restaurant, and I say you&#8217;re not welcome in my city, who is really better off? No one.</p>
<p>As human beings, we try to form communities with other like minded people, since that&#8217;s where we feel most comfortable. But from within those communities, it&#8217;s very easy to lose perspective on other people who hold different ideals.</p>
<p>I&#8217;m certainly not advocating for intolerance, and I think it&#8217;s pretty indisputable that society would be better off if everyone was more tolerant of everyone else. </p>
<p>But fighting intolerance with more intolerance only escalates the feeling of superiority both groups hold, increasing the conflict.</p>
<blockquote><p>&#8220;Sorry but you don&#8217;t hold the right beliefs to operate in our city. Bye!&#8221;</p></blockquote>
<p>That seems pretty intolerant to me.</p>
<p>Now I admit, when I first saw the letter on Facebook, I got really excited and shared it on my wall. It seemed like all of my friends reposted it or liked it or supported it in some way. </p>
<p>Here was an icon of our city giving a big middle finger to people who are philosophically intolerant to many of my friends&#8217; lifestyles. It was cool to show support and do the right thing to fight intolerance.</p>
<p>But were we really fighting intolerance? Or perpetuating it? </p>
<p>Suddenly, I&#8217;m not so sure&#8230;</p>
<p>&#8212;</p>
<p>Now I admit that this is a bit of a knee jerk reaction to this particular situation, and I haven&#8217;t spent a ton of time formalizing this argument, so I&#8217;d love to hear your thoughts and feedback. Tolerance &#8212; by definition &#8212; deals with sensitive subjects, so let&#8217;s try extra hard to keep things civil and constructive.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/tolerance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Saving Your First Million Dollars</title>
		<link>http://blog.hartleybrody.com/first-million/</link>
		<comments>http://blog.hartleybrody.com/first-million/#comments</comments>
		<pubDate>Mon, 23 Jul 2012 05:49:30 +0000</pubDate>
		<dc:creator>hartleybrody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://hart.ly/?p=2076</guid>
		<description><![CDATA[A lot has been written on the topic of personal finance, but it all comes down to a fundamental fact: In our lives, we earn money, and we spend money &#8212; and in between, we accumulate money. Pretty obvious, right? So if we want to accumulate more money, we have to either earn more of [...]]]></description>
				<content:encoded><![CDATA[<p>A lot has been written on the topic of personal finance, but it all comes down to a fundamental fact: In our lives, we earn money, and we spend money &#8212; and in between, we accumulate money.</p>
<p>Pretty obvious, right? So if we want to accumulate more money, we have to either earn more of it, or spend less of it. Still with me?</p>
<h3>The Power of Wealth</h3>
<p>In my college economics classes, we rarely dealt with the topic of &#8220;money&#8221; directly, it was always just a worthless medium of exchange. People don&#8217;t really derive value from money itself, but from the things it helps them buy.</p>
<p>But in the real world, that&#8217;s not exactly true. Having a small fortune gives you peace of mind if you lose your job or want to take time off. It allows you to purchase things when you want, rather than having to bounce from pay check to pay check. And if you accumulate money for awhile, you can purchase big ticket items like a house or a car.</p>
<p>We all know that we <em>should</em> be saving money, but there are all sorts of reasons we don&#8217;t. </p>
<p>As a recent college graduate myself, I still vividly remember getting my first pay check and the feeling of seeing a few extra Gs in my bank account. I suddenly had all sorts of spending impulses.</p>
<p>I could go out for dinner every night. I could open a tab at the bar and put all of my friends drinks on it like a boss. I could get a new bike or a bunch of new clothes. </p>
<p>Fortunately, it was easy to rein in those impulses and put money aside &#8212; all without having to turn into an <a href="http://www.youtube.com/watch?v=Q-oA2usUdIw" target="_blank">obsessive penny pincher</a>. </p>
<p>Here&#8217;s how I do it.</p>
<p><span id="more-2076"></span></p>
<h3>Spend Smart</h3>
<p>The first thing that&#8217;s important to realize about saving money is that most people suck at it. That&#8217;s not just me and you, that&#8217;s your friends and your boss and your coworkers and maybe even your parents.</p>
<p>Fact is, the average American has a negative savings rate. And if you read the news, it seems like every week there&#8217;s some new financial scandal that hurts &#8220;average&#8221; Americans. </p>
<p>If you take your spending cues from the people around you every day, chances are you&#8217;ll get pulled towards a lifestyle of poor savings. Especially if you&#8217;re trying to punch above your weight class and regularly hang out with people who are older or more senior to you, and who probably make more money than you. If you spend as much as them, but make less income, I guarantee you&#8217;ll be heading down the wrong savings path.</p>
<p>If you want to save up your first million dollars, you need to commit to being far above average, and that means learning to say no when the people around you are buying lots of thing.</p>
<p>Now you might complain and say &#8220;But Hartley, I have this money that I worked so hard for. Don&#8217;t I <em>deserve</em> to spend it? Isn&#8217;t that what I <em>earned</em>?&#8221;</p>
<p>And my answer is &#8212; you&#8217;re absolute right! Find the things that you care about, and by all means, spend money on them. Life is short and you shouldn&#8217;t waste your early adult years feeling like a hermit just so you can save up a small fortune.</p>
<p>But in order to live a fulfilling life while still saving money, you need to cut spending aggressively on the things you are kinda &#8220;meh&#8221; on. </p>
<p>For me, I know that I&#8217;m not a huge foodie, so I&#8217;m super cheap with groceries and I avoid restaurants like the plague. I could probably afford my own place, but I share a small room in a great part of town, and I&#8217;m totally happy saving a few hundred dollars on rent each month.</p>
<p>If you actually sit down and look at every dollar you spent over the last month, you&#8217;ll find lots of places where you are casually spending $50 here or even $10 there that didn&#8217;t really make you happy. Do you really need that Netflix subscription, or would you pay less by renting 1 or 2 movies a month on iTunes? Are you really using that gym membership?</p>
<p>Those are perfect places to start cutting spending.</p>
<p>As I mentioned, personal finance all comes down to the money we make, the money we spend, and the money that&#8217;s accumulated in between. If you want to accumulate more money, you either need to make more, or spend less. That&#8217;s it.</p>
<p>I&#8217;ll probably write another post about ways to make more money if you really wanna hustle for it. But for now, start trying to find ways to decrease your spending, and you&#8217;ll already be thinking smarter than 90% of your friends.</p>
<h3>Saving The Right Way</h3>
<p>If you can find ways to cut $100 of spending each month, that&#8217;s fantastic. You&#8217;re already doing very well.</p>
<p>Now the trick is to make sure that you&#8217;re doing the right thing with that money, and not simply wasting it on something else. </p>
<p>For this, I&#8217;d highly recommend opening a savings account &#8212; or several savings accounts &#8212; with your bank. Personally, I use <a href="https://banking.ingdirect.com/savings/set_promo_cookie.vm?t=%9f%56%4c%66%6b%49%5a%55%6f%6a%9b%68%68%65%6a%66%63%65%6a%6f%66%62%6a%65%66%69%6b" target="_blank">ING Direct</a> because they have a great online banking interface, high interest rates, and it takes literally 15 seconds to setup a new savings account.</p>
<p>It&#8217;s important to put money aside in a separate savings account &#8212; rather than your main checking account &#8212; for several reasons. Note that I won&#8217;t say it&#8217;s because you earn higher interest with a savings account &#8212; the interest on most savings accounts barely keeps up with inflation, so don&#8217;t think that you&#8217;re actually &#8220;investing&#8221; when you use one. </p>
<p>The first reason to use a savings account is that it makes your savings harder to spend. The money is still there and you can get it if you need to in an emergency, but you can&#8217;t withdraw from an ATM or write checks against it (usually). This helps protect your hard work from sudden impulse purchases or regrettable late night spending decisions.</p>
<p>Using a separate savings account also gives you the benefit of being able to watch your savings grow over time. If you know that you&#8217;re being frugal and cutting costs, but all you see is a single nebulous checking account, it can be easy to lose motivation and slip into old habits. By breaking your savings out into their own separate account, you get to watch it grow over time. And if you&#8217;re a money nerd like me, that&#8217;s pretty exciting.</p>
<p><img src="http://hart.ly/wp-content/uploads/2012/07/ing-direct-accts.jpg" alt="ING Savings Accts" class="alignright" width="246px" /> It&#8217;s even more exciting when you set savings goals. ING Direct allows you to give each account a nickname, and I&#8217;ve labeled mine things like &#8220;Travel and Adventure&#8221; so that I know what I&#8217;m actually saving for in each account. </p>
<p>I know that when I get enough in that travel account, I get to reward myself by booking an awesome vacation that I know I&#8217;ve earned. I don&#8217;t have to feel bad about it since I&#8217;ve been saving regularly. It&#8217;s guilt free spending at it&#8217;s finest!</p>
<h3>Don&#8217;t Even Think About It</h3>
<p>So now you&#8217;ve cut your spending and maybe even come up with some savings goals, here&#8217;s the linchpin of this entire strategy: you need to automatically transfer a consistent amount of money to your various savings account each month.</p>
<p>Don&#8217;t tell me you&#8217;ll do it yourself. You won&#8217;t. You&#8217;ll forget, or you&#8217;ll find something you just had to spend it on, but you&#8217;ll &#8216;catch up&#8217; next month. And then you won&#8217;t.</p>
<p>Managing your money sucks, so the less time you have to spend doing it, the better. And if you can automate your ideal habits, you&#8217;re not only saving yourself time each month, you&#8217;re ensuring you stick with you plan, which is 95% of the battle.</p>
<p>If your paycheck comes on the 15th and 30th of each month, you should setup your savings account to automatically pull in money from that checking account on, say, the 1st and the 16th. That way the money is whisked off to your savings before you even think about spending it, and you can ensure you&#8217;ll always be saving, without even thinking about it.</p>
<p><span style="color:#aaa">Note that this assumes you have direct deposit setup with your employer &#8212; which you should. You&#8217;re not still going to the bank to deposit checks, are you?? </span></p>
<p><span style="color:#aaa">It also assumes the money arrives on time, every time. If your pay isn&#8217;t as consistent, then maybe wait a few extra days between when the check is expected to come and when the money is transferred to savings, to ensure your bank doesn&#8217;t start a transfer when the money&#8217;s not there yet.</span></p>
<p><span style="color:#aaa">Thanks to Jonathan Kim for pointing this out in the comments</span></p>
<p>Again, ING Direct rocks at this, making it super simple with their &#8220;Automatic Savings Plan&#8221;. (Have you still not <a href="https://banking.ingdirect.com/savings/set_promo_cookie.vm?t=%9f%56%4c%66%6b%49%5a%55%6f%6a%9b%68%68%65%6a%66%63%65%6a%6f%66%62%6a%65%66%69%6b" target="_blank">signed up for an account yet</a>??) <img src="http://hart.ly/wp-content/uploads/2012/07/ing-direct-auto-saving.jpg" alt="ING Automatic Savings Plan" width="245px" class="alignright" /></p>
<p>If you&#8217;re worried about running out of money, start with a very small amount. Maybe only $25 each transfer (ie $50/mo). But just get it going so that you get used to the system. </p>
<p>Over time, you can adjust the amount that&#8217;s transferred if you want to save more aggressively. But if not, that&#8217;s cool too. Just start somewhere.</p>
<p>In the words of some ancient Chinese philosopher dude:</p>
<blockquote><p>
A journey of a thousand miles begins with a single step.
</p></blockquote>
<p>Save a little bit now, and find ways to cut even more spending over time. As you watch your savings pile up, it becomes almost like a game. How much can you save?</p>
<p>&#8212;</p>
<p>So now you&#8217;ve found a way to cut spending and start accumulating more money each month. The next step is deciding what to do with that money once you&#8217;ve set it aside, but I&#8217;ll get to investing in another post.</p>
<p>Subscribe via email so you don&#8217;t miss it!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hartleybrody.com/first-million/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
