<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Rockhopper Digital</title>
  <subtitle>Tap into a chronological feed of code, design, culture, experience and miscellany.</subtitle>
  <id>http://www.rockhopperdigital.com</id>
  <link href="http://www.rockhopperdigital.com/"/>
  <link href="http://www.rockhopperdigital.com/feed.xml" rel="self"/>
  <updated>2013-03-05T09:02:00Z</updated>
  <author>
    <name>Benjamin Zalasky</name>
  </author>
  <entry>
    <title>Errors in Conceptual Design</title>
    <link href="/articles/errors-in-conceptual-design/"/>
    <id>/articles/errors-in-conceptual-design/</id>
    <published>2013-03-05T09:02:00Z</published>
    <updated>2013-03-05T09:02:00Z</updated>
    <author>
      <name>Benjamin Zalasky</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;strong&gt;Learning from the Poor Judgment of Paconius&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In &amp;ldquo;&lt;a href="http://www.amazon.com/gp/product/0521466490/ref=as_li_tf_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0521466490&amp;linkCode=as2&amp;tag=rockhodigita-20"&gt;Design Paradigms: Case Histories of Error and Judgment in Engineering&lt;/a&gt;,&amp;rdquo; Henry Petroski details several civil engineering failures throughout history. The text also includes candid analysis of the reasoning that led to each failure.&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;&lt;strong&gt;Learning from the Poor Judgment of Paconius&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In &amp;ldquo;&lt;a href="http://www.amazon.com/gp/product/0521466490/ref=as_li_tf_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0521466490&amp;linkCode=as2&amp;tag=rockhodigita-20"&gt;Design Paradigms: Case Histories of Error and Judgment in Engineering&lt;/a&gt;,&amp;rdquo; Henry Petroski details several civil engineering failures throughout history. The text also includes candid analysis of the reasoning that led to each failure.&lt;/p&gt;

&lt;p&gt;Petroski begins his discussion of errors in conceptual design with the story of &lt;em&gt;&lt;a href="http://www.kuhf.org/programaudio/engines/eng1101_64k.m3u"&gt;Paconius and the Pedestal of Apollo&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Let&amp;#39;s explore how this civil engineering lesson can be applied to the design and development of software. If you&amp;#39;re not familiar with the story, listen to the radio program linked above (or read the provided transcript).&lt;/p&gt;

&lt;p&gt;Paconius sought an innovative solution to moving a massive pedestal from a quarry to the building site at the temple of Apollo at Selinous. The factors that drove his conceptual design appear to be primarily economic and aesthetic in hindsight. His solution, rather like a spool unwinding from the top, was apparently easier to construct, and allowed for heavier loads to be pulled with fewer oxen. Moreover, in contrast to the standard wooden frame solution, Paconius&amp;#39; innovation required no holes to be drilled in either end of the pedestal (to be fitted with iron and lead inserts). The spool approach also kept the pedestal more protected from the road and elements.&lt;/p&gt;

&lt;p&gt;These all seem like big wins. Therein lies the problem, it&amp;#39;s a trap, and a seductive one at that.&lt;/p&gt;

&lt;p&gt;There are two fundamental flaws with Paconius&amp;#39; spool:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;As the oxen pull the spool forward, they distance themselves equally from the spool.&lt;/li&gt;
&lt;li&gt;After the rope runs out, you have to set the whole damn thing back up.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As the oxen distanced themselves from the spool, it became less stable and was prone to running off the road, undercutting the economic efficiency of using fewer oxen. The problem of scaling the solution over long distances made things even worse for Paconius. He ended up in financial ruin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Folly of Competing Objectives&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every consumer facing software project has economic and aesthetic objectives that are weighted to varying degrees. How do we balance these aims with technical design?&lt;/p&gt;

&lt;p&gt;&lt;img class="stipple-nowrap" src="http://www.rockhopperdigital.com/images/competing-objectives.png"&gt;&lt;/p&gt;

