<?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>Neary Consulting</title>
	<atom:link href="http://www.neary-consulting.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.neary-consulting.com</link>
	<description>Free software community consultancy</description>
	<lastBuildDate>Wed, 07 Dec 2011 16:47:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Community Software Development training course</title>
		<link>http://www.neary-consulting.com/index.php/2011/12/07/community-software-development-training-course/</link>
		<comments>http://www.neary-consulting.com/index.php/2011/12/07/community-software-development-training-course/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 16:47:41 +0000</pubDate>
		<dc:creator>dneary</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Training]]></category>

		<guid isPermaLink="false">http://www.neary-consulting.com/?p=188</guid>
		<description><![CDATA[For the past few months, I have been offering a new service &#8211; a training course tailored to helping a team be effective working with community projects &#8211; whether that is engaging an existing community, or growing a community around new code. Details of the topics I cover are up on the site now, along [...]]]></description>
			<content:encoded><![CDATA[<p>For the past few months, I have been offering a new service &#8211; <a href="http://www.neary-consulting.com/index.php/services/#community_training">a training course tailored to helping a team be effective working with community projects</a> &#8211; whether that is engaging an existing community, or growing a community around new code. Details of the topics I cover are up on the site now, along with <a href="http://www.neary-consulting.com/wp-content/uploads/2011/12/Community_development_brochure_web.pdf">a link to a brochure</a> (PDF) for you to download.</p>
<p>Developing software in community is as much a social activity as it is a technical activity &#8211; and engaging an existing community, like moving into a new neighbourhood or starting at a new school, can be very daunting indeed. This course covers not just the technical issues of community development, but also the social, management and strategic issues involved. Some of the questions that I help answer are:</p>
<ul>
<li> What are the tools and communication norms?</li>
<li>How can I get answers to my questions?</li>
<li>Is there a trick to writing patches that get reviewed quickly?</li>
<li>How do I figure out who&#8217;s in charge?</li>
<li>How much will it cost me to open source some code/to work with an existing project?</li>
<li>How does managing volunteers work?</li>
<li>Is there anything I can do to help my developers be more vocal upstream?</li>
<li>What legal issues should my developers be aware of?</li>
</ul>
<p>All of these things, in my experience, are challenges that organisations have to overcome when they start engaging with community projects like Apache, GNOME or the Linux kernel.</p>
<p>If you&#8217;re having trouble with these issues, or some subset of them, and are interested in a training seminar, <a href="http://www.neary-consulting.com/index.php/about-us/">contact me</a>, and we&#8217;ll talk.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neary-consulting.com/index.php/2011/12/07/community-software-development-training-course/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting people together</title>
		<link>http://www.neary-consulting.com/index.php/2011/06/06/getting-people-together/</link>
		<comments>http://www.neary-consulting.com/index.php/2011/06/06/getting-people-together/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 16:21:17 +0000</pubDate>
		<dc:creator>dneary</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[meego]]></category>

		<guid isPermaLink="false">http://www.neary-consulting.com/?p=164</guid>
		<description><![CDATA[Reposted from gnome.org One of the most important things you can do in a free software project, besides writing code, is to get your key contributors together as often as possible. I&#8217;ve been fortunate to be able to organise a number of events in the past 10 years, and also to observe others and learn [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.gnome.org/bolsh/2011/05/09/getting-people-together/"><em>Reposted from gnome.org</em></a></p>
<p>One of the most important things you can do in a free software  project, besides writing code, is to get your key contributors together  as often as possible.</p>
<p>I&#8217;ve been fortunate to be able to organise a number of events in the  past 10 years, and also to observe others and learn from them over that  time. Here are some of the lessons I&#8217;ve learned over the years from that  experience.</p>
<h2>Venue</h2>
<p>The starting point for most meetings or conferences is the venue. If  you&#8217;re getting a small group (under 10 people) together, then it is  usually OK just to pick a city, and ask a friend who runs a business or  is a college professor to book a room for you. Or use a co-working  space. Or hang out in someone&#8217;s house, and camp in the garden.  Once you  get bigger, you may need to go through a more formal process.</p>
<p>If you&#8217;re not careful, the venue will be a huge expense, and you&#8217;ll  have to find that money somewhere. But if you are smart, you can manage a  free venue quite easily.</p>
<p><span id="more-164"></span>Here are a few strategies you might want to try:</p>
<ul>
<li><strong>Piggy-back on another event</strong> &#8211; the Linux Foundation  Collaboration Summit, OSCON, LinuxTag, GUADEC and many other conferences  are happy to host workshops or meet-ups for smaller groups. The GIMP  Developers Conference in 2004 was the first meet-up that I organised,  and to avoid the hassle of dealing with a venue, finding a time that  suited everyone, and so on, I asked the GNOME Foundation if they  wouldn&#8217;t mind setting aside some space for us at GUADEC &#8211; and they said  yes.Take advantage of the bigger conference&#8217;s organisation, and you get  the added benefit of attending the bigger conference at the same time!</li>
<li><strong>Ask local universities for free rooms</strong> &#8211; This won&#8217;t  work once you go over a certain size, but especially for universities  which have academics who are members of the local LUG, they can talk  their department head into booking a lecture theatre &amp; a few  classrooms for a weekend. Many universities will ask to do a press  release and get credit on the conference web-site, and this is a  completely fair deal.The first Libre Graphics Meeting was hosted free in  CPE Lyon, and the GNOME Boston Summit has been hosted free for a number  of years in MIT.</li>
<li><strong>If the venue can&#8217;t be free, see if you can get someone else to pay for it</strong> &#8211; Once your conference is bigger than about 200 people, most venues  will require payment. Hosting a conference will cost them a lot, and  it&#8217;s a big part of the business model of universities to host  conferences when the students are gone. But just because the university  or conference center won&#8217;t host you for free doesn&#8217;t mean that you have  to be the one paying.Local regional governments like to be involved with big events in  their region. GUADEC in Stuttgart, the Gran Canaria Desktop Summit, and  this year&#8217;s Desktop Summit in Berlin have all had the cost of the venue  covered by the host region. An additional benefit of partnering with the  region is that they will often have links to local industry and press &#8211;  resources you can use to get publicity and perhaps even sponsorship for  your conference.</li>
<li><strong>Run a bidding process</strong> &#8211; by encouraging groups  wishing to host the conference to put in bids, you are also encouraging  them to source a venue and talk to local partners before you decide  where to go. You are also putting cities in competition with each other,  and like olympic bids, cities don&#8217;t like to lose competitions they&#8217;re  in!</li>
</ul>
<h2>Budget</h2>
<p>Conferences cost money. Major costs for a small meet-up might be<br />
covering the travel costs of attendees. For a larger conference, the<br />
major costs will be equipment, staff and venue.</p>
<p>Every time I have been raising the budget for a conference, my rule of<br />
thumb has been simple:</p>
<ol>
<li> Decide how much money you need to put on the event</li>
<li>Fundraise until you reach that amount</li>
<li>Stop fundraising, and move on to other things.</li>
</ol>
<p>Raising money is a tricky thing to do. You can literally spend all of<br />
your time doing it. At the end of the day, you have a conference to put<br />
on, and the amount of money in the budget is not the major concern of<br />
your attendees.</p>
<p>Remember, your primary goal is to get project participants together to<br />
advance the project. So getting the word out to prospective attendees,<br />
organising accommodation, venue, talks, food and drinks, social<br />
activities and everything else people expect at an event is more<br />
important than raising money.</p>
<p>Of course, you need money to be able to do all the rest of that stuff,<br />
so finding sponsors, fixing sponsorship levels, and selling your<br />
conference is a necessary evil. But once you have reached the amount of<br />
money you need for the conference, you really do have better things to<br />
do with your time.</p>
<p>There are a few potential sources of funds to put on a conference &#8211; I<br />
recommend a mix of all of these as the best way to raise your budget.</p>
<ul>
<li><strong>Attendees</strong> &#8211; While this is a controversial topic  among many communities, I think it is completely valid to ask attendees  to contribute something to the costs of the conference. Attendees  benefit from the facilities, the social events, and gain value from the  conference.Some communities consider attendance at their annual event as  a kind of reward for services rendered, or an incitement to do good  work in the coming year, but I don&#8217;t think that&#8217;s a healthy way to look  at it.There are a few ways for conference attendees to fund the running of the conference:
<ol>
<li>Registration fees &#8211; This is the most common way to get money from  conference attendees. Most community conferences ask for a token amount  of fees. I&#8217;ve seen conferences ask for an entrance fee of €20 to €50,  and most people have not had a problem paying this.A pre-paid fee also has an additional benefit of massively reducing  no-shows among locals. People place more value on attending an event  that costs them €10 than one where they can get in for free, even if the  content is the same.</li>
<li>Donations &#8211; very successfully employed by FOSDEM. Attendees are  offered an array of goodies, provided by sponsors (books, magazine  subscriptions, t-shirts) in return for a donation. But those who want  can attend for free.</li>
<li>Selling merchandising &#8211; Perhaps your community would be happier  hosting a free conference, and selling plush toys, t-shirts, hoodies,  mugs and other merchandising to make some money. Beware: in my  experience you can expect less from profits from merchandising sales  than you would get giving a free t-shirt to each attendee with a  registration fee.</li>
</ol>
</li>
<li><strong>Sponsors</strong> &#8211; Media publications will typically agree  to &#8220;press sponsorship&#8221; &#8211; providing free ads for your conference in their  print magazine or website. If your conference is a registered  non-profit which can accept tax-deductible donations, offer press  sponsors the chance to invoice you for the services and then make a  separate sponsorship grant to cover the bill. The end result for you is  identical, but it will allow the publication to write off the space they  donate to you for tax.What you really want, though, are cash sponsorships. As the number of  free software projects and conferences has multiplied, the competition  for sponsorship dollars has really heated up in recent years. To  maximise your chances of making your budget target, there are a few  things you can do.
<ol>
<li>Conference brochure &#8211; Think of your conference as a product you&#8217;re  selling. What does it stand for, how much attention does it get, how  important is it to you, to your members, to the industry and beyond?  What is the value proposition for the sponsor?You can sell a sponsorship package on three or four different  grounds: perhaps conference attendees are a high-value target audience  for the sponsor, perhaps (especially for smaller conferences) the  attendees aren&#8217;t what&#8217;s important, it&#8217;s the attention that the  conference will get in the international press, or perhaps you are  pitching to the company that the conference is improving a piece of  software that they depend on.Depending on the positioning of the conference, you can then make a  list of potential sponsors. You should have a sponsorship brochure that  you can send them, which will contain a description of the conference, a  sales pitch explaining why it&#8217;s interesting for the company to sponsor  it, potentially press clippings or quotes from past attendees saying how  great the conference is, and finally the amount of money you&#8217;re looking  for.</li>
<li>Sponsorship levels &#8211; These should be fixed based on the amount of  money you want to raise. You should figure on your biggest sponsor  providing somewhere between 30% and 40% of your total conference budget  for a smaller conference. If you&#8217;re lucky, and your conference gets a  lot of sponsors, that might be as low as 20%. Figure on a third as a  ball-park figure. That means if you&#8217;ve decided that you need €60,000  then you should set your cornerstone sponsor level at €20,000, and all  the other levels in consequence (say, €12,000 for the second level and  €6,000 for third level).For smaller conferences and meet-ups, the fundraising process might  be slightly more informal, but you should still think of the entire  process as a sales pitch.</li>
<li>Calendar &#8211; Most companies have either a yearly or half-yearly budget  cycle. If you get your submission into the right person at the right  time, then you could potentially have a much easier conversation. The  best time to submit proposals for sponsorship of a conference in the  Summer is around October or November of the year before, when companies  are finalising their annual budget.If you miss this window, all is not lost, but any sponsorship you get  will be coming out of discretionary budgets, which tend to get spread  quite thin, and are guarded preciously by their owners. Alternatively,  you might get a commitment to sponsor your July conference in May, at  the end of the first half budget process &#8211; which is quite late in the  day.</li>
<li>Approaching the right people &#8211; I&#8217;m not going to teach anyone sales,  but my personal secret to dealing with big organisations is to make  friends with people inside the organisations, and try to get a feel for  where the budget might come from for my event. Your friend will probably  not be the person controlling the budget, but getting him or her on  board is your opportunity to have an advocate inside the organisation,  working to put your proposal in front of the eyes of the person who owns  the budget.Big organisations can be a hard nut to crack, but free software  projects often have friends in high places. If you have seen the CTO or  CEO of a Fortune 500 company talk about your project in a news article,  don&#8217;t hesitate to drop him a line mentioning that, and when the time  comes to fund that conference, a personal note asking who the best  person to talk to will work wonders. Remember, your goal is not to sell  to your personal contact, it is to turn her into an advocate to your  cause inside the organisation, and create the opportunity to sell the  conference to the budget owner later.</li>
</ol>
<p>Also, remember when you&#8217;re selling sponsorship packages that  everything which costs you money could potentially be part of a  sponsorship package. Some companies will offer lanyards for attendees,  or offer to pay for a coffee break, or ice-cream in the afternoon, or a  social event. These are potentially valuable sponsorship opportunities  and you should be clear in your brochure about everything that&#8217;s  happening, and spec out a provisional budget for each of these events  when you&#8217;re drafting your budget.</li>
</ul>
<h2>Content</h2>
<p>Conference content is the most important thing about a conference.  Different events handle content differently &#8211; some events invite a large  proportion of their speakers, while others like GUADEC and OSCON invite  proposals and choose talks to fill the spots.</p>
<p>The strategy you choose will depend largely on the nature of the  event. If it&#8217;s an event in its 10th year with an ever increasing number  of attendees, then a call for papers is great. If you&#8217;re in your first  year, and people really don&#8217;t know what to make of the event, then  setting the tone by inviting a number of speakers will do a great job of  helping people know what you&#8217;re aiming for.</p>
<p>For Ignite Lyon last year, I invited about 40% of the speakers for  the first night (and often had to hassle them to put in a submission,  and the remaining 60% came through a submission form. For the first  Libre Graphics Meeting, apart from lightning talks, I think that I  contacted every speaker except 2 first. Now that the event is in its 6th  year, there is a call for proposals process which works quite well.</p>
<h2>Schedule</h2>
<p>Avoiding putting talks in parallel which will appeal to the same  people is hard. Every single conference, you hear from people who wanted  to attend talks which were on at the same time on similar topics.</p>
<p>My solution to conference scheduling is very low-tech, but works for  me. Coloured post-its, with a different colour for each theme, and an  empty talks grid, do the job fine. Write the talk titles one per  post-it, add any constraints you have for the speaker, and then fill in  the grid.</p>
<p>Taking scheduling off the computer and into real life makes it really  easy to see when you have clashes, to swap talks as often as you like,  and then to commit it to a web page when you&#8217;re happy with it.</p>
<p><a href="http://blogs.gnome.org/bolsh/2006/05/09/initial-schedule-ready/">I used this technique successfully for GUADEC 2006</a>, and <a href="http://www.flickr.com/photos/rossburton/467140094/">Ross Burton re-used it in 2007.</a></p>
<h2>Parties</h2>
<p>Parties are a trade-off. You want everyone to have fun, and hanging  out is a huge part of attending a conference. But morning attendance  suffers after a party. Pity the poor community member who has to drag  himself out of bed after 3 hours sleep to go and talk to 4 people at 9am  after the party.</p>
<p>Some conferences have too many parties. It&#8217;s great to have the  opportunity to get drunk with friends every night. But it&#8217;s not great to  <strong>actually</strong> get drunk with friends every night. Remember the goal of the conference: you want to encourage the advancement of your project.</p>
<p>I encourage one biggish party, and one other smallish party, over the  course of the week. Outside of that, people will still get together,  and have a good time, but it&#8217;ll be on their dime, and that will keep  everyone reasonable.</p>
<p>With a little imagination, you can come up with events that don&#8217;t  involved loud music and alcohol. Other types of social event can work  just as well, and be even more fun.</p>
<p>At GUADEC we have had a football tournament for the last number of  years. During the OpenWengo Summit in 2007, we brought people on a boat  ride on the Seine and we went on a classic 19th century merry-go-round  afterwards. Getting people eating together is another great way to  create closer ties &#8211; I have very fond memories of group dinners at a  number of conferences. At the annual KDE conference Akademy, there is  typically a Big Day Out, where people get together for a picnic, some  light outdoors activity, a boat ride, some sightseeing or something  similar.</p>
<h2>Extra costs</h2>
<p>Watch out for those unforeseen costs! One conference I was involved  in, where the venue was &#8220;100% sponsored&#8221; left us with a €20,000 bill for  labour and equipment costs. Yes, the venue had been sponsored, but  setting up tables and chairs, and equipment rental of whiteboards,  overhead projectors and so on, had not. At the end of the day, I  estimate that we used about 60% of the equipment we paid for.</p>
<p>Conference venues are hugely expensive for everything they provide.  Coffee breaks can cost up to $10 per person for a coffee &amp; a few  biscuits, bottled water for speakers costs $5 per bottle, and so on.   Rental of an overhead projector and mics for one room for one day can  cost €300 or more, depending on whether the venue insists that equipment  be operated by their a/v guy or not.</p>
<p>When you&#8217;re dealing with a commercial venue, be clear up-front about what you&#8217;re paying for.</p>
<h2>On-site details</h2>
<p>I like conferences that take care of the little details. As a  speaker, I like it when someone contacts me before the conference and  says they&#8217;ll be presenting me, what would I like them to say? It&#8217;s  reassuring to know that when I arrive there will be a hands-free mic and  someone who can help fit it.</p>
<p>Taking care of all of these details needs a gaggle of volunteers, and  it needs someone organising them beforehand and during the event. Spend  a lot of time talking to the local staff, especially the audio/visual  engineers.</p>
<p>In one conference, the a/v guy would switch manually to a  screen-saver at the end of a presentation. We had a comical situation  during a lightning talk session where after the first speaker, I  switched presentations, and while the next presentation showed up on my  laptop, we still had the screensaver on the big screen. No-one had  talked to the A/V engineer to explain to him the format of the  presentation!</p>
<p>So we ended up with 4 Linux engineers looking at the laptop, checking  connections and running various Xrandr incantations, trying to get the  overhead projector working again! We eventually changed laptops, and the  a/v engineer realised what the session was, and all went well after  that &#8211; most of the people involved ended up blaming my laptop.</p>
<h2>Have fun!</h2>
<p>Running a conference, or even a smaller meet-up, is time consuming,  and consists of a lot of detail work, much of which will never be  noticed by attendees. I haven&#8217;t even dealt with things like banners and  posters, graphic design, dealing with the press, or any of the other  joys that come from organising a conference.</p>
<p>The end result is massively rewarding, though. A study I did last  year of the GNOME project showed that there is a massive project-wide  boost in productivity just after our annual conference, and many of our  community members cite the conference as the high point of their year.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neary-consulting.com/index.php/2011/06/06/getting-people-together/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drawing up a roadmap</title>
		<link>http://www.neary-consulting.com/index.php/2011/06/06/drawing-up-a-roadmap/</link>
		<comments>http://www.neary-consulting.com/index.php/2011/06/06/drawing-up-a-roadmap/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 16:19:40 +0000</pubDate>
		<dc:creator>dneary</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Community]]></category>

		<guid isPermaLink="false">http://www.neary-consulting.com/?p=161</guid>
		<description><![CDATA[Reposted from gnome.org One of the most important documents a project can have is some kind of elaboration of what the maintainers want to see happen in the future. This is the concrete expression of the project vision &#8211; it allows people to adhere to the vision, and gives them the opportunity to contribute to [...]]]></description>
			<content:encoded><![CDATA[<p><em><a href="http://blogs.gnome.org/bolsh/2011/02/07/drawing-up-a-roadmap/">Reposted from gnome.org</a></em></p>
<p>One of the most important documents a project can have is some kind   of elaboration of what the maintainers want to see happen in the future.   This is the concrete expression of the project vision &#8211; it allows   people to adhere to the vision, and gives them the opportunity to   contribute to its realisation. This is the document I&#8217;ll be calling a   roadmap.</p>
<p>Sometimes the word &#8220;roadmap&#8221; is used to talk about other things, like   branching strategies and release schedules. To me, a release schedule   and a roadmap are related, but different documents. Releasing is about   ensuring users get to use what you make. The roadmap is your guiding   light, the beacon at the end of the road that lets you know what you&#8217;re   making, and why.</p>
<p>Too many projects fall into the trap of having occasional roadmap   planning processes, and then posting a mighty document which stays,   unchanged, until the next time the planning process gets done. Roadmaps   like these end up being historical documents &#8211; a shining example of how   aspirations get lost along the way of product development.</p>
<p>Other projects are under-ambitious. Either there is no roadmap at   all, in which case the business as usual of making software takes over &#8211;   developers are interrupt-driven, fixing bugs, taking care of user   requests, and never taking a step back to look at the bigger picture. Or   your roadmap is something you use to track tasks which are already   underway, a list of the features which developers are working on right   now. It&#8217;s like walking in a forest at night with a head-light &#8211; you are   always looking at your feet avoiding tree-roots, yet you have no idea   where you&#8217;re going.</p>
<p>When we drew up <a href="http://lists.xcf.berkeley.edu/lists/gimp-user/2003-August/006576.html">the roadmap</a> for the GIMP for versions 2.0 and 2.2 in 2003, we committed <a href="http://www.mail-archive.com/gimp-developer@lists.xcf.berkeley.edu/msg06066.html">some of these mistakes</a>.   By observing some projects like Inkscape (which has a history of   excellent roadmapping) and learning from our mistakes, I came up with a   different method which we applied to the WengoPhone from OpenWengo in   2006, and which served us well (until the project became <a href="http://trac.qutecom.org/">QuteCom</a>, at least). Here are some of the techniques I learned, which I hope will be useful to others.</p>
<h2><span id="more-161"></span>Time or features?</h2>
<p>One question with roadmaps is whether hitting a date for release   should be included as an objective. Even though I&#8217;ve said that release   plans and roadmaps are different documents, I think it is important to   set realistic target dates on way-points. Having a calendar in front of   you allows you to keep people focussed on the path, and avoid falling   into the trap of implementing one small feature that isn&#8217;t part of your   release criteria. Pure time-based releases, with no features  associated,  don&#8217;t quite work either. The end result is often quite  tepid, a product  of the release process rather than any design by a  core team.</p>
<p>I like <a href="http://www.joelonsoftware.com/items/2007/10/26.html">Joel&#8217;s scheduling technique</a>:   &#8220;If you have a bunch of wood blocks, and you can&#8217;t fit them into a  box,   you have two choices: get a bigger box, or remove some blocks.&#8221;  That  is, you can mix a time-based and feature-based schedule. You plan   features, giving each one a priority. You start at the top and work  your  way down the list. At the feature freeze date, you run a project   review. If a feature is finished, or will be finished (at a sufficient   quality level) in time for release, it&#8217;s in. If it won&#8217;t realistically   be finished in time for the release date, it&#8217;s bumped. That way, you   stick to your schedule (mostly), and there is a motivation to start   working on the biggest wood blocks (the most important features) first.</p>
<p>A recent article on <a href="http://www.codesimplicity.com/post/open-source-community-simplified/">lessons learned over years of Bugzilla development</a> by Max Kanat-Alexander made an interesting suggestion which makes a lot   of sense to me &#8211; at the point you decide to feature freeze and bump   features, it may be better to create a release branch for stabilisation   work, and allow the trunk to continue in active development. The   potential cost of this is a duplication of work merging unfinished   features and bug fixes into both branches, the advantage is it allows   someone to continue working on a bumped feature while the team as a   whole works towards the stable release.</p>
<h2>Near term, mid term, long term</h2>
<p>The <a href="http://web.archive.org/web/20050206190027/www.inkscape.org/cgi-bin/wiki.pl?Roadmap">Inkscape roadmap from 2005</a> is a thing of beauty. The roadmap mixes beautifully long-term goals   with short-term planning. Each release has a by-line, a set of one or   two things which are the main focus of the release. Some releases are   purely focussed on quality. Others include important features. The whole   thing feels planned. There is a vision.</p>
<p>But as you come closer and closer to the current work, the plans get broken down, itemised further. The <a href="http://en.wikipedia.org/wiki/Big_Hairy_Audacious_Goal">BHAGs</a> of a release in 2 years gets turned into a list of sub-features when   it&#8217;s one year away, and each of those features gets broken down further   as a developer starts planning and working on it.</p>
<p>The fractal geometer in me identifies this as a scaling phenomenon &#8211; coding software is like <a href="http://en.wikipedia.org/wiki/Coastline_paradox">zooming in to a coastline and measuring its length</a>.   The value you get when measuring with a 1km long ruler is not the same   as with a 1m ruler. And as you get closer and closer to writing code,   you also need to break down bigger tasks into smaller tasks, and  smaller  tasks into object design, then coding the actual objects and  methods.  Giving your roadmap this sense of scope allows you to look up  and see in  the distance every now and again.</p>
<h2>Keep it accurate</h2>
<p>A roadmap is a living document. The best reason to go into no detail   at all for  future releases beyond specifying a theme is that you have   no idea yet how long things will take to do when you get there. If you   load up the next version with features, you&#8217;re probably aiming for a   long death-march in the project team.</p>
<p>The inaccurate roadmap is an object of ridicule, and a motivation   killer. If it becomes clear that you&#8217;re not going to make a date, change   the date (and all the other dates in consequence). That might also be a   sign that the team has over-committed for the release, and an   opportunity to bump some features.</p>
<h2>Leave some empty seats</h2>
<p>In community projects, new contributors often arrive who would like   to work on features, but they don&#8217;t know where to start. There is an   in-place core team who are claiming features for the next release left   &amp; right, and the new guy doesn&#8217;t know what to do. &#8220;Fix some bugs&#8221; or   &#8220;do some documentation&#8221; are common answers for many projects including   GNOME (with the <a href="https://bugzilla.gnome.org/buglist.cgi?keywords=gnome-love&amp;resolution=---">gnome-love keyword in Bugzilla</a>) and LibreOffice (with the <a href="http://wiki.documentfoundation.org/Easy_Hacks">easy hacks list</a>). Indeed, these do allow you to get to know the project.</p>
<p>But, as has often been said, developers like to develop features, and   sometimes it can be really hard what features are important to the  core  team. This is especially true with commercial software developers.  The  roadmap can help.</p>
<p>In any given release, you can include some high priority features &#8211;   stuff that you would love to see happen &#8211; and explicitly marked as &#8220;Not   taken by the core team&#8221;. It should be clear that patches of a   sufficiently high standard implementing the feature would be gratefully   accepted. This won&#8217;t automatically change a new developer into a coding   ninja, nor will it prevent an ambitious hacker from biting off more  than  he can chew, but it will give experienced developers an easy way  to  prove themselves and earn their place in the core team, and it will  also  provide some great opportunities for mentoring programs like the  Google  Summer of Code.</p>
<p><a href="http://subversion.apache.org/roadmap.html">The Subversion roadmap</a>, <a href="http://lwn.net/Articles/381794/">recently updated</a> by the core team, is another example of best practice in this area. In   addition to a mixed features &amp; time based release cycle, they   maintain a roadmap which has key goals for a release, but also includes a   separate list of high priority features.</p>
<h2>The end result: Visibility</h2>
<p>The end result of a good roadmap process is that your users know   where they stand, more or less, at any given time. Your developers know   where you want to take the project, and can see opportunities to   contribute. Your core team knows what the release criteria for the next   release are, and you have agreed together mid-term and long-term goals   for the project that express your common vision. As maintainer, you  have  a powerful tool to explain your decisions and align your community   around your ideas. A good roadmap is the fertile soil on which your   developer community will grow.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neary-consulting.com/index.php/2011/06/06/drawing-up-a-roadmap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Effective mentoring programs</title>
		<link>http://www.neary-consulting.com/index.php/2011/06/06/effective-mentoring-programs/</link>
		<comments>http://www.neary-consulting.com/index.php/2011/06/06/effective-mentoring-programs/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 16:11:00 +0000</pubDate>
		<dc:creator>dneary</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Community]]></category>

		<guid isPermaLink="false">http://www.neary-consulting.com/?p=155</guid>
		<description><![CDATA[Reposted from gnome.org I&#8217;ve been thinking a lot recently about mentoring programs, what works, what doesn&#8217;t, and what the minimum amount of effort needed to bootstrap a program might be. With the advent of Google Summer of Code and Google Code-In, more and more projects are formalising mentoring and thinking about what newcomers to the [...]]]></description>
			<content:encoded><![CDATA[<p><em><a href="http://blogs.gnome.org/bolsh/2011/05/31/effective-mentoring-programs/">Reposted from gnome.org</a></em></p>
<p>I&#8217;ve been thinking a lot recently about mentoring programs, what works, what doesn&#8217;t, and what the minimum amount of effort needed to bootstrap a program might be.</p>
<p>With the advent of <a href="http://code.google.com/soc/">Google Summer of Code</a> and <a href="http://code.google.com/opensource/gci/2010-11/index.html">Google Code-In</a>, more and more projects are formalising mentoring and thinking about what newcomers to the project might be able to do to learn the ropes and integrate themselves into the community. These programs led to other organised programs like <a href="https://live.gnome.org/GnomeWomen/OutreachProgram2011">GNOME&#8217;s Women Summer Outreach Program</a>. Of course, these initiatives weren&#8217;t the first to encourage good mentoring, but they have helped make the idea of mentors taking new developers under their wing much more widespread.</p>
<p>In addition to these scheduled and time-constrained programs, many projects have more informal &#8220;always-on&#8221; mentoring programs &#8211; <a href="http://drupaldojo.com/">Drupal Dojo</a> and <a href="https://live.gnome.org/GnomeLove">GNOME Love</a> come to mind. Others save smaller easier tasks for newcomers to cut their teeth on, like the <a href="http://wiki.documentfoundation.org/Easy_Hacks">&#8220;easy hacks&#8221; in LibreOffice</a>. Esther Schindler wrote <a href="http://www.itworld.com/open-source/78271/mentoring-open-source-communities-what-works-what-doesnt">a fantastic article</a> a few years ago documenting best and worst practices in mentoring among different projects.</p>
<p>Most mentoring programs I have seen and participated in don&#8217;t have a very good success rate, though. In this article, I look at why that is the case, and what can be put in place to increase the success rate when recruiting new developers.</p>
<h2><span id="more-155"></span>Why most mentoring fails</h2>
<p>Graham Percival, a GNU/LilyPond developer, decided in 2008 to run an experiment. At one point, Graham decided that he would quit the project, but felt guilty about doing so in one go. So he  started the &#8220;Great Documentation Project&#8221; to recruit a replacement documentation team to follow on after his departure. He then spent 12 months doing nothing but mentoring newcomers to get them involved in the project, and <a href="http://percival-music.ca/blog/2010-08-01-sustainable-development.html">documented his results</a>. Over the course of a year, he estimates that he spent around 800 hours mentoring newcomers to the project.</p>
<p>His conclusions? The net result for the project was somewhere between 600-900 hours of productivity, and at the end of the year, 0 new documentation team members. In other words, Graham would have been better off doing everything himself.</p>
<p>Graham found that &#8220;Only 1 in 4 developers was a net gain for the project&#8221; &#8211; that is, for every 4 apprentices that Graham spent time mentoring, only 1 hung around long enough for the project to recoup the time investment he put into mentoring. A further 1 in 4 were neither gain or loss &#8211; their contribution roughly equalled the mentor time that they took up. And the remainder were a net loss for the project, with much more time spent mentoring than the results could justify.</p>
<p>The GNOME Women&#8217;s Summer Outreach Program in 2006 had 6 participants. In 2009, the GNOME Journal ran a <a href="http://gnomejournal.org/article/87/where-are-they-now-the-participants-of-the-2006-womens-summer-outreach-program">&#8220;Where are they now?&#8221;</a> follow-up article. Of the 6 original participants, only one is still involved in free software, and none are involved in GNOME. Murray Stokely did a follow-up in 2008 to track <a href="http://freebsd.stokely.org/2008/02/where-are-they-now-freebsd-summer-of.html">the 57 alumni of Summer of Code who had worked on FreeBSD</a>. Of these, 10 students went on to get full commit access, and a further 4 students were still contributing to FreeBSD or OpenBSD after the project. Obey Arthur Liu also did <a href="http://www.milliways.fr/2009/01/20/debian-2008-where-now-1/">a review of Debian participants in 2008</a>. Of 11 students from 2008 who had no previous Debian developer experience, he found that 4 remained active in the project one year later.</p>
<p>From my own experience as a replacement mentor and administrator in the Summer of Code for the GIMP in 2006, we had 6 projects, most of which were considered a success by the end of the summer, yet of the participating students, none have made any meaningful contribution to the GIMP since.</p>
<p>I feel safe in saying that the majority of mentoring projects fail &#8211; and Graham&#8217;s 1 in 4 sounds about right as an overall average success/failure rate. This begs the question: why?</p>
<h3>Most mentored projects take too long</h3>
<p>What might take a mentor a couple of hours working on his own could well take an apprentice several days or weeks. All of the experience that allows you to hit the ground running isn&#8217;t there. The most important part of the mentoring experience is getting the student to the point where he can start working on the problem. To help address this point, many projects now require Summer of Code applicants to compile the project and propose a trivial patch before they are accepted for the program, but understanding the architecture of a project and reading enough code to get a handle on coding conventions will take time. It will also take mentor time. It takes longer to teach a newcomer to your project than to do the work yourself, as anyone who has ever had a Summer intern will attest.</p>
<p>When you set a trainee task which you estimate to be about 4 hours work, that will end up costing a few weeks of volunteer effort for your apprentice, and 8 to 10 hours mentoring time for you during that time. Obviously, this is a big investment on both sides, and can lead to the apprentice giving up, or the mentor running out of patience. I remember in the first year of Summer of Code, projects were taking features off their wishlists that had not been touched for years, and expecting students new to the project to come in and work full time implementing them perfectly over the course of 12 weeks. The reality that first year was that most of the time was spent getting a working environment set up, and getting started on their task.</p>
<h3>Mentoring demands a lot of mentors</h3>
<p>As a free software developer, you might not have a lot of time to work on your project. Josh Berkus, <a href="http://www.itworld.com/open-source/78271/mentoring-open-source-communities-what-works-what-doesnt?page=0,2">quoted in Schindler&#8217;s article</a>, says &#8220;being a good mentor requires a lot of time, frequently more time than it would take you to do the development yourself&#8221;.  According to the <a href="http://www.google-melange.com/document/show/gsoc_program/google/gsoc2011/faqs#time_mentor">Google Summer of Code FAQ</a>, &#8220;5 hours a week is a reasonable estimate&#8221; for the amount of time you would need to dedicate to mentoring. <a href="http://people.gnome.org/~federico/docs/summer-of-code-mentoring-howto/">Federico Mena Quintero suggests</a> that you will need to set aside &#8220;between 30 and 60 minutes a <em>day</em>&#8220;.</p>
<p>When you only have 10 hours a week to contribute to a project, giving up half of it to help someone else is a lot. It is easy to see how working on code can get a higher priority than checking in with your apprentice to make sure everything is on track.</p>
<h3>Communication issues</h3>
<p>More mentoring projects fail for lack of communication than for any other reason.</p>
<p>Apprentices may expect their mentors to check in on them, while mentors expect apprentices to ask questions if they have any. Perhaps newcomers to the project are not used to working on mailing lists, or are afraid of asking stupid questions, preferring to read lots of documentation or search Google for answers. In the absence of clear guidelines on when and how parties will talk to each other, communication will tend towards &#8220;not enough&#8221; rather than &#8220;too much&#8221;.</p>
<h3>No follow through</h3>
<p>Many mentoring programs stop when your first task is complete. The relationship between the mentor and the apprentice lasts until the end of the task, and then either the apprentice goes off and starts a new task, with a new mentor, or that is the end of their relationship with the project. I would be really interested to hear how many Summer of Code mentors maintained a relationship with their students after the end of the Summer, and helped them out with further projects. I suspect that many mentors invest a lot of time during the program, and then spend most of their time catching up with what they wanted to do.</p>
<h3>Project culture</h3>
<p>In <a href="http://infotrope.net/2009/07/25/standing-out-in-the-crowd-my-oscon-keynote/">her OSCON keynote in 2009</a>, Skud talked about the creation of a welcoming and diverse community as a prerequisite for recruiting new developers. Sometimes, your project culture just doesn&#8217;t match newcomers to the project. If this happens regularly, then perhaps the project&#8217;s leaders need to work on changing the culture, but this is easier said than done. As Chris di Bona says in <a href="http://www.youtube.com/watch?v=g5IF1nxj3jw">this video</a>, &#8220;the brutality of open source is such that people will learn to work with others, or they will fail&#8221;. While many think that this kind of trial-by-fire is fine, the will not be the environment for everyone. It is really up to each project and its leaders to decide how &#8220;brutal&#8221; or forgiving they want to be. There is a trade-off: investing time in apprentices who will contribute little is a waste of time, but being too dismissive of a potential new developer could cost your project in the long run.</p>
<h2>Mentoring best practices</h2>
<p>Is all the effort worth it? If mentoring programs are so much hassle, why go to the bother?</p>
<p>Mentoring  programs are needed to ensure that  your project is long-term  sustainable. As Graham says in his  presentation: &#8220;Core developers do  most of the work. Losing core  developers is bad. Projects will lose  core developers.&#8221; Do you need any other reason to start actively  recruiting new blood?</p>
<p>There are a few simple things that you can put in place to give your mentoring program a better chance of success.</p>
<h3>Small tasks</h3>
<p>Mentored tasks should be small, bite-sized, and allow the apprentice to succeed or fail fast. This has a number of advantages: The apprentice who won&#8217;t stick around, or who will accomplish nothing, has not wasted a lot of your mentor&#8217;s time. The apprentice who will stay around gets a quick win, gets his name in the ChangeLog, and gains assurance in his ability to contribute. And the quick feedback loop is incredibly rewarding for the mentor, who sees his apprentice attack new tasks and increase his productivity in short order. Graham implies that a 10 minute task is the right size, with the expectation that the apprentice might take 1 hour to accomplish the task.</p>
<p>A ten minute task might even take longer to identify and list than it would to do. You can consider this cost the boot-strapping cost of the mentoring program. Some tasks that are well suited to this might include:</p>
<ul>
<li>Write user documentation for 1 feature</li>
<li>Get the source code, compile it, remove a compiler warning, and submit a patch</li>
<li>Critique 1 unreviewed patch in Bugzilla</li>
<li>Fix a trivial bug (a one line/local change)</li>
</ul>
<p>Of course, the types of tasks on your list will change from one project to the next.</p>
<h3>Mentoring is management</h3>
<p>Just as not everyone is suited to being a manager, not everyone is suited to being a mentor. The skills needed to be a good mentor are also those of a good manager &#8211; keeping track of someone else&#8217;s activity while making them feel responsible for what they&#8217;re working on, communicating well and frequently, and reading between the lines to diagnose problems before it&#8217;s too late to do anything about them.</p>
<p>When you think of it in this way, there is an opportunity for developers who would like to gain management experience to do so as a mentor in a free software project. Continually recruiting mentors is just as important as recruiting developers. Since mentoring takes a lot of time, it&#8217;s important that mentors get time off and new mentors are coming in in their place.</p>
<h3>Pair apprentices with mentors, not tasks</h3>
<p>An apprentice should have the same mentor from the day he enters the mentoring program until he no longer needs or wants the help. The relationship will ideally continue until the apprentice has himself become a mentor. Free software communities are built on relationships, and the key point to a mentoring program is to help the creation of a new relationship. Mentoring relationships can be limited in time also, 6 months or a year seem like good time limits. The time needed to mentor will, hopefully, go down over this period.</p>
<h3>Regular meeting times</h3>
<p>Mentors and apprentices should ensure that there is a time on their calendar for a &#8220;one on one&#8221; at regular times. How regularly will depend on the tasks, and the amount of time you can spend on it. Weekly, fortnightly or monthly are all reasonable in different situations. This meeting should be independent of any other communication you have with the person &#8211; it is too easy for the general business of a project to swallow up a newbie and prevent their voice from being heard. <a href="http://www.randsinrepose.com/archives/2010/09/22/the_update_the_vent_and_the_disaster.html">Rands said it well</a> when he said &#8220;this chatter will bury the individual voice unless someone pays attention.&#8221;</p>
<h3>Convert apprentices into mentors</h3>
<p>Never do you understand the pain of the initial learning curve better than when you have just gone through it. The people best suited to helping out newcomers to the project are those who have just come through the mentoring program themselves.</p>
<p>This is a phenomenon that I have seen in the Summer of Code. Those students who succeed and stay with the project are often eager to become mentors the following year. And they will, in general, be among the best mentors in the project.</p>
<h3>Keep track</h3>
<p>For all involved, it&#8217;s useful to have some idea of the issues newcomers have &#8211; ensure that documenting solutions is part of what you ask. It&#8217;s also useful to know how successful your mentoring program is. Can you do better than the 1 in 4 success rate of LilyPond? Keeping track of successes and failures encourages new mentors, and gives you data to address any problems you run into.</p>
<h3>Manage the mentors</h3>
<p>All of this work has overhead. In a small project with 1 or 2 core developers, it&#8217;s easy enough to have each core developer take an apprentice under their wing, and co-ordinate on the mailing list. In bigger projects, keeping track of who is a mentor, and who is mentoring who, and inviting new mentors, and ensuring that no-one falls through the cracks when a mentor gets too busy, is a job of itself. If your mentoring program goes beyond more than ~5 mentors or so, you might want to consider nominating someone to lead the program (or see who steps up to do the job). This is the idea behind the Summer of Code administrator, and it&#8217;s a good one.</p>
<h2>Go forth and multiply</h2>
<p>Developer attrition is a problem in open source, and recruitment and training of new developers is the only solution. Any project which is not bringing new developers up to positions where they can take over maintainership is doomed to failure. A good mentoring program, however, with a retention rate around 25%, organised continuously, should ensure that your project continues to grow and attract new developers.</p>
<p>Replenishing your stock of mentor tasks and recruiting new mentors will take effort, and continual maintenance of someone putting in a few hours a week. If you execute well, then you will have helped contribute to the long term diversity and health of your project.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neary-consulting.com/index.php/2011/06/06/effective-mentoring-programs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Lifecycle of a Patch (or: Working Upstream)</title>
		<link>http://www.neary-consulting.com/index.php/2011/01/14/the-lifecycle-of-a-patch/</link>
		<comments>http://www.neary-consulting.com/index.php/2011/01/14/the-lifecycle-of-a-patch/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 15:45:32 +0000</pubDate>
		<dc:creator>dneary</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[meego]]></category>

		<guid isPermaLink="false">http://www.neary-consulting.com/?p=139</guid>
		<description><![CDATA[Yesterday I looked into what it means to be a maintainer of a package. Today, I&#8217;m going to examine how to effect change in a distribution like MeeGo, and what it means to work upstream. To do so, we&#8217;re going to look at how code gets from a developer&#8217;s brain into the hands of a [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday <a href="http://www.neary-consulting.com/index.php/2011/01/13/whats-involved-in-maintaining-a-package/">I looked into what it means to be a maintainer of a package</a>. Today, I&#8217;m going to examine how to effect change in a distribution like <a href="http://www.meego.com">MeeGo</a>, and what it means to work upstream. To do so, we&#8217;re going to look at how code gets from a developer&#8217;s brain into the hands of a user.</p>
<p>So &#8211; how can you make a change in a Linux-based distribution? Here&#8217;s what happens when everything works as it should:</p>
<ol>
<li>You open a bug report for the feature against your distribution</li>
<li>You identify the module or modules you need to change to implement the new feature</li>
<li>You open bug reports for each of the modules concerned, detailing the feature and the changes needed in that module for the feature</li>
<li>You write a patch to implement the feature, and propose it (appropriately cut up for ease of review) to the maintainers of those modules</li>
<li>Once the code has gone through the appropriate review process, it will be committed to the source control of the module(s)</li>
<li>Some time later, the maintainer of each module will include that code in a stable release of the module</li>
<li>Some time after that, the new stable versions will be packaged and uploaded to MeeGo</li>
<li>Your code will be included in the next release of the distribution following the upload.</li>
</ol>
<p>When people talk about &#8220;working upstream&#8221; in MeeGo or Linaro, this is what they mean.</p>
<p>To simplify matters for our analysis, let&#8217;s consider that the feature  we want to implement is self-contained in one module (or related  modules which release together). There are two different scenarios we&#8217;ll  consider:</p>
<ol>
<li>The module is maintained by people not associated with your distribution (for example, a GNU or GNOME project)</li>
<li>The module is maintained by people closely related to your distribution (for example, Unity in Ubuntu, or oFono in MeeGo)</li>
</ol>
<p>We will also look at a third situation, where you find and fix a bug  in the software you are using &#8211; that is, a released version of a  distribution (the proverbial &#8220;scratching an itch&#8221;).</p>
<p>For each case,  I will try to pick a representative feature/patch and follow it from  developer through to distribution to Real Users.</p>
<h2><span id="more-139"></span>What if your code changes different projects?</h2>
<p>If your code touches several modules (for example, if you are proposing some new API in <a href="http://www.gtk.org">GTK+</a> which you want to use in <a href="http://www.gimp.org">the GIMP</a>) then things can get complicated &#8211; you will need a stable version of GTK+ to be released before you can ship a stable release of the GIMP which depends on it.</p>
<p>This issue of staggered releases is one that Andrew Cowie <a href="http://mail.gnome.org/archives/desktop-devel-list/2006-September/msg00121.html">pointed out a few years ago for language bindings</a>. To avoid making bindings on shifting sands, he preferred to package new APIs once they had been included in a stable GNOME release. In turn, Java GNOME developers rarely depend on development release bindings, and they would wait for the new API to be included in a stable bindings release. For example, the gtk_orientable_get_orientation, added to GTK+ at the end of September 2008, was released in GTK+ 2.16, in March 2009. The first version of Java-GNOME which depended on GTK+ 2.16 was version 4.0.13, released in August 2009. That was packaged in distributions in Autumn 2009, and so most users would not have access to the newer bindings for a few months after that &#8211; perhaps early 2010 &#8211; at which point, the API was written 18 months beforehand.</p>
<p>And that is when you have a regular release schedule you can rely on! Pity the developer who wants to release a GIMP plug-in which depends on some API included in GIMP 2.8 &#8211; the last stable GIMP release, 2.6, came out in October 2008, and over two years later, 2.8 still has not released. And when you combine unreliable release schedules for distributions and applications, the results are cumulative: users of the stable Debian distribution are still using GIMP 2.4 releases. The GIMP 2.4 released in October 2007. Features added to the GIMP in late 2007 are still not in the hands of users of stable Debian distributions.</p>
<h2>Getting features to users</h2>
<p>It is difficult to generalise when users upgrade their Linux distributions, or even to say what proportion of Linux users are new users at any given time. It would be over-simplifying to say that developers use bleeding-edge distributions, power users upgrade early to the latest and greatest, new users install the latest distributions available, but will only upgrade every 18 months or so afterwards, and conservative users stick with &#8220;Long term service&#8221; or stable distributions. Most developers I know use their computer for work (and thus want a stable distribution) and only install the latest versions of various dependencies they need to work on their project. But let&#8217;s generalise and say that this is roughly the case. So (guesstimating) about 10% of your users will be upgrading to the latest distribution very quickly after its release, a further 20% in the months after when the bugs are shaken out, and the rest will follow along in their own time, perhaps 12 or 18 months later.</p>
<p>To make this concrete, let&#8217;s follow the life of a single patch. This is complete <a href="But this means that there is a big lag between code being written and being shipped to users. For example">anecdata</a>, but in my defence, the patch has been chosen by random, from a project which I know has good community processes and release management in place. The patch we&#8217;re going to follow adds an <a href="https://bugs.launchpad.net/inkscape/+bug/226001">extension to Inkscape to render objects along triangular paths</a>.</p>
<ol>
<li><a href="https://bugs.launchpad.net/inkscape/+bug/226001">Bug #226001 opened</a> on 2008-05-03 by inductiveload, with a description of the feature to be added, and proposed code to implement it. The code, as an extension, may have a lower bar for acceptance than code which is core to a project.</li>
<li><a href="https://bugs.launchpad.net/inkscape/+bug/226001/comments/3">Patch submission reviewed</a> on 2008-05-03, minor comments, but patch is accepted (note: This was not the authors first submission to Inkscape)</li>
<li><a href="https://bugs.launchpad.net/inkscape/+bug/226001/comments/6">Patch corrected</a> to respond to comments and <a href="http://bazaar.launchpad.net/~inkscape.dev/inkscape/RELEASE_0_47_BRANCH/revision/5592">committed</a> on 2008-05-03 (did I mention these guys had good community processes!?!)</li>
<li><a href="http://wiki.inkscape.org/wiki/index.php/Release_notes/0.47">Inkscape 0.47-pre0</a>, containing the Triangle extension, released on 2009-07-02</li>
<li><a href="http://packages.ubuntu.com/karmic/graphics/inkscape">Inkscape 0.47-pre4</a> included in Ubuntu 9.10</li>
</ol>
<p>So for a feature developed in mid 2008, most Inkscape users will still not have the feature by the end of 2009, 18 months later. This is both a typical and atypical example: in many projects, patch proposals lay unreviewed for days, weeks, sometimes months, but the 0.47 release cycle was a particularly long one for Inkscape. However, I think the lag from code written to presence on user&#8217;s hard drives of ~12 to 18 months is about correct.</p>
<h2>Does it have to be this hard?</h2>
<p>If this were the only way to get features into a distribution, trying to improve MeeGo by contributing upstream would be a very frustrating experience. Happily, there are ways to accelerate the process. Taking the MeeGo kernel as an example, where <a href="http://lists.meego.com/pipermail/meego-kernel/2010-November/001469.html">Greg Kroah-Hartman recently threw in the towel</a> on persuading people to propose patches upstream; the process is supposed to work like this:</p>
<ol>
<li>Propose a patch for inclusion upstream. This patch will then ship in a future stable kernel release (let&#8217;s say 2.6.38).</li>
<li>After peer review, when the code has been accepted for inclusion in the kernel upstream, propose a backport for inclusion in the MeeGo kernel. The back-ported patch will be maintained across the next MeeGo release, and will be dropped when the kernel version included in the MeeGo project catches up with 2.6.38.</li>
</ol>
<p>The overhead here is reduced basically to the peer review process of the upstream project, and the cumulative cost of merging a patch over the course of 6 months.</p>
<p>As a distributor (or a developer working on a specific distribution), this allows you to get code to everyone, eventually, and have that code included in your distribution as soon as you are sure that it is up to the standard expected by the community. Currently in MeeGo, the trend seems to be more towards submitting patches concurrently upstream and to MeeGo kernel maintainers (or even submitting them upstream once they have been accepted into the MeeGo kernel). In the case that a patch requires substantial modifications, or is rejected outright, upstream, the kernel maintainers are then left carrying a patch indefinitely in the distribution. For one patch, this might not be a big deal, but for thousands of patches, the maintenance and integration burden of these patches adds up.</p>
<p>It is also not unusual for kernel developers to maintain their own git branches for a long time. Three examples that come to mind are inotify, which Robert Love maintained for over a year for both Novell and in the kernel before it was accepted into the mainline, ReiserFS, which was maintained for several years out-of-tree before being shipped with the Linux kernel in 2001, and the fast  desktop patchset which Con Kolivas maintained for almost five years on the -ck kernel branch. Distributions will occasionally ship a substantial diff to upstream if there is a maintainer committed to getting the code upstream eventually. Allocating someone to work over a long period to make everyone happy and comfortable with your code may enable you to ship a big patch to upstream, but this will not be sustainable long term.</p>
<p>To summarise: when working upstream, as a distribution, you should only ship with patches which have been accepted in a development version of upstream already, if you can help it.</p>
<h2>Meetings in telephone boxes</h2>
<p>Sometimes, however, when upstream and downstream coincide, you can simplify things considerably, while also adding a small measure of risk.</p>
<p>In MeeGo, to continue with that example, the distribution architects have a pretty good idea when they can expect <a href="http://bugs.meego.com/show_bug.cgi?id=7947">emergency telephony</a> to be ready for oFono and the MeeGo telephony stack, because they&#8217;re writing it. By co-ordinating the upstream release management with downstream packaging, you can make promises as a distyribution which you can&#8217;t with community-developed software.</p>
<p>When upstream and downstream are co-ordinating each other, we cut out the middleman. The workflow becomes:</p>
<ol>
<li>Report a bug/feature request against a component of the distribution</li>
<li>Develop a patch which implements the feature, and submit it directly to the distribution bug tracker</li>
<li>Once it has been reviewed and accepted, you know that your patch will be included in the next version of the distribution.</li>
</ol>
<p>This gives a distribution much more control, both over what gets done, and when, and explains both the <a href="https://launchpad.net/ayatana">Ayatana</a> and MeeGo UX development projects. However, being able to plan around the release is no guarantee that the  release will happen on time: GNOME has in the past been stung by  planning during the 2.6 development cycle to depend on a new version of  GTK+, only to find that the release was delayed. In the end, the GTK+  release shipped in time for the 2.6 release at the end of March.</p>
<h2>Scratch scratch</h2>
<p>The other patch lifecycle I&#8217;d like to mention, because it is so relevant to distributions, was <a href="http://blogs.gnome.org/bolsh/2011/01/13/whats-involved-in-maintaining-a-package/#comment-3393">pointed out to me by Federico Mena Quintero yesterday</a>. What happens to a patch that someone makes and submits to a distribution when they find a bug in stable released software? This is one of the key advantages of free software &#8211; if you find a bug in the software you use, and you have the wherewithall, you can fix the bug and share that fix with everyone else.</p>
<p>However, as we have seen, there is typically a lag of several months from the time that software is released and the time it is being used by large numbers of users through distributions. With releases of Red Hat Enterprise Linux, Novell Suse Linux Desktop and Ubuntu LTS being supported for up to 5 years, it is possible that important bugs will be fixed in these stable versions for years after the original developers have moved on, and are no longer maintaining older stable versions.</p>
<p>Let&#8217;s say I find and fix a bug in <a href="http://live.gnome.org/Rhythmbox">Rhythmbox</a> 0.12.5, which ships with Ubuntu 9.10. I open a bug report on Launchpad, attach a fix to the source .deb there, and I update my local copy. As a user, I&#8217;m happy &#8211; I have fixed my problem and shared the solution with others. If I&#8217;m particularly conscientious, I might open a bug <a href="https://bugzilla.gnome.org/browse.cgi?product=rhythmbox">on gnome.org against Rhythmbox</a> and attach my patch there, but since the development version is now 0.13.2, the best you can hope for is that the patch applies cleanly to the master branch, and will be included in the next release. It is very unlikely that the upstream maintainers will release another update to the 0.12 series at this point.</p>
<p>Now imagine that you are a maintainer for Suse, and someone reports the same bug against a long-term service release.In practice, there are several different versions being maintained by  different distributions, and no good way to know if the same bug has  been reported and fixed by someone else. You end up searching for a fix in upstream bug trackers, and in the bug trackers of each of the other main distributions. According to Federico at the time:</p>
<blockquote><p>Patches for old versions are traded in the black market.  You have friends in another distro?  You ask them first, &#8220;did you guys already fix this?&#8221;  Those patches don&#8217;t ever manage to reach CVS, where everyone would be able to get them.</p></blockquote>
<p>Ideally, you could collaborate ahead of time with other distributions to ensure that you are all using the same branch of upstream modules, and are committing patches upstream. <a href="http://thread.gmane.org/gmane.linux.kernel/939800">The Linux kernel is moving to this model</a>, and there are also discussions underway in GNOME to co-ordinate this type of activity. Mark Shuttleworth has also pushed for something similar by encouraging projects in the core Linux platform to have <a href="http://www.markshuttleworth.com/archives/288">a regular cadence of releases</a>, so that everyone can synchronise their longer term service offerings every couple of years.</p>
<p>But at the moment, the best you can hope for is that your patch will be included in an upcoming release for your distribution, and which point other users of the distro can avail of it, and that upstream will patch their development version and latest stable versions, and get your patch to everyone in a few months.</p>
<h2>Working upstream</h2>
<p>The goal of this article is to explain what working upstream actually means, and how to make that more palatable for a distribution that wants to get features written and included in their next release. Hopefully, by pointing out some of the shortcomings of the way patches circulate from developers to users, some of these issues can be addressed.</p>
<p>In any case, one thing is clear &#8211; if you are carrying a patch as a distribution without ever submitting it upstream, you are making a costly mistake. You will be carrying code that others won&#8217;t, and bearing all of the merge and maintenance burden for that code for years to come. The path to maximum happiness is to co-ordinate with other distributions and with upstream to ensure that everyone is working in the same place, and sharing work as much as possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neary-consulting.com/index.php/2011/01/14/the-lifecycle-of-a-patch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What&#8217;s involved in maintaining a package?</title>
		<link>http://www.neary-consulting.com/index.php/2011/01/13/whats-involved-in-maintaining-a-package/</link>
		<comments>http://www.neary-consulting.com/index.php/2011/01/13/whats-involved-in-maintaining-a-package/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 17:02:34 +0000</pubDate>
		<dc:creator>dneary</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[maemo]]></category>
		<category><![CDATA[meego]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://www.neary-consulting.com/?p=130</guid>
		<description><![CDATA[An interesting question was asked on a MeeGo mailing list recently: What does it mean to be a maintainer of something? How much time does it take to maintain software? It resulted in a short discussion which went down a few back alleys, and I think has some useful general information for people working with [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://lists.meego.com/pipermail/meego-dev/2011-January/480975.html">An interesting question was asked on a MeeGo mailing list recently</a>: What does it mean to be a maintainer of something? How much time does it take to maintain software? It resulted in a short discussion which went down a few back alleys, and I think has some useful general information for people working with projects like MeeGo, which are part software development, part distribution.</p>
<h2>Are you maintaining software, or a package?</h2>
<p>The first question is whether you are asking about maintaining something in the <a href="http://www.debian.org">Debian</a> sense, or the <a href="http://www.gnome.org">GNOME</a> sense?</p>
<p><a href="http://www.debian.org/devel/join/newmaint">A Debian package maintainer</a>:</p>
<ul>
<li>Tracks upstream development, and ensures new releases of software are packaged and uploaded in a timely manner</li>
<li>Work with distribution users and other maintainers to identify bugs and integration issues</li>
<li>Ensure bugs and feature requests against upstream software are reported upstream, and bugs fixed upstream are propagated to the distribution packages</li>
<li>Fix any packaging related issues, and maintain any distribution-specific patches which have not (yet) been accepted or released upstream</li>
</ul>
<p><a href="http://live.gnome.org/MaintainersCorner">A GNOME project maintainer</a>:</p>
<ul>
<li>Makes regular releases of the software they maintain (typically a .tar.gz with &#8220;./configure; make; make install&#8221; to build)</li>
<li>Are the primary guardians of the roadmap for the module, and sets the priorities for the project</li>
<li>Works with packagers, documenters, translators and other contributors to the software to ensure clear communication of release schedules and  priorities</li>
<li>Acts as a central point of contact for release planning, bug reports and patch review and integration</li>
<li>A typical maintainer is also the primary developer of the software in question, but this is not necessarily the case</li>
</ul>
<p>Obviously, these two jobs are very different. One places a high priority on coding &amp; communication, another on integration, testing, and communication.</p>
<h2>So how much time does maintaining software take?</h2>
<p>Well, how long is a piece of string?</p>
<p>To give opposite extremes as examples: Donald Knuth probably spends a median time of 0 hours per week maintaining TeX and Metafont. On the other hand, Linux Torvalds has worked full time maintaining the Linux kernel for at least the past 15 years, and has been increasingly delegating large chunks of maintenance to lieutenants. The maintenance of the Linux kernel is a full time job for perhaps dozens of people.</p>
<p>On a typical piece of GNOME software (let&#8217;s take <a href="http://live.gnome.org/Brasero">Brasero</a> as an example) much of the work is simplified by following the <a href="http://live.gnome.org/ReleasePlanning">GNOME release schedule</a> &#8211; the schedule codifies string freezes and interface freezes to simplify the co-ordination of translation and documentation. In addition, outside of translation commits, Brasero has had contributions from its maintainer, Philippe Rouquier, and 6 other developers in the last 3 months. Most of these changes are related to the upcoming GTK+ 3 API changes, and involve members of the GTK+ 3 team helping projects migrate.</p>
<p>In total since the 2.32.0 release, there have been 55 commits relating to translations, 50 commits from Philippe, 9 from Luis Medina, co-maintainer of the module, and there were 4 commits by other developers. Of Philippe&#8217;s 50 commits, 14 were related to release management or packaging (&#8220;Update NEWS file&#8221;), 5 were committing patches by other developers that had gone through a review process, and the remainder were features, bug fixes or related to the move to the new GTK+. Of Luis&#8217;s commits, 2 were packaging related, and 2 were committing patches by other developers.</p>
<p>This is a lot of detail, but the point I am making is that the &#8220;maintenance&#8221; part of the work is relatively small, and that the bigger part of maintenance is actually sending out the announcements, paying attention to bug reports and performing timely patch review. I would be interested to know how much time Philippe has spent working on Brasero over the past release cycle. I would guess that he has spent a few hours (somewhere between 5 and 10) a week.</p>
<p>On the other hand, the Debian maintainer for the <a href="http://packages.debian.org/source/sid/brasero">Brasero package</a> has a different job. There are 6 bugs currently forwarded upstream from the Debian bug tracker, and another 35 or so awaiting some final determination. A number of these look like packaging bugs (&#8220;you need version X of dependency Y installed&#8221;). The last release packaged and uploaded was 2.30.3-2, dating from November, and there have been 4 releases packaged in the past 8 months, none by the maintainer.</p>
<p>A typical Debian maintainer is a &#8220;Debian developer&#8221; for several packages. Pedro Fragoso, the Debian maintainer of Brasero, <a href="http://qa.debian.org/developer.php?login=ember@ubuntu.com">maintains 5 packages</a>. I think it is fair to say that the amount of time a package maintainer spends maintaining an individual package is quite low, unless it is extremely popular. Perhaps a few hours a month. But the package maintainer has little or no say (beyond interacting with the project maintainer and forwarding on bug reports &amp; feature requests) in what happens upstream, or which features have a high priority.</p>
<h2>What&#8217;s in a word?</h2>
<p>It&#8217;s clear that a package maintainer is not the same thing as a project maintainer. So when <a href="http://lists.meego.com/pipermail/meego-dev/2011-January/481045.html">Sivan asked on the MeeGo developer list</a> how he could become a maintainer, he clarified later to say that what he was really asking was &#8220;How can I affect change in MeeGo?&#8221; To do that, you need to write some code that changes a module, or a number of modules, and then you need to get that code into MeeGo.</p>
<p>How that happens, in all its gory details, is the next instalment in this series of at least 2 articles: The Lifecycle of a Patch (or: Working Upstream).</p>
<p><strong>Lexicon:</strong></p>
<ul>
<li>Upstream: The place where the thing you package comes from. For example, Ubuntu&#8217;s upstream for gedit is gnome.org</li>
<li>Downstream: Any distributors who take what you release and re-package it before redistributing</li>
<li>Distribution: A collection of software packages that are organised into a product, with integration testing</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.neary-consulting.com/index.php/2011/01/13/whats-involved-in-maintaining-a-package/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Follow-up to &#8220;Shy Developer Syndrome&#8221;</title>
		<link>http://www.neary-consulting.com/index.php/2010/12/18/follow-up-to-shy-developer-syndrome/</link>
		<comments>http://www.neary-consulting.com/index.php/2010/12/18/follow-up-to-shy-developer-syndrome/#comments</comments>
		<pubDate>Sat, 18 Dec 2010 19:30:52 +0000</pubDate>
		<dc:creator>dneary</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Community]]></category>

		<guid isPermaLink="false">http://www.neary-consulting.com/?p=125</guid>
		<description><![CDATA[My article on &#8220;Shy Developer Syndrome&#8221; a few weeks ago garnered quite a bit of interest, and useful feedback. Since a lot of it adds valuable perspectives to the problem, I thought I should share some of my favourite responses. On gnome.org, Rodney Dawes argued that developers tend to stay away from mailing lists because [...]]]></description>
			<content:encoded><![CDATA[<p>My article on <a href="http://www.neary-consulting.com/index.php/2010/12/08/curing-shy-developer-syndrome/">&#8220;Shy Developer Syndrome&#8221;</a> a few weeks ago garnered quite a bit of interest, and useful feedback. Since a lot of it adds valuable perspectives to the problem, I thought I should share some of my favourite responses.</p>
<p>On <a href="http://blogs.gnome.org/bolsh/2010/12/08/curing-shy-developer-syndrome/">gnome.org</a>, <a href="http://blogs.gnome.org/bolsh/2010/12/08/curing-shy-developer-syndrome/#comment-3347">Rodney Dawes argued</a> that developers tend to stay away from mailing lists because the more public lists are very noisy:</p>
<blockquote><p>For me, mailing lists are a huge risk vs. low return problem. They can  become a time sink easily, and it’s quite often that pointless arguments  get started on them, as offshoots of the original intent of the thread.  Web Forums also have this problem. And, to really get much of anything  out of a list, you must subscribe to it, as not everyone who replies, is  going to put you specifically in the recipients headers. That means,  you’re now suddenly going to get a lot more mail than you normally would  for any highly active project. And for anyone trying to get involved in  an open source community, 99% of the mail on that list is probably  going to be totally irrelevant to them. It will just make tracking the  conversation they are trying to have, much harder.</p></blockquote>
<p>I agree with Rodney that dealing with a new level of volume of email is one of the trickiest things for new contributors. I still remember when I signed up to lkml for an afternoon in college, only to find 200 new emails 3 hours later. I panicked, unsubscribed, and gave up that day on being a Linux kernel hacker.</p>
<p>Since then, however, I have learned some email habits which are shared by other free software hackers I know. Everyone I know has their own tricks for working with medium or high volume mailing lists, and some combination of them may make things livable for you, allowing you to hear the signal without being drowned out by the noise. <a href="http://lifehackerbook.com/ch1/">LifeHacker is a good source of tips</a>.</p>
<p><a href="http://blogs.gnome.org/bolsh/2010/12/08/curing-shy-developer-syndrome/#comment-3349">Rob Staudinger</a> says something similar, pointing the finger at <a href="http://communitymgt.wikia.com/wiki/Bikeshedding">bikeshed discussions</a> as a big problem with many community lists:</p>
<blockquote><p>Will the zealots go and suggest postgresql’s process model was poor, or  samba’s memory allocator sucks? Unlikely, but they will tell you your  GUI was bad or that you’re using a package format they don’t like, just  because it’s so easy to engage on that superficial level.</p></blockquote>
<p><a href="http://lwn.net/Articles/419318/">Over at LWN</a>, meanwhile, <a href="http://lwn.net/Articles/419475/">Ciaran O&#8217;Riordan makes a good point</a>. Many developers working on free software want to separate their work and personal lives.</p>
<blockquote><p>When I leave the office at 6pm, my work should have no more relevance  until the following morning.  Same when I quit a company.  I might  choose to tell people where I work/worked, but it should be a choice,  and I should be able to choose how much I tell people about my work.   Having mailing list posts and maybe even cvs commits might be too  detailed.  Maybe waaay too detailed.</p></blockquote>
<p>Finally, <a href="http://www.neary-consulting.com/index.php/2010/12/08/curing-shy-developer-syndrome/">here at neary-consulting.com</a>, <a href="http://www.neary-consulting.com/index.php/2010/12/08/curing-shy-developer-syndrome/#comment-203">MJ Ray suggested</a> that asking individuals to respond to a request can backfire:</p>
<blockquote><p>Publicly referring to individuals on a mailing list is a double-edged  sword.  It might bolster the confidence of the named individual, but it  also reduces the confidence of other people who might have answered the  question.  In general, I feel it’s best not to personalise comments  on-list.  Some e-democracy groups require all messages to be addressed  to a (fictional or powerless) chair or editor, similar to the letters  pages of The Times.</p></blockquote>
<p>While I agree with MJ in situations where the answer is accessible to the wider community, but often only developers working for you, the manager, are in a position to reply &#8211; at that point, you have a choice: get the information off your developer and answer yourself, or ask him to answer the question. and I&#8217;ve found that asking on the list has the positive side-effects I mentioned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neary-consulting.com/index.php/2010/12/18/follow-up-to-shy-developer-syndrome/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Curing “Shy Developer Syndrome”</title>
		<link>http://www.neary-consulting.com/index.php/2010/12/08/curing-shy-developer-syndrome/</link>
		<comments>http://www.neary-consulting.com/index.php/2010/12/08/curing-shy-developer-syndrome/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 19:46:59 +0000</pubDate>
		<dc:creator>dneary</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.neary-consulting.com/?p=113</guid>
		<description><![CDATA[One of the most common issues I have seen with experienced professional software developers who start to work on community software is a reluctance to engage with public communication channels like mailing lists. Understanding the reasons why, and helping your developers overcome their timidity, is key to creating a successful and fruitful relationship with the [...]]]></description>
			<content:encoded><![CDATA[<p>One of the most common issues I have seen with experienced professional software developers who start to work on community software is a reluctance to engage with public communication channels like mailing lists. Understanding the reasons why, and helping your developers overcome their timidity, is key to creating a successful and fruitful relationship with the community you are working with.</p>
<p>In my experience, common reasons for this timidity are a lack of confidence in written English skills, or technical skills, nervousness related to public peer review, and seeing community interaction as &#8220;communication&#8221; or &#8220;marketing&#8221; (which are not part of their job), rather than just &#8220;getting stuff done&#8221; (which, of course, is part of their job).</p>
<h2>Lack of confidence</h2>
<div class="wp-caption alignright" style="width: 194px"><a href="http://www.flickr.com/photos/maong/124162357/"><img class="  " title="Shy Kittens" src="http://farm1.static.flickr.com/34/124162357_64bd2174ce_o_d.jpg" alt="Shy Kittens" width="184" height="190" /></a><p class="wp-caption-text">Shy (Credits: maong@flickr, CC BY-SA)</p></div>
<p>For non-English speakers, this phenomenon is more prevalent, but in general, professional software developers have not developed writing skills during college, and often have not been required to learn them as part of their job. In addition, while most engineers appreciate good logic, they are never taught how to structure an argument. The end result is that when asked to write about their work, or to ask a question on a public forum, they hesitate.</p>
<p>One engineer I worked with would (eventually) write an email about a topic if I specifically asked him to, but would not react to responses or questions from community members. When I approached him, he would rationalise, say he hadn&#8217;t had time, or didn&#8217;t see the need to reply, or refer the questions to someone else. But as part of a pattern, I concluded that he was nervous about sending an email to a publicly archived mailing list. He was nervous about making a mistake, writing something he shouldn&#8217;t, overstepping some unwritten corporate policy, or felt uncomfortable expressing himself in writing. It doesn&#8217;t help that &#8220;bad netiquette&#8221; is often dealt with rather harshly, reinforcing the lack of confidence.</p>
<p>The only way to cure the problem is with baby steps.</p>
<p>A great first step is to get your engineers answering questions. One way I have found to help get this to happen is to publicly refer a question to an engineer on the mailing list, while affirming his expertise in the area. &#8220;Tommy knows the RLE algorithms inside out &#8211; Tommy, would you mind answering Franz&#8217;s question, please?&#8221;</p>
<p>This serves a triple purpose: an individual can easily ignore a question if it is addressed to a group, but it is a rare person who doesn&#8217;t answer when you ask them a question directly &#8211; it&#8217;s human nature; affirming your engineer&#8217;s skills makes him feel good about himself, and gives him more confidence; by identifying an individual engineer with a specific skillset inside your team, you are giving people outside your company a glimpse inside the walls &#8211; you are making your team human, a collection of individuals with different strengths and weaknesses, rather than an amorphous group &#8211; &#8220;the Acme Co developers&#8221;.</p>
<p>Another good step is to give a series of creative writing workshops to your developers. It is not enough to stand over people with a whip and ask them all to have a blog. First you need to get them in the habit of writing regularly. Since terse language, often in bullet form, is the norm for mailing lists, the goal is not to turn them all into novelists, writing perfectly crafted works of art. The goal is to get your team in the habit of writing.</p>
<p>Finally, you should train your engineers in basic netiquette and writing good email &#8211; there are lots of good resources out there, including <a title="Producing Open Source Software" href="http://producingoss.com/">Producing Open Source Software</a> by Karl Fogel, <a href="http://www.theopensourceway.org/book/">The Open Source Way</a>, the <a href="http://ldn.linuxfoundation.org/book/how-participate-linux-community">Linux Kernel Contributors Guide</a> from the Linux Foundation, and ESR&#8217;s &#8220;<a href="http://www.catb.org/~esr/faqs/smart-questions.html">How to ask questions the smart way</a>&#8220;. Michael Meeks suggested to me that developers should treat writing email in a similar way to patches &#8211; when you generate a patch, typically the last thing you do before you send it is you check over it, to make sure nothing silly is included. Michael suggests that the same habit applied to email will identify any places where phrasing is awkward and ambiguous, resulting in better email.</p>
<h2>Nervousness related to peer review</h2>
<div class="wp-caption alignleft" style="width: 250px"><a href="http://www.flickr.com/photos/seedingchaos/178821720/"><img title="Tough crowd" src="http://farm1.static.flickr.com/75/178821720_785635d5cb_m_d.jpg" alt="Tough crowd" width="240" height="175" /></a><p class="wp-caption-text">Tough crowd (Credits: seedingchaos@flickr, CC by-sa)</p></div>
<p>It is one thing to have engineers answer questions when they have the knowledge to do so. It is another thing to have them submit their plans and patches to a community forum and have them exposed under the harsh light of peer review.</p>
<p>On more than one occasion, I have heard a hiring manager say that he didn&#8217;t have time to have a developer go through peer review of specs or patches &#8211; after all, he was hired because he was competent to do the job, and what are we paying him for if he&#8217;s going to be second-guessed by &#8220;the community&#8221;? After a first job or internship, peer review is more an exception than the rule for professional software developers (regrettably, I might add).</p>
<p>In community projects, peer review is expected &#8211; in fact, it is a best practice, one of the things that separates successful community projects from the crowd. Developers expect to hear about features before they are developed, and have an opportunity to suggest better ways the feature can be implemented. They expect new contributors to submit patches that they can review &#8211; it is the way a new contributor builds trust before getting the keys to the house. It is such a recommended practice that the only treatment I can suggest is that you should help your developers to get over their nervousness &amp; embrace peer review, by making it the norm in your team.</p>
<p>The best way I know to get people used to peer review is to have a company policy against the &#8220;<a href="http://jacobian.org/writing/commit-bits/">day one commit bit</a>&#8221; &#8211; the practice of getting commit access to the project repository on the day you start in the company. For corporate-sponsored projects, new developers should go through the same review process for their work that contributors outside your company have to go through.</p>
<p>For corporate contributions to community projects, that means discouraging internal branches and a &#8220;gatekeeper&#8221; project structure, where one or two developers commit the work of others in the team. Developers should submit their work upstream at the same time it is being submitted internally. For those changes which only apply to your internal branch, you should create a probation period when patches are submitted via an internal mailing list, and subjected to the same peer review you would expect outside the company. This is a hard change for many organisations, but one which is necessary to transition your team<br />
to successful community contributors.</p>
<p>Having new developers go through this review period is important for a number of reasons &#8211; the most important is that you are demonstrating that employees have the same burden to prove themselves in the project as non-employee contributors, and it ensures that new employees have a period where they familiarise themselves with project coding &amp; communication conventions &amp; norms, and when they also introduce themselves to the community at large.</p>
<h2>Communication &amp; marketing are not my job</h2>
<div class="wp-caption alignright" style="width: 250px"><a href="http://www.flickr.com/photos/stuartpilbrow/2894451883/"><img title="Hiding" src="http://farm4.static.flickr.com/3082/2894451883_d5c7a008bd_m_d.jpg" alt="Under the bed" width="240" height="161" /></a><p class="wp-caption-text">Hiding (Credits: stuartpilbrow@flickr, CC BY-SA)</p></div>
<p>The developer I mentioned before shied away from the mailing list because he set a very high bar for himself on any public communications. In his mind, posting project plans to the mailing list was an announcement, and needed substantial preparation. In reality, most communities have a very high tolerance for things like spelling errors, incomplete plans (as long as they are marked as such) and other things which would be unacceptable in a press release or an official announcement. This is very definitely a case where Voltaire was correct: <a href="http://www.famous-quotes.net/Quote.aspx?The_perfect_is_the_enemy_of_the_good">the perfect is the enemy of the good</a>.</p>
<p>The developer was framing &#8220;sending an email to a mailing list&#8221; as &#8220;making an announcement&#8221;, something which fit in the &#8220;marketing&#8221; box in his head. One other developer I worked with once told me that he didn&#8217;t have time to send email to the mailing list because he had real work to do &#8211; &#8220;dealing with the community&#8221; was my job as community manager, as far as he was concerned.</p>
<p>Part of this issue comes from a general discomfort with written communications. But another part of it comes from the culture which is pervasive in most companies &#8211; only a small number of people get to talk for the company, and everyone else should just keep quiet. The authors of &#8220;<a href="http://www.cluetrain.com/">The Cluetrain Manifesto</a>&#8221; claimed that in the modern connected world, there is no such thing as a marketing department, that every interaction between an employee of your company and someone outside your company is an opportunity to win or lose reputation.</p>
<p>In free software development teams, this is even more true. There is no marketing department for project communications, and nor should there be. To be productive you need to talk to your peers, so the institutional barrier to external communications <strong>*must*</strong> disappear for people dealing in community projects.</p>
<p>It is all fine &amp; well to say that this should be the case, but even if the organisation is clear about giving engineers a free hand to talk about their work, the engineers may impose limits on themselves, requiring proposals to be perfect before sending them on (which, of course, they never are). In fact, waiting until a proposal is finished is usually a lost opportunity, since by the time it is finished, there may be so much emotional investment in the proposal that making changes to it can be difficult. It is better to release a rough early draft, giving the author an opportunity to integrate early feedback.</p>
<p>The best way to prove to your team the benefits of &#8220;<a href="http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html">release early, release often</a>&#8221; is to do so by example. As a team lead or manager, you can lead by publishing team plans publicly and early, and pointing out the benefits which result to your team. Breaking down this barrier will take time, but by making it clear that perfection is not expected, and by rewarding early release of information and encouraging feedback, your team will soon learn that participants outside your company are peers, not an audience.</p>
<p>Another useful technique is to ask your engineers to break tasks into smaller parts, so that even if they do hold off until the first part is up to a high standard, information is still getting out there more quickly, allowing feedback to inform later stages of the process.</p>
<p>However, another phenomenon is fighting against this desire for openness.</p>
<p>It is not uncommon for companies to want to keep their plans secret, so as to have a Big Reveal announcement effect at a major trade show. This can lead companies to ask their engineers to work internally on significant features for fear that the big surprise will be ruined otherwise. The alternative seems to be to announce a project when you start, rather than when you have something to show &#8211; but this can result in a long wait before products get to market, and impatience and bad press from the mainstream press.</p>
<p>I would argue that having engineers talk about design decisions &amp; implementation details of significant features in a mailing list will not result in significant attention outside of your community &#8211; and when the press release and announcement comes, the community who knew it was coming will feel better about having been in on the secret from the beginning, rather than feeling worse because they have to deal with a big code drop which no one person can review.</p>
<h2>Bashing bashfulness</h2>
<p>The key lesson here is that you want your developers to feel a connection to people working outside the company. That requires people outside your company to feel a connection with them, too. By drawing the curtain on your team, its members and their skills &amp; priorities, you are creating the circumstances for people to come to appreciate each other as peers, and to feel comfortable discussing features &amp; patches on their merits. When you get to that point, you have already won &#8211; it&#8217;s impossible to be shy when you&#8217;re among friends.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 34px; width: 1px; height: 1px; overflow: hidden;">
<div class="moz-text-plain" style="font-family: -moz-fixed; font-size: 12px;" lang="x-unicode">
<pre>Hi Dawn,

I plan to put this live tomorrow, and I'd really appreciate getting any
thoughts &amp; feedback you might have. It's still missing a re-read or two
&amp; some links and maybe a photo or two but I think the content isn't bad.

Thanks!
Dave.

One of the most common issues I have seen with experienced professional
software developers who start to work on community software is a
reluctance to engage with public communication fora like mailing lists.
Understanding the reasons why, and helping your developers overcome
their timidity, is key to creating a successful and fruitful
relationship with the community you are working with.

In my experience, common reasons for this timidity are a lack of
confidence in written English skills, or technical skills, nervousness
related to public peer review, and seeing community interaction as
"communication" or "marketing" (which are not part of their job), rather
than just "getting stuff done" (which, of course, is part of their job).
Lack of confidence

For non-English speakers, this phenomenon is more prevalent, but in
general, professional software developers have not developed writing
skills during college, and often have not been required to learn them as
part of their job. In addition, the art of rhetoric, structuring an
argument or thought to make it convincing, is not taught to engineers.
The end result is that when asked to write about their work, or to ask a
question on a public forum, they hesitate.

One engineer I worked with would (eventually) write an email about a
topic if I specifically asked him to, but would not react to responses
or questions from community members. When I approached him, he would
rationalise, say he hadn't had time, or didn't see the need to reply, or
refer the questions to someone else. But as part of a pattern, I
concluded that he was nervous about sending an email to a publicly
archived mailing list. He was nervous about making a mistake, writing
something he shouldn't, overstepping some unwritten corporate policy, or
felt uncomfortable expressing himself in writing. It doesn't help that
"bad nettiquette" is often dealt with rather harshly, reinforcing the
lack of confidence.

The only way to cure the problem is with baby steps.

A great first step is to get your engineers answering questions. One way
I have found to help get this to happen is to publicly refer a question
to an engineer on the mailing list, while affirming his expertise in the
area. "Tommy knows the RLE algorithms inside out - Tommy, would you mind
answering Franz's question, please?"

This serves a triple purpose: an individual can easily ignore a question
if it is addressed to a group, but it is a rare person who doesn't
answer when you ask them a question directly; affirming your engineer's
skills makes him feel good about himself, and gives him more confidence;
by identifying an individual engineer with a specific skillset inside
your team, you are giving people outside your company a glimpse inside
the walls - you are making your team human, a collection of individuals
with different strengths and weaknesses, rather than an amorphous group
- "the Acme Co developers".

Another good step is to give a series of creative writing workshops to
your developers. It is not enough to stand over people with a whip and
ask them all to have a blog. First you need to get them in the habit of
writing regularly.

Finally,you should train your engineers in basic netiquette - there are
lots of good resources out there, including Producing Open Source
Software by Karl Fogel, The Open Source Way, the Linux Kernel
Contributors Guide from the Linux Foundation, and ESR's "Asking Smart
Questions".
Nervousness related to peer review

It is one thing to have engineers answer questions when they have the
knowledge to do so. It is another thing to have them submit their plans
and patches to a community forum and have them exposed under the harsh
light of peer review.

On more than one occasion, I have heard a hiring manager say that he
didn't have time to have a developer go through peer review of specs or
patches - after all, he was hired because he was competent to do the
job, and what are we paying him for if he's going to be second-guessed
by "the community"? After a first job or internship, peer review is more
an exception than the rule for professional software developers
(regrettably, I might add).

In community projects, peer review is expected - in fact, it is a best
practice, one of the things that separates successful community projects
from the crowd. Developers expect to hear about features before they are
developed, and have an opportunity to suggest better ways the feature
can be implemented. They expect new contributors to submit patches that
they can review - it is the way a new contributor builds trust before
getting the keys to the house. It is such a recommended practice that
the only treatment I can suggest is that you should help your developers
to get over their nervousness &amp; embrace peer review, by making it the
norm in your team.

The best way I know to get people used to peer review is to have a
company policy against the "day one commit bit" - the practice of
getting commit access to the project repository on the day you start in
the company. For corporate-sponsored projects, new developers should go
through the same review process for their work that contributors outside
your company have to go through.

For corporate contributions to community projects, that means
discouraging internal branches and a "gatekeeper" project structure,
where one or two developers commit the work of others in the team.
Developers should submit their work upstream at the same time it is
being submitted internally. For those changes which only apply to your
internal branch, you should create a probation period when patches are
submitted via an internal mailing list, and subjected to the same peer
review you would expect outside the company. This is a hard change for
many organisations, but one which is necessary to transition your team
to successful community contributors.

Having new developers go through this review period is important for a
number of reasons - the most important is that you are demonstrating
that employees have the same burden to prove themselves in the project
as non-employee contributors, and it ensures that new employees have a
period where they familiarise themselves with project coding &amp;
communication conventions &amp; norms, and when they also introduce
themselves to the community at large.
Communication &amp; marketing is not my job

The developer I mentioned before shied away from the mailing list
because he set a very high bar for himself on any public communications.
In his mind, posting project plans to the mailing list was an
announcement, and needed substantial preparation. In reality, community
fora have a very high tolerance for things like spelling errors,
incomplete plans (as long as they are marked as such) and other things
which would be unacceptable in a press release or an official announcement.

The developer was framing "sending an email to a mailing list" as
"making an announcement", something which fit in the "marketing" box in
his head. One other developer I worked with once told me that he didn't
have time to send email to the mailing list because he had real work to
do - "dealing with the community" was my job as far as he was concerned.

Part of this issue comes from a general discomfort with written
communications. But another part of it comes from the culture which is
pervasive in most companies - only a small number of people get to talk
for the company, and everyone else should just keep quiet. The authors
of "The Cluetrain Manifesto" claimed that in the modern connected world,
there is no such thing as a marketing department, that every interaction
between an employee of your company and someone outside your company is
an opportunity to win or lose reputation.

In free software development teams, this is even more true. There is no
marketing department for project communications, and nor should there
be. To be productive you need to talk to your peers, so the
institutional barrier to external communications <strong class="moz-txt-star"><span class="moz-txt-tag">*</span>must<span class="moz-txt-tag">*</span></strong> disappear for
people dealing in community projects.

It is all fine &amp; well to say that this should be the case, but even if
the organisation is clear about giving engineers a free hand to talk
about their work, the engineers may impose limits on themselves,
requiring proposals to be perfect before sending them on (which, of
course, they never are). In fact, waiting until a proposal is finished
is usually a lost opportunity, since by the time it is finished, there
may be so much emotional investment in the proposal that making changes
to it can be difficult. It is better to release a rough early draft,
giving the author an opportunity to integrate early feedback.

The best way to prove to your team the benefits of "release early,
release often" is to do so by example. As a team lead or manager, you
can lead by publishing team plans publicly and early, and pointing out
the benefits which result to your team. Breaking down this barrier will
take time, but by making it clear that perfection is not expected, and
by rewarding early release of information and encouraging feedback, your
team will soon learn that participants outside your company are peers,
not an audience.

It is not uncommon for companies to want to keep their plans secret, so
as to have a Big Show announcement effect. This can lead companies to
ask their engineers to work internally on significant features for fear
that the big surprise will be ruined otherwise. I would argue that
having engineers talk about design decisions &amp; implementation details of
significant features in a mailing list will not result in significant
attention outside of your community - and when the press release and
announcement comes, the community who knew it was coming will feel
better about having been in on the secret from the beginning, rather
than feeling worse because they have to deal with a big code drop which
no one person can review.
Bashing bashfulness

The key lesson here is that you want your developers to feel a
connection to people working outside the company. That requires people
outside your company to feel a connection with them, too. By drawing the
curtain on your team, its members and their skills &amp; priorities, you are
creating the circumstances for people to come to appreciate each other
as peers, and to feel comfortable discussing features &amp; patches on their
merits. When you get to that point, you have already won - it's
impossible to be shy when you're among friends.
<div class="moz-txt-sig">--
maemo.org docsmaster
Email: <a class="moz-txt-link-abbreviated" href="mailto:dneary@maemo.org">dneary@maemo.org</a>
Jabber: <a class="moz-txt-link-abbreviated" href="mailto:bolsh@jabber.org">bolsh@jabber.org</a></div>
</pre>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neary-consulting.com/index.php/2010/12/08/curing-shy-developer-syndrome/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>MeeGo report card</title>
		<link>http://www.neary-consulting.com/index.php/2010/11/12/meego-report-card/</link>
		<comments>http://www.neary-consulting.com/index.php/2010/11/12/meego-report-card/#comments</comments>
		<pubDate>Fri, 12 Nov 2010 22:37:44 +0000</pubDate>
		<dc:creator>dneary</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://www.neary-consulting.com/?p=122</guid>
		<description><![CDATA[Dave Neary recently wrote a guest article for VisionMobile, charting the first months of the MeeGo project. From MeeGo Progress Report: A+ or D-? The end of October saw the release of MeeGo 1.1, the second major milestone release of the platform since it burst onto the scenes in February 2010. The MeeGo project was [...]]]></description>
			<content:encoded><![CDATA[<p>Dave Neary recently wrote a guest article for <a href="http://www.visionmobile.com/">VisionMobile</a>, charting the first months of <a href="http://meego.com">the MeeGo project</a>. From <a href="http://www.visionmobile.com/blog/2010/11/the-meego-progress-report-a-or-d/">MeeGo Progress Report: A+ or D-?</a></p>
<blockquote><p>The end of October saw <a href="http://meego.com/community/blogs/valhalla/2010/meego-1.1-release" target="_blank">the release of MeeGo 1.1</a>, the second major milestone release of the platform since it burst onto the scenes in February 2010. <a href="http://meego.com/" target="_blank">The MeeGo project</a> was born under the auspices of the Linux Foundation from a merging of  Nokia’s Maemo platform, targeting smart phones, and Intel’s moblin  platforms, aimed at netbooks.</p>
<p>[...]</p>
<p>This contrasts sharply with Android which is <a href="http://www.visionmobile.com/blog/2010/04/is-android-evil/" target="_blank">primarily developed behind closed doors</a> by Google, and iOS which is a completely proprietary platform. If there  is a key differentiator for MeeGo in the hand-held market, this is it.  It remains to be seen whether the open development model will be a  selling point which will tip the balance when manufacturers are choosing  a platform for a device.</p>
<p>[...]</p>
<p>It does not feel fair at this point to compare MeeGo, a project which  came into being 8 months ago, with iOS or Android, but this is the  yardstick which will be used when the first MeeGo smartphone comes on  the market. The project has come a long way since its inception, in  particular in working towards an open and transparent development model.  There is still some way to go but improvements have been happening  daily.</p></blockquote>
<p><a href="http://www.visionmobile.com/blog/2010/11/the-meego-progress-report-a-or-d/"><em>Read more</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neary-consulting.com/index.php/2010/11/12/meego-report-card/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GNOME Census report now available as free download</title>
		<link>http://www.neary-consulting.com/index.php/2010/07/29/gnome-census-report-now-available-as-free-download/</link>
		<comments>http://www.neary-consulting.com/index.php/2010/07/29/gnome-census-report-now-available-as-free-download/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 15:10:37 +0000</pubDate>
		<dc:creator>dneary</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://www.neary-consulting.com/?p=97</guid>
		<description><![CDATA[I was delighted to see that the GNOME Census presentation I gave yesterday at GUADEC has gotten a lot of attention. And I&#8217;m pleased to announce a change of plan from what I presented yesterday: The report is now available under a Creative Commons license. Why the change of heart? My intention was never to [...]]]></description>
			<content:encoded><![CDATA[<p>I was delighted to see that <a href="http://www.neary-consulting.com/index.php/2010/07/28/gnome-census-report-available/">the GNOME Census presentation</a> I gave  yesterday at GUADEC has gotten a lot of attention. And I&#8217;m  pleased to  announce a change of plan from what I presented yesterday:  The report is <a href="http://www.neary-consulting.com/index.php/services/gnome-census/"> now available</a> under a Creative Commons license.</p>
<p>Why the change of heart? My intention was never to make a fortune  with  the report, my main priority was covering my costs and time spent.  And  after 24 hours, I&#8217;ve achieved that. I have had several press  requests  for the full report, and requests from clients to be allowed  to use the  report both with press and with their clients.</p>
<p>This solution is the best for all involved, I think &#8211; I have covered  my  costs, the community (and everyone else) gets their hands on the  report  with analysis as soon as possible, and my clients are happy to  have the  report available under a license which allows them to use it  freely.</p>
<p>You can <a href="http://www.neary-consulting.com/index.php/services/gnome-census/">download the full report now</a> for free.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neary-consulting.com/index.php/2010/07/29/gnome-census-report-now-available-as-free-download/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
