Contributing to F/OSS and Dogfooding

Crossposted from the Scimatic Blog.

<p>Jamie sent me a link to a great <a href=”http://www.kalzumeus.com/2010/10/15/lessons-learned-at-business-of-software-2010/”>review</a> of the Business of Software conference, and before you think I’m going to go off on one of my business-analyst posts, I’m actually going to talk about &quot;dogfooding&quot;. The aforementioned review post talked about the best way to build a software product, and one of the big take-aways is that you have to use your product to develop it well; you have to &quot;eat your own dogfood.&quot; It’s a well-known concept in software development, and we’re well aware of it here at Scimatic.</p>

<p>True enough, but what does that happen to do with open source software? Well, here at Scimatic, we use our fair share of open-source software. We’ve written blog posts about:</p>
<ul>
<li><a href=”http://www.scimatic.com//node/229″>NPlot</a></li>
<li><a href=”http://www.scimatic.com/node/307″>NHibernate, Castle Activerecord</a> and SQLite </li>
<li>NUnit, <a href=”http://www.scimatic.com/node/272″>SVN, Trac</a>, and <a href=”http://www.scimatic.com/node/287″>CruiseControl.NET</a> </li>
</ul>

<p>These are all tools and projects that we &quot;dogfood&quot; and use all the time. However, most of these tools are mature projects with teams of people working on them and are feature complete. <a href=”http://www.nhforge.org”>NHibernate</a> and the Castle stack are great out of the box, and are maintained by some of the best .NET <a href=”http://www.ayende.com/”>open-source</a> <a href=”http://www.castleproject.org/castle/projects.html”>programmers</a> in the .NET ecosystem.</p>

<p>Most open-source projects start out as a single programmer having an itch to scratch, and some of the projects that we are using are at that one- or two-programmer stage. I recently used an open-source C# library for a client project that had about 60% of the functionality that I needed. Since it scratched most of my itch, and I needed to implement the other 40% anyway, I polished up the unit tests a bit, and sent off a patch. Whether the maintainer wants to incorporate the patch … well, I’d be happy to work with him when that time comes. This was a good example of &quot;dogfooding&quot;; I knew exactly what I needed to add to the project, and it was a pretty painless process.</p>

<p>That piece of open-source code was directly usable for my client project, so in that case it was a no-brainer. However, there’s a set of very useful open-source .NET tools that I’m starting to use, but these tools don’t directly pay the bills. For example, here are two good Visual Studio Add-ins:</p>

<ul>
<li><a href=”http://www.bubblecloud.org/visualnunit”>Visual NUnit</a> — runs NUnit tests within Visual Studio. </li>
<li><a href=”http://sourceforge.net/projects/vstrac/”>Trac Explorer</a> — provides an &quot;explorer&quot; view of Trac instances </li>
</ul>

<p>Each of these projects meets most, but not all, of my needs. For example, I opened this <a href=”http://sourceforge.net/tracker/index.php?func=detail&amp;aid=3065399&amp;group_id=266536&amp;atid=1134546″>bug report</a> for Visual Nunit. And then I volunteered to try and fix it. It seems like a win-win: I need the fix, and the community gets an improved product.</p>

<p>The one difficulty that I am having is trying to determine how much time to devote to these open-source projects. It’s straight-forward to price out how much an hour of my time is worth in a monetary sense. And additional time with my family is worth just as much. Contributing to open source where there is a direct benefit to customers is also easy to evaluate. This case of developing tools is a bit harder to evaluate, because it’s more difficult to figure out what my &quot;return-on-investment&quot; is. Will running Visual Nunit in the correct configuration save me 30 minutes a day? I have no idea.</p>

<p>There are, of course, the indirect benefits. I get to</p>

<ul>
<li>improve my coding, </li> <li>read other people’s code, </li>
<li>develop a set of sample code that I can show to prospective clients, </li>
<li>hopefully develop a (good) reputation in the community. </li>
</ul>

<p>And our company gains indirectly as well</p>
<ul>
<li>we garner attention for “contributing to the community” </li>
<li>we can publicise our efforts (for example, through this blog – hey, see what I did there?) </li>
</ul>

<p>So I will continue to work on these projects. But probably not for hours at a time. Any thoughts on how to evaluate how much time to invest in “off-the-clock” work on F/OSS projects? I’d love to hear from folks out there.</p>

<p>In the end, I hope that we can have a large sample of open source code that we contribute to, like the folks at <a href=”http://hashrocket.com/culture/open-source/”>Hashrocket</a> and <a href=”http://github.com/37signals”>37Signals</a>. So you can see what I’m working on over at <a href=”http://github.com/jimgraham”>GitHub</a> (and I’m learning git as I go). I hope that list of projects grows.</p>

Contributing to F/OSS and Dogfooding