<?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>Ben Scofield &#187; development</title>
	<atom:link href="http://benscofield.com/tags/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://benscofield.com</link>
	<description></description>
	<lastBuildDate>Wed, 07 Jul 2010 11:20:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Design-first development</title>
		<link>http://benscofield.com/2010/01/design-first-development/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=design-first-development</link>
		<comments>http://benscofield.com/2010/01/design-first-development/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 12:00:06 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://benscofield.com/?p=319</guid>
		<description><![CDATA[The first RubyConf talk I gave was entitled Cleanliness Is Next to Domain-Specificity; in it, I spoke about DSLs, and gave an example of how you might want to create one (I also spent some time talking about regional variation in Little Bunny Foo Foo, but that&#8217;s neither here nor there). At the time, I said that [...]]]></description>
			<content:encoded><![CDATA[<p>The first RubyConf talk I gave was entitled <a href="http://rubyconf2007.confreaks.com/d3t1p6_cleanliness_is_next_to_domain_specificity.html"><em>Cleanliness Is Next to Domain-Specificity</em></a>; in it, I spoke about DSLs, and gave an example of how you might want to create one (I also spent some time talking about regional variation in <em>Little Bunny Foo Foo</em>, but that&#8217;s neither here nor there). At the time, I said that the best way to design a DSL was to write out what you wanted it to look like, and then write the code that made that functional.</p>
<p>I&#8217;ve since become convinced that this process is in fact the best way to design <em>any </em>code, not just DSLs. API? Write out how you want to call it, then write the code that responds to those calls. Routing in a web app? Write out the URLs you want people to hit, then create the code and routes that will make those work. A web page? Design the page, build it out into HTML, and then write the code that makes it live. Each of these is an example of design-first development.</p>
<p>You may be wondering if I&#8217;m abandoning the lean/agile fold for waterfall with this idea. Happily, I&#8217;m not. If you think about it, this is how TDD (or BDD) works: you write a test or spec that runs some code (in the process, designing how you&#8217;ll interact with the code), and then you write the code that makes it pass. The sort of design I&#8217;m talking out isn&#8217;t fossilized in spec documents, but is actually executable when you finish writing the code to make it work.</p>
<p>The key to all of this is realizing that design happens at a number of different levels. In the examples above, I described design the level of writing code (DSL), of integrating with systems (API), of browser interaction (routing), and of user interface (web page).</p>
<p>I think that more and more people are realizing the power of this approach at various levels, but I&#8217;m convinced that recognizing each of those levels as an instance of using design-first development may provide better insights into the process overall.</p>
]]></content:encoded>
			<wfw:commentRss>http://benscofield.com/2010/01/design-first-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>H&amp;P: What you can&#8217;t say</title>
		<link>http://benscofield.com/2009/10/hp-what-you-cant-say/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=hp-what-you-cant-say</link>
		<comments>http://benscofield.com/2009/10/hp-what-you-cant-say/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 11:00:52 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://benscofield.com/?p=255</guid>
		<description><![CDATA[I recently read Paul Graham&#8217;s Hackers and Painters (a collection of essays from his site, conveniently gathered into a single hardbound &#8220;book.&#8221; Genius!), and several of the pieces resonated with me. Granted, there were also some pieces that I found completely wrong-headed, but oftentimes worthwhile books have those bits as well as the good ones&#8230;. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/gp/product/0596006624?ie=UTF8&amp;tag=culanncom-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596006624"><img class="alignright size-full wp-image-257" title="Hackers and Painters" src="http://benscofield.com/wp-content/uploads/2009/10/h-p-cover.jpg" alt="Hackers and Painters" width="125" height="193" /></a>I recently read <a href="http://paulgraham.com/">Paul Graham&#8217;s</a> <a href="http://www.amazon.com/gp/product/0596006624?ie=UTF8&amp;tag=culanncom-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596006624">Hackers and Painters</a> (a collection of essays from his site, conveniently gathered into a single hardbound &#8220;book.&#8221; Genius!), and several of the pieces resonated with me. Granted, there were also some pieces that I found completely wrong-headed, but oftentimes worthwhile books have those bits as well as the good ones&#8230;.</p>
<p>One of the essays I found most interesting was &#8220;<a href="http://paulgraham.com/say.html">What You Can&#8217;t Say</a>,&#8221; the main point of which is that we should challenge conventional wisdom, to state unpopular truths. The bulk of the essay is dedicated to determining exactly what those conventional wisdom and unpopular truths are – taboos, things you get in trouble for stating, heresies, etc.</p>
<p>PG&#8217;s examples are almost entirely social in nature – pornography filters, hate speech, etc. There&#8217;s a clear parallel in the development world, and there are great examples of people who&#8217;ve done just that and had great success. We&#8217;re seeing people question tradition and make dramatic progress daily now, with things like <a href="http://en.wikipedia.org/wiki/Nosql">alternative databases</a> (why should we store every domain relationally?), <a href="http://en.wikipedia.org/wiki/Seaside_(software)">Seaside</a> (why must web applications be stateless?), and more. Ironically, one of the earliest arguments for <a href="http://rubyonrails.org/">Rails</a> was that it valued <em>convention</em> over configuration – and that itself was a questioning of conventional wisdom.</p>
<p>I think that PG is correct in saying that these practices (stating unpopular opinions, etc.) have value. What&#8217;s essential, however, is that the people who are questioning conventional wisdom actually do the work to show where their alternatives are better. It&#8217;s one thing to point out that relational databases suck for certain domains; it&#8217;s another thing entirely to create a database engine that meets the need.</p>
<p>So: go ahead and support the fringe, rail against the mainstream, do something taboo – but <em>do the work</em>, too.</p>
]]></content:encoded>
			<wfw:commentRss>http://benscofield.com/2009/10/hp-what-you-cant-say/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changing the default</title>
		<link>http://benscofield.com/2009/10/changing-the-default/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=changing-the-default</link>
		<comments>http://benscofield.com/2009/10/changing-the-default/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 11:00:46 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[learning]]></category>

		<guid isPermaLink="false">http://benscofield.com/?p=238</guid>
		<description><![CDATA[I create (or at least start) a lot of microapplications – my &#8220;Ideas &#8211; Dev&#8221; list in Evernote is huge, and I try to pick off a new one every few weeks (at least), so I&#8217;m usually working on something newish. This fact on its own isn&#8217;t particularly interesting, but what this practice has done is [...]]]></description>
			<content:encoded><![CDATA[<p>I create (or at least start) a lot of microapplications – my &#8220;Ideas &#8211; Dev&#8221; list in <a href="http://www.evernote.com">Evernote</a> is huge, and I try to pick off a new one every few weeks (at least), so I&#8217;m usually working on <em>something </em>newish. This fact on its own isn&#8217;t particularly interesting, but what this practice has done is allow me to experiment with new things <em>regularly</em> and on a <em>real project</em>.</p>
<p>As an example, I&#8217;ve been using <a href="http://www.mongodb.org">MongoDB</a> as the persistence layer for several of these apps. Where before I&#8217;d have relied on MySQL (or, more rarely, SQLite), I&#8217;m now making Mongo the default – when I start up a new project, I yank out ActiveRecord and drop in MongoMapper. This has resulted in two important benefits:</p>
<ul>
<li>I&#8217;ve learned a lot more about how Mongo (and, by extension, other document-oriented database) work.</li>
<li>I&#8217;m better at figuring out where a document-oriented database does and doesn&#8217;t work – I&#8217;ve had to replace Mongo on one application because it just wasn&#8217;t a good fit for the domain.</li>
</ul>
<p>The exact same process happened when I started replacing Prototype and Scriptaculous with jQuery – I was able to dig down into the benefits and problems with it, and eventually make an informed decision about which library I wanted to use.</p>
<p>If you&#8217;re starting a new project, give a thought to changing one of your default settings. At worst, you&#8217;ll have to revert that change later if you realize that the original worked better, but even then you&#8217;ll have learned something valuable – and the chance to discover something new that works better is a huge win.</p>
]]></content:encoded>
			<wfw:commentRss>http://benscofield.com/2009/10/changing-the-default/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
