<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Binpress</title>
	
	<link>http://www.binpress.com/blog</link>
	<description>Source-code for rapid development</description>
	<lastBuildDate>Tue, 17 Apr 2012 21:08:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Binpress" /><feedburner:info uri="binpress" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>The Science of Software Pricing Part 2: SDKs, Libraries and other source-code products</title>
		<link>http://feedproxy.google.com/~r/Binpress/~3/T84HI3qC9P8/</link>
		<comments>http://www.binpress.com/blog/2012/04/17/the-science-of-software-pricing-part-2-sdks-libraries-and-other-source-code-products/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 14:24:37 +0000</pubDate>
		<dc:creator>Eran</dc:creator>
				<category><![CDATA[business]]></category>

		<guid isPermaLink="false">http://www.binpress.com/blog/?p=839</guid>
		<description><![CDATA[I&#8217;ve previously written extensively about taking an analytical approach to the pricing of software products. In this article,  I want to cover specifically the type of products we list on Binpress &#8211; libraries, SDKs and other source-code components for various &#8230; <a href="http://www.binpress.com/blog/2012/04/17/the-science-of-software-pricing-part-2-sdks-libraries-and-other-source-code-products/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve previously written extensively about taking an <a title="The Science of Software Pricing (part 1)" href="http://www.binpress.com/blog/2011/05/23/the-science-of-software-pricing/">analytical approach to the pricing of software products</a>. In this article,  I want to cover specifically the type of products we list on <a title="Binpress - The source-code marketplace" href="http://www.binpress.com">Binpress</a> &#8211; libraries, SDKs and other source-code components for various development needs.</p>
<h2>Knowing Your Audience</h2>
<p>There are many types of software products &#8211; games, productivity software, security products and so forth. Libraries, SDKs and other source-code products are generally categorized as <a title="Wikipedia: Developer Tools" href="http://en.wikipedia.org/wiki/Programming_tool" target="_blank">developer tools</a>.</p>
<p>Each category of software products appeals to a different audience and serves different needs. Developer tools are aimed, naturally, at developers (or software companies) and are more often than not a type of productivity software -  they help developers achieve more in less time.</p>
<p>Lets examine some common characteristics of software developers:<br />
<span id="more-839"></span></p>
<ul>
<li>They are usually very technical people. This means that if a cheaper / better / free alternative exist, they are likely aware of it.</li>
<li>They know how to build software &#8211; which is what you are selling them.</li>
<li>They are usually <a href="http://www.fatlemon.co.uk/2009/01/why-are-software-developers-so-bad-at-estimating-time/" target="_blank">too optimistic about time estimates</a>. That means they might be undervaluing your product.</li>
<li>They are a niche audience compared to other software categories. Software developers are not a large portion of the general population (yet).</li>
</ul>
<p>Those characteristics makes selling developer tools tough. Because of that, we need to be extra careful with how we price our products.</p>
<h3>Impulsive vs. Planned Purchase</h3>
<p>Buying a source-code library is very different than buying a game on the iPhone. Developers usually make the decision to purchase a source-code product after searching for free (open-source) solutions first and looking over all the alternatives (competing products).</p>
<p>This means that when making the decision to pay for a source-code product, the developer is already pretty committed to that decision. This is in contrast to a buying decision on the appstore where you might pick up a game that looks cool in the screenshots for 0.99$.</p>
<p>The reason I&#8217;m emphasizing this difference is that too often I&#8217;ve seen mobile app developers try to price their source-code products the same as they do their mobile applications, without considering the completely different audiences. Buying a source-code product is not an impulsive purchase, and the biggest decision for a prospective buyer is whether to give his credit-card details online. Once that decision is made, the actual costs become less significant.</p>
<h3>Size of Market</h3>
<p>I&#8217;ve mentioned that developers are a niche market. It is a large enough market that general purpose tools (IDEs for example) have a large audience, but depending on the purpose of your product, your target audience is probably significantly smaller.</p>
<p>If your product solves a specific problem in a specific type of application for a specific environment &#8211; that narrows down your target audience significantly.</p>
<p>Source-code products usually cannot hope to achieve the sort of mass-popularity that other types of software are able to reach. Considering that, we need to value each sale higher, in order to be able to generate significant revenue.</p>
<p>The maximum revenue we can hope to generate from our product is the price we set times the size of the market. For large markets we can always count on more customers, but for small markets we are putting a cap on the amount of revenue we generate by pricing our products too low.</p>
<h3>Different audience types and needs</h3>
<p>A single developer has different needs than a software company. Someone who manages a single-site has different needs than someone who manages a network of 30 sites.</p>
<p>To accommodate different audiences, we should present multiple pricing and licensing options that appeal to each. In our previous article, we called this <em>tiered pricing</em> and it serves multiple purposes:</p>
<ul>
<li>It creates the appearance of better value for the lower tier pricing.</li>
<li>It creates the opportunity for a larger sale with the upper tier pricing. You&#8217;d be surprised how often larger companies or people with a larger budget will go for the &#8220;Premium&#8221; option, just because it&#8217;s there (they want the <em>best</em> version).</li>
<li>It allows you to handle different licensing requirements. This is important since specific licensing details can be a deal-breaker.</li>
</ul>
<p>This is an advice we repeat in many places on our service, and it greatly affected the licensing options we provide in the &#8220;Licensing / Pricing&#8221; step of our <a title="Create a new component" href="http://www.binpress.com/developer/apps/add" target="_blank">component creation process</a> (<em>must be logged-in to view</em>).</p>
<h3>Price Conveys Value</h3>
<p>In the previous article on this topic, I&#8217;ve discussed the perceived value of your product &#8211; with price being a big factor. When you price a source-code product that claims to save hundreds of hours of development time the same as a meal at McDonald&#8217;s &#8211; you are sending the wrong message to would-be customers. You are making them ask the wrong questions &#8211; why is it so cheap? is the quality of code low? does it have many bugs or is not supported?</p>
<p>The tactic of pricing low to sell more can actually backfire and decrease sales. On the other hand, pricing a product at a healthy price conveys significant value and makes the product appear move valuable.</p>
<p>Software development is expensive &#8211; when we save development time we also save development costs. We should aim to keep a healthy ratio between the amount of development time saved and the price of the product. Too large or too small ratios will result in a price that does not convey the value of the product properly and in reduced sales.</p>
<h2>Finding the Sweet Spot</h2>
<p>In the <a title="The Science of Software Pricing (part 1)" href="http://www.binpress.com/blog/2011/05/23/the-science-of-software-pricing/" target="_blank">previous article</a> we&#8217;ve discussed the <a title="Wikipedia: Demand Curve" href="http://en.wikipedia.org/wiki/Demand_curve" target="_blank">demand curve</a> and that our goal is to find the pricing point that covers the most area and generates the most revenue.</p>
<p>Our goal is still the same &#8211; to find the highest price that generates the most sales. It takes some practice to get good at it, but you can get to a good starting point by considering all the factors we&#8217;ve covered:</p>
<ul>
<li>Buying a source-code product is not an impulsive purchase.</li>
<li>Price should convey the value of the product and be proportional to the development time it saves.</li>
<li>Price should take into account competing products.</li>
<li>The market size / scope of the solution the product offers should be taken into account as well.</li>
<li>Different pricing for different audience types.</li>
</ul>
<h3>Improving by collecting data and iterating</h3>
<p>Once you settle on a starting point you feel comfortable with considering all those factors, you should start gathering data by measuring how it affects conversion rates (the amount of sales per visitor).</p>
<p>You can try and test both lower and higher prices, and see if it affects conversion. Note that when you raise prices, if conversion stays the same &#8211; you have increased your total revenue. Make sure to allow for enough data to accumulate before changing prices &#8211; and not change other parameters as well at the same time (product features, marketing content) to get reliable results.</p>
<h3>Learning by Example</h3>
<p>We&#8217;ve previously published a <a title="Test case: Magento Shopping cart rules" href="http://www.binpress.com/blog/2011/07/07/test-case-magento-shopping-cart-rules-import-export-module/" target="_blank">case study with one of our publishers</a> and mentioned the pricing experiment he ran with his component with good results. We intend to publish more case studies such as this in the future to illustrate the effect pricing has on the success of source-code products.</p>
<p>If you have specific examples you want to read about, let us know in the comments!</p>
<img src="http://feeds.feedburner.com/~r/Binpress/~4/T84HI3qC9P8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.binpress.com/blog/2012/04/17/the-science-of-software-pricing-part-2-sdks-libraries-and-other-source-code-products/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.binpress.com/blog/2012/04/17/the-science-of-software-pricing-part-2-sdks-libraries-and-other-source-code-products/</feedburner:origLink></item>
		<item>
		<title>New features – feature requests, Github integration, improved licensing and more</title>
		<link>http://feedproxy.google.com/~r/Binpress/~3/BDouciUbftE/</link>
		<comments>http://www.binpress.com/blog/2012/03/07/new-features-feature-requests-github-integration/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 23:23:51 +0000</pubDate>
		<dc:creator>Eran</dc:creator>
				<category><![CDATA[Binpress]]></category>
		<category><![CDATA[New features]]></category>

		<guid isPermaLink="false">http://www.binpress.com/blog/?p=831</guid>
		<description><![CDATA[We&#8217;ve done a major push of new features to the service today, so if you noticed the site being offline just a while ago, now you know the reason why. Lets recap what has changed and added: Component page overhaul &#8230; <a href="http://www.binpress.com/blog/2012/03/07/new-features-feature-requests-github-integration/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve done a major push of new features to the service today, so if you noticed the site being offline just a while ago, now you know the reason why. Lets recap what has changed and added:</p>
<h2>Component page overhaul</h2>
<p>We&#8217;ve reworked the component page look-and-feel to match the new theme we&#8217;ve had in the homepage for a while now. In addition to visual changes, we&#8217;ve added several new features:</p>
<ul>
<li>Visitors can now create feature requests and engage in discussion about it with the developer and other visitors. We&#8217;ve noticed similar discussion going on in the comments and wanted to provide a better platform to do so.</li>
<li>Issues can now be accessed directly from the component profile, in order to be access in context and to encourage using tickets instead of comments to report problems.</li>
<li>User reviews have been expanded to show more information, including a breakdown of review scores.</li>
<li>Publishers can now migrate comments to either issues or feature requests &#8211; use this option to clean up your comments.</li>
</ul>
<h2><span id="more-831"></span><br />
Github integration</h2>
<p>We&#8217;ve integrated Github into our flow for a while now, but haven&#8217;t officially announced it here on the blog. Users can register and log-in using their Github account, and publish existing Github repositories as components directly.</p>
<p>We are big fans of Github and feel our services greatly complement each other, as we provide the commercial layer over Github code-sharing and versioining service. We hope to see many more Github users publish their code on Binpress as well.</p>
<h2>Licensing changes</h2>
<p>We&#8217;ve revised our licensing to better accommodate compiled binary distribution (ie, components for compiled application development), and to simplify some of the terms and wordings to help visitors understand better the difference between the various licensing options.</p>
<p>Publishers now have more control on how their components can be used, and users should have an easier time understanding what are the rights and limitations granted by each license. If you are a publisher, you should go over your existing licenses and see if there&#8217;s anything you would like to change.</p>
<h2>Binpress API Beta</h2>
<p>We&#8217;ve released an early version of our API, which mainly deals with component data. Visit the <a href="http://www.binpress.com/api/reference">API reference page</a> to get started, and send us comments and suggestions on what you would like added to the API.</p>
<p>Keep in mind that since the API is in beta, you might experience some issues (though we did test it thoroughly). If you are encountering any issues, please let us know.</p>
<h2>Find something out of order? let us know!</h2>
<p>We QA everything and then we QA it some more. Yet, we&#8217;re certain some things slipped through the cracks as it&#8217;s unavoidable. If you find something is not working as it should, please <a href="http://www.binpress.com/contact">let us know</a> and we&#8217;ll take care of it.</p>
<img src="http://feeds.feedburner.com/~r/Binpress/~4/BDouciUbftE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.binpress.com/blog/2012/03/07/new-features-feature-requests-github-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.binpress.com/blog/2012/03/07/new-features-feature-requests-github-integration/</feedburner:origLink></item>
		<item>
		<title>Increasing conversion for your components (or software products)</title>
		<link>http://feedproxy.google.com/~r/Binpress/~3/gd33ShSys7o/</link>
		<comments>http://www.binpress.com/blog/2012/02/28/increasing-conversion-for-your-components-or-software-products/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 10:07:07 +0000</pubDate>
		<dc:creator>Eran</dc:creator>
				<category><![CDATA[Binpress]]></category>
		<category><![CDATA[Marketing]]></category>

		<guid isPermaLink="false">http://www.binpress.com/blog/?p=822</guid>
		<description><![CDATA[Note: this post is mainly targeted towards our Binpress publishers, but is relevant for anyone who publishes their own software product (or service). The success of our components varies widely, from high-volume selling / downloaded components to relative unknowns. The &#8230; <a href="http://www.binpress.com/blog/2012/02/28/increasing-conversion-for-your-components-or-software-products/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Note: this post is mainly targeted towards our Binpress publishers, but is relevant for anyone who publishes their own software product (or service).</em></p>
<p>The success of our components varies widely, from high-volume selling / downloaded components to relative unknowns. The amount of sales / downloads a component generates is a factor of both the traffic it gets and how well that traffic is being converted to a purchase / download.</p>
<p>We&#8217;ve previously covered <a href="http://www.binpress.com/blog/2011/06/02/promoting-your-software-product-in-6-simple-steps/">several ways in which you can get your component noticed</a> and generate additional traffic to it (and we&#8217;ll be revisiting it soon), and this time I&#8217;d like to attack the other part of the equation &#8211; converting your component traffic into goal completions (either a purchase or a download).</p>
<p>So what can you do to improve your components performance?<br />
<span id="more-822"></span></p>
<h2>Retouching component content</h2>
<p>Re-read all of your component content, starting with the summary and description. Does it make sense? does it convey what need your component is helping and how it does it? good component content should obey the following criteria:</p>
<ul>
<li><strong>Readable</strong> &#8211; content should be easy to read all the way through. Good grammar is a must, and try to avoid overly technical jargon. Try to think how it looks to someone without your specific expertise (but a developer still).</li>
<li><strong>Concise</strong> &#8211; Get to the point as early as possible. You might be losing you audience with a long introduction and lengthy explanations that are not needed and could be confusing readers. Summarizing features in a bullet list helps. Add headings between large blocks of text and make your text easily scanable.</li>
<li><strong>Comprehensive</strong> &#8211; while it seems contradictory to the previous point, make sure you touch upon all the important points your component addresses. Structure your content in a way that allows readers to quickly understand what it does, and then supply additional content if they are still interested and want to read more.</li>
<li><strong>Well-formatted</strong> &#8211; Use the markdown syntax (explained in the content editing pages) to better format your content. Use headings where needed, use bold and italic effects to highlight specific text and add bullet lists for quick summary of points. Don&#8217;t forget to properly indent your code so it will appear formatted in the content page.</li>
</ul>
<p>Keep in mind the summary appears in all component listings and on our affiliate widget &#8211; use that text to convey very quickly the essence of what your component does. Don&#8217;t forget to mention important keywords readers are looking for, such as programming language and relevant frameworks / platforms.</p>
<p>If your component has a visual aspect such as a UI, adding high-quality screenshots really helps readers understand what they&#8217;re getting. Adding a nice thumbnail helps your component stand out and be more distinctive in component listings.</p>
<h2>Reworking the pricing scheme</h2>
<p>We&#8217;ve written at length about <a href="http://www.binpress.com/blog/2011/05/23/the-science-of-software-pricing/">how pricing affects the success of a software product</a> and you should go over it if you haven&#8217;t already, but I&#8217;ll repeat the basic ideas -</p>
<ul>
<li>Pricing matters</li>
<li>For any software product there is a range of pricing that within it conversion is optimal.</li>
<li>Pricing should reflect the perceived value of the product.</li>
</ul>
<p>Pricing your own work is very difficult, in every field. Especially so with source-code components, for which the market is young and mostly unknown. Lowering or increasing the price could have a substantial effect how well you sell &#8211; you should read the aforementioned article for more details.</p>
<p>Make incremental adjustment to your component pricing and see how it affects conversion. Make sure to give enough time for data to accumulate and become significant.</p>
<h2>Engage your audience in the comments</h2>
<p>It&#8217;s no surprise that our top publishers are very active on the comments section of their components. Engaging interested visitors can both lead to a direct conversion (by convincing them your component is what they need), or to a future conversion as it both provides more information and shows your professionalism.</p>
<p>Make sure to respond in a courteous manner to comments visitors leave on your component page. You can answer concerns they may have and those comments are there for future readers that might have the same questions.</p>
<p>Use the comments to improve your component content &#8211; if a question is repeatedly asked, make sure it is well answered in the component description. If people are looking for a certain feature which is currently missing, consider adding it to the component.</p>
<h2>When in doubt, ask us</h2>
<p>Not sure how to go about changing the content or pricing? if you want to run something by us or just ask a few questions, you can always use the admin feedback section that you went through when you got your component approved. We try to be as available as possible and set you in the right direction.</p>
<img src="http://feeds.feedburner.com/~r/Binpress/~4/gd33ShSys7o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.binpress.com/blog/2012/02/28/increasing-conversion-for-your-components-or-software-products/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.binpress.com/blog/2012/02/28/increasing-conversion-for-your-components-or-software-products/</feedburner:origLink></item>
		<item>
		<title>Mobile Development Contest Winners</title>
		<link>http://feedproxy.google.com/~r/Binpress/~3/IgskMe4VlXc/</link>
		<comments>http://www.binpress.com/blog/2011/12/19/mobile-development-contest-winners/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 22:41:32 +0000</pubDate>
		<dc:creator>Eran</dc:creator>
				<category><![CDATA[Binpress]]></category>

		<guid isPermaLink="false">http://www.binpress.com/blog/?p=795</guid>
		<description><![CDATA[We finally have our mobile contest winners! First of all, I would like to thank everyone who participated, we had many great entries and our judges had their work cut out for them deciding on the best ones. 3rd place &#8230; <a href="http://www.binpress.com/blog/2011/12/19/mobile-development-contest-winners/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We finally have our mobile contest winners!</p>
<p>First of all, I would like to thank everyone who participated, we had many great entries and our judges had their work cut out for them deciding on the best ones.</p>
<h3>3rd place award:</h3>
<p>Our 3rd place prize goes to Kemal Taskin with <a href="http://www.binpress.com/app/radiotunes-sdk-for-ios/596">RadioTunes SDK for iOS</a> &#8211; a radio streaming engine with support for the http and mms protocols. One of our judges wrote:</p>
<blockquote><p>Compared with the other components this is one that provides the greatest value to a developer because of the complexity of interfacing with FFmpeg.</p></blockquote>
<p>The <a href="http://www.binpress.com/mobilecontest/prizes#3rdplace">3rd place award</a> is a package worth over 3,500$, including 500$ in cash.</p>
<h3>Runner-up award:</h3>
<p>Our runner-up award goes to Yaroslav Sivokhin with <a href="http://www.binpress.com/app/asyncmvp/640">AsyncMVP</a> &#8211; an asynchronous message-based module system base on an MVP template for the android platform. The judges really liked this one -</p>
<blockquote><p>For me this project is a highlight, since although it seems to be in an early stage of development, turns Android application development on its head and introduces modern programming paradigms that have proven successful for years to the Android world. It&#8217;s a bold move into a completely new direction of Android app development, and I&#8217;m excited to see where this is going.</p></blockquote>
<p>The <a href="http://www.binpress.com/mobilecontest/prizes#2nd">runner-up award</a> is a package worth close to 6,000$, including 1,000$ in cash.</p>
<h3>Grand prize winner:</h3>
<p>Our grand prize goes to Nick Lockwood with <a href="http://www.binpress.com/app/icarousel/614">iCarousel</a>. iCarousel is a simple, highly customizable, data-driven 3D carousel view for both iOS and Mac OS. Quoting one of the judges:</p>
<blockquote><p>This is a really great submission &#8211; it provides a unique UI element that is highly customizable and looks really good. The code is great, very easy to understand and use, and aligns with many iOS design patterns.</p></blockquote>
<p>The <a href="http://www.binpress.com/mobilecontest/prizes#1st">grand prize award</a> is a huge package worth close to 11,500$, including 1,500$ in cash.</p>
<p>Thanks again to all the participants and <a href="http://www.binpress.com/mobilecontest/judges">the judges</a> who helped us make this contest a success and our great sponsors who made this contest possible. Specifically, we would like to thank <a href="http://www.amazon.com/aws">Amazon AWS</a>, <a href="http://www.tropo.com/">Tropo</a> and <a href="http://www.appsfire.com/">Appsfire</a> for their significant contributions and our <a href="http://www.binpress.com/mobilecontest/sponsors">other sponsors</a>. We look forward to continuing this tradition and bring you great prizes for the best contributions of source-code.</p>
<img src="http://feeds.feedburner.com/~r/Binpress/~4/IgskMe4VlXc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.binpress.com/blog/2011/12/19/mobile-development-contest-winners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.binpress.com/blog/2011/12/19/mobile-development-contest-winners/</feedburner:origLink></item>
		<item>
		<title>Java lists and real-world applications</title>
		<link>http://feedproxy.google.com/~r/Binpress/~3/l-S-QO9l3HQ/</link>
		<comments>http://www.binpress.com/blog/2011/11/09/java-lists-and-real-world-applications/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 07:45:35 +0000</pubDate>
		<dc:creator>Ralph Chapin</dc:creator>
				<category><![CDATA[Guest Post]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Lists]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://www.binpress.com/blog/?p=782</guid>
		<description><![CDATA[This is a guest post by Ralph Chapin, a Binpress publisher. Ralph has developed project management software from 1977 to 2002 at a series of known companies and most recently at Artemis International Solutions Corporation. Lately, Ralph works mostly in &#8230; <a href="http://www.binpress.com/blog/2011/11/09/java-lists-and-real-world-applications/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>This is a guest post by <a href="http://www.binpress.com/dev/profile/510" target="_blank">Ralph Chapin</a>, a Binpress publisher. Ralph has developed project management software from 1977 to 2002 at a series of known companies and most recently at Artemis International Solutions Corporation. Lately, Ralph works mostly in Java, with his latest passion being multi-threading. </em></p>
<h2>Java lists in real world applications</h2>
<p>It started with large numbers of large lists &#8211; people, equipment, payments, jobs, work orders,&#8230; the usual &#8211; and a program that had to juggle them all.  At any given time, most of the lists might be very small or empty, while some would be huge. While the program ran, many of the lists would yo-yo dramatically in size, putting a severe strain on memory management.  Of course, the idea was to handle as much data as possible with the best performance possible for whatever machine it happened to run on.<br />
<span id="more-782"></span></p>
<h3>Choosing the Data Structure</h3>
<p>What to use?  To start with, kindness to garbage collectors (and the resulting garbage-collectors-kindness-to-programmer) required some form of linked list or other linked data structure.</p>
<p><strong>Why Not Arrays?</strong></p>
<p>Originally, I rejected arrays (and Java collections framework structures that use them, such as ArrayList) because I needed to do a lot of inserts and deletes, which meant shifting data inside the arrays and continually reallocating space for the arrays, larger <em>and</em> smaller.  With today&#8217;s hardware and operating systems, these concerns are not valid; by my tests, array operations are fast beyond belief.</p>
<p>Not valid, <em>that is</em>, in a simple program.  Mine would be resizing the lists at a furious pace, leading to lots of memory reallocations, leading in turn to serious memory fragmentation.  (Note that the standard sort on an array &#8211; or any other Java Collection &#8211; generates a temporary array the same size as the original, making it as bad as resizing.)  When the garbage collector needs space for a large array and memory is fragmented, it has to move existing objects around to create the large contiguous space.</p>
<p>Put simply, large arrays can cause a program to slow down dramatically, even when most of the available memory is free.  Also, if the GC cannot create the space fast enough it will throw an out-of-memory exception. (I always wished it would take another quarter second, recover the space, and keep going, but, really, the exception is much kinder than a program that does nothing while using 100% of CPU.)  Put even more simply, there is an innate performance problem with arrays for this sort of work; modern technology has merely converted it from slow performance into an occasional blow-up.  At the end of the day &#8211; old tech, modern tech, future tech &#8211; I needed a structure with links and small elements.</p>
<h3>Required Performance</h3>
<p>The program I was writing had performance requirements beyond the obvious &#8220;run real fast&#8221;. It was to work with a graphical user interface, which meant some aspects mattered more than others. The user needed to see immediate results from his mouse and keyboard actions. With the program pushed to its limits, a bit of sluggishness could be tolerated, indicating only the need for less data, simpler data, or a faster computer with more memory.  But noticeable delays (half a second or more) had to be avoided.</p>
<p>While this was a business program, users would want, and be getting, fast answers and it would have the feel of a real-time game. (Or of a word processor when you have three minutes to write a long memo.  You <em>do not</em> want to see that hourglass!)  Overall speed did matter, but keeping the worst-case performance unnoticeable was critical.</p>
<h3>The Requirements</h3>
<p>All the lists would be maintained in sorted order and might need to be accessed by their sort key.  This suggested a binary tree for quick finds.  (Hash tables use arrays, <em>and</em> do not work for finds along the lines of &#8220;find the first entry with a start date on or after January 1, 2012.&#8221;  Either problem was and is a show-stopper.)  At this point, Java&#8217;s TreeMap looked like a good bet.</p>
<p>However, most of these lists could optionally appear in display tables (JTables), and this meant indexed access was needed.  Using <em>two</em> TreeMaps does work, but the binary tree link structure is identical for the sort keys and the index numbers.  With my own binary tree I only needed to allow the search key to be determined immediately before doing the search.  Then interlaced index and key searches could be done with no loss of efficiency.  (On one search we look at dates as the &#8220;key&#8221;, and on the next, indexes.)  And so creating <a href="http://www.binpress.com/app/sortedlist/548" target="_blank">SortedList</a> began to look like a good idea.</p>
<p>When adding and removing rows from a list, the index numbers on each row would have to be incremented/decremented by moving sequentially through the list from the add/delete point.  With a normal binary tree, this means locating the row inside the tree with a search and maintaining a list of parent nodes in the tree during the sequential movement.  But searches are expensive and I already had the row!  What I needed now was just a basic linked list. I had one entry &#8211; all I needed was the next one.  And I needed it fast, because I might have 100,000 rows to update without troubling the user with a delay.</p>
<h3>The Threaded Tree to the Rescue</h3>
<p>Fortunately, an oddity from my college days percolated up into my consciousness &#8211; the threaded tree.  To thread a binary tree, null references in the leaf entries are set to the logical next or previous entries.  (Okay, it&#8217;s not quite that simple; look it up on Wikipedia.)  Now my binary tree was also a linked list.  Given the row I was deleting (or adding before), I had immediate, <em>fast</em> access to the next one.  Problem solved, and SortedList looked like an even better idea..</p>
<p>On to the next problem: many of my lists were sorted, or could be sorted, by time. The rows contained jobs with start and end dates.  I needed to know which was happening at a particular time.  (The time spans did not overlap, usually.)  This meant finding the first relevant row (one whose start date was on or before the particular time) with a search on time, then scooping up the rest with sequential reads. Here, my threaded binary tree started really earning its keep.  And it had the additional benefit that it was easier just to move back and forth in the linked-list-tree than it was to read rows from the tree, put them somewhere else, and work on them there.</p>
<h3>Concurrent Modification</h3>
<p>I moved further away from TreeMap when I wanted to control when the number jobs (rows) worked rather than just finding out who was working when.  This meant removing the job from the list completely, changing the dates, and adding it back in.  Modifying a TreeMap, or most any other Java Collections Framework class, causes an iterator to throw a ConcurrentModificationException.  This is normally a good idea, and this feature has saved me a lot of grief &#8211; but in this case it would mean redundant (I already <em>have</em> the current entry!) finds to recreate the iterator every time I moved a job.</p>
<p>(I have written several classes extending java.util.Collection.  They all do other things the standard classes do not, but I have used each of them many times only because I needed to delete and add elements while stepping through the collection with an iterator.  I do have to be careful.)</p>
<h3>Other Uses</h3>
<p>The ability to use different key values with the same sort, like with indexes and sort keys, proved useful in other cases.  I had to work with numeric dates where only time (days, for instance) on week days was counted.  So if Friday was 123, the following Monday would be number 124.  Of course, they would also be numbered using <em>all</em> days, with Friday being, perhaps 152 and Monday 155.  Both dates sorted the same way, but I needed a different key depending on whether I was looking for day 152 or weekday number 152.  I also created an almost identical class to track selections in a large table, where I needed to search both on the row number within the table and the row number within the selection.  (I was surprised to find row numbers and dates were so similar.)</p>
<h2>Design Problems</h2>
<h3>A Balancing Act</h3>
<p>A binary tree must be kept balanced or it becomes horribly inefficient, a sort of singly-linked list with the links going the wrong way.  One big advantage to a threaded tree is that it can be balanced very quickly, so my approach, right from the start, was to rebalance when needed, as opposed to, say, using a red/black tree.</p>
<p>This was done by counting the levels whenever searching the tree, whether for adds or reads.  Down too many levels?  Rebalance.  This has the advantage that the tree can become very unbalanced indeed without triggering a rebalancing until it matters.  (Balancing is fast, but it does take <em>some</em> time.)  Now, if a million rows can be added without rebalancing &#8211; more on this in a moment &#8211; they will get added very fast.  Any attempt to read, add, or delete a row deep in the tree will trigger a single rebalance, which should keep the tree efficient for some time.</p>
<p>There was a problem here, however.  Should one do a lot of adds, the tree can become somewhat unbalanced, if not quite enough so to trigger a balancing.  If the next phase of use involved extensive queries, one would want the tree to be as balanced as possible.  To provide peak performance in this situation, I added a &#8220;balance&#8221; method.  Calling this method says, essentially, &#8220;We&#8217;re done adding.  Prepare to do a <em>lot</em> of fast queries.&#8221;</p>
<p>Sometimes the query phase is done with multiple threads.  As the structure <em>ought</em> to be immutable &#8211; none of the internal should references change &#8211; this should not to be a problem.  But what if a query triggered a balancing?  Before, we called the balance method because we were afraid it would not be called.  Now we need to call it because it might.  Should another query come through during the balancing, via a second thread, things will get ugly.  But once &#8220;balance&#8221; is called, the tree is immutable and multi-threaded querying can begin.</p>
<p>The next problem hit while working with real data (or at any rate, data invented by someone else, not me).  It resulted from massive adds.  There was no reason the million rows from the database should be in sorted order since I had not asked for any order, but in sorted order they were.  (Since then I&#8217;ve found data is almost always ordered.  It&#8217;s just the natural perversity of the universe.)  My tree, following tradition, added new entries as leaf nodes, which would have worked really well if the order had been random.  As it was, I was rebalancing after every 24 or so adds.  Filling my tree took forever.  (1 rebalance is unnoticeable.  50,000 rebalancings are noticeable.)</p>
<p>I solved this by adding new entries as high in the structure as possible.  Now, if the data was already completely sorted, the tree would end up, very quickly, as a simple linked list with each new add placed right at the start.  It was a horrible tree, perhaps, but the first time a good tree was needed, a single balancing would put it right.  My tests show SortedList now sorts ordered data ten times faster than TreeMap.</p>
<p>Data is always ordered, except when it can embarrass me by being random.  Now, <em>random</em> adds could trigger repeated balancing &#8211; embarrassing.  (The problem was rarely anywhere near as bad as the ordered data problem, but it was plenty bad enough.)  I fixed this by shifting the add points closer to the leaves with each rebalancing, so the more random the data, the closer it would come to the traditional, add-new-entries-as-leaf-nodes method.  My tests show SortedList now resorts random data almost as fast as TreeMap.</p>
<p>Essentially, SortedList now takes advantage of any order existing in the data rather than suffering from it and reverts gradually to traditional binary tree adds if there is no order.  SortedList&#8217;s speed now ranges smoothly from very fast with sorted data to not bad at all with random data.</p>
<h3>Relativity and TreeMap</h3>
<p>So how does SortedList compare with TreeMap, time wise?  (Time is not the only consideration, but it is interesting.)  As noted above, both take about the same time for random adds.  With presorted data, TreeMap speeds up two to three times, and SortedList is yet ten times faster than TreeMap.  When updating indexes, a sequential operation, SortedList is more than eight times faster than TreeMap.  For the rest, TreeMap takes the lead; it can do finds and deletes in almost half the time it takes SortedList.</p>
<p>The rapid renumbering on rows and the ability to sort almost-ordered data quickly allow large, sorted display lists to be modified without the user being aware of any delay.  So these tradeoffs let SortedList manage JTables and other displays with large row counts.</p>
<p>(SortedList has twice as many pointers to maintain as TreeMap, so the slower deletes are to be expected.  I am not sure why SortedList&#8217;s finds are slower; I intend to look into that further.  I am not sure why the two are comparable in random adds.  The extra pointers ought to hurt SortedList there.  I suspect TreeMap is slowed by the extra work required by its Red/Black tree.  SortedList, on the other hand, does simple adds and lets the randomness of the data keep its tree balanced.)</p>
<h3>Internal Versus External Linkage</h3>
<p>SortedList is internally linked, unlike the classes in the collections framework.  This means:</p>
<ul>
<li>Entries must extend a special class, SortedListNode. (Not too bad.)</li>
<li>An entry could only be in one SortedList at a time.  (A definite minus.)</li>
<li>No iterator is needed.  (A plus.)</li>
<li>If I had an entry, I could always get the next (or the previous) <em>fast</em>.  (A <em>big</em> plus.)</li>
</ul>
<p>It gave me what I needed for high performance.</p>
<p>However, sometimes the objects I wanted to put in the tree could not extend SortedListNode, <em>and</em> sometimes the objects needed to go into more than one tree.  I needed a bit more.</p>
<p>Using SortedList, I created <strong>T</strong>TreeMap.  It implements java.util.Map, and can replace java.util.TreeMap.  Beyond the Map interface, TreeMap has different &#8211; and in my opinion, better &#8211; methods, but it does the same job, and more.  To recreate the ability to find an entry, then read through the list sequentially, I wrote a find method that returns a <em>ListIterator</em>.  This is positioned on the found entry and allows high speed sequential moves in either direction.</p>
<h2>And so, SortedList</h2>
<p>a threaded binary tree and a &#8220;map&#8221; or &#8220;dictionary&#8221; associating key-value pairs.  It seriously outperforms in key areas, has some unique abilities, and it is otherwise competitive with everything else available:</p>
<ul>
<li>High speed sequential reads, in both directions, and starting with any entry to which you have a reference.</li>
<li>High speed adds of ordered or reverse-ordered data.</li>
<li>Concurrent access:  you can add to or remove from the list without losing track of your current entry, or current entries.</li>
<li>Find an entry by key, then move through the list in either way, reversing direction as desired.</li>
</ul>
<p>More generally,</p>
<ul>
<li>Works well for managing data in JTables.</li>
<li>Superb for sparse arrays, particularly where the data in near-by elements tend to overlap and the code needs to look around to get a good sense of the situation.</li>
</ul>
<p>And there you have it. I published the finished <a href="http://www.binpress.com/app/sortedlist/548">SortedList</a> on Binpress for commercial use, as that it was its intended for. I&#8217;ll be glad to answer any questions or comments, so let me know what you think!</p>
<p><em>Want to write a guest post on the Binpress blog? <a href="http://www.binpress.com/contact">get in touch</a> and let us know!</em></p>
<img src="http://feeds.feedburner.com/~r/Binpress/~4/l-S-QO9l3HQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.binpress.com/blog/2011/11/09/java-lists-and-real-world-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.binpress.com/blog/2011/11/09/java-lists-and-real-world-applications/</feedburner:origLink></item>
		<item>
		<title>Mobile developers, show us what you’ve got!</title>
		<link>http://feedproxy.google.com/~r/Binpress/~3/CIDa4cQcB94/</link>
		<comments>http://www.binpress.com/blog/2011/10/26/mobile-developers-show-us-what-youve-got/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 16:22:42 +0000</pubDate>
		<dc:creator>Eran</dc:creator>
				<category><![CDATA[Binpress]]></category>
		<category><![CDATA[Programming contest]]></category>

		<guid isPermaLink="false">http://www.binpress.com/blog/?p=773</guid>
		<description><![CDATA[After a long hiatus, Binpress contests are back &#8211; and this time our theme is mobile development. We are giving away 20k$ in cash and prizes from companies such as Amazon, Tropo, Appsfire, Github and many more! The rules are &#8230; <a href="http://www.binpress.com/blog/2011/10/26/mobile-developers-show-us-what-youve-got/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After a long hiatus, Binpress contests are back &#8211; and this time our theme is <a href="http://www.binpress.com/mobilecontest">mobile development</a>. We are giving away 20k$ in cash and prizes from companies such as Amazon, Tropo, Appsfire, Github and many more!<br />
<span id="more-773"></span><br />
<a href="http://www.binpress.com/mobilecontest/rules">The rules are simple</a> &#8211; submit a package that meets our <a href="http://www.binpress.com/content/guidelines">publishing criteria</a>, and tag it with &#8220;mc2011&#8243;. Approved submissions will be judged on attributes such as usefulness, development methodology and creativity. The 3 top components will be awarded <a href="http://www.binpress.com/mobilecontest/prizes">amazing prizes</a>, and will also be featured on our homepage for a week.</p>
<p>We can feel mobile components picking up steam in recent months, and we want to reward you guys for your efforts. Note that you can also submit previously approved mobile components by tagging it with the contest tag and letting us know in the component review comments.</p>
<h3>Homepage and browse page redesign</h3>
<p>On a side note, we recently launched a redesign of the homepage and browse page. The <a href="http://www.binpress.com">homepage</a> now showcases featured components as well as several new segments, and the <a href="http://www.binpress.com/browse">browse page</a> features a new filtering and browsing interaction. We are already noticing an uptake in sales as a result, and will be looking to improve on it more in the coming weeks. Check it out and let us know what you think!</p>
<img src="http://feeds.feedburner.com/~r/Binpress/~4/CIDa4cQcB94" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.binpress.com/blog/2011/10/26/mobile-developers-show-us-what-youve-got/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.binpress.com/blog/2011/10/26/mobile-developers-show-us-what-youve-got/</feedburner:origLink></item>
		<item>
		<title>TechCrunch Summary and Mobile Contest Updates</title>
		<link>http://feedproxy.google.com/~r/Binpress/~3/E1STsDDlwGU/</link>
		<comments>http://www.binpress.com/blog/2011/09/16/techcrunch-summary-and-mobile-contest-updates/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 03:30:39 +0000</pubDate>
		<dc:creator>Eran</dc:creator>
				<category><![CDATA[Binpress]]></category>
		<category><![CDATA[Programming contest]]></category>
		<category><![CDATA[mobile contest]]></category>
		<category><![CDATA[techcrunch disrupt]]></category>

		<guid isPermaLink="false">http://www.binpress.com/blog/?p=767</guid>
		<description><![CDATA[We just finished 3 hectic days at TechCrunch Disrupt &#8211; for those who are not in the know, TechCrunch Disrupt is one of the biggest startup events in the world. For 3 days we were pitching conference attendants about Binpress &#8230; <a href="http://www.binpress.com/blog/2011/09/16/techcrunch-summary-and-mobile-contest-updates/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We just finished 3 hectic days at <a href="http://disrupt.techcrunch.com/SF2011/">TechCrunch Disrupt</a> &#8211; for those who are not in the know, TechCrunch Disrupt is one of the biggest startup events in the world. For 3 days we were pitching conference attendants about Binpress &#8211; investors, potential partners and users (we got to meet some of you in the flesh!). </p>
<p>It has been very tiring but worth it, we connected with a lot of people who hopefully will help us make Binpress bigger and better. Our belief that Binpress is going to be huge real soon has never been stronger &#8211; watch this space for further developments.<br />
<span id="more-767"></span></p>
<h2>Mobile Programming Contest</h2>
<p>As we&#8217;ve mentioned before, our mobile contest is coming up (if you didn&#8217;t hear about our previous event, <a href="http://www.binpress.com/contest">check it out here</a>). Several big-name sponsors have signed up during TC disrupt, and they&#8217;re going to make fantastic additions to a very strong line-up. </p>
<p>Expect extra awesome prizes for the winners, so if you have a good idea for a mobile app component &#8211; you should get started now! we will allow multiple entries from the same developer, so you can multiple prizes as well. Everything submitted before the contest starts will be eligible as well, so get started early to make sure you pass the <a href="http://www.binpress.com/content/guidelines">review process</a>.</p>
<p>More exciting updates will follow later this month, stay tuned!</p>
<img src="http://feeds.feedburner.com/~r/Binpress/~4/E1STsDDlwGU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.binpress.com/blog/2011/09/16/techcrunch-summary-and-mobile-contest-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.binpress.com/blog/2011/09/16/techcrunch-summary-and-mobile-contest-updates/</feedburner:origLink></item>
		<item>
		<title>Exciting month ahead for Binpress</title>
		<link>http://feedproxy.google.com/~r/Binpress/~3/Rw71fu0rSyA/</link>
		<comments>http://www.binpress.com/blog/2011/09/06/exciting-month-ahead-for-binpress/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 07:33:46 +0000</pubDate>
		<dc:creator>Eran</dc:creator>
				<category><![CDATA[Binpress]]></category>
		<category><![CDATA[New features]]></category>
		<category><![CDATA[Programming contest]]></category>
		<category><![CDATA[contest]]></category>
		<category><![CDATA[homepage]]></category>
		<category><![CDATA[redesign]]></category>
		<category><![CDATA[tour]]></category>

		<guid isPermaLink="false">http://www.binpress.com/blog/?p=760</guid>
		<description><![CDATA[After our best month yet in August, we are gearing up for some special goodness this coming month. Here are some of the main upcoming events we have planned: Supercharged Mobile Development Contest As we mentioned in our latest newsletter, &#8230; <a href="http://www.binpress.com/blog/2011/09/06/exciting-month-ahead-for-binpress/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After our best month yet in August, we are gearing up for some special goodness this coming month. Here are some of the main upcoming events we have planned:</p>
<h2>Supercharged Mobile Development Contest</h2>
<p>As we mentioned in our latest newsletter, we have a massive mobile development contest coming up. We had a programming contest when we first launched, which was a major success, and we are looking to start a tradition of contests to inject some competitive spirit and awesome prizes for our community.</p>
<p>The theme this time will be mobile development &#8211; with prizes going for the best submissions of a component for a mobile platform (iOS, Android, Windows Phone). We have some huge sponsors from the mobile development world providing relevant and worthy prizes.<br />
<span id="more-760"></span><br />
The contest is scheduled to start on Sept. 14th, so stay tuned for more concrete information real soon. Keep in mind that any mobile component you&#8217;ve previously submitted and got approved will be eligible to participate.</p>
<h2>Binpress in the valley</h2>
<p>Binpress&#8217; founders, Eran and Adam, will be attending TechCrunch Disrupt, representing Binpress (not as one of the contestants though). They will also be expanding our reach by meeting with strategic partners and investors during a 3 weeks tour around the valley. Look forward to big news in the coming months!</p>
<p>Since our capacity at the Binpress offices will be going down somewhat, please bear with us and be patient with contact forms and component reviews. We are on top of things, we just might take a bit longer than usual to get back to you.</p>
<h2>Homepage redesign</h2>
<p>A redesign of the homepage is in the works, which will give several benefits to component authors:</p>
<ul>
<li>Components will be shown in chronological order, giving a better chance for newer components to get noticed.</li>
<li>A featured section in the homepage will put the spotlight on different components each time. Getting featured will be based on visitor response to the component &#8211; more on that soon.</li>
<li>Streamlined navigation and discovery interaction for allowing more components to gain visibility.</li>
<li>A new special section will be featured on the homepage as well (more details soon!).</li>
</ul>
<p>This is good news for components that do not receive significant organic traffic. We plan to reward loyal component authors who we believe should be selling more given the right exposure.</p>
<img src="http://feeds.feedburner.com/~r/Binpress/~4/Rw71fu0rSyA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.binpress.com/blog/2011/09/06/exciting-month-ahead-for-binpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.binpress.com/blog/2011/09/06/exciting-month-ahead-for-binpress/</feedburner:origLink></item>
		<item>
		<title>Finding good ideas for components</title>
		<link>http://feedproxy.google.com/~r/Binpress/~3/zv2ebU-6yrk/</link>
		<comments>http://www.binpress.com/blog/2011/09/01/finding-good-ideas-for-components/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 10:10:32 +0000</pubDate>
		<dc:creator>Adam Tal</dc:creator>
				<category><![CDATA[Binpress]]></category>

		<guid isPermaLink="false">http://www.binpress.com/blog/?p=720</guid>
		<description><![CDATA[In our last post, Estimating The Potential Of Your Software Product we discussed ways to tell if your component idea is any good. In this post we want to go a step backwards and help you come up with good &#8230; <a href="http://www.binpress.com/blog/2011/09/01/finding-good-ideas-for-components/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In our last post, <a href="http://www.binpress.com/blog/2011/08/29/estimating-the-potential-of-software-product/">Estimating The Potential Of Your Software Product</a> we discussed ways to tell if your component idea is any good. In this post we want to go a step backwards and help you come up with good ideas for components you can sell on Binpress.</p>
<p>The first step should be to check out our <a href="http://www.binpress.com/wanted/list">idea suggestion section</a>.  This is where actual buyers from the Binpress community can request components they need and are willing to pay for. I used it to request a <a href="http://www.binpress.com/app/utagcloud/540">Tag cloud generator for PHP</a>, which I bought as soon as it was ready after a quick revision request from it&#8217;s author, <a href="http://www.binpress.com/dev/profile/268">Andrius Virbicianskas</a>. I will be posting a case study about this component in the near future, make sure to subscribe to be notified when it&#8217;s published.<br />
<span id="more-720"></span></p>
<h2>Q&#038;A sites and forums</h2>
<p>A simple way to get ideas for components is to visit Q&#038;A sites (such as StackOverflow) and forums and see what common problems people are having. Search for common issues or help requests with implementing features in the languages and frameworks you like to use, and you could easily find good ideas for needed components. When you find an idea you think has demand, do a little research on other sites and on google to estimate its potential (as we&#8217;ve discussed in <a href="http://www.binpress.com/blog/2011/08/29/estimating-the-potential-of-software-product/">our previous post</a>).</p>
<h2>Variations on popular projects</h2>
<p>My next suggestion is browsing through plugin repositories of popular frameworks or platforms (<a href="http://wordpress.org/extend/plugins/">WordPress plug-ins</a>, <a href="http://plugins.jquery.com/">jQuery Plugins</a> and <a href="http://github.com">Github</a> for example). </p>
<p>Popular existing projects could be a great starting point for a good component since you already know that demand exists for it and you can leverage its popularity by mentioning it in your product description or name. Common ways to create something new from an existing project are to provide missing or requested functionality (check what people are saying about it) or porting it to another language / framework / platform. </p>
<p>This last tip could also work with our own inventory. We encourage you to <a href="http://www.binpress.com/browse">explore</a> less populated sections of Binpress by platform, language or framework, and get ideas for components you can port to your own environment. You should also go over your component idea and see that it&#8217;s not already published on Binpress, since we try to avoid having components with duplicate functionality.</p>
<h2>Going through your old libraries</h2>
<p>Another way to find ideas is to revisit the source code of old projects, and look for reusable parts you can extract that might work as standalone product. We had an excellent post about doing just that called <a href="http://www.binpress.com/blog/2011/07/25/extracting-code-from-old-projects/">Extracting code from old projects</a>.</p>
<p>We&#8217;d love to hear about your own sources for inspiration, and if you published on our platform before (or sold any software products actually) we&#8217;d love to hear about how you came up with your idea. Please share with us in the comments!</p>
<img src="http://feeds.feedburner.com/~r/Binpress/~4/zv2ebU-6yrk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.binpress.com/blog/2011/09/01/finding-good-ideas-for-components/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.binpress.com/blog/2011/09/01/finding-good-ideas-for-components/</feedburner:origLink></item>
		<item>
		<title>Estimating the potential of your software product</title>
		<link>http://feedproxy.google.com/~r/Binpress/~3/hr6wuMFdNIs/</link>
		<comments>http://www.binpress.com/blog/2011/08/29/estimating-the-potential-of-software-product/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 15:04:17 +0000</pubDate>
		<dc:creator>Adam Tal</dc:creator>
				<category><![CDATA[Binpress]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[research]]></category>

		<guid isPermaLink="false">http://www.binpress.com/blog/?p=143</guid>
		<description><![CDATA[A common concern many of our developers have is knowing whether or not their components will sell well on Binpress. While it&#8217;s hard to predict and there are always outliers, there are some indicators you can use to get a &#8230; <a href="http://www.binpress.com/blog/2011/08/29/estimating-the-potential-of-software-product/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A common concern many of our developers have is knowing whether or not their components will sell well on Binpress. While it&#8217;s hard to predict and there are always outliers, there are some indicators you can use to get a better idea of what to expect.</p>
<p>We wrote this post mainly for our developer, but it should apply to anyone selling digital products &#8211; from PC Software to iPhone apps.</p>
<h2>Step 1: Estimating value and need</h2>
<p>The first thing you need to evaluate is whether there&#8217;s a need for your component, and whether it is worth the price you&#8217;re asking for it. In order to do that, ask yourself the following questions:<br />
<span id="more-143"></span></p>
<ol>
<li>Is my component solving a real and significant problem?</li>
<li>How hard is it to develop this component from scratch? there&#8217;s a certain barrier between willing to do something yourself and paying someone else to do it. Does your component cross that barrier?</li>
<li>How big is the demand? are many developers asking questions about the problem this component solves? is the functionality appearing in a lot of websites or apps lately? (more on how to determine this in a bit).</li>
<li>Are there any additional benefits to buying the component compared to developing it from scratch other than saving time? (domain expertise, insider knowledge)</li>
<li>How often did you use your code in your projects? how stable / mature is the solution?</li>
</ol>
<p>Answering those questions will give a general idea of what how attractive this component would be for potential buyers.</p>
<h2>Step two: Assessing demand through Google</h2>
<p>The second thing you need to do is evaluate the demand for your solution. There&#8217;s a very simple way to do this, and I&#8217;m going to show you exactly how.</p>
<p>A. Come up with a few keywords or phrases that people might search on Google and expect to find your component.</p>
<p>One way to do so is to think of a general way to describe what your component does (for example &#8220;Image resize&#8221; or &#8220;scaling images&#8221;), appending the language, framework or platform you are writing for (for example &#8220;javascript image resize&#8221; or &#8220;jquery image scaling&#8221;.</p>
<p>Another idea could be using the name of a product your component might be replacing or complementing (for example &#8220;magento tax plugin&#8221;).</p>
<p>B. Go into <a href="https://adwords.google.com/select/KeywordToolExternal">Google&#8217;s free keyword</a> tool and add these keywords into the box.</p>
<p><a href="http://www.binpress.com/blog/wp-content/uploads/2011/08/Screen-shot-2011-08-29-at-17.55.49.png"><img src="http://www.binpress.com/blog/wp-content/uploads/2011/08/Screen-shot-2011-08-29-at-17.55.49.png" alt="" title="Screen shot 2011-08-29 at 17.55.49" width="326" height="148" class="alignnone size-full wp-image-731" /></a></p>
<p>C. Go over the results and look for the <strong>Global Monthly Searches</strong>. If there are no searches for none of your keywords, try to come up with others (you can use Google&#8217;s suggestions) and repeat the process before giving up.</p>
<p><a href="http://www.binpress.com/blog/wp-content/uploads/2011/08/Screen-shot-2011-08-29-at-17.56.07.png"><img src="http://www.binpress.com/blog/wp-content/uploads/2011/08/Screen-shot-2011-08-29-at-17.56.07.png" alt="" title="Screen shot 2011-08-29 at 17.56.07" width="707" height="104" class="alignnone size-full wp-image-732" /></a></p>
<p>D. While you&#8217;re there, take note of the rest of the related keywords that Google is suggesting to you, as it is recommended you add them to your description or even consider them, when <a href="http://www.binpress.com/blog/2011/03/27/optimizing-package-name-and-summary-for-maximum-sales/">naming your component</a>.</p>
<p><a href="http://www.binpress.com/blog/wp-content/uploads/2011/08/Screen-shot-2011-08-29-at-17.56.18.png"><img src="http://www.binpress.com/blog/wp-content/uploads/2011/08/Screen-shot-2011-08-29-at-17.56.18.png" alt="" title="Screen shot 2011-08-29 at 17.56.18" width="741" height="135" class="alignnone size-full wp-image-733" /></a></p>
<p>E. Look at the competition level. If there&#8217;s a lot of competition for your keywords &#8211; which is a good sign which usually indicates demand &#8211; it is recommended that you run a search on Google and research your competition, so that you can make sure your component offers something unique or some sort of angle that the other doesn&#8217;t, whether it is a unique feature, easier implementation or a lower price.</p>
<p><a href="http://www.binpress.com/blog/wp-content/uploads/2011/08/Screen-shot-2011-08-29-at-17.58.56.png"><img src="http://www.binpress.com/blog/wp-content/uploads/2011/08/Screen-shot-2011-08-29-at-17.58.56.png" alt="" title="Screen shot 2011-08-29 at 17.58.56" width="466" height="146" class="alignnone size-full wp-image-734" /></a></p>
<p>While Google&#8217;s estimate is not always accurate and does not reflect the actual number of people who really need this solution, it does indicate if there&#8217;s a demand for you solution. Binpress is highly optimized for search engines, so you can assume your component will be visible to most Google users who are searching for the relevant terms.</p>
<h2>Bonus step: Stack Overflow &amp; Twitter</h2>
<p>Another good way to determine the demand and need for your solution, is to search online communities where developers hang out &#8211; such as Stack Overflow and Twitter.</p>
<p>Search Stack Overflow &#8211; How often does this problem come up? How many developers are struggling with it?<br />
Try to think of all the possible of ways people might describe the problem your component is solving, and as many keywords as you can think of that people might use to search for a solution to that problem. You could do the same with Twitter if you need more info.</p>
<h2>Using research to improve your chances</h2>
<p>You can use the results of your research to improve your component &#8211; by adding much requested features or improving the description to cover the problems people are looking to solve.</p>
<p>To sum up, these methods should help you determine whether your component has a chance to generate any sales on Binpress. This is not to say that if there&#8217;s no demand you shouldn&#8217;t code or publish your idea &#8211; there are always surprises, and sometimes people don&#8217;t know a solution might exist until they see it. As a starting point though, it is always good to think about where your potential buyers are coming from rather than hoping to be the exception.</p>
<p>Got additional advice or questions about those techniques? let us know in the comments!</p>
<img src="http://feeds.feedburner.com/~r/Binpress/~4/hr6wuMFdNIs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.binpress.com/blog/2011/08/29/estimating-the-potential-of-software-product/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.binpress.com/blog/2011/08/29/estimating-the-potential-of-software-product/</feedburner:origLink></item>
	</channel>
</rss>