&lt;p&gt;There are clearly many &lt;a href="http://en.wikipedia.org/wiki/Anti-pattern"&gt;examples of software projects run off course&lt;/a&gt;, similar to Paconius&amp;#39; failed endeavour. Feel free to share your own in the discussion on &lt;a href="http://news.ycombinator.com/item?id=5330234"&gt;Hacker News&lt;/a&gt;. However, I&amp;#39;m going to focus on how technical, economic and aesthetic objectives can be acheived harmoniously per an article I read on &amp;ldquo;&lt;a href="http://webdesign.tutsplus.com/articles/user-experience-articles/designing-for-performance/"&gt;Designing for Performance&lt;/a&gt;,&amp;rdquo; by &lt;a href="https://twitter.com/somerandomdude"&gt;P.J. Onori&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote cite="http://webdesign.tutsplus.com/articles/user-experience-articles/designing-for-performance/"&gt;
&amp;ldquo;Designing for performance requires a commitment to maximize the necessities and strip out superfluous luxuries. A more utilitarian approach towards design is needed where each element has a tangible and net-positive impact on the end result. This does not negate the importance of aesthetics, rather it means that it should not given a blank check.&amp;rdquo;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;No blank checks&lt;/em&gt; doesn&amp;#39;t mean letting the engineering team make all the decisions, it means regardless of your role, embrace an engineers mindset. One reason why &lt;a href="http://allthingsd.com/20130305/seven-more-questions-for-andreessen-horowitz-enterprise-dude-peter-levine/?mod=tweet"&gt;VCs are insistent on startups having technical founders&lt;/a&gt; is their ability to assess the implications of conceptual design. Think carefully about how early design decisions impact technical architecture and performance. At the end of the day, we&amp;#39;re all trying to solve problems, and this leads into my favorite part of P.J.&amp;#39;s article:&lt;/p&gt;

&lt;blockquote cite="http://webdesign.tutsplus.com/articles/user-experience-articles/designing-for-performance/"&gt;
&amp;ldquo;&amp;hellip;aesthetics should always support the problems we are asked to solve&amp;hellip;. Looking at design through this lens will help create a goal-driven approach and focus our thinking.&amp;rdquo;
&lt;/blockquote&gt;

&lt;p&gt;That said, as we discussed earlier, goals alone aren&amp;#39;t enough to keep a project on track. To spare future generations the humor of reading about your own spectacular failures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recognize competing objectives and work to resolve them as early as possible.&lt;/li&gt;
&lt;li&gt;Explore potential solutions to novel problems with other engineers (or critical thinkers).&lt;/li&gt;
&lt;li&gt;Question and attack your own ideas, but don&amp;#39;t stop having them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Discuss this article on &lt;a href="http://news.ycombinator.com/item?id=5330234"&gt;Hacker News&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Idols of the Mind</title>
    <link href="/articles/idols-of-the-mind/"/>
    <id>/articles/idols-of-the-mind/</id>
    <published>2013-02-28T06:58:00Z</published>
    <updated>2013-02-28T06:58:00Z</updated>
    <author>
      <name>Benjamin Zalasky</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;strong&gt;Empiricism in Product Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://plato.stanford.edu/entries/francis-bacon/#Ido"&gt;Francis Bacon wrote about &lt;em&gt;idols of the mind&lt;/em&gt;&lt;/a&gt;, with regard to scientific inquiry. This is a nod to his style of clear, empirical thinking, with regard to product development (software, or otherwise).&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;&lt;strong&gt;Empiricism in Product Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://plato.stanford.edu/entries/francis-bacon/#Ido"&gt;Francis Bacon wrote about &lt;em&gt;idols of the mind&lt;/em&gt;&lt;/a&gt;, with regard to scientific inquiry. This is a nod to his style of clear, empirical thinking, with regard to product development (software, or otherwise).&lt;/p&gt;

