<?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>The Madstop &#187; OpenSource</title>
	<atom:link href="http://madstop.com/tag/opensource/feed/" rel="self" type="application/rss+xml" />
	<link>http://madstop.com</link>
	<description>Puppet development, configuration management, and less</description>
	<lastBuildDate>Mon, 02 Aug 2010 04:07:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Using &#8216;git rebase&#8217; to clean development histories</title>
		<link>http://madstop.com/2009/04/13/using-git-rebase-to-clean-development-histories/</link>
		<comments>http://madstop.com/2009/04/13/using-git-rebase-to-clean-development-histories/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 06:54:11 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://madstop.com/?p=71</guid>
		<description><![CDATA[In general, development in the Puppet world is a series of essentially disconnected batches of commits.  We do a pretty good job of applying related commits all at once, so it&#8217;s obvious when a set of commits is related, but &#8230; <a href="http://madstop.com/2009/04/13/using-git-rebase-to-clean-development-histories/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In general, development in the Puppet world is a series of essentially disconnected batches of commits.  We do a pretty good job of applying related commits all at once, so it&#8217;s obvious when a set of commits is related, but otherwise, we don&#8217;t have to worry.</p>
<p>Sometimes, though, multiple series of commits are related to each other, which can easily get lost.  Even worse, multiple series of commits developed in tandem can cause downright painful development histories.</p>
<p>For example, we&#8217;re currently working on <a href="http://groups.google.com/group/puppet-dev/browse_thread/thread/0de4dd8094416469#">refactoring Puppet&#8217;s ActiveRecord integration</a> while at the same time we&#8217;re adding the ability to <a href="http://groups.google.com/group/puppet-dev/browse_thread/thread/12875331120b13c0/811da1ae485628e4">queue the database store operations</a>.  We&#8217;ve had two development teams (of 1 to 3 people each) working on each feature, constantly publishing and rebasing against each others&#8217; work.  You could certainly argue that this isn&#8217;t the right model (we should have worked in serial rather than parallel, probably), time constraints didn&#8217;t allow this.</p>
<p>On Friday, we got to the point where we&#8217;re nearly done, and I started sending my code to the -dev list for review.  That was straightforward enough, because I&#8217;d done my development in a separate branch and I still had those branches.  The other team, though, had been pushing code around like made, tuning and modifying their code over time, so sending their commits out for review was harder.  To top it off, our final branch was already a mixture of the different efforts.</p>
<p>So, I decided to see if I could clean up the development history. We had 80 commits spread all around, and I needed to reorder and squash them so they made easy sense during code review.  (This is a pseudo-process without actual code, because the reality was too messy to reproduce here.)  First I needed a list of the commits in the branch; git rebase is our tool through this process, and using it interactively (with &#8216;-i&#8217;) is the key.  So, I made a new branch and started my rebasing:</p>
<blockquote><p>git checkout dev</p>
<p>git checkout -b clean_dev</p>
<p>git rebase -i 0.24.8</p></blockquote>
<p>This opens up my editor with an ordered list of all of the commits in my branch that aren&#8217;t in 0.24.8.  There are three things you can do with commits in this list:  Leave them alone, combine them with another commit, and delete them (which deletes them from the branch).  Because I knew this would be a long complicated process, I saved the whole list to a separate file to start.</p>
<p>Some of the commits in our branch were backports of fixes we needed from the &#8216;master&#8217; branch, so these were the only commits I left in the commit list in my first rebase.  This added about six commits, and was pretty easy to merge.  All of the other commits were just deleted from my clean branch.</p>
<p>The next step was to add my indirected ActiveRecord code.  This was only four or five commits, but should have been collapsed into fewer than that (e.g.,  one of the commits fixed a misspelling in a test).  There are multiple ways you could do this, including cherry-picking, but rebasing is definitely the most powerful.  I created a new temporary branch in which to do my rebase:</p>
<blockquote><p>git checkout -b clean_indirected_activerecord</p>
<p>git rebase -i clean_dev</p></blockquote>
<p>This actually results in a noop, because I&#8217;m rebasing against a branch that&#8217;s a complete duplicate of my current branch.  However, because I&#8217;m in interactive mode, I can do whatever I want from here, so I pasted in my four or five commits, and s/pick/squash/ where appropriate.  Once I dealt with any merge conflicts, I then merged back into my clean branch:</p>
<blockquote><p>git checkout clean_dev</p>
<p>git merge &#8211;no-ff clean_indirected_activerecord</p></blockquote>
<p>I decided to force the merge commit to exist because, um, actually I don&#8217;t have a good reason.  It seemed like a good idea to have a clear milepost saying that a given branch is merged, like that first email in a code review describing a patch series.</p>
<p>So now I&#8217;ve got a branch that has a series of patches that prepare the branch for us (with backported fixes, mostly), then a series of patches providing the first set of development.  Now I just need to repeat this process for the other three development stages, one done by me and two done by others.</p>
<p>I had no problem with my other code; it was 8 or so patches, but I wrote them all, so I could easily handle merge conflicts.  I also had no problem with one of the other chunks of code, because it was only three commits, so simple cherry-picking would have sufficed.</p>
<p>The last bit is where rebasing eventually broke down.  In the end, I had 35 commits that I thought contributed something  to the code (we had some duplicate commits in there, somehow, and some other commits that got cancelled out by later commits), but it looked like they should have been reduced to as little as four or five commits, because that&#8217;s about how many components were added in the code.  However, I don&#8217;t know this code as well as the people who wrote it, so I decided to punt here and told them they needed to clean up their development path and send me some patches that had no duplication and no code that gets deleted in a later patch.  My expectation is that they&#8217;ll create entirely new commits from the current state of the files, because the current commit history reflects a process rather than the desired state.</p>
<p>This whole process made me think of a discussion <a href="http://groups.google.com/group/puppet-dev/browse_thread/thread/27d4285e732f0e39/a65b086a6693da31?lnk=gst&amp;q=git+rebase#a65b086a6693da31">we had a while back</a> on the -dev list (and a <a href="http://groups.google.com/group/puppet-dev/browse_thread/thread/d920706cf9154100/0f71a89ec54c3226?lnk=gst&amp;q=git+rebase#0f71a89ec54c3226">related thread</a> started by Brice Figureau).  Apparently Linux development maintains every commit series separately, and only merges them when it&#8217;s time for release.  Or rather, the release involves a final merge.  They maintain multiple ongoing development branches; one of them has all of the proposed patch series, but it&#8217;s never merged directly into the release branch.  Instead, when a given patch series is accepted, it&#8217;s merged separately into the main branch.</p>
<p>This rebasing I did above made me realize the benefit of that approach &#8211; if the four development chunks had each remained separate branches, rather than merging early and merging often, it would have been *much* easier to keep them clean, and the developer responsible for a given chunk could always easily rebase just his or her own commits without affecting anyone else.  Then, when it was time for release, I could just merge them all in the appropriate order and release.</p>
<p>This is pretty easy for four patch series, but obviously gets more complicated as we have tens of sets.  I think for now, it&#8217;s too much work to maintain the patch sets in appropriate merge order without actually merging, but I think at some point, it really will make sense.  At the very least, this process has taught me the value of rebasing early and rebasing often.</p>
]]></content:encoded>
			<wfw:commentRss>http://madstop.com/2009/04/13/using-git-rebase-to-clean-development-histories/feed/</wfw:commentRss>
		<slash:comments>164</slash:comments>
		</item>
		<item>
		<title>The Most Free(tm) Way to Make Money from Open Source</title>
		<link>http://madstop.com/2009/02/28/the-most-freetm-way-to-make-money-from-open-source/</link>
		<comments>http://madstop.com/2009/02/28/the-most-freetm-way-to-make-money-from-open-source/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 07:18:25 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[licesning]]></category>
		<category><![CDATA[opencore]]></category>
		<category><![CDATA[opennms]]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[strategy]]></category>

		<guid isPermaLink="false">http://madstop.com/?p=61</guid>
		<description><![CDATA[Tarus Balog is on a one-man campaign against open-core licensing, or really, any company that produces both open source and closed source software: Of course, in the open core model there must be “commercially-available extensions” in order to get companies &#8230; <a href="http://madstop.com/2009/02/28/the-most-freetm-way-to-make-money-from-open-source/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.opennms.org/">Tarus Balog</a> is on a one-man campaign against <a href="http://blogs.the451group.com/opensource/2008/09/01/andrew-lampitt-defines-open-core-licensing/">open-core licensing</a>, or really, any company that produces both open source and closed source software:</p>
<blockquote><p>Of course, in the open core model there must be “commercially-available extensions” in order to get companies to sign a “commercial license”. Why is this? Because the open core product has been intentionally hobbled to force companies to buy the closed software product in order to get it to do the things that customers need it to do, and thus to generate revenue for the software company.</p></blockquote>
<p>I find this article interesting, because he seems to have taken the opposite tack from me in terms of deciding what causes the most dilution of an open source product.</p>
<p>I&#8217;ve always figured that requiring copyright attribution is a greater sin than providing commercial add-ons, with the strong assumption that the product completely stands on its own without those add-ons.</p>
<p>As far as I see it, requiring copyright attribution restricts the developer community, while providing commercial add-ons doesn&#8217;t restrict anyone anywhere, it just says that some of my code isn&#8217;t free.</p>
<p>Sure, I can see if I produce a crippled, useless free product that *requires* the commercial add-ons that it&#8217;d be evil, but if the OSS portions actually do kick ass on their own, then what&#8217;s the issue?</p>
<p>To me, community is the big differentiator.  If a given OSS project doesn&#8217;t actually care enough about a community, then open core is basically a sales tool.  But if it *really* cares about community, then open core always has to worry that the community can thrive without the commercial portions.  I basically think of this as requiring that the open core company always open source anything that&#8217;s required by the project or that&#8217;s essentially commoditized, but it leaves plenty of room for using a commercial license on those projects that not everyone needs, and especially on those areas that are clearly not commoditized and not many people need.</p>
<p>I think Tarus has a special perspective on OSS success because he&#8217;s in what amounts to an entirely commoditized space &#8211; there are so many monitoring tools with such a similar feature set that it&#8217;s crazy to think anyone would choose anything but an entirely open source solution.  In less commoditized spaces, it likely doesn&#8217;t make quite as much sense to stick to entirely open licenses.</p>
<p>This bit in particular sticks out:</p>
<blockquote><p>If you like your users why not provide all of the features as open source? Red Hat does it, JBoss does it, OpenNMS does it. The answer will always be that their business model can’t survive unless they sell closed source software. In that aspect, I can see little difference between open core companies and <a href="http://www.microsoft.com/">Microsoft</a>.</p></blockquote>
<p>Well, I can tell you that the reason that Reductive Labs is considering producing commercial software is that we can&#8217;t afford to produce much more software unless someone pays for the development, and at this point, we have a thriving, healthy community that largely gets huge benefit from Puppet without ever needing help from us.  So, our options are to grow so slowly that all of the interesting opportunities pass us by, or to start producing software that allows us to, at the least, recoup our development costs.</p>
<p>I agree with Tarus&#8217;s basic sentiment: A lot of these open core companies aren&#8217;t actually producing open source software that you could reasonably use on its own.  But that doesn&#8217;t invalidate the model, in my opinion.</p>
<p>His model of providing supported binaries, as Red Hat and others do, only works for those who use compiled languages, which means it&#8217;s right out for us.  Maybe we should stick some C in there, just to make it easier to charge for support?</p>
<p>So what do you think:  Is it a greater sin to only accept patches to your product if the contributor is willing to assign copyright to your commercial company, or to produce some closed-source code?</p>
]]></content:encoded>
			<wfw:commentRss>http://madstop.com/2009/02/28/the-most-freetm-way-to-make-money-from-open-source/feed/</wfw:commentRss>
		<slash:comments>128</slash:comments>
		</item>
		<item>
		<title>Summary of February 2009 Puppet Developer call</title>
		<link>http://madstop.com/2009/02/05/summary-of-february-2009-puppet-developer-call/</link>
		<comments>http://madstop.com/2009/02/05/summary-of-february-2009-puppet-developer-call/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 18:13:16 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[facter]]></category>
		<category><![CDATA[reductive]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://madstop.com/?p=58</guid>
		<description><![CDATA[We had another developer call last night, and until I can get the audio posted, here&#8217;s a basic summary. Development Workflow We led the discussion with a conversation about how the development workflow will change now that we&#8217;re finally releasing &#8230; <a href="http://madstop.com/2009/02/05/summary-of-february-2009-puppet-developer-call/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We had another developer call last night, and until I can get the <a href="http://reductivelabs.com/podcast">audio posted</a>, here&#8217;s a basic summary.</p>
<h2>Development Workflow</h2>
<p>We led the discussion with a conversation about how the development workflow will change now that we&#8217;re finally releasing the code in master as 0.25.  After much discussion, we largely concluded that the least-surprise solution was to use the &#8216;master&#8217; branch for stable development, and have something like a &#8216;next&#8217; branch for new features and major refactorings.</p>
<p>The main goal is for new developers to be able to clone our repository and get to developing code immediately without having to worry about switching branches or any such thing.  More experienced developers will know where their development should be done, so it&#8217;s mostly a question of least-surprise for newcomers.</p>
<p>There was also discussion of fly-by-night developers, people who show up, produce a patch or two, and wander off.  James Turnbull (who handles 99% of the merging and release management) said he was fine accepting patches over email, rather than forcing people to publish everything via git.</p>
<p>Other than those two changes, our development workflow has worked pretty well.  However, the fly-by-night patches led into discussion of&#8230;</p>
<h2>Core vs. Modules</h2>
<p>Puppet&#8217;s core is starting to get many non-core features, like Nagios and Zenöss integration.  It&#8217;s essentially impossible for the core team to maintain all of these extentions, but many of them were written as a one-off solution and won&#8217;t be maintained by their authors.  Because of this, we  as a project need to develop a means of splitting Puppet&#8217;s core away from all of these modules.</p>
<p>Discussion was had of using a Nagios-style &#8216;plugins&#8217; repository, but I don&#8217;t like that idea because it leaves basically the same problem &#8211; a centralized repository that no one wants to maintain.</p>
<p>Instead, we all basically agreed that we want to focus on modules as the means of adding functionality to Puppet, but the big problem there is that the only way to do so is to add package-like behaviours to modules, and none of us wants to make our own package manager.  Nonetheless, it was agreed that this was the only real option, so it just remains to do it.</p>
<h2>Roadmap and Release Status</h2>
<p>Against all odds, it looks like we&#8217;ll get 0.25 out in February &#8211; I&#8217;ll be merging in the last major refactor this week, and then it&#8217;s just a question of getting as many bug-fixes in as we can and dropping the release.</p>
<p>In addition, there are (annoyingly) a few important bugs in 0.24.7, so we&#8217;re unfortunately going to have to be put out a 0.24.8 release.  One thing that&#8217;s become clear in the last couple of releases is that we need to get more community testing of release candidates &#8211; many of the bugs would have been caught by basic testing in the community.</p>
<h2>Facter Design and Shadow{Facter,Puppet}</h2>
<p>RailsMachine released <a href="http://github.com/railsmachine/shadow_puppet/tree/master">ShadowPuppet</a> and <a href="http://github.com/railsmachine/shadow_facter/tree/master">ShadowFacter</a> in the last few weeks, and it&#8217;s led to a flurry of design conversations.  We didn&#8217;t cover too much of it in the dev call, other than my reiteration that I&#8217;m excited by them and would like to merge them into Puppet and Facter.</p>
<h2>Conclusion</h2>
<p>And that was it.  Please join us on the next call if you can.</p>
]]></content:encoded>
			<wfw:commentRss>http://madstop.com/2009/02/05/summary-of-february-2009-puppet-developer-call/feed/</wfw:commentRss>
		<slash:comments>111</slash:comments>
		</item>
		<item>
		<title>Puppet and OpenQRM</title>
		<link>http://madstop.com/2008/12/10/puppet-and-openqrm/</link>
		<comments>http://madstop.com/2008/12/10/puppet-and-openqrm/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 19:26:33 +0000</pubDate>
		<dc:creator>luke</dc:creator>
				<category><![CDATA[Puppet]]></category>
		<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[openqrm]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://madstop.com/?p=44</guid>
		<description><![CDATA[Matt Rechenburg is the author of OpenQRM, a multi-platform provisioning tool (competing with tools like Kickstart and FAI).  He has recently announced integration between it and Puppet: &#8230;this step is another milestone for the openQRM project which now includes the &#8230; <a href="http://madstop.com/2008/12/10/puppet-and-openqrm/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://mattinaction.blogspot.com/">Matt Rechenburg</a> is the author of <a href="http://www.openqrm.com/">OpenQRM</a>, a multi-platform provisioning tool (competing with tools like Kickstart and FAI).  He has recently announced integration between it and Puppet:</p>
<blockquote><p>&#8230;this step is another milestone for the openQRM project which now includes the automatic configuration management features for the managed appliances powered by Puppet. With integrating Puppet into openQRM the mission is to provide a generic web-based user interface for the Puppet manifest. The current state already provides some pre-made classes like web-server, database-server, lamp etc. and automatically sets up Puppet for the openQRM environment in best-practice  manner by keeping the manifest in an snv-repository.</p></blockquote>
<p>John Willis had a say, too:</p>
<blockquote><p>The important thing, in my opinion, about the the openQRM Puppet integration transaction is that it exposes the exciting and beautiful things about open source. From a discussion about the importance of the integration of provisiong and configuration management, (i.e., openQRM and Puppet), to a fully developed integrated solution, only took 3 weeks. Imagine this discussion happening between even the most agile of proprietary vendors and the time line of something like this to happen. In the proprietary example they would still be playing phone tag just to figure out how their lawyers could talk. I am pretty sure Matt never even called Luke once during that whole process.</p></blockquote>
<p>I haven&#8217;t yet had the chance to give OpenQRM a try, but hopefully this will encourage others to try it, and maybe one of those others will let me know how it goes for them. <img src='http://madstop.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://madstop.com/2008/12/10/puppet-and-openqrm/feed/</wfw:commentRss>
		<slash:comments>92</slash:comments>
		</item>
		<item>
		<title>Project vs. Company (and a bit of me)</title>
		<link>http://madstop.com/2008/10/22/project-vs-company-and-a-bit-of-me/</link>
		<comments>http://madstop.com/2008/10/22/project-vs-company-and-a-bit-of-me/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 18:01:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Puppet]]></category>
		<category><![CDATA[luke]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[me]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[oss]]></category>
		<category><![CDATA[startup]]></category>

		<guid isPermaLink="false">http://madstop.com/?p=21</guid>
		<description><![CDATA[Strangely, I've heard complaints that I'm focusing too much on the company and not enough on the project, and as a result the product is suffering.  I find this strange because the project doesn't pay my bills, feed my children, or buy my beer, the company does, and without those things, the project itself couldn't exist.  If, instead, I had taken some corporate sysadmin job, I'd have been spending maybe 5-10 hours a week on Puppet, instead of between 10 and 60 hours a week like I've been doing for the last three and a half years.  This, I think, is the thing that people tend to forget about open source -- yes, you can make money doing open source, but in doing so you almost always put yourself in conflict between making money and writing code.  <a href="http://madstop.com/2008/10/22/project-vs-company-and-a-bit-of-me/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>One of the constant struggles in trying to build a company to build an open source project is finding the right balance between the two.  For a company as small as Reductive Labs, and as closely tied with me as it is, there&#8217;s the further struggle of finding a balance between the company, the project, and me.  This isn&#8217;t a post with answers, nor, in retrospect, is it a terribly organized post; it&#8217;s just an attempt to lay out something I think a lot about, and something I expect the Puppet community has a lot of questions about.  This is one of many topics that&#8217;s always bouncing around in my head but that I can&#8217;t seem to find a way to talk about, so this post is really just an opening salvo, something that I hope will break the writer&#8217;s block.</p>
<p>One thing some people apparently don&#8217;t realize is that Puppet couldn&#8217;t have been created without Reductive Labs &#8212; there&#8217;s no way I would have had the time or motivation to create Puppet without a company devoted to funding its development.  All of the money that Reductive Labs makes goes back into funding Puppet, mostly in the form of development, marketing, and community management (although less of the latter, recently).  Almost all of the money I spend on marketing is in the form of conference speaking, so don&#8217;t think I&#8217;m spending big coin on TV spots or anything, but these conferences have been *huge* sources of community growth.</p>
<p>Strangely, I&#8217;ve heard complaints that I&#8217;m focusing too much on the company and not enough on the project, and as a result the product is suffering.  I find this strange because the project doesn&#8217;t pay my bills, feed my children, or buy my beer, the company does, and without those things, the project itself couldn&#8217;t exist.  If, instead, I had taken some corporate sysadmin job, I&#8217;d have been spending maybe 5-10 hours a week on Puppet, instead of between 10 and 60 hours a week like I&#8217;ve been doing for the last three and a half years.  This, I think, is the thing that people tend to forget about open source &#8212; yes, you can make money doing open source, but in doing so you almost always put yourself in conflict between making money and writing code.</p>
<p>The key is that Reductive Labs doesn&#8217;t make money when I write Puppet code, it makes money by helping people with existing code; yet, my business model is based on plowing that money into writing code, on the assumption that the code will make the product better, increasing the market, and hopefully allowing both project and company to grow.</p>
<p>This gets especially complicated when my own goals show up.  I&#8217;ve always seen Puppet as the first step toward building a significantly enhanced toolchain for system administration, and it was always my goal to use Puppet as a launchpad to having Reductive Labs fund other great projects.  (This phrasing is important &#8212; I need to make money to do development full time, so Reductive Labs (currently) needs to make money to fund that development.)  This is why I&#8217;ve always resisted billing us as &#8220;the Puppet company&#8221; &#8212; I don&#8217;t want to be pigeonholed in the event we have other successes, which I hope we will.</p>
<p>These longer-term goals are also why I&#8217;ve avoided joining other companies and just doing part-time development on Puppet for them.  Leaving aside that none of them would have considered hiring me until I&#8217;d already had significant success with Puppet (which puts us in a strange Catch-22, where they&#8217;d only offer to hire me once I&#8217;d shown I didn&#8217;t need their help), no one has ever expressed an interest in hiring me to build a product group, which is what I&#8217;m trying to do here.</p>
<p>Going back to finding that balance, one of the things I&#8217;ve foolishly allowed myself to do in the last year is get too caught up in fixing bugs, rather than adding functionality or doing interesting refactoring.  It&#8217;s amazing how disheartening and depressing it is to spend all of your days fixing bugs in code you wrote, all the while struggling to make enough money to pay people to help you fix those bugs.  Having more people at the company has helped bring focus to my efforts and those of the company as a whole, and having many more people involved in the project has helped bring focus to the needs of the project.</p>
<p>I think that&#8217;s about all I have to say on the subject right now &#8212; a presentation of the problem, a statement of the status quo, and a wandering finish.  Now that I&#8217;ve introduced the topic, though, I hope to be able to post more lucidly and usefully about it in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://madstop.com/2008/10/22/project-vs-company-and-a-bit-of-me/feed/</wfw:commentRss>
		<slash:comments>56</slash:comments>
		</item>
	</channel>
</rss>
