<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Riskiest thing first vs Outside in development</title>
	<atom:link href="http://www.markhneedham.com/blog/2010/03/02/riskiest-thing-first-vs-outside-in-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.markhneedham.com/blog/2010/03/02/riskiest-thing-first-vs-outside-in-development/</link>
	<description>Thoughts on Software Development</description>
	<lastBuildDate>Wed, 08 Sep 2010 21:07:07 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: Richard Jonas</title>
		<link>http://www.markhneedham.com/blog/2010/03/02/riskiest-thing-first-vs-outside-in-development/comment-page-1/#comment-44583</link>
		<dc:creator>Richard Jonas</dc:creator>
		<pubDate>Fri, 13 Aug 2010 16:30:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.markhneedham.com/blog/?p=2218#comment-44583</guid>
		<description>I like to create a horizontal and vertical prototype.  The horizontal prototype creates the UI and from this additional user stories might emerge.

The vertical prototype proves the layers of the system and any external components we need will work together.  If some don&#039;t then it&#039;s a risk that needs to be addressed early (especially if some components aren&#039;t in our contol).</description>
		<content:encoded><![CDATA[<p>I like to create a horizontal and vertical prototype.  The horizontal prototype creates the UI and from this additional user stories might emerge.</p>
<p>The vertical prototype proves the layers of the system and any external components we need will work together.  If some don't then it's a risk that needs to be addressed early (especially if some components aren't in our contol).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Wilden</title>
		<link>http://www.markhneedham.com/blog/2010/03/02/riskiest-thing-first-vs-outside-in-development/comment-page-1/#comment-33009</link>
		<dc:creator>Mark Wilden</dc:creator>
		<pubDate>Sun, 07 Mar 2010 04:24:15 +0000</pubDate>
		<guid isPermaLink="false">http://www.markhneedham.com/blog/?p=2218#comment-33009</guid>
		<description>The reason that the approach you chose worked is because the UI you were driving for didn&#039;t change. You had an idea of what the program needed to do, you chose to do one of the implementation details first, and you were right about what the program needed to do.

Where outside-in wins is when you realize, as you&#039;re developing the UI, that you were wrong about what the program needed to do.

The UI is the only thing that really matters. If human beings get the output they want in response to their input, it doesn&#039;t matter how that output is created. The output is always the most &quot;risky&quot; part of an application, because it *is* the application. You must get the output right, or you&#039;ve wasted your time. Therefore, it makes sense to do it first.

Everything else is just a means to an end.</description>
		<content:encoded><![CDATA[<p>The reason that the approach you chose worked is because the UI you were driving for didn't change. You had an idea of what the program needed to do, you chose to do one of the implementation details first, and you were right about what the program needed to do.</p>
<p>Where outside-in wins is when you realize, as you're developing the UI, that you were wrong about what the program needed to do.</p>
<p>The UI is the only thing that really matters. If human beings get the output they want in response to their input, it doesn't matter how that output is created. The output is always the most "risky" part of an application, because it *is* the application. You must get the output right, or you've wasted your time. Therefore, it makes sense to do it first.</p>
<p>Everything else is just a means to an end.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tom</title>
		<link>http://www.markhneedham.com/blog/2010/03/02/riskiest-thing-first-vs-outside-in-development/comment-page-1/#comment-33007</link>
		<dc:creator>Tom</dc:creator>
		<pubDate>Sun, 07 Mar 2010 03:42:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.markhneedham.com/blog/?p=2218#comment-33007</guid>
		<description>Outside in does not mean &quot;all&quot; of the outside first. You can start with minimal functionality and then drill down in a vertical slice. That way you deal with all the risks at all the layers sooner. So you can have your cake &amp; eat it too ;) and have something to show for all your hard work earlier.</description>
		<content:encoded><![CDATA[<p>Outside in does not mean "all" of the outside first. You can start with minimal functionality and then drill down in a vertical slice. That way you deal with all the risks at all the layers sooner. So you can have your cake &amp; eat it too <img src='http://www.markhneedham.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  and have something to show for all your hard work earlier.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael L Perry</title>
		<link>http://www.markhneedham.com/blog/2010/03/02/riskiest-thing-first-vs-outside-in-development/comment-page-1/#comment-32832</link>
		<dc:creator>Michael L Perry</dc:creator>
		<pubDate>Wed, 03 Mar 2010 13:37:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.markhneedham.com/blog/?p=2218#comment-32832</guid>
		<description>While there is no right answer, I tend to favor outside in for new features, and riskiest first for known features.

Outside in helps me to understand and discover the requirements. It gives me rapid feedback from stakeholders and validates my data model before it solidifies.

Riskiest first, on the other hand helps me to solve difficult engineering problems. Instead of searching for the correct requirements, I&#039;m searching for the best technical solution. The risky parts of that solution inform my decisons better than the safe parts.</description>
		<content:encoded><![CDATA[<p>While there is no right answer, I tend to favor outside in for new features, and riskiest first for known features.</p>
<p>Outside in helps me to understand and discover the requirements. It gives me rapid feedback from stakeholders and validates my data model before it solidifies.</p>
<p>Riskiest first, on the other hand helps me to solve difficult engineering problems. Instead of searching for the correct requirements, I'm searching for the best technical solution. The risky parts of that solution inform my decisons better than the safe parts.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Helen</title>
		<link>http://www.markhneedham.com/blog/2010/03/02/riskiest-thing-first-vs-outside-in-development/comment-page-1/#comment-32830</link>
		<dc:creator>Helen</dc:creator>
		<pubDate>Wed, 03 Mar 2010 12:29:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.markhneedham.com/blog/?p=2218#comment-32830</guid>
		<description>It seems like outside in is a way of doing the riskiest thing first, since the UI is the part with the biggest risk of changing once the feature goes from being an idea to being something concrete that people can see. 

I think it&#039;s good to have multiple approaches in your toolbox. I don&#039;t think there&#039;s one that&#039;s going to work best in all situations. :)</description>
		<content:encoded><![CDATA[<p>It seems like outside in is a way of doing the riskiest thing first, since the UI is the part with the biggest risk of changing once the feature goes from being an idea to being something concrete that people can see. </p>
<p>I think it's good to have multiple approaches in your toolbox. I don't think there's one that's going to work best in all situations. <img src='http://www.markhneedham.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: INTPnerd</title>
		<link>http://www.markhneedham.com/blog/2010/03/02/riskiest-thing-first-vs-outside-in-development/comment-page-1/#comment-32819</link>
		<dc:creator>INTPnerd</dc:creator>
		<pubDate>Wed, 03 Mar 2010 04:36:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.markhneedham.com/blog/?p=2218#comment-32819</guid>
		<description>Very interesting. I think you did it the most reasonable way. Both the outside in technique and the risky thing first technique have advantages. This way you were somewhat combining the two.

I tend to do outside in development a lot. It is especially helpful if you have not fully decided how the features are going to work. Even if that is not the case, it still has many advantages. You tend to write the very high level code first, which decreases the amount of change and refactoring you need to do later. As you work your way inward, it is not very common that after finishing more inward code you need to go back to more outward code and change it as a result. However if you go inside out, then it is very common that you need to frequently change and refactor your more inward code as a result of the implementation of the more outward code. This is similar to the reason that people say TDD results in better design.

There are advantages of doing risky stuff first too. You more quickly get an idea of how long it will take you to get that part done and how difficult it will actually be, eliminating unexpected surprises later on. Some of the other advantages of this are similar to the advantages of the outside in approach. The riskier stuff is more likely to require a more creative and elaborate design. By designing it first you can at least make a design that is in and of itself as clean as possible. The complex nature of the risky code might make it better for the design of the risky code to influence the design of the more outside code, rather than to have the design of the more outside code influence the design of the more risky code.

I see the main issue as this question: Is it more important to have your risky code well designed, or is it more important to have your high level code well designed. I believe the answer depends on how risky the risky code is. If you choose to implement the risky code first, you should probably do TDD because that at least helps you to better consider how the interface will be exposed and used by the more outside code.</description>
		<content:encoded><![CDATA[<p>Very interesting. I think you did it the most reasonable way. Both the outside in technique and the risky thing first technique have advantages. This way you were somewhat combining the two.</p>
<p>I tend to do outside in development a lot. It is especially helpful if you have not fully decided how the features are going to work. Even if that is not the case, it still has many advantages. You tend to write the very high level code first, which decreases the amount of change and refactoring you need to do later. As you work your way inward, it is not very common that after finishing more inward code you need to go back to more outward code and change it as a result. However if you go inside out, then it is very common that you need to frequently change and refactor your more inward code as a result of the implementation of the more outward code. This is similar to the reason that people say TDD results in better design.</p>
<p>There are advantages of doing risky stuff first too. You more quickly get an idea of how long it will take you to get that part done and how difficult it will actually be, eliminating unexpected surprises later on. Some of the other advantages of this are similar to the advantages of the outside in approach. The riskier stuff is more likely to require a more creative and elaborate design. By designing it first you can at least make a design that is in and of itself as clean as possible. The complex nature of the risky code might make it better for the design of the risky code to influence the design of the more outside code, rather than to have the design of the more outside code influence the design of the more risky code.</p>
<p>I see the main issue as this question: Is it more important to have your risky code well designed, or is it more important to have your high level code well designed. I believe the answer depends on how risky the risky code is. If you choose to implement the risky code first, you should probably do TDD because that at least helps you to better consider how the interface will be exposed and used by the more outside code.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