&lt;p&gt;Here are four ways to build a product nobody wants.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rely on preconceived assumptions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Questions are one of the best tools for avoiding unwarranted assumptions. Paul Graham suggests, &amp;ldquo;&lt;a href="http://paulgraham.com/ideas.html"&gt;The initial idea&lt;/a&gt; is just a starting point&amp;ndash;not a blueprint, but a question.&amp;rdquo; A fresh perspective is invaluable when entering a domain that&amp;#39;s ripe for disruption. However, failure to recognize your own innate biases can limit your ability to innovate. From your target market, to the problem your product solves, don&amp;#39;t limit yourself with assumptions unless you&amp;#39;ve a compelling reason. There are times when assumptions are unavoidable, but that&amp;#39;s ok as long as you recognize them. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fail to acknowledge external perspectives&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Idiosyncratic belief and passion are often at the heart of brilliance. They are also barriers that can feed your own echo chamber. Don&amp;#39;t fall victim to this. External perspectives lend insight into the alignment of your product in the marketplace, balancing raw, creative effort with instructive guidance. Graham (in the same essay on ideas) suspects the &lt;em&gt;together-alone-together sandwich&lt;/em&gt; as being the most productive setup for conceiving and implementing great ideas. I tend to agree with him. Time spent reflecting alone on your discussions with others shouldn&amp;#39;t be discounted.   &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Forget that talk is cheap&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Talk is cheap in all forms. This goes beyond just put up or shut up. Don&amp;#39;t &amp;ldquo;let the power of mere words induce belief in non-existent things,&amp;rdquo; as Edward O. Wilson paraphrases Bacon&amp;#39;s &lt;em&gt;idols of the marketplace&lt;/em&gt; in &lt;a href="http://www.amazon.com/gp/product/067976867X/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=067976867X&amp;linkCode=as2&amp;tag=rockhodigita-20"&gt;Consilience: The Unity of Knowledge&lt;/a&gt; (unashamed to drop an affiliate link here). Just as talking about your product won&amp;#39;t get you to launch, someone telling you a market exists doesn&amp;#39;t mean it actually does. Take steps to empirically validate any assumptions you&amp;#39;ve made about your product and its place in the world.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Let dogmatic thinking cloud your vision&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unquestioning acceptance is almost never a good thing for product development. An open mind allows you to see opportunities that would be missed if you closed off your thinking. Dogmatic thinking begets more of the same old thing. The product might not be terrible, but you&amp;#39;re running the risk of developing the kind of uninspiring software that needs to be sold with &lt;a href="http://vimeo.com/2723800"&gt;fancy steak dinners and extravagant bar tabs&lt;/a&gt;. Shake up the enterprise and don&amp;#39;t box yourself in! &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;In Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start with a question. See the world as it is. Make something better.&lt;/p&gt;

&lt;p&gt;Discuss this post on &lt;a href="http://news.ycombinator.com/item?id=5309157"&gt;Hacker News&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The Case for Static Site Generators</title>
    <link href="/articles/the-case-for-static-site-generators/"/>
    <id>/articles/the-case-for-static-site-generators/</id>
    <published>2013-02-26T08:46:00Z</published>
    <updated>2013-02-26T08:46:00Z</updated>
    <author>
      <name>Benjamin Zalasky</name>
    </author>
    <summary type="html">&lt;p&gt;Creating a website has never been so easy, and it&amp;#39;s never been so hard. For the purposes of this post, assume that I&amp;#39;m considering a few different options for creating a site like the one you&amp;#39;re looking at right now&amp;mdash;a simple content-focused site with pages and articles.  &lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;Creating a website has never been so easy, and it&amp;#39;s never been so hard. For the purposes of this post, assume that I&amp;#39;m considering a few different options for creating a site like the one you&amp;#39;re looking at right now&amp;mdash;a simple content-focused site with pages and articles.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WordPress&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://wordpress.org/"&gt;WordPress&lt;/a&gt; is ubiquitous. As a publishing platform for non-technical users, WordPress is as solid as any solution out there. Over the last 10 years, it&amp;#39;s grown from a simple blogging tool into a fully fledged CMS. I don&amp;#39;t need to debate its merits. &lt;/p&gt;

