<?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>dimebrain &#187; Conversations</title>
	<atom:link href="http://dimebrain.com/topics/conversations/feed" rel="self" type="application/rss+xml" />
	<link>http://dimebrain.com</link>
	<description>We help .NET web developers create awesome services.</description>
	<lastBuildDate>Thu, 21 Jan 2010 03:12:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Why Twitter clients don&#8217;t matter</title>
		<link>http://dimebrain.com/2009/04/why-twitter-clients-dont-matter.html</link>
		<comments>http://dimebrain.com/2009/04/why-twitter-clients-dont-matter.html#comments</comments>
		<pubDate>Sat, 18 Apr 2009 15:08:20 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Conversations]]></category>
		<category><![CDATA[clients]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://dimebrain.com/?p=607</guid>
		<description><![CDATA[<p></p>
<p>Since creating <a href="http://tweetsharp.com" target="_blank">TweetSharp</a>, I&#8217;ve had the opportunity to speak with a lot of folks who are using it to build their Twitter projects, which is great to hear. Most developers feel that a) the current state of the union for Twitter clients like <a href="http://desktop.seesmic.com/">Seesmic Desktop</a> and <a href="http://www.twhirl.org/" target="_blank">Twhirl</a>, <a href="http://www.tweetdeck.com">TweetDeck </a>and <a href="http://hootsuite.com/">hootsuite</a>, <a href="http://www.thirteen23.com/">blu </a>and <a href="http://wittytwitter.googlecode.com" target="_blank">Witty</a>, just doesn&#8217;t do &#8220;all of the things I&#8217;d want a Twitter client to do&#8221;. And this is fair criticism, since client developers can&#8217;t possibly anticipate every use for Twitter, and new uses are emerging all the time.</p>
<p>The most common use for <a href="http://tweetsharp.com" target="_blank">TweetSharp</a> has been to accelerate the development&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><object width="400" height="342"><param name="movie" value="http://current.com/e/89891774/en_GB"></param><param name="wmode" value="transparent"></param><param name="allowfullscreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://current.com/e/89891774/en_GB" type="application/x-shockwave-flash"  width="400" height="342" wmode="transparent" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p>Since creating <a href="http://tweetsharp.com" target="_blank">TweetSharp</a>, I&#8217;ve had the opportunity to speak with a lot of folks who are using it to build their Twitter projects, which is great to hear. Most developers feel that a) the current state of the union for Twitter clients like <a href="http://desktop.seesmic.com/">Seesmic Desktop</a> and <a href="http://www.twhirl.org/" target="_blank">Twhirl</a>, <a href="http://www.tweetdeck.com">TweetDeck </a>and <a href="http://hootsuite.com/">hootsuite</a>, <a href="http://www.thirteen23.com/">blu </a>and <a href="http://wittytwitter.googlecode.com" target="_blank">Witty</a>, just doesn&#8217;t do &#8220;all of the things I&#8217;d want a Twitter client to do&#8221;. And this is fair criticism, since client developers can&#8217;t possibly anticipate every use for Twitter, and new uses are emerging all the time.</p>
<p>The most common use for <a href="http://tweetsharp.com" target="_blank">TweetSharp</a> has been to accelerate the development of Twitter clients, which makes sense considering that is exactly why it was written in the first place. It is the API running the show behind the scenes of our own client. After working hard over the last while on our next-generation Twitter client, and watching the community conversations about taking things to the next level, we&#8217;ve realized: <em>Twitter clients don&#8217;t matter, applications do</em>. Here&#8217;s why:</p>
<ul>
<li><strong>Too many choices</strong>. I have a pet prediction that there will be around thirty choices of Twitter client around the summer of 2009. I know of several development teams working under a veil on their version of client revolution, myself and <a href="http://twitter.com/jdiller" target="_blank">@jdiller </a>included, that plan to launch this summer. This is great for users, the more options the better, but usually when faced with overwhelming alternatives, people stick with the default. That means more TweetDeck users, and more developers with superior offerings left scratching their heads.</li>
</ul>
<ul>
<li><strong>Lack of diversity</strong>. The next evolution of Twitter clients will ultimately need to make journeys into extensibility; it just makes sense. Features like groups that persist across devices, interchanging multi-column and condensed views, slick UX, offline support, are not innovations when every developer who builds a client knows those features are necessary and are part and parcel of good software: this is the minimum bar. That means having a client that can load plugins to extend features, and possibly opening up that plugin model for others to build on top of your client, are going to be part of just about every competitive Twitter client going. TweetDeck will bring these features in if they aren&#8217;t working on them already. That means more TweetDeck users, and more developers with superior offerings left scratching their heads.</li>
<li><strong>The sunset of &#8220;features-as-applications</strong>&#8221; . Once the vast host of Twitter clients converge on the same basic set of features and offer a decent extensibility model, the game will change to swallowing up all of the applications that have managed to attract a following simply because they fulfill one missing feature of Twitter&#8217;s default offering. Want to know who&#8217;s stopped following you? That&#8217;s <a href="http://useqwitter.com" target="_blank">Qwitter</a>. Want to broadcast tweets at certain times to pre-defined groups? That&#8217;s <a href="http://tweetlater.com" target="_blank">TweetLater</a>. And the list goes on, but all of these applications are not true applications, <em>they&#8217;re just features</em>. Features are not a good reason to build a business. The Twitter client army will devour these features as either native functions of the client itself, or bring them in piecemeal as plugins.</li>
</ul>
<p>What&#8217;s left are applications in the true sense of the word: unique software that solves a particular need, whether broad or niche. This category is as wide open as innovation itself. You&#8217;ve always had the option of doing something remarkable.</p>
<p>Want to know how to get users to switch from TweetDeck to your client? Build an application worth switching clients for, then offer it exclusively from within yours. All things being equal&#8211;and they will be sooner than you think&#8211;nobody is loyal to their Twitter client.</p>
]]></content:encoded>
			<wfw:commentRss>http://dimebrain.com/2009/04/why-twitter-clients-dont-matter.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>People + Media + Messages = Social</title>
		<link>http://dimebrain.com/2009/01/people-media-messages-social.html</link>
		<comments>http://dimebrain.com/2009/01/people-media-messages-social.html#comments</comments>
		<pubDate>Mon, 19 Jan 2009 11:32:57 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Conversations]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[messages]]></category>
		<category><![CDATA[people]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://s57219.gridserver.com/?p=148</guid>
		<description><![CDATA[<p>In a social application there are always two domains: the domain you define, or the ‘problem’ domain, and the social domain. A video-sharing web application, for instance, has no problem domain. Its entire story can be described within the social domain: it has users, videos, possibly forums, possibly blogs, possibly syndication of content. In other words, there are patterns we can apply that allow us to describe this system to a framework without writing any code, at least not code that isn&#8217;t contained within some higher API-level abstraction. If we aren&#8217;t there today, then we should move in that&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>In a social application there are always two domains: the domain you define, or the ‘problem’ domain, and the social domain. A video-sharing web application, for instance, has no problem domain. Its entire story can be described within the social domain: it has users, videos, possibly forums, possibly blogs, possibly syndication of content. In other words, there are patterns we can apply that allow us to describe this system to a framework without writing any code, at least not code that isn&#8217;t contained within some higher API-level abstraction. If we aren&#8217;t there today, then we should move in that direction.</p>
<p>Whatever is unique about this video-sharing application compared to all the others, then, is the element we can design and layer on top of the framework. That is the element that we find interesting, that teammates are passionate about, and that the Internet population will find exciting (we hope). The more we are able to focus on this element, the more enjoyable the process will be. It is also a matter of necessity: any application that does nothing more than re-iterate the acceptable interactions in a social domain adds nothing to the conversation, and is ultimately forgettable. Thinking that you can &#8220;just add blogs and tags&#8221; is not going to take you very far.</p>
<p>The crux of a social application is interaction. If social software had a paradigm to follow it might be called Interaction Driven Design. In &#8220;<a href="http://www.amazon.com/Designing-Social-Voices-That-Matter/dp/0321534921/ref=dimebrain-20?ie=UTF8&amp;s=books&amp;qid=1232367957&amp;sr=8-1">Designing for the Social Web</a>&#8220;, Joshua Porter calls this the AOF pattern, or Activities, Objects, and Features. We&#8217;re designing for the need for your application to arrange itself so that it is evident what a user does, and what benefit they get from doing so.</p>
<p>The application you build is merely the implementation details of taking a description of a problem domain, and how it is allowed to interact with itself and other domains, and coupling it with a description of how its users may interact with each other. The more we can describe about those interactions up front, the less code we need to write. It is fortunate, then, that we already know much about the social domain, and it enjoys a healthy amount of overlap between the typical objects that we might find in a social application: people + messages + media. Are there any social objects that don&#8217;t fit one of these categories, and are the contracts between these categories not well-defined?</p>
<p>This blog was formed to explore and define the social domain, that which you can separate from your &#8220;secret sauce&#8221; and is the most likely candidate for abstraction. The principle we want to follow is that choosing to build social software in .NET should mean that we get to move from a great software idea to an implementation that already possesses the social domain, so that the harder work of creating your own interactions, the ones that make your application unique, is both more apparent and has common ground to relate with.</p>
]]></content:encoded>
			<wfw:commentRss>http://dimebrain.com/2009/01/people-media-messages-social.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slow software: open source and the cult of speed</title>
		<link>http://dimebrain.com/2008/11/slow-software-open-source-and-the-cult-of-speed.html</link>
		<comments>http://dimebrain.com/2008/11/slow-software-open-source-and-the-cult-of-speed.html#comments</comments>
		<pubDate>Thu, 13 Nov 2008 13:46:00 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Conversations]]></category>

		<guid isPermaLink="false">http://s57219.gridserver.com/2008/11/slow-software-open-source-and-the-cult-of-speed.html</guid>
		<description><![CDATA[<p>I spend a great deal of time reading and trying to understand technologies and methodologies that radiate outward in the software development industry and the bulk of these efforts are bundled under the banner of better, faster, cheaper; the reply from the passionate or the dangerous is usually &#8220;you can have better, faster, or cheaper, but you can only pick two&#8221;.</p>
<p>Whether we like it or not, all great software is built slowly. If it&#8217;s <em>also</em> true that a software project is completed quickly, that&#8217;s a bonus. Nothing in your project that was built fast works well. If it does, it&#8217;s&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>I spend a great deal of time reading and trying to understand technologies and methodologies that radiate outward in the software development industry and the bulk of these efforts are bundled under the banner of better, faster, cheaper; the reply from the passionate or the dangerous is usually &#8220;you can have better, faster, or cheaper, but you can only pick two&#8221;.</p>
<p>Whether we like it or not, all great software is built slowly. If it&#8217;s <em>also</em> true that a software project is completed quickly, that&#8217;s a bonus. Nothing in your project that was built fast works well. If it does, it&#8217;s because it was built on the foundations of something slow. Trace back through the underpinnings of any successful software venture and you will see evidence of slowness.</p>
<p><strong>&#8216;Not invented here&#8217; is a good thing</strong></p>
<p>Dwayne Spradlin wrote &#8220;<a href="http://changethis.com/52.05.OpenInnovation">Open Innovation: Your On-Ramp to Creating a Better Product</a>&#8221; about the beneficial role outside help can bring to a company and its offerings. In it, Dwayne remarks:</p>
<blockquote><p><em>&#8230;open innovation is helping companies to<br />
succeed because it is reaching a larger audience<br />
of people and allowing people with outside<br />
perspectives to apply their expertise to solving<br />
a problem.</em></p></blockquote>
<p>You already embrace open innovation when you recognize that you need outside help to achieve your goals, and one obvious manifestation of that is the use of open source. Whether you admit it or not, plenty of folks with outside perspectives on how you end up building your software are engaged throughout the course of your product, whether you decide those folks are paid through a vendor licensing arrangement or unpaid as contributors to open source efforts. If you are using the latter, you might want to think about giving back to that community.</p>
<p><strong>On oil barons</strong></p>
<p>Thom Hartmann, in &#8220;<a href="http://www.thomhartmann.com/index.php?option=com_content&amp;task=view&amp;id=197&amp;Itemid=102">Last Hours of Ancient Sunlight</a>&#8220;, coined the term <em>stored sunlight</em> to refer to oil and the natural, concentrated energy within it. Just as Thom warned about the dangers of exploiting this readily available resource rather than sacrifice productivity in the name of renewable energy, an open source project is the stored energy of minds working on a problem indirectly but vitally important to the health of your product or service.</p>
<p>You can still create a good product quickly, but that speed is not a symptom of effort, of scope constraints or gross efficiency. Speed is the by-product of tapping the slowness of quality components, like sweet crude, underneath your project. It is the considered and deliberate pace of proprietary or open source projects that solve the problems that come up again and again when you engineer software.</p>
<p>Software development is hard, it&#8217;s going to be hard tomorrow.</p>
<p>What happens when we take energy from the earth without giving it back? We run out. That same principle has to be true for open source projects that we rely on daily to create value, and profit from it. Open source, and open innovation, can be renewable energy sources for your business, and at greater capacities than are possible today, but you need to plant the seed.</p>
]]></content:encoded>
			<wfw:commentRss>http://dimebrain.com/2008/11/slow-software-open-source-and-the-cult-of-speed.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How companies can find and keep the best developers in the world</title>
		<link>http://dimebrain.com/2008/11/how-companies-can-find-and-keep-the-best-developers-in-the-world.html</link>
		<comments>http://dimebrain.com/2008/11/how-companies-can-find-and-keep-the-best-developers-in-the-world.html#comments</comments>
		<pubDate>Sun, 02 Nov 2008 21:33:44 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Conversations]]></category>

		<guid isPermaLink="false">http://s57219.gridserver.com/2008/11/how-companies-can-find-and-keep-the-best-developers-in-the-world.html</guid>
		<description><![CDATA[<p>In the midst of apparent financial uncertainty, when only the projects with the highest potential for quick return on investment in the shortest delivery time seem to make the cut, there is a way that software companies can ensure they are delivering world class services, without requiring drastic change. And on top of that, they can attract first class developers to help them get there.</p>
<p><strong>Start sharing</strong></p>
<p>The amount of code duplication present within even one organization, especially one structured as a consulting practice, where contracts are typically forged as work-for-hire (when all intellectual property claims to the produced work transfer&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>In the midst of apparent financial uncertainty, when only the projects with the highest potential for quick return on investment in the shortest delivery time seem to make the cut, there is a way that software companies can ensure they are delivering world class services, without requiring drastic change. And on top of that, they can attract first class developers to help them get there.</p>
<p><strong>Start sharing</strong></p>
<p>The amount of code duplication present within even one organization, especially one structured as a consulting practice, where contracts are typically forged as work-for-hire (when all intellectual property claims to the produced work transfer from the provider to the buyer, exclusively), is needless waste. You don&#8217;t need to start at square for one every project you undertake, and it only invites defect déjà vu and an inability to share knowledge across teams. If this is you, then this a good place to start before moving forward. If you do have a reasonable about of sharing across your delivery teams, then you can start thinking about how effective this has been for you, and how you can extend that circle of sharing into a bigger picture that guarantees you&#8217;re getting the best talent for the best price: open source. That&#8217;s right, financially supporting open source efforts means the best developers in the world are working on your software.<br />
<strong><br />
Where and what great developers want to work, and work on</strong></p>
<p>Wherever they want, and whatever they want. That goes without saying, and it&#8217;s actually to your advantage. Discounting the obvious wins in energy consumption overhead, the fact that the best developers in the business are focused and dedicated to one or another specific challenge in software design means that they will find better answers, and faster, to the problems they champion. No matter how talented your development team is, they cannot afford to focus on these often subtle and difficult problems, and still deliver your project on time. It&#8217;s not in the budget. Open source developers with funding are happy developers. They get to create the massive value that they see in their mind and turn into functional software. You get to use it.</p>
<p><strong>The reality of innovation</strong></p>
<p>There is very little in the way of real innovation in software development at the product, services, and delivery level. Chances are, if you are a services company, you aren&#8217;t interested in building a fully-featured object-relational mapping solution within your company, but you <em>are</em> interested in using one, as it&#8217;s a staple in your own developers&#8217; mission to build your next data-driven solution. So you&#8217;ll likely perform some due diligence and in the end, buy something off the shelf or use an existing open source project to get the job done. You aren&#8217;t making any progress here in terms of technical ability, you&#8217;re making an investment in someone else&#8217;s effort, using it as is, and hoping your team can bridge any gaps there might be in implementation.</p>
<p><strong>Identify the open source projects that are important to your organization</strong></p>
<p>Your developers can help this process immensely because they already know, and will tell you, &#8220;what hurts&#8221; in their current development process. If you can match that pain to projects that stand a good chance of removing that pain, then you&#8217;re on the right track.</p>
<p>You likely can&#8217;t afford the services of someone like <a href="http://ayende.com">Ayende</a> on a regular basis, but you certainly <em>need</em> his talent and vision, if you&#8217;re not already making use of it, whether on purpose or by accident. If you&#8217;re willing to admit that what makes your brand successful is not the constant, painful reinvention of a hundred wheels, but in the quality, personality, and depth of the services you provide for your clients, then you can see the value that a vibrant, active, and well-funded open source effort is going to have on the details of realizing your vision.</p>
<p><strong>The big idea</strong></p>
<p>It&#8217;s actually a small idea. Companies will win the best talent in the world if they &#8220;hire&#8221; that talent as a collective. Imagine providing one developer&#8217;s salary worth of open source investments in projects that will directly benefit your teams so that they can do their jobs better, faster, and in big way. If only a few companies followed this lead, then the most promising efforts in data persistence, web services, search, and anything else important to your company, could come to light much faster, as the developers working on them would be able to dedicate their days to solving and growing those spaces in earnest.</p>
<p>It is cheaper in the long run to fund interesting projects that deliver bottom-line productivity to your team, whether that&#8217;s today or in the near future, than it is to swell your ranks with more developers to run up against the same challenges, project after project, day after day.</p>
<p><strong>The debate</strong></p>
<p>Open source was never truly free, as many companies cite support as the primary reason for hesitancy to adopt an open source effort despite what that software might do for them. So, rather than go open source, a company will buy a product where there is some commitment to support it (and if you&#8217;ve gone this route before, that support is never guaranteed to be of the expected quality). Yet investing in open source breathes life into a group of developers who want nothing more than to create that software for you; incidentally, <a href="http://ayende.com/Blog/archive/2008/11/01/developing-linq-to-nhibernate.aspx">Ayende is raising funds</a> to build <a href="http://ayende.com/Blog/archive/2007/03/16/Linq-for-NHibernate.aspx">LINQ to NHibernate</a>.</p>
<p>The only differences between where you place your investment in software is that funding open source means empowering the creation of the software you actually need, buying software is the act of getting close, and then hoping you can make enough noise to get your real needs addressed, and hiring developers is hoping you&#8217;ve rounded up enough intellectual capital to solve the problem in-house while still meeting deadlines. If a retail software product closes shop, you&#8217;re left with a frozen project; if an open source project loses steam, you can fork it, or bring it in-house.</p>
<p>And no, funding open source does not mean funding your competitors. You already know you do not differentiate yourself in the marketplace based on how well you persist business objects (and if you do, likely you&#8217;re not investing in that particular strain of open source). The point is to &#8220;outsource&#8221; the technical tasks that are not the intellectual property of your delivery to the best developers in the world (or at least the most passionate, if you&#8217;re splitting hairs) at those tasks, where the number of companies that take a similar approach drives the cost of that &#8220;outsourcing&#8221; down.</p>
<p><strong>Getting it done</strong></p>
<p>Web sites like <a href="http://fundable.org">fundable.org</a> make these transactions transparent and goal-oriented; a project only gets funded if there is enough demand, and you may even be able to direct your funds to the specific features and enhancements you need most in your organization. Naturally, if enough companies decided to take this route, we&#8217;d end up with a custom web site designed to bring open source and its benefactors together in one place.</p>
<p>Just imagine if even one developer salary per company was invested in open source technology. Certainly that salary would contribute more to your company&#8217;s ability to produce great work across your whole organization than one more hand on deck.</p>
]]></content:encoded>
			<wfw:commentRss>http://dimebrain.com/2008/11/how-companies-can-find-and-keep-the-best-developers-in-the-world.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Social networking doesn&#8217;t mean features</title>
		<link>http://dimebrain.com/2008/10/social-networking-just-means-features.html</link>
		<comments>http://dimebrain.com/2008/10/social-networking-just-means-features.html#comments</comments>
		<pubDate>Tue, 28 Oct 2008 13:54:00 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Conversations]]></category>

		<guid isPermaLink="false">http://s57219.gridserver.com/2008/10/social-networking-doesnt-mean-features.html</guid>
		<description><![CDATA[<p>If we push the idea further that <a href="http://www.dimebrain.com/2008/10/a-short-manifesto-for-web-startups.html">technology is the least important aspect of your next startup</a>, then we can extend further to consider that &#8220;social networking&#8221;, the phenomenon that it is, is misinterpreted to mean a subset of web application features that have become standard and required in your projects.</p>
<p>While it might be obvious to most, we can start by making a distinction between three terms that more or less overlap in every conversation about building a modern web application where there is a entrepreneurial and social spirit behind the scenes.</p>
<p><strong>Web 2.0</strong></p>
<p>The concept of Web 2.0 (October 2004&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>If we push the idea further that <a href="http://www.dimebrain.com/2008/10/a-short-manifesto-for-web-startups.html">technology is the least important aspect of your next startup</a>, then we can extend further to consider that &#8220;social networking&#8221;, the phenomenon that it is, is misinterpreted to mean a subset of web application features that have become standard and required in your projects.</p>
<p>While it might be obvious to most, we can start by making a distinction between three terms that more or less overlap in every conversation about building a modern web application where there is a entrepreneurial and social spirit behind the scenes.</p>
<p><strong>Web 2.0</strong></p>
<p>The concept of Web 2.0 (October 2004 &#8211; October 2008) from a technology viewpoint is the implementation of, and aesthetic, of a way of viewing the web. This means different things to different people, but during this time we witnessed the movement from taxonomy to folksonomy, syndication of content, wholesale adoption of services, user-generated content, and a softer and responsive user experience.</p>
<p>If there are any features that are decidedly Web 2.0, then they are <em>blogs</em> and <em>feeds</em> and <em>tagging; </em>while they are often described alongside social networking and often bundled within any number of startups, these features sit in their own category.</p>
<p><strong>Social networking</strong></p>
<p>The heart of social networking is the social graph, often simplified to a single, symmetric relationship known as &#8220;friend&#8221;. Through a web application&#8217;s ability to define relationships, it is able to implement features which are often referred to as interactions. By querying and predicting on the results of many interactions between users who are related in some way, the value of the social network rises to the surface. Social networking is one way to realize one of the promises of Web 2.0: that the more active the web application, the more valuable it is to its users. Contrast this to many disconnected applications on the desktop. These kinds of applications are meant to serve a different paradigm: <em>they are useful the first time they are used</em>. This is why most business models for web applications rely on &#8220;<a href="http://www.imdb.com/title/tt0470679/">aggregating eyeballs</a>&#8220;.</p>
<p>Web applications can be social without being social networking applications, in this case it is literally engaging the network that makes all the difference. Are blogs, feeds, and tagging social networking features? No. What about user account management, profiles, chat, and search? No. Social networking features are anything you devise that leverages the social graph. A social networking site that links coffee aficionados together to make recommendations about the best beans, and the best brewing techniques might use tagging to distinguish bean varieties, but the real feature in this case is the <em>recommendation</em> engine that looks at what people like to drink, and suggests what else they might love. The real feature is the coffee drinking <em>reputation</em> which organizes into a natural, hierarchical relationship between the experts, and the enthusiasts.</p>
<p><strong>Startup</strong></p>
<p>As mentioned previously, a startup is a new venture. In our world, it&#8217;s on the web, and because it is on the web it will seek to use features like those mentioned above, to create value and ultimately convert that value into income.</p>
<p><strong>Social networking is a process, not a product</strong></p>
<p>One important take-away from these distinctions is that on top of being a social networking application (if it is), your startup is ultimately just a web application, and that means you need to address all of the same issues that any application would, you just might experience the pain sooner and in larger amounts, because as social software, your application is public-facing, and <em>designed to be used often.<strong> </strong></em></p>
<p>There&#8217;s no secret sauce for a social networking site, there is only the sound implementation of features, <em>any</em> features, that support and encourage interactions on a social graph. Building a social platform is exactly like developing any web platform, to the point where it doesn&#8217;t really deserve its own name, but you can call it social when you&#8217;ve thought about how to bring features together (such as an asynchronous, predictive fetch for &#8216;mashup&#8217; data) in a way that makes it easier to build social sites.  You can call it social when you&#8217;ve thought about how it&#8217;s going to perform with a million people performing hundreds of actions a day.</p>
<p>Features, ultimately, are not overly complex, though they become challenging when they need to scale. They can be designed with sound principles, with a mind to reusability, and the end result with such a &#8217;social platform&#8217; should be a way to build many social applications with the same code base, and to make the process easy to repeat.</p>
<p>The only aspect that truly matters is how you define and create a valuable service for users by leveraging, through interactions, the social graph, without getting mired in the details of the features. Social software is a much larger animal than social networking.</p>
]]></content:encoded>
			<wfw:commentRss>http://dimebrain.com/2008/10/social-networking-just-means-features.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A short manifesto for web startups</title>
		<link>http://dimebrain.com/2008/10/a-short-manifesto-for-web-startups.html</link>
		<comments>http://dimebrain.com/2008/10/a-short-manifesto-for-web-startups.html#comments</comments>
		<pubDate>Sat, 25 Oct 2008 12:14:00 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Conversations]]></category>

		<guid isPermaLink="false">http://s57219.gridserver.com/2008/10/a-short-manifesto-for-web-startups.html</guid>
		<description><![CDATA[<p><strong>1. You must run it successfully with a handful of people, possibly just one</strong></p>
<p>One myth about startups is that they take a lot of people to create. The opposite is closer to the truth. You need a small number of talented people to keep the noise down, to avoid dilution, and to solve the hard problem of making something simple.</p>
<p>On the web you need someone with peerless graphic design sensitivities, one great developer, and possibly someone leading you and the idea. This can be three people, two people that can finish each other&#8217;s sentences, or one uncommon individual with&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><strong>1. You must run it successfully with a handful of people, possibly just one</strong></p>
<p>One myth about startups is that they take a lot of people to create. The opposite is closer to the truth. You need a small number of talented people to keep the noise down, to avoid dilution, and to solve the hard problem of making something simple.</p>
<p>On the web you need someone with peerless graphic design sensitivities, one great developer, and possibly someone leading you and the idea. This can be three people, two people that can finish each other&#8217;s sentences, or one uncommon individual with great tools, to help make switching hats easy.</p>
<p><strong>2. You must launch it with almost no money</strong></p>
<p>We are living in the golden age of small startups. Investors still exist, and investors still have money, but it&#8217;s probably better for you in the long run, especially with a small team, to avoid them altogether. The startup that works without money, keeps the money they make. The startup without money, that makes no money, loses only time (and the less time the better).</p>
<p><strong>3. The least important part of your startup must be the technology; organize accordingly </strong></p>
<p>When asked to described your startup in one sentence, &#8220;it has dynamic drag and drop modules&#8221; is not an answer. A startup&#8217;s execution is everything, it&#8217;s true, but only on an idea, not on itself; executing on itself is just execution.</p>
<p><strong>4. The technology you choose must be easy, or half of your job must be helping to get it there </strong></p>
<p>You need to be able to go from idea to working application in almost no time. You&#8217;re in a hurry. You&#8217;re in a hurry because you need to kill your startup today, right now, if the idea behind it turns out to be uninteresting, not useful, not something you really believe in.</p>
<p>You&#8217;re in a hurry because you always have more ideas than time. The less time it takes the more ideas you can try out. What you can&#8217;t do is waste your time getting the technology to behave, then dance, and then sing. If you&#8217;re already great at a technology that dances, teach it how to sing so you&#8217;re that much faster on your next idea.</p>
<p><strong>5. Stop being one</strong></p>
<p>A startup is a company that its owner intends to sell; in the game it&#8217;s called a <a href="http://en.wikipedia.org/wiki/Liquidity_event">liquidity event</a>, which is when your company disintegrates like gum that&#8217;s been chewed too long, and it repurposes itself into a company that is meant to grow fast, provide a return on investment, and receive leadership from a board of directors.</p>
<p>All this means is that if, at the end of you describing your project to a stranger you don&#8217;t end with &#8220;and then we get acquired&#8221;, then you&#8217;re probably not a startup. This isn&#8217;t a bad thing, it&#8217;s actually great news, because now you know that you aren&#8217;t a fit for investors, and they aren&#8217;t a fit for you. In other words, you aren&#8217;t building your startup for them, it&#8217;s for you, and it&#8217;s for your users. Go ahead and build your startup, solve a problem, and see what sticks.</p>
]]></content:encoded>
			<wfw:commentRss>http://dimebrain.com/2008/10/a-short-manifesto-for-web-startups.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Thoughts on building social software in .NET</title>
		<link>http://dimebrain.com/2008/07/thoughts-on-bui.html</link>
		<comments>http://dimebrain.com/2008/07/thoughts-on-bui.html#comments</comments>
		<pubDate>Thu, 17 Jul 2008 22:33:41 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Conversations]]></category>

		<guid isPermaLink="false">http://s57219.gridserver.com/2008/07/thoughts-on-building-social-software-in-net.html</guid>
		<description><![CDATA[<p>Social software is, before anything, just software. Presuming we have a goal of developing a social application in .NET, we can deliver that goal however we wish. That said, there remains a growing number of people who are actively searching for guidance on how to build social networking applications (and their better-dressed cousins, web 2.0 startups) in .NET. I offered some quick <a href="http://www.dimebrain.com/2008/04/five-recommenda.html">suggestions</a> in the past, but they were a little bit-specific.</p>
<p><strong>Choosing .NET<br /></strong><br />I believe that .NET is both an excellent choice for startups and a strong platform for social software. Where it seems to lack the most is adoption, which&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>Social software is, before anything, just software. Presuming we have a goal of developing a social application in .NET, we can deliver that goal however we wish. That said, there remains a growing number of people who are actively searching for guidance on how to build social networking applications (and their better-dressed cousins, web 2.0 startups) in .NET. I offered some quick <a href="http://www.dimebrain.com/2008/04/five-recommenda.html">suggestions</a> in the past, but they were a little bit-specific.</p>
<p><strong>Choosing .NET<br /></strong><br />I believe that .NET is both an excellent choice for startups and a strong platform for social software. Where it seems to lack the most is adoption, which is an essential ingredient in attracting active communities that will help support others through tools and conventions, and developers who will create those conventions around which a community can form. Without a community, any tool we&#8217;re using to build an application is just code in our bucket; whether we learn to use it effectively and whether it&#8217;s even fit to do the job are unknowns that we must solve ourselves.</p>
<p>When someone forms the opinion</p>
<blockquote><p>&#8220;I can&#8217;t build a social application in .NET, I should probably use <a href="http://www.rubyonrails.org/">Ruby on Rails</a>&#8220;, </p>
</blockquote>
<p>to me, this translates into:</p>
<blockquote><p>&#8220;I googled it, and there doesn&#8217;t seem to be an active .NET community and no generally accepted practice, that, if I learn it well and follow it, I can build social applications that are higher in quality, readability and turnaround, and lower in defects, ambiguity, and friction&#8221;. </p>
</blockquote>
<p>David Seruyange offers another <a href="http://metadeveloper.blogspot.com/2008/07/predictably-irrational-startups-and.html">interesting possibility</a>, which is the idea that having to pay any amount to develop software (which is admittedly easy to do when you&#8217;re using a Microsoft stack) causes psychological pain which results in fewer startups choosing .NET. Of course, there are many alternatives in .NET that are free and open-source.</p>
<p><strong>The power of convention</strong></p>
<p><a href="http://www.rubyonrails.org/">Ruby on Rails</a>, on the other hand, has a well-marketed, active and passionate community practicing the &#8216;rails&#8217; convention which on the outset appears like a clear winner. Rather than focus on the technical specifics, we need to consider the act of following a convention in and of itself. The benefits of following a good convention include:</p>
<ul>
<li>You get to the point of building what&#8217;s specific and unique about <em>your</em> application as quickly as possible
<li>You can lean on what you already have, so you end up <em>describing</em> more, and <em>coding</em> less (this is the difference between idiomatic and imperative programming)
<li>What is standard, is standardized</li>
</ul>
<p>There is nothing stopping anyone from developing compelling social applications in .NET, but there may be hesitation stemming around a lack of options for a good convention to follow. While I have a stake in <a href="http://www.dimebrain.com/about">my own convention</a>, it can be anything that works. With so many social applications emerging that seem to materialize out of thin air, it&#8217;s imperative that you can get from your exciting new take on things, to a working application, as quickly as possible. A convention means you don&#8217;t have to <a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">repeat yourself</a>.</p>
<p><strong>The problem domain</strong></p>
<p>The problem domain, is, essentially, your application. It&#8217;s &#8220;<em>you can compare your paintball wounds with your friends</em>&#8220;, and it&#8217;s &#8220;<em>allows you to record and store personal recommendations about job-seekers for prospective employers</em>&#8220;, and it&#8217;s &#8220;<em>buy funny hats</em>&#8220;. This is the part you&#8217;re excited about, that you excel at, and that you&#8217;re trying to get in front of people.</p>
<p><strong>The social domain</strong></p>
<p>All social software, before considering how it is delivered (on the web, on a mobile device, on a desktop), already follows a convention, though it is not a technical convention, but rather a social one. An application is generally considered social:</p>
<ul>
<li>if it is organized around &#8216;interactions&#8217; its users perform
<li>if it co-operates with other social applications, providing existing interactions or combining several to form new ones (often referred to as a <em><a href="http://en.wikipedia.org/wiki/Mashup_%28web_application_hybrid%29">mashup</a></em>)
<li>if it provides a public API for other social applications to use its own interactions</li>
</ul>
<p>The social domain is the &#8216;everything else&#8217; of your application; the people, the messages, and the media, that make up the moving parts. It doesn&#8217;t matter if your application lets you tag photos or find the closest restaurant, everything in the social domain can exist in your application, and everyone else&#8217;s. It also has a very special relationship with your problem domain, and the easier it is to get the two to get along, the easier your development experience will be.</p>
<p><strong>Getting domain-specific</strong></p>
<p>The path from eliminating repeated tasks, to a social software convention, is through building reusability into the problem and social domains of your application. We can build everything inside the social domain <em>once</em>, and provide one or several <a href="http://en.wikipedia.org/wiki/Domain_Specific_Language">domain-specific languages</a> to describe our problem domain and how it relates to the social domain underneath. </p>
<p>This is where you&#8217;ll be happy you chose .NET. I&#8217;d argue that LINQ, and the C# 3.0 language features that implement it, provides a solid base from which to build domain-specific languages, or rather composable interfaces that let us express clearly what we want to do with our convention-defining code. We can also provide flexible domain-specific scripting capabilities with a .NET alternative language like <a href="http://en.wikipedia.org/wiki/Boo_(programming_language)">Boo</a> to make the process of describing &#8220;users can tag and rate paintball photos&#8221; an architecture-free task.</p>
<p>It is possible to build great social software in .NET, or any capable platform, if there are conventions, supported by communities, from which to drawn from. You can do it in isolation as well, as many successful .NET-based web startups have done (there are many out there, though they may not publicize the fact explicitly).The point is that there is no secret sauce other than good software design, and you don&#8217;t need to worry about choosing .NET in fear of some hidden FrameworkNotWorthyException crushing your dreams.</p>
]]></content:encoded>
			<wfw:commentRss>http://dimebrain.com/2008/07/thoughts-on-bui.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Books vs. blogs: the value of technical books and ideas to improve them</title>
		<link>http://dimebrain.com/2008/07/books-vs-blogs.html</link>
		<comments>http://dimebrain.com/2008/07/books-vs-blogs.html#comments</comments>
		<pubDate>Fri, 04 Jul 2008 20:53:48 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Conversations]]></category>

		<guid isPermaLink="false">http://s57219.gridserver.com/2008/07/books-vs-blogs-the-value-of-technical-books-and-ideas-to-improve-them.html</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><em>[Disclosure: I am writing a technical book]</em></p>
