<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Michi Knows - Insights on the IT world by Michi Kono</title>
	
	<link>http://www.michikono.com</link>
	<description>Here, you will find 100% original articles related to one of two things: IT news or programming. I try to write as many good programming articles as I can, but as you can imagine, it is very hard coming up with original programming posts day after day. As such, the majority of the time, I cover IT business news. I try to refrain from simply summarizing, and I rarely post an article if I can?t find an interesting observation to make. For you programmers, I write about JavaScript, PHP, and MySQL the most. I try to post at least one article a day on weekdays.</description>
	<lastBuildDate>Thu, 21 Feb 2013 18:13:05 +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>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MichiKnows" /><feedburner:info uri="michiknows" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>34.03056</geo:lat><geo:long>-118.398043</geo:long><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><meta xmlns="http://pipes.yahoo.com" name="pipes" content="noprocess" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FMichiKnows" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FMichiKnows" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/MichiKnows" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FMichiKnows" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FMichiKnows" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><item>
		<title>Capybara error: undefined method `node_name’ for nil:NilClass</title>
		<link>http://feedproxy.google.com/~r/MichiKnows/~3/7Wh3ISqtEs4/</link>
		<comments>http://www.michikono.com/2013/02/21/capybara-error-undefined-method-node_name-for-nilnilclass/#comments</comments>
		<pubDate>Thu, 21 Feb 2013 18:13:05 +0000</pubDate>
		<dc:creator>Michi</dc:creator>
				<category><![CDATA[geeky]]></category>

		<guid isPermaLink="false">http://www.michikono.com/?p=1213</guid>
		<description><![CDATA[When trying to use click_button on a button in a form, if you get this error: undefined method `node_name' for nil:NilClass Check that the button is inside a form. As in, the following code will cause this error: HTML: &#60;form&#62;&#60;/form&#62; &#60;input type="submit" value="save" /&#62; Capybara: click_button "save" Moving the button to the inside of the [...]]]></description>
				<content:encoded><![CDATA[<p>When trying to use click_button on a button in a form, if you get this error:</p>
<p><code>undefined method `node_name' for nil:NilClass</code></p>
<p>Check that the button is inside a form. As in, the following code will cause this error:</p>
<p>HTML:</p>
<p><code>&lt;form&gt;</code><code>&lt;/form&gt;<br />
</code><code>&lt;input type="submit" value="save" /&gt;</code></p>
<p>Capybara:</p>
<p><code>click_button "save"</code></p>
<p>Moving the button to the inside of the form will fix the issue.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MichiKnows?a=7Wh3ISqtEs4:QoTKdKCJvas:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=7Wh3ISqtEs4:QoTKdKCJvas:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=7Wh3ISqtEs4:QoTKdKCJvas:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=7Wh3ISqtEs4:QoTKdKCJvas:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=7Wh3ISqtEs4:QoTKdKCJvas:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=7Wh3ISqtEs4:QoTKdKCJvas:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=7Wh3ISqtEs4:QoTKdKCJvas:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MichiKnows/~4/7Wh3ISqtEs4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.michikono.com/2013/02/21/capybara-error-undefined-method-node_name-for-nilnilclass/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.michikono.com/2013/02/21/capybara-error-undefined-method-node_name-for-nilnilclass/</feedburner:origLink></item>
		<item>
		<title>Format Date into yyyy-mm-dd hh:ii:ss Format in JavaScript</title>
		<link>http://feedproxy.google.com/~r/MichiKnows/~3/CzHwpLDEhlw/</link>
		<comments>http://www.michikono.com/2013/02/10/format-date-into-yyyy-mm-dd-hhiiss-format-in-javascript/#comments</comments>
		<pubDate>Sun, 10 Feb 2013 22:16:14 +0000</pubDate>
		<dc:creator>Michi</dc:creator>
				<category><![CDATA[geeky]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.michikono.com/?p=1202</guid>
		<description><![CDATA[This is a recurring thing I have to deal with. Here&#8217;s the code:]]></description>
				<content:encoded><![CDATA[<p>This is a recurring thing I have to deal with. Here&#8217;s the <a href="https://gist.github.com/michikono/4751269">code</a>:</p>
<p><script src="https://gist.github.com/michikono/4751269.js"></script></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MichiKnows?a=CzHwpLDEhlw:vLDWBl7TDZ0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=CzHwpLDEhlw:vLDWBl7TDZ0:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=CzHwpLDEhlw:vLDWBl7TDZ0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=CzHwpLDEhlw:vLDWBl7TDZ0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=CzHwpLDEhlw:vLDWBl7TDZ0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=CzHwpLDEhlw:vLDWBl7TDZ0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=CzHwpLDEhlw:vLDWBl7TDZ0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MichiKnows/~4/CzHwpLDEhlw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.michikono.com/2013/02/10/format-date-into-yyyy-mm-dd-hhiiss-format-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.michikono.com/2013/02/10/format-date-into-yyyy-mm-dd-hhiiss-format-in-javascript/</feedburner:origLink></item>
		<item>
		<title>How Amazing Features Can be a Waste of Time</title>
		<link>http://feedproxy.google.com/~r/MichiKnows/~3/C__WPz7XWF4/</link>
		<comments>http://www.michikono.com/2012/10/15/how-amazing-features-can-be-a-waste-of-time/#comments</comments>
		<pubDate>Mon, 15 Oct 2012 17:28:08 +0000</pubDate>
		<dc:creator>Michi</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[Startup-ing]]></category>

		<guid isPermaLink="false">http://www.michikono.com/?p=1188</guid>
		<description><![CDATA[Differentiation is another way of saying: define your own market. By doing this well, you can avoid the problem of unseating incumbents because they don&#8217;t exist or are significantly weaker. Why Most Features Aren&#8217;t About Differentiating You&#8217;ve got 5 seconds. Tell me how you&#8217;re better than the incumbent I am currently using. If your pitch to [...]]]></description>
				<content:encoded><![CDATA[<p>Differentiation is another way of saying: define your own market. By doing this well, you can avoid the problem of unseating incumbents because they don&#8217;t exist or are significantly weaker.</p>
<h3>Why Most Features Aren&#8217;t About Differentiating</h3>
<p>You&#8217;ve got 5 seconds. Tell me how you&#8217;re better than the incumbent I am currently using. If your pitch to me &#8212; as a customer, partner, or investor &#8212; is that your site has the most features: you&#8217;re screwed. Here&#8217;s why, from the perspective of each:</p>
<ul>
<li>Customers &amp; partners: Yes, but, who are you again? I don&#8217;t put my eggs in nests that might disappear tomorrow, even if the nest has a built-in heater.</li>
<li>Investor: So your company is a feature away from being destroyed?</li>
</ul>
<p>In the Internet Era, features are cheap. Big or small, a company can bang out a feature in a week or two and start testing it. You disagree because said company would &#8220;never&#8221; build that feature? Never say never. Innovative companies always surprise people. Hoping your competition doesn&#8217;t want free money on the table is tantamount to gambling, and there is a much safer, more logical way of approaching this problem.</p>
<p>So many &#8220;feature&#8221; companies (i.e., they&#8217;d just be a feature in a bigger company&#8217;s product) are born everyday. The criticism isn&#8217;t that these companies are doing something &#8220;easy.&#8221; <strong>The problem is that many startups use a specific superior product experience or feature as a key differentiator, without considering whether or not it helps them corner a new or different market.</strong> Being &#8220;better&#8221; isn&#8217;t enough.</p>
<h3>Same Thing, Different Optics</h3>
<p>Certain feature sets, if marketed right, completely change your target market. This is key. Let me say it again:</p>
<p><strong>Certain features put you in a different market.</strong></p>
<p>Think about this for a moment. Most all companies are chasing a specific market. 18-24 females. College students. People who like coffee. Couples. Widows. Canadians with houses.</p>
<p>Not all features are created equal. Most features just add further convenience or refinement (i.e., &#8220;single signon,&#8221; &#8220;AJAX uploading,&#8221; &#8220;mobile support.&#8221;) But these same features, with the right marketing, change who your audience is. Sometimes marketing isn&#8217;t even required.</p>
<p>Remember that cheeky nest/egg example from above? This would be like saying, &#8220;let&#8217;s build huts and go after people because people prefer huts over nests.&#8221;</p>
<h3>Why Incumbents Ignore Certain Features</h3>
<p>Like I said, some features change who a company&#8217;s customers are. In worst case scenarios, some features alienate your existing customers entirely (i.e., killing your existing revenue stream).</p>
<p>For example, your feature might be a free, ad-supported version of an existing model. A very famous site called OKCupid did exactly this a few years ago. Even today, this is what they&#8217;re known for. Why didn&#8217;t the other players in the market copy them? Because going free would mean changing their customers from their users (who pay a monthly fee) to advertisers (who pay for data and exposure). Yes, much like Facebook, OKCupid&#8217;s product is its users, and its customers are its advertisers (mmmm sweet, sweet data).</p>
<p>While the main differentiating feature, being free, is an easy feature to build, even to this day, incumbent sites like eHarmony and Match remain paid services. They are ultimately after different markets. You and I can intuitively see that there is likely a well-defined difference between the two markets of people willing and not willing to pay for dating (income, what they are looking for, age, etc.). It&#8217;s clear now that there was always two markets in the dating space, and OKCupid successfully cornered it using a simple marketing message.</p>
<p>The key for you and I is to understand and learn from this lesson: <strong>figure out what differentiators you introduce that give you unique access to a new or different market from incumbents.</strong></p>
<h3>Don&#8217;t Get Distracted</h3>
<p>In any given startup, there is probably a backlog of 100 features to choose from. And most of them are from customers. Think about it.</p>
<p>Customers ask for features.</p>
<p>These customers are asking you to pick <em>their</em> market. With each feature you work on, your are moving toward a given audience. If this is a market you don&#8217;t want, ignore the feature. A feature that doesn&#8217;t help you define, carve out, and keep a specific target market is a waste of time.</p>
<p>In some markets, usability is everything (mobile). In others, aesthetics (marketing). Yet again in others, speed (search engines). Maybe in another, depth of technical end points (APIs). And within these markets, there are niches with even finer requirements.</p>
<p><strong>Identify your core desired audience and build features only they yearn for.</strong> Everything else is a distraction.</p>
<h3>Feature != (does not equal) Technical</h3>
<p>A feature isn&#8217;t necessarily a boat load of programming. A &#8220;feature&#8221; is a marketable unit of software development. The complexity of that development is irrelevant. It can be as simple as a change in design, pricing, copy, or even name. Here are some examples:</p>
<ul>
<li>Pick an XXX domain for your Pinterest clone: bam! <a href="http://www.pinporn.com/">PinPorn</a> (NSFW). No difference in technical features from the original, but the site successfully corners its own market via community (the feature).</li>
<li>Want to be a <a href="http://mashable.com/2011/02/01/fab-groupon-gays/">Groupon for gay people</a>? Fab. (Another year later, they&#8217;ve exited their niche and become a mainstream fashion site.) You know how they did that? They built a sizable mailing list of the gay community from their original ideas to be a gay Facebook and/or Yelp. Fab&#8217;s differentiator? <a href="http://pandodaily.com/2012/02/26/why-content-favors-the-old-entrepreneur/">Good taste</a>, according to them.</li>
<li>Instagram&#8217;s killer feature was tight social integration (arguably pretty technical); yet Hipstamatic <a href="http://www.fastcompany.com/3002074/no-filter-how-hipstamatic-pivoted-flat-spin">came first</a>. Instagram brought easy sharing to a paid digital photo filter market that Hipstamatic defined.</li>
<li>And, of course, there&#8217;s Facebook: a MySpace for college students. The killer &#8220;feature&#8221; was that you had to have a &#8220;.edu&#8221; email address. Facebook probably would have perished in its early days without those 5 lines of code (maybe less).</li>
</ul>
<h3>The Real Meaning of Market Differentiation</h3>
<p>Recall my example about the free dating market. Rewind 10 years. Online dating was something you paid for. That was it. Maybe this is easy to recognize now, but this market dichotomy (free vs. paid) was not apparent until only recently.</p>
<p>When smart people ask you about your market differentiation, this is what they mean.<strong> </strong>They are asking you if you&#8217;ve found a market angle that existing players will gladly give up because they either don&#8217;t value it or can&#8217;t compete in it due to conflicting interests.</p>
<p>So next time you&#8217;re looking at a list of features to work on, ask yourself: <strong>&#8220;is this feature putting us in the market that we want to be in?&#8221;</strong></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MichiKnows?a=C__WPz7XWF4:S9hzk6Uqu8Y:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=C__WPz7XWF4:S9hzk6Uqu8Y:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=C__WPz7XWF4:S9hzk6Uqu8Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=C__WPz7XWF4:S9hzk6Uqu8Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=C__WPz7XWF4:S9hzk6Uqu8Y:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=C__WPz7XWF4:S9hzk6Uqu8Y:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=C__WPz7XWF4:S9hzk6Uqu8Y:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MichiKnows/~4/C__WPz7XWF4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.michikono.com/2012/10/15/how-amazing-features-can-be-a-waste-of-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.michikono.com/2012/10/15/how-amazing-features-can-be-a-waste-of-time/</feedburner:origLink></item>
		<item>
		<title>Facebook is okay with hurting their developers</title>
		<link>http://feedproxy.google.com/~r/MichiKnows/~3/uVih0vSgXdk/</link>
		<comments>http://www.michikono.com/2012/03/22/facebook-is-okay-with-hurting-their-developers/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 03:27:22 +0000</pubDate>
		<dc:creator>Michi</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.michikono.com/?p=1153</guid>
		<description><![CDATA[Update: Only two weeks later, all of the user decline figures are far worse than I had originally stated (e.g., Band Page is down to 4M users from 31M!) Facebook just seriously injured their own app developer ecosystem, and they&#8217;re poised to finish it off. And they did it on purpose. Recently, Facebook announced that [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: left;"><em>Update: Only two weeks later, all of the user decline figures are far worse than I had originally stated (e.g., Band Page is down to 4M users from 31M!)</em></p>
<p style="text-align: left;">Facebook just seriously injured their own app developer ecosystem, and they&#8217;re poised to finish it off. And they did it on purpose.</p>
<p>Recently, Facebook announced that they would remove the <a href="http://techcrunch.com/2012/02/29/death-of-the-facebook-default-landing-tab/" target="_blank">default landing tab for Facebook Pages</a>. They did this while simultaneously introducing Timeline for Pages. Most people probably aren&#8217;t going to miss those &#8220;like gate&#8221; pages where users were asked to like the brand&#8217;s page. The move makes sense for Facebook as it forces brands to spend money on the new Facebook ad units that have embedded likes (see below). Brands are understandably upset: getting likes means spending money.</p>
<p><img class="aligncenter size-full wp-image-1154" title="Facebook Social Ad" src="http://www.michikono.com/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-7.24.12-PM.png" alt="" width="249" height="308" /></p>
<p><strong>The effects were immediate to one audience.</strong> The real doom-and-gloom story is around app developers. Facebook made this announcement at the start of this month. Since then, some of Facebook&#8217;s biggest apps have taken a nose dive on traffic. How big? A good example of this is <a href="http://www.bandpage.com/" target="_blank">Band Page</a>, which gave artists cool, interactive fan pages with embedded music/videos, rather than the boring old wall. Facebook announced these changes roughly at the start of March. As you can see below, Band Page lost roughly 1/4 of their users (6 MILLION!) in a period of 15 days (yes, the chart is a little weird to read).</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1160" title="Band Page MAU" src="http://www.michikono.com/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-7.56.56-PM.png" alt="" width="500" height="310" /></p>
<p>And this will only continue as more pages transition to the new format (10 more days until it&#8217;s mandatory).</p>
<p>The &#8220;default landing tab&#8221; was how many, many apps got their traffic on Facebook. The default tab was the first thing new users saw when they visited a brand&#8217;s page. This was a way for the page to &#8220;message&#8221; themselves to new potential customers, and it was very popular for brands to spend money on these apps.</p>
<p><strong>Unfortunately, that party is over.</strong></p>
<p>Check out this comparison on how else the new change hurt an app like Band Page. Here&#8217;s a &#8220;before&#8221; of Taylor Swift&#8217;s page, which has yet to convert to the new format:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1155" title="Taylor Swift's band page" src="http://www.michikono.com/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-7.31.38-PM.png" alt="" width="727" height="746" /></p>
<p>Notice how it lets you play the music straight from the page and links to their iTunes store (links like this are not allowed on Timelines, btw)? Notice how it &#8220;lives&#8221; in Taylor Swift&#8217;s page as part of a seamless experience? See how you can see a quick list of all the apps the page has?</p>
<p>Let&#8217;s compare&#8230;</p>
<p>Snoop Dogg recently updated his page to use Timeline.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1158" title="Snoops page" src="http://www.michikono.com/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-7.29.15-PM.png" alt="" width="850" height="741" /></p>
<p>Wait. Where&#8217;s the link to Band Page? Oh, I found it under that little &#8220;2&#8243; to the right of his &#8220;Snoopermarket&#8221; (that&#8217;s cute) section&#8230;</p>
<p><a href="http://www.michikono.com/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-7.46.59-PM.png"><img class="aligncenter size-full wp-image-1159" title="Hidden app button" src="http://www.michikono.com/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-7.46.59-PM.png" alt="" width="522" height="259" /></a></p>
<p>Check out the installed Band Page app look and feel:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1156" title="Snoop Dogg's Band Page" src="http://www.michikono.com/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-7.29.44-PM.png" alt="" width="844" height="742" /></p>
<p>What? Where am I? Where&#8217;s his page? That white space you see is exactly as it appears. The app is sitting alone off in its own area.</p>
<p><strong>It might as well live on Snoop&#8217;s own website</strong>, and I imagine this is exactly the direction many brands will take as this becomes the norm for Facebook apps.</p>
<p>How much does all this hurt these apps? Check out the biggest losers in the <a href="http://www.appdata.com/gainers/week?losers=1" target="_blank">weekly app ranking charts</a>:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1157" title="Biggest loser apps" src="http://www.michikono.com/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-7.04.07-PM.png" alt="" width="272" height="607" /></p>
<p>It is the same story with every major app: stagnated growth in early March followed by a continuous and very steep decline as the month continued. All that jazz about the Ticker and Open Graph hasn&#8217;t been enough to stop this decline. I fear what will happen April 1.</p>
<p>Page apps are getting destroyed! This explains the recent shift for Wildfire (<a href="http://www.marketwatch.com/story/wildfire-announces-new-capabilities-to-optimize-new-facebook-mobile-experience-2012-02-29" target="_blank">reference</a>) and Buddymedia (<a href="http://www.marketwatch.com/story/buddy-media-announces-brighter-option-acquisition-adds-paid-advertising-solution-to-social-enterprise-software-suite-2012-02-27" target="_blank">reference</a>) to becoming Facebook Ad aggregators. These two companies built an empire by being the go-to solution for Page apps and now they&#8217;re running away. At least Facebook notified these guys.</p>
<p><strong>Facebook is out to kill page apps</strong>, albiet slowly and only after suffocating the ecosystem so the loudest and most deep-pocketed players move to greener pastures (see above two examples). Developers beware. Profile apps suffered a similar slow strangulation followed by a sudden death. When profile apps were killed, we got just over 60 days notice (announced as a footnote <a href="https://developers.facebook.com/blog/post/402/" target="_blank">Aug 19, 2010</a> and officially removed <a href="https://developers.facebook.com/blog/post/415/" target="_blank">Nov 3, 2010</a>).</p>
<p>IPO-Facebook needs to make money, and if there&#8217;s companies eating their lunch, don&#8217;t expect them to sit back anymore.</p>
<p><strong>After all, Timeline is all about hurting Twitter.</strong> Let&#8217;s see, it:</p>
<ul>
<li>Decreases the ability of &#8220;doing stuff&#8221; via apps (e.g., self-maintaining content)</li>
<li>Makes it more embarrassing for a brand to not actively post updates since their page starts off as a wasteland. Thus, it&#8230;</li>
<li>Increases the importance of providing frequent updates and engaging your fans</li>
<li>Makes it easier to see who&#8217;s interacting with a page</li>
</ul>
<p><strong>Page apps became a casualty because they discouraged page owners from using Facebook like Twitter. </strong>Previously, brands could hide crappy walls by having cool apps and a nice splash page with a &#8220;Coupon for a like&#8221; message. Those days are gone. And Facebook did it on purpose. It&#8217;s probably for the best, but as a developer, it still hurts to think about all the blood, sweat, and tears that went into building those amazing Page Apps.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MichiKnows?a=uVih0vSgXdk:j2PuxrrkQJU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=uVih0vSgXdk:j2PuxrrkQJU:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=uVih0vSgXdk:j2PuxrrkQJU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=uVih0vSgXdk:j2PuxrrkQJU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=uVih0vSgXdk:j2PuxrrkQJU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=uVih0vSgXdk:j2PuxrrkQJU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=uVih0vSgXdk:j2PuxrrkQJU:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MichiKnows/~4/uVih0vSgXdk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.michikono.com/2012/03/22/facebook-is-okay-with-hurting-their-developers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.michikono.com/2012/03/22/facebook-is-okay-with-hurting-their-developers/</feedburner:origLink></item>
		<item>
		<title>Three Analogies for Pitching Your Startup Right</title>
		<link>http://feedproxy.google.com/~r/MichiKnows/~3/Rw-LdR_JNF0/</link>
		<comments>http://www.michikono.com/2012/03/01/three-analogies-for-pitching-your-startup-right/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 02:58:30 +0000</pubDate>
		<dc:creator>Michi</dc:creator>
				<category><![CDATA[Startup-ing]]></category>
		<category><![CDATA[pitching]]></category>

		<guid isPermaLink="false">http://www.michikono.com/?p=1142</guid>
		<description><![CDATA[Below are three analogies on how to prepare and pitch your startup better. TLDR: Don&#8217;t focus on being right. Don&#8217;t rush the sale. Find believers. I recently got my startup funded. It was an extremely, extremely challenging exercise. Today&#8217;s post is short; I&#8217;ll save the funding journey for another time. Today, I wanted to talk [...]]]></description>
				<content:encoded><![CDATA[<p><em>Below are three analogies on how to prepare and pitch your startup better.</em></p>
<p><strong>TLDR: Don&#8217;t focus on being right. Don&#8217;t rush the sale. Find believers.</strong></p>
<p>I recently got my startup funded. It was an extremely, extremely challenging exercise. Today&#8217;s post is short; I&#8217;ll save the funding journey for another time. Today, I wanted to talk about pitching. I&#8217;m going to focus on three big, often overlooked issues.</p>
<h3>1. Friend-speak: &#8220;That&#8217;s an awesome idea!&#8221; =&gt; &#8220;Good luck, bro.&#8221;</h3>
<p>Friends tell you what&#8217;s wrong with your idea, but they often say it nicely. Listen to your friends <em>carefully</em>, and recognize that &#8220;That&#8217;s a cool idea, but what about blah-blah?&#8221; is a veiled criticism of your idea. Listen and understand their concerns. A good pitch patches up these holes before they&#8217;re even asked.  Often, when an idea is criticized, it&#8217;s natural to want to be defensive. It&#8217;s important to take criticism as something to solve for, not something to &#8220;be right&#8221; about. Ok here&#8217;s the analogy:</p>
<blockquote><p>You&#8217;re a pirate. You&#8217;re practice fighting with your buddy pirates when they accidentally shoot a hole through your hull. But you&#8217;re smart so you win the argument with them that there is in fact NOT a hole there (Uhhhh). You decide to go out and challenge some Brits to a battle to the death without first addressing the damage your buddies left on your idea &#8212; er, I mean &#8212; ship. Oops!</p></blockquote>
<h3>2. You need more time to sell</h3>
<p>I haven&#8217;t pitched that many people specifically to get money (a lot of pitches were over partnerships), but when I felt rushed there wasn&#8217;t a second meeting. When you are trying to convince somebody to give you &#8212; a nobody &#8212; enough money to buy a few cars (or a house), they need time to <em>digest</em> things. Here&#8217;s the analogy:</p>
<blockquote><p>Your startup is like a restaurant. First you lure in a customer to try out your food. Once inside, you serve your customer what they are going to eat. It&#8217;s a <em>game changing</em> meal, so they&#8217;re naturally skeptical. They start to nibble on it. Maybe it&#8217;s good. Maybe it&#8217;s not. But you&#8217;re in a hurry so you jam the food down their throat, ask for money, and remind them to leave a good review on Yelp. They throw up and get major indigestion.</p></blockquote>
<p>Like with any good meal, make sure you have a full hour to pitch. Your pitch should be 30 minutes <em><span style="text-decoration: underline;"><strong>max</strong></span></em>. Leave 30 minutes for questions (which will be sprinkled throughout your presentation).</p>
<h3>3. The Crazy Idea Train needs passengers</h3>
<blockquote><p>You&#8217;re the conductor of the Crazy Idea Train. You built it, actually. It&#8217;s a little rocky, but it&#8217;s speeding along! But there&#8217;s no passengers. Your friends say they&#8217;ll get on the train later. Strangers say you need to pay them money for them to get on board (it looks really ghetto and unstable, after all). And nobody <em>really</em> knows where it&#8217;s headed. Maybe it&#8217;s going to Billion Dollar Land; maybe its going to Unemployment Mountain. You think it&#8217;s the former. But it looks like most people believe it&#8217;s the latter.</p></blockquote>
<p>I&#8217;ve thought about this a lot, and I&#8217;ve decided that this is actually <em>super duper </em>important not just from an investor&#8217;s point of view, but from a founder&#8217;s point of view. If you can&#8217;t convince <em>one person</em> to join your Crazy Idea Train, then is it really a good idea? Finding a co-founder is social validation that your Crazy Idea has legs. Without this, investors are left to imagine the worst.</p>
<p>I&#8217;ve also heard cases of people unsuccessfully <em>looking</em> for co-founders. Again, this to me is a sign of a crappy idea or worse. There&#8217;s a lot of reasons why somebody would be unable to find a co-founder, and most of them are bad signs. Are you arrogant and un-friendly? Do you seem untrustworthy? Do others have no confidence in your ability? Are you a terrible leader? Are you all talk? Are you no fun to be around? Do you kill kittens for entertainment? Maybe. Maybe not.</p>
<p>Your number one job as a founder is to sell the company to future investors, acquirers, and employees. If you suck at this, that&#8217;s a death sentence. Start with selling to a co-founder.</p>
<h3>Summing it up</h3>
<p><strong>Don&#8217;t focus on being right. <strong>Don&#8217;t rush the sale.</strong> Find believers.</strong></p>
<p><em>Bonus pro-tip: make sure your lawyer doesn&#8217;t put your cell phone number in the SEC filings. Yeah, that happened.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MichiKnows?a=Rw-LdR_JNF0:tWUzjuG7R3w:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=Rw-LdR_JNF0:tWUzjuG7R3w:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=Rw-LdR_JNF0:tWUzjuG7R3w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=Rw-LdR_JNF0:tWUzjuG7R3w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=Rw-LdR_JNF0:tWUzjuG7R3w:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=Rw-LdR_JNF0:tWUzjuG7R3w:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=Rw-LdR_JNF0:tWUzjuG7R3w:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MichiKnows/~4/Rw-LdR_JNF0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.michikono.com/2012/03/01/three-analogies-for-pitching-your-startup-right/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.michikono.com/2012/03/01/three-analogies-for-pitching-your-startup-right/</feedburner:origLink></item>
		<item>
		<title>Adding a Centralized Event Dispatcher on Backbone.js</title>
		<link>http://feedproxy.google.com/~r/MichiKnows/~3/d_nQ_JDMucg/</link>
		<comments>http://www.michikono.com/2012/01/11/adding-a-centralized-event-dispatcher-on-backbone-js/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 03:29:28 +0000</pubDate>
		<dc:creator>Michi</dc:creator>
				<category><![CDATA[geeky]]></category>
		<category><![CDATA[backbonejs]]></category>
		<category><![CDATA[coffeescript]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.michikono.com/?p=1127</guid>
		<description><![CDATA[This article contains my solution to adding a simple global event dispatcher to Backbone. It should also help noobies (myself included) understand how Backbone events work (which has one big gotcha). Sharing Events = Global Dispatcher Today, I came across a fairly mundane &#8211; and probably common &#8211; problem: I have two views that need [...]]]></description>
				<content:encoded><![CDATA[<p>This article contains my solution to adding a simple global event dispatcher to Backbone. It should also help noobies (myself included) understand how Backbone events work (which has one big gotcha).</p>
<h3>Sharing Events = Global Dispatcher</h3>
<p>Today, I came across a fairly mundane &#8211; and probably common &#8211; problem: I have two views that need to talk to each other. An example for this would be when you have a status bar in one corner that gets updated when a user completes an action in another area. It turns out that Backbone (as far as I can tell) does not support this use case very well out of the box. Well, it does: it expects you to build that yourself.</p>
<p>Backbone supports a model where you publish and subscribe to things happening in your views/models (commonly known as an &#8220;<a href="http://en.wikipedia.org/wiki/Event_dispatcher" target="_blank">event dispatcher</a>&#8220;). For example, you can make your application do stuff when a user clicks on something or if a model attribute changes. The native solution localizes these events (probably a good thing) to the model/view that you&#8217;re working with. This works for simple stuff, but when you need it in other parts of your application, things break down. The short answer is that you need to build a global event dispatcher A.K.A. global event &#8220;hub.&#8221; Everything publishes (&#8220;trigger&#8221;) and listens (&#8220;bind&#8221;) to events from this object.</p>
<p>This is a common pattern. In fact, I found two solid articles on this topic. The first explains in detail why you <a href="http://lostechies.com/derickbailey/2011/08/28/dont-execute-a-backbone-js-route-handler-from-your-code/" target="_blank">need an event dispatcher</a>. The second shows you how to make the dispatcher <a href="http://devlicio.us/blogs/mike_nichols/archive/2011/10/20/backbone-events-and-aggregator-update.aspx" target="_blank">natively accessible</a> by all of your Backbone classes.</p>
<h3>Event Dispatcher Gotcha: Native Events</h3>
<p>However, I felt both solutions weren&#8217;t quite there. The first forces you to pass around an Event object everywhere you need it. This is nice from a decoupling standpoint, but highly error prone. The second solution is nice, but makes the caller oblivious to the global event namespace they are triggering/binding to. This is dangerous because Backbone has native generic events that are fired when certain things happen. For example, when you edit a Model, it automatically fires a &#8220;change&#8221; event into its event dispatcher (which bubbles up to its Collection too). This means if that dispatcher was global, every object would see a &#8220;change&#8221; firing every time every Model changed. Not good.</p>
<h3>Goals</h3>
<p>I came up with my own solution that accomplishes three main goals:</p>
<ol>
<li>Retain native Backbone event triggering/binding</li>
<li>Allow the developer to trigger/bind to global events</li>
<li>Not require the developer to pass things around</li>
</ol>
<h3>Solution Code</h3>
<p><em>(If you can&#8217;t read CoffeeScript, just use this <a href="http://js2coffee.org/" target="_blank">converter</a> to convert it back to JavaScript)</em></p>
<p>The following (very simple) code modifies your Backbone definition to attach the global dispatcher to all objects. The dispatcher is easily accessible from any Model, Route, View, or  Collection through the <strong>global_dispatcher</strong> parameter. I thought about having it trigger events to the local dispatcher as well, but I decided that keeping them fully separate was in everybody&#8217;s best interest (to prevent events from accidentally colliding):</p>
<script src="https://gist.github.com/1597793.js?file=backbone_extension.coffee"></script><noscript><pre><code class="language-coffeescript coffeescript"># centralized global_dispatcher object added to all Backbone Collection, Model, View, and Router classes
(-&gt;
  return if this.isExtended
  # attaching the Events object to the dispatcher variable
  dispatcher = _.extend({}, Backbone.Events, cid: &quot;dispatcher&quot;)
  _.each [ Backbone.Collection::, Backbone.Model::, Backbone.View::, Backbone.Router:: ], (proto) -&gt;
    # attaching a global dispatcher instance
    _.extend proto, global_dispatcher: dispatcher
)()</code></pre></noscript>
<h3>Example Code</h3>
<p>The next section is a simple class I wrote that will demonstrate how these events work. I am defining a simple Collection and a Model. Note that I named the global and local events the SAME. This was to help demonstrate that the namespaces are in fact completely separate (as in, just because they are named the same doesn&#8217;t mean a local event will ever trigger a global event with the same name).</p>
<script src="https://gist.github.com/1597793.js?file=classes.coffee"></script><noscript><pre><code class="language-coffeescript coffeescript"># See http://www.michikono.com/2012/01/11/adding-a-centralized-event-dispatcher-on-backbone-js/ for an explanation

class Test extends sBackbone.Model

  initialize: () -&gt;
    this.global_dispatcher.bind('model_custom_action', () -&gt;
        console.log('GLOBAL TRIGGERED: test model custom action')
    )
    this.bind('model_custom_action', () -&gt;
        console.log('TRIGGERED: test model custom action')
    )

  trigger_stuff: () -&gt;
    console.log('triggering model')
    this.trigger('model_custom_action')
    this.global_dispatcher.trigger('model_custom_action')


class TestCollection extends sBackbone.Collection
  model: Test

  initialize: () -&gt;
    this.global_dispatcher.bind('collection_custom_action', () -&gt;
        console.log('GLOBAL TRIGGERED: test collection custom action')
    )
    this.bind('collection_custom_action', () -&gt;
        console.log('TRIGGERED: test collection custom action')
    )

    this.global_dispatcher.bind('model_custom_action', () -&gt;
        console.log('GLOBAL TRIGGERED inside Collection: test model custom action')
    )

    this.bind('model_custom_action', () -&gt;
        console.log('TRIGGERED inside Collection: test model custom action')
    )

  trigger_stuff: () -&gt;
    console.log('triggering collection')
    this.trigger('collection_custom_action')
    this.global_dispatcher.trigger('collection_custom_action')
</code></pre></noscript>
<p>The following snippet illustrates triggering the events attached to the Collection. Note that we add a Model into this collection (which has no impact on the output). The trigger_stuff method triggers both a local and global event (in that order). The output shows that the events were picked up in the order fired (local, then global). <strong>Note that the Collection also listens to the &#8220;model_custom_action&#8221; event</strong>, which coincides with an event the Model triggers. This is very important.</p>
<script src="https://gist.github.com/1597793.js?file=trigger_collections.coffee"></script><noscript><pre><code class="language-coffeescript coffeescript"># Trigger both the local and global event bindings for the collection

# Outputs:
#  triggering collection
#  TRIGGERED: test collection custom action
#  GLOBAL TRIGGERED: test collection custom action

collection = new TestCollection()
# adding an empty, but fully valid Model instance
collection.add()
collection.trigger_stuff()
</code></pre></noscript>
<p>The order of operations looks like this:</p>
<ol>
<li>Fire a local event</li>
<li>The Collection picks it up</li>
<li>END OF FIRST EVENT</li>
<li>Fire global event</li>
<li>The Collection&#8217;s globally attached event handler picks it up</li>
<li>END OF SECOND EVENT</li>
</ol>
<p>The next snippet shows what happens when you fire an event on a Model inside a Collection. It is also why I decided to keep things separate. This is a little hairy, so pay special attention.</p>
<script src="https://gist.github.com/1597793.js?file=trigger_model.coffee"></script><noscript><pre><code class="language-coffeescript coffeescript"># Trigger both the local and global event bindings for the model

# Outputs:
#  triggering model
#  TRIGGERED: test model custom action
#  TRIGGERED inside Collection: test model custom action
#  GLOBAL TRIGGERED inside Collection: test model custom action
#  GLOBAL TRIGGERED: test model custom action

collection = new TestCollection()
# adding an empty, but fully valid Model instance
collection.add()
# getting the just-added instance
instance = collection.at(0)
# trigger an event on the Model
instance.trigger_stuff()
</code></pre></noscript>
<p>The order of operations looks like this:</p>
<ol>
<li>Fire a local event</li>
<li>The Model picks it up</li>
<li>The Collection picks it up since all events in children bubble up</li>
<li>END OF FIRST EVENT</li>
<li>Fire global event</li>
<li>The Collection&#8217;s globally attached event handler picks it up</li>
<li>The Model&#8217;s globally attached event handler picks it up</li>
<li>END OF SECOND EVENT</li>
</ol>
<p>Notice that in step #6, the Collection&#8217;s binding fires BEFORE the Model&#8217;s. This is key.</p>
<p>Step #3 fires because there is a LOCAL binding to the &#8220;model_custom_action&#8221; event in the Collection. The local binding is reacting to an event triggered in the child Model&#8217;s local event dispatcher. In other words, any event triggered from the local event dispatcher in a Model will bubble up to the Collection&#8217;s local event dispatcher and be otherwise indistinguishable from events triggered directly from that Collection.</p>
<p>Step #6, however, is different. That event did NOT originate from the child model&#8217;s local event dispatcher. Instead, it is reacting to the global bindings, which happen to share the same name as the event we saw earlier in step #3. Because it didn&#8217;t bubble up, the events are being processed in the order they were bound (via the bind() function). The Collection was defined before the Model, thus, the Collection&#8217;s global binding fires first.</p>
<p>In this last snippet, we demonstrate how Models behave when not inside a Collection.</p>
<script src="https://gist.github.com/1597793.js?file=trigger_model_without_collection.coffee"></script><noscript><pre><code class="language-coffeescript coffeescript"># Trigger event bindings for a model not in a collection

# Outputs:
#  triggering model
#  TRIGGERED: test model custom action
#  GLOBAL TRIGGERED: test model custom action

instance = new Test
instance.trigger_stuff()
</code></pre></noscript>
<ol>
<li>Fire a local event</li>
<li>The Model picks it up</li>
<li>END OF FIRST EVENT</li>
<li>Fire global event</li>
<li>The Model&#8217;s globally attached event handler picks it up</li>
<li>END OF SECOND EVENT</li>
</ol>
<p>This is very straight forward if you managed to follow the last example. <em>To get additional clarity, you may want to try renaming the events in the above class and re-run the examples.</em></p>
<p>By having the global dispatcher separate, you can consciously decide when an event should be &#8220;public,&#8221; as well as not clobber any existing Backbone functionality. Backbone is still really young (pre 1.0!), so I wanted to avoid using any solution that might break if they changed the internals. Also, completely preserving the behavior of event bubbling for Model-Collections is important to future proof my hack.</p>
<p>I hope this is useful for all of your Google-visitors!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MichiKnows?a=d_nQ_JDMucg:2XcXZPz5T7s:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=d_nQ_JDMucg:2XcXZPz5T7s:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=d_nQ_JDMucg:2XcXZPz5T7s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=d_nQ_JDMucg:2XcXZPz5T7s:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=d_nQ_JDMucg:2XcXZPz5T7s:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=d_nQ_JDMucg:2XcXZPz5T7s:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=d_nQ_JDMucg:2XcXZPz5T7s:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MichiKnows/~4/d_nQ_JDMucg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.michikono.com/2012/01/11/adding-a-centralized-event-dispatcher-on-backbone-js/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://www.michikono.com/2012/01/11/adding-a-centralized-event-dispatcher-on-backbone-js/</feedburner:origLink></item>
		<item>
		<title>What Agile is NOT</title>
		<link>http://feedproxy.google.com/~r/MichiKnows/~3/abgajWYuFgU/</link>
		<comments>http://www.michikono.com/2012/01/11/what-agile-is-not/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 17:41:01 +0000</pubDate>
		<dc:creator>Michi</dc:creator>
				<category><![CDATA[Startup-ing]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[dumb ideas]]></category>

		<guid isPermaLink="false">http://www.michikono.com/?p=1120</guid>
		<description><![CDATA[Agile Will NOT Make People Work Faster People will work just as slow or fast as before. It is not a miracle drug. Agile DOES ensure people are working on the stuff that matters at that particular moment. Which leads to the next point&#8230; Agile Does NOT Mean You Can Change Your Mind All Day Long and [...]]]></description>
				<content:encoded><![CDATA[<h3>Agile Will NOT Make People Work Faster</h3>
<p>People will work just as slow or fast as before. It is not a miracle drug. <strong>Agile DOES ensure people are working on the <em>stuff that matters</em></strong> at that particular moment. Which leads to the next point&#8230;</p>
<h3>Agile Does NOT Mean You Can Change Your Mind All Day Long and Still Ship on Time</h3>
<p>If you change your mind that the product should do X instead of Y, you may have to throw away code. This is a fact of life. Agile DOES encourage making key decisions at the last possible moment so that the cost of change is minimized. <strong>Agile (a la retrospectives) exposes why or how the deadline was missed</strong> and how costly bad decisions were.</p>
<h3>Agile is NOT a Better Way to Manage Down</h3>
<p>Yes, there are lots of little tasks now. And yes, they are all prioritized and bite-sized so it&#8217;s easier to micromanage, right? But you&#8217;ve missed the point. Agile let&#8217;s the engineers tell the managers what is going on. <strong>Agile IS a way to manage expectations (e.g., &#8220;managing up&#8221;)</strong>.</p>
<h3>Bonus Non-Issue: &#8220;We Need to Focus on How It Will Scale&#8221;</h3>
<p>I&#8217;ve heard this a lot. It doesn&#8217;t matter (and if you disagree, then you probably aren&#8217;t ready for Agile). Agile is about making stuff that works &#8211; right now &#8211; so you can see if what you&#8217;ve made has any value. If it has value, <em>then</em> you worry about scaling. If it&#8217;s garbage, nobody will care how it was architected. <strong>Get it to work first; scale second.</strong> Getting stuff in the customers&#8217; hands and then making decisions based on the feedback is your top priority. If you aren&#8217;t focusing on that, you&#8217;re probably on your way to creating your very own crappy product <a href="http://www.theverge.com/2011/08/18/hp-discontinue-webos-operations/" target="_blank">that</a> <a href="http://techcrunch.com/2010/09/17/cuil-goes-down-and-we-hear-its-down-for-good/" target="_blank">nobody</a> <a href="http://www.nytimes.com/2006/10/15/business/yourmoney/15friend.html" target="_blank">uses</a>.</p>
<p><em>Today we learned that &#8220;agile&#8221; is a loaded word.</em></p>
<div></div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MichiKnows?a=abgajWYuFgU:pdHzd-aO860:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=abgajWYuFgU:pdHzd-aO860:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=abgajWYuFgU:pdHzd-aO860:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=abgajWYuFgU:pdHzd-aO860:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=abgajWYuFgU:pdHzd-aO860:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=abgajWYuFgU:pdHzd-aO860:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=abgajWYuFgU:pdHzd-aO860:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MichiKnows/~4/abgajWYuFgU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.michikono.com/2012/01/11/what-agile-is-not/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.michikono.com/2012/01/11/what-agile-is-not/</feedburner:origLink></item>
		<item>
		<title>Avoid Gloss on Dark Business Cards</title>
		<link>http://feedproxy.google.com/~r/MichiKnows/~3/S4VVYnVFoHk/</link>
		<comments>http://www.michikono.com/2011/11/14/avoid-gloss-on-dark-business-cards/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 05:08:52 +0000</pubDate>
		<dc:creator>Michi</dc:creator>
				<category><![CDATA[Startup-ing]]></category>

		<guid isPermaLink="false">http://www.michikono.com/?p=1105</guid>
		<description><![CDATA[So we just got our business cards. The company logo is on a black/dark backdrop. We decided to gloss it up to give the cards that extra sexy shine. Instead, we ended up with an ugly smudge magnet. Don&#8217;t make the mistake we made. See for yourself (covering our catch phrase on purpose): &#160; &#160;]]></description>
				<content:encoded><![CDATA[<p>So we just got our business cards. The company logo is on a black/dark backdrop. We decided to gloss it up to give the cards that extra sexy shine.</p>
<p>Instead, we ended up with an ugly smudge magnet. Don&#8217;t make the mistake we made.</p>
<p>See for yourself (covering our catch phrase on purpose):</p>
<p><img title="Gloss leaves fingerprints" src="http://www.michikono.com/wp-content/uploads/2011/11/photo-e1321333484616.jpg" alt="Our business card" width="717" height="389" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MichiKnows?a=S4VVYnVFoHk:49GGTno-cI0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=S4VVYnVFoHk:49GGTno-cI0:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=S4VVYnVFoHk:49GGTno-cI0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=S4VVYnVFoHk:49GGTno-cI0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=S4VVYnVFoHk:49GGTno-cI0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=S4VVYnVFoHk:49GGTno-cI0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=S4VVYnVFoHk:49GGTno-cI0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MichiKnows/~4/S4VVYnVFoHk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.michikono.com/2011/11/14/avoid-gloss-on-dark-business-cards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.michikono.com/2011/11/14/avoid-gloss-on-dark-business-cards/</feedburner:origLink></item>
		<item>
		<title>Browser Wars… Wait, That’s Still Going on Right?</title>
		<link>http://feedproxy.google.com/~r/MichiKnows/~3/auh0DED1i4E/</link>
		<comments>http://www.michikono.com/2011/10/11/browser-wars-wait-thats-still-going-on-right/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 23:23:26 +0000</pubDate>
		<dc:creator>Michi</dc:creator>
				<category><![CDATA[geeky]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://www.michikono.com/?p=1101</guid>
		<description><![CDATA[Rewind 5 years. Ask any self-proclaimed nerd what the browser market shares were. Market share stats were like the stock market ticker of the Internet Nerds. Everybody knew about it, and everybody cared. But what&#8217;s the market shares today? Did you know that IE is below 50% by most measures? Did you know that Chrome [...]]]></description>
				<content:encoded><![CDATA[<p>Rewind 5 years. Ask any self-proclaimed nerd what the browser market shares were. Market share stats were like the stock market ticker of the Internet Nerds. Everybody knew about it, and everybody cared.</p>
<p>But what&#8217;s the market shares today? Did you know that IE is below 50% by most measures? Did you know that Chrome ate up Firefox&#8217;s market share? And what&#8217;s Safari&#8217;s market share if all the iPhones and iPads use it?</p>
<p>You probably don&#8217;t know.</p>
<p><strong>Because, who cares.</strong></p>
<p>5-10 years ago, it <em>mattered</em> that IE had 70+% of the browser market because it directly influenced what was <em>possible</em> as an application developer. But mobile changed all that.</p>
<p>Mobile browsers ended up being the adoption wedge for HTML5 and alternatives to Flash thanks in large to the fact users &#8212; and developers &#8212; treated mobile as separate from regular browser apps. What a blessing in disguise: it let everybody start over. And once the mobile stuff got popular and apps broke, people blamed the bad mobile browser (&#8220;My ghetto Blackberry won&#8217;t load Facebook right!&#8221;) instead of the website. It was the perfect storm to force everybody to start adopting HTML5. Add in CSS/JavaScript standardizing tools (Modernizr,  jQuery, GWT, etc.) and developers didn&#8217;t even have to do cross-browser testing for simple stuff.</p>
<p>Maybe this is a bad thing to admit, but I haven&#8217;t bothered testing in all browsers for a year or two now. Stuff just breaks less often. IE7 is &#8220;good enough,&#8221; and the other browsers work 99% of the time. Thus, the only time I bother checking browser compatibility is if I&#8217;m doing something <em>super complex</em> or a user complains.</p>
<p>Good job, Internet. Ya, the evil Microsoft IE empire is still around, but we won the war and nobody even noticed.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MichiKnows?a=auh0DED1i4E:GV8f1W9eEZg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=auh0DED1i4E:GV8f1W9eEZg:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=auh0DED1i4E:GV8f1W9eEZg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=auh0DED1i4E:GV8f1W9eEZg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=auh0DED1i4E:GV8f1W9eEZg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=auh0DED1i4E:GV8f1W9eEZg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=auh0DED1i4E:GV8f1W9eEZg:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MichiKnows/~4/auh0DED1i4E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.michikono.com/2011/10/11/browser-wars-wait-thats-still-going-on-right/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.michikono.com/2011/10/11/browser-wars-wait-thats-still-going-on-right/</feedburner:origLink></item>
		<item>
		<title>Failure Paralysis – The Thing that Holds You Back</title>
		<link>http://feedproxy.google.com/~r/MichiKnows/~3/s-zTDiFhPQU/</link>
		<comments>http://www.michikono.com/2011/10/05/failure-paralysis-the-thing-that-holds-you-back/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 05:38:33 +0000</pubDate>
		<dc:creator>Michi</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[motivation]]></category>
		<category><![CDATA[startups]]></category>

		<guid isPermaLink="false">http://www.michiknows.com/?p=1076</guid>
		<description><![CDATA[We all have this friend: he talks about all the things he will do soon. He&#8217;s going to ask out that cute girl. He&#8217;s going to start hitting the gym. He&#8217;s going to ask for that big raise. He&#8217;s going to be more social. Yet, he never does. Your friend is a victim of Failure Paralysis. [...]]]></description>
				<content:encoded><![CDATA[<p>We all have this friend: he talks about all the things he will do soon. He&#8217;s going to ask out that cute girl. He&#8217;s going to start hitting the gym. He&#8217;s going to ask for that big raise. He&#8217;s going to be more social. Yet, he never does.</p>
<p><span style="text-decoration: underline;"><strong>Your friend is a victim of Failure Paralysis.</strong></span></p>
<p>It&#8217;s clear that inaction guarantees a lack of success. No success can be achieved by doing nothing. You can&#8217;t even win the lottery unless you buy a ticket. This applies to <em>anything</em>: becoming president, getting a girlfriend, losing weight, seeing a movie, etc. The first step, is to start moving toward the goal.</p>
<p><em>This is the struggle every entrepreneur eventually has to overcome.</em></p>
<p><em></em>A lot of people talk about the uncertainty around taking that first step. The reality is that as soon as you take that first step, you&#8217;ll be hit with 100 new issues you never imagined. You can read all day about poker theory, but it pales in comparison to real playing experience. And yet, so many people get stuck in the theory-crafting stage of an idea. Move past this step.</p>
<p><span style="text-decoration: underline;"><strong>To succeed, you must do. And not doing assures failure.</strong></span></p>
<p>What are the odds that the idea in your head will become a million dollar company? Well, if you do nothing, the odds are 0%. If you start now, maybe you increase your odds to 0.1% &#8211; a literal infinity-percent better odds. The problem is that some people don&#8217;t want 0.1%. They want 99%. Thus, they wait while they do stuff to try to increase their odds. But isn&#8217;t actually <em>doing it</em> going to increase your odds too? When does the waiting stop and the doing start? Well, for most people: never.</p>
<p>Everybody has excuses to do something <em>later</em>. But only a few don&#8217;t let those excuses stop them. Kevin Rose famously destroyed his relationship to fund Digg. Mark Zuckerberg dropped out of Harvard for Facebook. HARVARD! Actually, so did Bill Gates for Microsoft. Michael Arrington, a now-famous tech journalist, abandoned a career as a lawyer to join the startup world. Even Jack Dorsey bailed (I use this term in jest) on Twitter to go do Square.</p>
<p>Did these guys fear failure? I&#8217;m sure. You can&#8217;t gamble your future and not be. But that didn&#8217;t matter &#8212; they ignored all the &#8220;sound&#8221; advice from their friends and family. I won&#8217;t get into each case, but history shows us that if each had waited an extra year or two to make the jump &#8220;safer,&#8221; they may have missed the boat entirely.</p>
<p><span style="text-decoration: underline;"><strong>Later is the same as never. Now is the only acceptable time.</strong></span></p>
<p>Your friends might buy your excuses, but as an Internet-Stranger, I&#8217;m going to say the truth: your excuses don&#8217;t matter. Results do.</p>
<ul>
<li>Too tired after work? Suck it up or change your sleeping habits.</li>
<li>Credit card debt holding you back? Pay it off and quit going out.</li>
<li>Not enough time? Manage your time better and quit reading Reddit.</li>
<li>Can&#8217;t code? It&#8217;s OK to suck at it. Learn.</li>
</ul>
<p>So, take a deep breath, and do something. Anything. Don&#8217;t fear failure. Fear not-succeeding.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MichiKnows?a=s-zTDiFhPQU:TP_3gJqRzhY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=s-zTDiFhPQU:TP_3gJqRzhY:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=s-zTDiFhPQU:TP_3gJqRzhY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MichiKnows?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=s-zTDiFhPQU:TP_3gJqRzhY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=s-zTDiFhPQU:TP_3gJqRzhY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MichiKnows?a=s-zTDiFhPQU:TP_3gJqRzhY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/MichiKnows?i=s-zTDiFhPQU:TP_3gJqRzhY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MichiKnows/~4/s-zTDiFhPQU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.michikono.com/2011/10/05/failure-paralysis-the-thing-that-holds-you-back/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.michikono.com/2011/10/05/failure-paralysis-the-thing-that-holds-you-back/</feedburner:origLink></item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Object Caching 895/965 objects using disk: basic

 Served from: www.michikono.com @ 2013-06-13 08:47:51 by W3 Total Cache -->