&lt;p&gt;That said, maintaining a self-hosted WordPress installation takes vigilance. Security vulnerabilities can creep in if you don&amp;#39;t stay on top of updates. Plugins further compound the problem. I&amp;#39;m not saying you can&amp;#39;t put out a solid site on WordPress, just that there&amp;#39;s more to worry about than you might think (particularly if you&amp;#39;re just getting started, or busy worrying about other things).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rails and Sinatra&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rubyonrails.org/"&gt;Rails&lt;/a&gt; is a solid web application framework, and a great JSON server for single-page JavaScript applications. However, it&amp;#39;s a little heavy for the purposes of our simple site. But what about all the great ruby gems and helpers Rails throws our way that would still be nice to have?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://haml.info/"&gt;Haml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sass-lang.com/"&gt;Sass&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://guides.rubyonrails.org/asset_pipeline.html"&gt;Asset pipeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.padrinorb.com/guides/application-helpers"&gt;Application helpers&lt;/a&gt; (including partials)&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I suppose I could use &lt;a href="http://www.sinatrarb.com/"&gt;Sinatra&lt;/a&gt;, but then I still have to run an application server. There&amp;#39;s more configuration and deployment (for the record, I know my gripes about keeping WordPress secure apply to any web application, including Rails and Sinatra apps). Moreover, it needs to be able to handle Hacker News or Reddit traffic, because, even though I don&amp;#39;t want to spend a lot of time making the site, the content is going to be gold (right?). I need to be prepared. What&amp;#39;s the solution?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enter Static Site Generators&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are quite a few out there, however, I&amp;#39;m partial to &lt;a href="http://middlemanapp.com/"&gt;Middleman&lt;/a&gt;, which is what I used to build this site. To be fair, here&amp;#39;s a few others:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/mojombo/jekyll"&gt;Jekyll&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/imathis/octopress"&gt;Octopress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/koenbok/Cactus"&gt;Cactus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;and a ton &lt;a href="http://news.ycombinator.com/item?id=4857473"&gt;more&lt;/a&gt;&amp;hellip;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Middleman is a command-line tool for building static sites that borrows some helpers from &lt;a href="http://www.padrinorb.com/"&gt;Padrino&lt;/a&gt;, and gives us access to all those kick-ass shortcuts we thought we&amp;#39;d left behind in Rails or Sinatra.&lt;/p&gt;

&lt;p&gt;While they don&amp;#39;t work for everything, it&amp;#39;s refreshing to know that I don&amp;#39;t have to worry as much about whether my server is going to conk out if the site gets slammed (or think twice about the bill). It&amp;#39;s all static content once you build the project from the command-line. With directory indexes (on an Apache server), you can make your routes pretty too.&lt;/p&gt;

&lt;p&gt;When I began getting into web development, WordPress was a great platform for me to learn on. However, I&amp;#39;m going to make the argument that a beginner today interested in the front-end would be better served by figuring out how to use a static site generator. They&amp;#39;d pick up&amp;hellip;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basic command-line skills&lt;/li&gt;
&lt;li&gt;Ruby and its associated work-flow&lt;/li&gt;
&lt;li&gt;Dynamic templates&lt;/li&gt;
&lt;li&gt;Modern front-end development tools&lt;/li&gt;
&lt;li&gt;Learning to &lt;a href="http://en.wikipedia.org/wiki/RTFM"&gt;RTFM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fucking priceless.&lt;/p&gt;

&lt;p&gt;At the end of the day&amp;hellip; I&amp;#39;m not trying to pick on WordPress. Rails and Sinatra rock. But sometimes (when you can), it&amp;#39;s nice to simplify things all the way down to the foundation of what makes the web great. Static content.&lt;/p&gt;

&lt;p&gt;Discuss this article on &lt;a href="http://news.ycombinator.com/item?id=5291430"&gt;Hacker News&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
</feed>