<p>Everybody Googles. There, I said it.</p>
<p><img border="0" alt="computer_cat" align="left" src="http://www.dimebrain.com/WindowsLiveWriter/computer_cat.jpg" width="260" height="216" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN: 0px 15px 0px 0px; BORDER-RIGHT-WIDTH: 0px" /> </p>
<p>There are too many frameworks, and too many technologies for it to be a responsible decision to attempt to memorize them all. We refer to the web constantly when learning new technologies or pushing through insipid bugs. I&#8217;d even go so far to say that this is a desirable characteristic of a developer: someone who knows where to get information when they don&#8217;t know the answer, or when the path to a solution is vague. Of course, you need filters to safely learn from the web, or you might pick up bad habits, erroneous code, or unknowingly breach licenses in your pursuit of knowledge (or laziness). Risks like these lead some to embrace technical books. Some say technical books are dead or dying.</p>
<p><strong>What is a technical book?</strong></p>
<p>A technical book is not:</p>
<ol>
<li>a fundamental work of guidance, like <a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1215195095&amp;sr=1-1">Code Complete</a> or <a href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1215195450&amp;sr=1-1">Framework Design Guidelines</a> </li>
<li>a patterns and practices collection like <a href="http://www.amazon.com/Head-First-Design-Patterns/dp/0596007124">Head First Design Patterns</a> that is fairly technology agnostic</li>
</ol>
<p>A technical book is:</p>
<ol>
<li>an API reference that is specific to a particular technology or framework, and even more so if it is versioned </li>
<li>a patterns and practices collection that is specific to one or many implementations</li>
</ol>
<p><strong>Don&#8217;t write a technical book</strong></p>
<p>When I was negotiating a book contract with my favorite publisher earlier this year, many people told me not to write a book, so much so that I decided not to write it. There are quite a few blogs on the subject. Here&#8217;s a reading list:</p>
<ol>
<li><a href="http://www.codinghorror.com/blog/archives/000971.html">Do Not Buy This Book (Coding Horror)</a> </li>
<li><a href="http://ejohn.org/blog/programming-book-profits/">Programming Book Profits (John Resig)</a> </li>
<li><a href="http://www.charlespetzold.com/blog/2007/10/081247.html">Hard Work, No Pay: What&#8217;s the Point? (Charles Petzold)</a></li>
</ol>
<p>I don&#8217;t believe that these posts about the perils of writing a technical book are meant to protect the status quo for a small elite of successful authors. I do believe that these are real warnings from impassioned people who wanted to contribute to the community in book form (and make money) and emerged battered, or at least wise, by the experience. It seems the story of writing a book is a sad affair. <br /><strong><br />Write a technical book</strong></p>
<p>There can be physical differences, of course, between books and blogs. The differences might provide ancillary advantages like portability or aesthetics, but those aren&#8217;t the advantages of books over blogs that are going to win anyone over. They&#8217;re built-in, and if they were real advantages, then nobody would be worried. But we have e-books. And audiobooks. And podcasts. And <a href="http://www.amazon.com/Kindle-Amazons-Wireless-Reading-Device/dp/B000FI73MA">Kindle</a>.</p>
<p>The value of a technical book, and the advantage it has over blogs, and the advantage it has that can help it continue to thrive despite the alternatives is, to me, identical to the value of any book on any shelf: </p>
<p>I buy a technical book for the <strong>story</strong>. </p>
<p>A story is complete (it has a beginning, a middle, and an end). A story treats the material like a complete whole, and it has context. While a blog offers schizophrenic, just-in-time information to help me tell my own story somewhere else, a book is, or should be, a story about me, using the technology, encountering challenges, overcoming them, and emerging the hero. That is, after all, the story I and every developer I know faces on a daily basis. Hero mileage may vary. <em><strong>[Update]</strong> I don&#8217;t mean to say that a technical book should contain an actual narrative, only that it provide context and that the source material paints a complete picture (for example, a reference application).</em></p>
<p>Bill Wagner&#8217;s <a href="http://www.amazon.com/Effective-Specific-Improve-Software-Development/dp/0321245660/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1215197008&amp;sr=8-1">Effective C#</a> (and <a href="http://www.amazon.com/More-Effective-Specific-Software-Development/dp/0321485890/ref=pd_bbs_sr_2?ie=UTF8&amp;s=books&amp;qid=1215197008&amp;sr=8-2">More Effective C#</a> which is in early access), is the prototypical example of a great technical book. The story of this book is the one about how you decided to really dig in to your career as a developer and master C# by applying sound practices that are grounded in how the C# compiler actually generates the <a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language">MSIL</a> bytecode that becomes your application. I love this story, and turn to it often to remind myself that bytecode is the linchpin of quality programming. It never lies.</p>
<p><strong>Ideas for improving technical books</strong></p>
<ol>
<li><strong>Tell a story <br /></strong>A good story is a reference application: some semi-real world application of the story that is believable. It looks and feels and like an application I could be asked to write tomorrow. Even better, involve me in the story by providing some reusable hooks into the design that let me actually use the source code in my application. Provide a Visual Studio template that sets up any practices or patterns you&#8217;re recommending in the book.</li>
<li><strong>Make my technical book a subscription<br /></strong>I know that technology and approaches change often, so why doesn&#8217;t my technical book? If the book is titled along the lines of &quot;Building Flexible Service Layers with WCF&quot;, I know that the book is an API reference, but I don&#8217;t know what version of WCF, or whether today it is useful to use yesterday&#8217;s pattern. This is especially true for emerging platforms like <a href="http://www.silverlight.net/">Silverlight</a> (anyone still own their Silverlight 1.0 books?) A subscription-based technical book is an on-going investment in the story of accomplishing the book title&#8217;s objective. If the story changes, blogs change overnight, but the only part that changes on a static book is the price tag.</li>
<li><strong>Involve multiple authors on the same book<br /></strong>A consequence of the improvement above is that an author will likely move on; just like projects, I don&#8217;t imagine anyone would want to write an objective-based subscription book for years. Less politely, as developers advance their careers they take leadership roles, become less involved in the intricacies of the current technology (this is often necessary), become more involved with their families (this is a good thing) and may broaden their perspective. This is not always the case, but a technical book, especially one living through multiple versions like the previous example, would benefit from fresh eyes, ears, and laser focus.</li>
<li><strong>Version the book (code and pages)<br /></strong>Technical books are usually about code, and code is versioned. Let me visit your web site (or my book subscription) today, and download an on-demand generated PDF, or order a fairly priced print-on-demand solution that lets me get today&#8217;s version today. If I want to &quot;Build Flexible Service Layers with WCF&quot;, presuming that WCF lasts several versions, I would love to order up this objective in the version my project uses. If I have multiple projects that use different versions, I know my subscription covers PDF access to all of them. Errata is inevitable, but it is manageable if my subscription covers online code access to the book&#8217;s source code repository. You could even let me submit a patch.</li>
</ol>
<p>Bloggers and technical book authors can live in harmony knowing they both fill a need. A lot of the times they are the same person, but they do not have to be. Writing a book requires a sense of style and rigor that you simply don&#8217;t need to write a successful technical blog (though it helps). Here is a good blog <a href="http://www.xaprb.com/blog/2008/06/15/what-is-it-like-to-write-a-technical-book/">post</a> on one author&#8217;s experience.</p>
<p>I&#8217;m on your technical blog because I am writing a story, the story of my work day, and I&#8217;ve got writer&#8217;s block. I need just-in-time information that&#8217;s relevant and current. I don&#8217;t want to skim through your archives, and it&#8217;s quite possible that I won&#8217;t be back (unless I keep landing on your blog during my research, in which case you get tossed into my feed reader).</p>
<p>Technical books aren&#8217;t dead, but good ones are harder to find. A few changes to how technical books are read and shared will make them more accessible and may even encourage more sales from developers hungry for good stories.</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a6019c8b-f96d-4c0e-bc2c-b5e99082f54d" class="wlWriterSmartContent" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; DISPLAY: inline">Technorati Tags: <a href="http://technorati.com/tags/technical%20books" rel="tag">technical books</a></div>
<div class="wlWriterSmartContent" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; DISPLAY: inline"></div>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.dimebrain.com%2f2008%2f07%2fbooks-vs-blogs.html"><img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.dimebrain.com%2f2008%2f07%2fbooks-vs-blogs.html&amp;bgcolor=FF9933&amp;cbgcolor=FFFFCC" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://dimebrain.com/2008/07/books-vs-blogs.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Six recommendations for starting a startup with ASP.NET</title>
		<link>http://dimebrain.com/2008/04/five-recommenda.html</link>
		<comments>http://dimebrain.com/2008/04/five-recommenda.html#comments</comments>
		<pubDate>Tue, 22 Apr 2008 00:51:07 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Conversations]]></category>

		<guid isPermaLink="false">http://s57219.gridserver.com/2008/04/five-recommendations-for-starting-a-startup-with-aspnet.html</guid>
		<description><![CDATA[<p><strong>Update</strong> [<strong>04/22/2008</strong>]: <em>Now includes a bonus recommendation!</em></p>
<p>There seems to be a well-deserved observation that very few web startups are making use of ASP.NET, choosing instead to leverage more open platforms like <a href="http://en.wikipedia.org/wiki/LAMP_(software_bundle)">LAMP</a>, and <a href="http://www.rubyonrails.org/">ROR</a>. As a web developer who has launched a startup in ASP.NET, I have to admit that there is some truth to the difficulties presented in the discussions that exist online (<a href="http://www.sashasydoruk.com/2007/08/19/where-are-all-the-cool-startups-that-run-on-aspnet/">here</a> <a href="http://www.lullabot.com/blog/why-not-asp-net">are</a> <a href="http://weblogs.asp.net/astopford/archive/2007/09/05/is-asp-net-good-enough-for-startup-s.aspx">three</a> examples), and as an ASP.NET startup developer, I&#8217;ll offer five recommendations for you if you plan on going this route, not based on simple personal preference (I disobeyed many of these to the detriment of my&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><strong>Update</strong> [<strong>04/22/2008</strong>]: <em>Now includes a bonus recommendation!</em></p>
<p>There seems to be a well-deserved observation that very few web startups are making use of ASP.NET, choosing instead to leverage more open platforms like <a href="http://en.wikipedia.org/wiki/LAMP_(software_bundle)">LAMP</a>, and <a href="http://www.rubyonrails.org/">ROR</a>. As a web developer who has launched a startup in ASP.NET, I have to admit that there is some truth to the difficulties presented in the discussions that exist online (<a href="http://www.sashasydoruk.com/2007/08/19/where-are-all-the-cool-startups-that-run-on-aspnet/">here</a> <a href="http://www.lullabot.com/blog/why-not-asp-net">are</a> <a href="http://weblogs.asp.net/astopford/archive/2007/09/05/is-asp-net-good-enough-for-startup-s.aspx">three</a> examples), and as an ASP.NET startup developer, I&#8217;ll offer five recommendations for you if you plan on going this route, not based on simple personal preference (I disobeyed many of these to the detriment of my sanity, pocketbook, and project lifecycle) but out of my desire for you to succeed without needing to overcome the same obstacles that I did.</p>
<p>For a bit of context, my startup took ten months to complete from concept to completion, which, in this world of &quot;<a href="http://gettingreal.37signals.com/">Getting Real</a>&quot; and &quot;<a href="http://www.davidco.com">Getting Things Done</a>&quot;, is nothing short of a death march. A one man death march should be impossible, one of my colleagues pointed out to me (he also founded an ASP.NET web startup, but followed most of these pointers and is doing great). So, here are my recommendations for the would-be startup founder flying the <a href="http://www.gapingvoid.com/Moveable_Type/archives/003388.html">blue monster</a> flag:</p>
<p><strong>1. Do use <a href="http://www.asp.net/mvc/">ASP.NET MVC</a> (or at least learn the web like everybody else)</strong></p>
<p>Don&#8217;t deal with ViewState, don&#8217;t deal with leaky abstractions of the web in a way that confounds you. You&#8217;ll thank yourself for writing cleaner code that you can test, and for mastering the deceptively simple art of web development. &quot;It&#8217;s all just markup&quot; is a mantra that will keep you on track when you feel overwhelmed with the new model, but it&#8217;s a new model you <em>want </em>to learn. If you don&#8217;t want to learn ASP.NET MVC, do yourself a favor and disable ViewState at the page level, and do what you can to avoid using it, whether that&#8217;s baking your own MVC-like &quot;markup + business objects&quot; design, or embracing the client-centric development model with JavaScript against ASP.NET controls that don&#8217;t require ViewState. Make friends with the Repeater.</p>
<p><strong>2. Don&#8217;t use large third-party control libraries (they don&#8217;t buy you the time you think they do)</strong></p>
<p>I decided to buy a very popular (and expensive) third party control library. My instinct was that, as a single developer working on a web startup by moonlight, I could leverage enterprise-class support and a robust API to make short work of some of the more complex UI tasks. I ended up spending more time trying to ramp up with the documentation and hunting down bugs or my own misuse of the framework than I would have writing my own controls. It may be tempting to believe the third party solution will solve all of your problems, but the key to a startup is to release early and get feedback as soon as possible. Stick with simple controls and markup that you can understand and stay clear of off-the-shelf products if your time is tight (and it is). Remember that many hands built that product, and attempting to master its nuances is no different, to me, than stealing code and trying to reverse-engineer it; both cut out your momentum and take you away from your own ideas. Nobody needs extra dependence. If you have to use a framework, stick with a free one like <a href="http://www.extjs.com/">ExtJs</a>, and use the money on graphic design instead.</p>
<p><strong>3. Do use <a href="http://www.jquery.com/">jQuery</a> (it&#8217;s small and does it all)</strong></p>
<p>You simply can&#8217;t afford to send 150kb to a user&#8217;s browser to buy you basic Javascript UI. This little monster costs you 15kb and it can do <em>everything</em> you can imagine. jQuery in combination with (optimized and combined) ASP.NET AJAX web service proxies is all you need to make calls over the wire and do amazing things on the browser. Any other solution is unwieldy, bloated, and takes too much time, period.</p>
<p><strong>4. Don&#8217;t use the <a href="http://www.asp.net/AJAX/Documentation/Live/overview/UpdatePanelOverview.aspx">UpdatePanel</a> (tough love, but you need it)</strong></p>
<p>Speaking of unwieldy, don&#8217;t let this siren succor you into a false sense of ability. The UpdatePanel might be useful for the very isolated case of posting back a large form that needed to be submitted in the first place, but under no circumstances does sending most of a web page to the server and then updating small parts of it on the client constitute a practical or desirable approach to building AJAX sites that aren&#8217;t on a corporate intranet with a giant pipe underneath. If you&#8217;re a startup you&#8217;re likely building a public-facing application that&#8217;s intended to be <a href="http://en.wikipedia.org/wiki/SaaS">SaaS</a>. If you want that service to be performant, you need to make small client changes either entirely on the client itself, or submitting just what you intend to change through a web service call. Take the time and learn how to do &quot;real&quot; ASP.NET AJAX; that is, build static page methods, WCF services, or script methods, and call those on the client-side via JavaScript. ASP.NET AJAX will take care of the JSON serialization for you so you&#8217;re free to return custom objects in your service methods. Anything else is asking for trouble.</p>
<p><strong>5. Do use a graphic designer (A startup has no excuse for poor design)</strong></p>
<p>A &quot;programmer&#8217;s aesthetic&quot; is often cited as a suitable excuse for a shoddy design, and if you study the well-established startups that exist in the wild, many of them leave a lot to be desired in this department. Don&#8217;t confuse successful-and-ugly with a real decision made somewhere along the line to skimp on design. Those sites are successful for a variety of unrelated reasons, including timing, and if you are similar in any way to one of these existing ventures, you&#8217;re going to need to differentiate in more ways than features. Do yourself a favor and at least invest a little money on your logo.</p>
<p><strong>6. Do use an automated entity persistence solution (because you have better things to do)</strong></p>
<p><a href="http://john-sheehan.com/blog/">John S.</a> pointed out that I had missed one of the fundamental pain points when building a web application: entity persistence, or &quot;object-relational mapping&quot;. This is the concept of leaning on a reliable, automatic way of moving business objects (tags, people, groups, photos, forums, posts, et al.) to the database and back without having to think about, or write, reams of code to handle it. I ended up using <a href="http://msdn2.microsoft.com/en-us/library/bb425822.aspx">LINQ to SQL</a> for my startup because I had a simple data model (many social networking applications do) that didn&#8217;t need multiple table inheritance, or non-PK relationships; otherwise I would recommend an alternative. A lot of agile developers recommend <a href="http://subsonicproject.com/">SubSonic</a> (and frankly it looks so darn cool), and you could try <a href="http://www.nhibernate.org/">NHibernate</a> as well, and there are many other options; the emphasis here is to use one you like, but <em>do</em> use one.</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.dimebrain.com%2f2008%2f04%2ffive-recommenda.html"><img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.dimebrain.com%2f2008%2f04%2ffive-recommenda.html&amp;bgcolor=FF9933&amp;cbgcolor=FFFFCC" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://dimebrain.com/2008/04/five-recommenda.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
