<?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>Seeping Matter &#187; Software Development</title>
	<atom:link href="http://www.mvryan.org/tag/software-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mvryan.org</link>
	<description>Tidbits about cars, auto racing, music, motocross, football, video games, investing, corporate America, politics...</description>
	<lastBuildDate>Sat, 04 Feb 2012 06:26:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Announcing Zoomulus</title>
		<link>http://www.mvryan.org/2011/04/announcing-zoomulus/</link>
		<comments>http://www.mvryan.org/2011/04/announcing-zoomulus/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 23:53:31 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Zoomulus]]></category>

		<guid isPermaLink="false">http://www.mvryan.org/?p=1094</guid>
		<description><![CDATA[I hinted at this before, but I&#8217;ve started a new open source project called Zoomulus.  It&#8217;s a fun little project to product tools and libraries to help us normal people leverage the power of cloud computing more quickly.  I wrote a blog post today explaining why I started the project. For most, it is just [...]]]></description>
			<content:encoded><![CDATA[<p>I <a title="My Career Epiphany (At Least the Most Recent One)" href="http://www.mvryan.org/2011/02/my-career-epiphany-at-least-the-most-recent-one/" onclick="pageTracker._trackPageview('/outgoing/www.mvryan.org/2011/02/my-career-epiphany-at-least-the-most-recent-one/?referer=');">hinted at this before</a>, but I&#8217;ve started a new open source project called <a href="http://www.zoomulus.org" onclick="pageTracker._trackPageview('/outgoing/www.zoomulus.org?referer=');">Zoomulus</a>.  It&#8217;s a fun little project to product tools and libraries to help us normal people leverage the power of cloud computing more quickly.  I wrote a <a href="http://www.zoomulus.org/2011/04/05/why-zoomulus/" onclick="pageTracker._trackPageview('/outgoing/www.zoomulus.org/2011/04/05/why-zoomulus/?referer=');">blog post</a> today explaining why I started the project.</p>
<p>For most, it is just another open source project, but for me, it is a part of me.  There&#8217;s not much there yet, but I&#8217;m pretty pleased with it anyway.  If you are interested, take a look or even get involved; I&#8217;d love to have you onboard.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2011/04/announcing-zoomulus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Not Saying There&#8217;s Anything Wrong With Shuttle Drivers</title>
		<link>http://www.mvryan.org/2011/02/not-saying-theres-anything-wrong-with-shuttle-drivers/</link>
		<comments>http://www.mvryan.org/2011/02/not-saying-theres-anything-wrong-with-shuttle-drivers/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 04:45:00 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.mvryan.org/?p=1054</guid>
		<description><![CDATA[So I&#8217;m riding in the Seattle Airport Shuttle back from the Hyatt Olive 8 to SeaTac yesterday afternoon.  It&#8217;s just me and the shuttle driver who appears to be maybe in his early to mid 50s.  The conversation leads to careers, and he happens to mention, &#8220;Yeah, I used to do computer work for Boeing.&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;m riding in the Seattle Airport Shuttle back from the Hyatt Olive 8 to SeaTac yesterday afternoon.  It&#8217;s just me and the shuttle driver who appears to be maybe in his early to mid 50s.  The conversation leads to careers, and he happens to mention, &#8220;Yeah, I used to do computer work for Boeing.&#8221;</p>
<p>&#8220;What kind of computer work did you do?&#8221; I asked.</p>
<p>He replied, &#8220;Oh, I worked for Boeing for 24 years writing COBOL software.  Then they laid me off, and I couldn&#8217;t find another job.  So now I drive an airport shuttle for minimum wage plus tips.&#8221;</p>
<p>I&#8217;ll be 16 years into my career this  year.</p>
<p>To say that was a bit of a wake up call is an understatement.  It said to me, &#8220;Matt, you are 2/3 of the way to irrelevancy.&#8221;  Time to get things into gear before it is too late.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2011/02/not-saying-theres-anything-wrong-with-shuttle-drivers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My Career Epiphany (At Least the Most Recent One)</title>
		<link>http://www.mvryan.org/2011/02/my-career-epiphany-at-least-the-most-recent-one/</link>
		<comments>http://www.mvryan.org/2011/02/my-career-epiphany-at-least-the-most-recent-one/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 07:51:09 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Introspection]]></category>
		<category><![CDATA[Shameless Self-Promotion]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.mvryan.org/?p=1052</guid>
		<description><![CDATA[Let&#8217;s just start out by saying that I&#8217;m really glad 2010 is in the past. I started off 2010 with some enthusiasm and even determination, you might recall.  My intentions were good, but apparently karma didn&#8217;t like it.  Maybe I came across too arrogant, I don&#8217;t know. All I know is that in 2010 it [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s just start out by saying that I&#8217;m really glad 2010 is in the past.</p>
<p>I started off 2010 with some enthusiasm and even determination, <a href="http://www.mvryan.org/2009/12/do-something-hard-in-2010/" onclick="pageTracker._trackPageview('/outgoing/www.mvryan.org/2009/12/do-something-hard-in-2010/?referer=');">you might recall</a>.  My intentions were good, but apparently karma didn&#8217;t like it.  Maybe I came across too arrogant, I don&#8217;t know.</p>
<p>All I know is that in 2010 it seemed like the blows just kept coming, one right after another.  You know in those Rocky movies (just pick one, they are pretty much all the same after Rocky 1) where, at some point during the fight, he just stands there and keeps getting hit over and over and over again?  Yeah, like that.  $12000 of car repairs in a single year alone can do that to you, even if you aren&#8217;t trying to do the <a href="http://www.mvryan.org/2010/01/doing-the-dave-ramsey-dance/" onclick="pageTracker._trackPageview('/outgoing/www.mvryan.org/2010/01/doing-the-dave-ramsey-dance/?referer=');">Dave Ramsey dance</a>.  If you ARE trying to do the dance, that makes it worse, because it compounds the feeling of failure.  Combine with that a major misunderstanding at work plus missing a coding deadline right around the same time my daughter came down with a serious life-threatening illness causing me to miss a week of work with her in the hospital right at the time year-end evaluations were due&#8230;</p>
<p>It was not a very good year.</p>
<p>So it was early last fall when a friend of mine suggested I read Seth Godin&#8217;s book &#8220;The Dip,&#8221; which I immediately followed with &#8220;Linchpin.&#8221;  Reading these two books in that sequence changed my entire outlook on my career.</p>
<p>The premise of &#8220;The Dip&#8221; is very simple.  Think of a time when it has seemed to you like things just aren&#8217;t working out, when they seem harder than they should be and not nearly as fun or fulfilling as you had hoped when you began.  Maybe it is in a job or a career.  Maybe you are trying to learn to play an instrument or you are training for a marathon.  &#8221;The Dip&#8221; that Godin is speaking of is this time — the time past the beginning, when things were new and exciting, but before the time when it becomes fun again because you are really good.  In &#8220;The Dip&#8221; he explains how to tell whether the low point is really a dip or just the beginning of the end.</p>
<p>To me, however, the biggest lesson was this:  If you try hard enough, you can envision what the dip will be like for any new endeavor you think of starting, and you can decide early whether you think you are interested in going through the dip.</p>
<p>I think it is a natural law that anything worth doing or having has a dip associated with it, where the size of the dip is proportional in depth to the value of the thing worth doing or having.  Learning Spanish was like this for me.  At first, it was interesting and novel (&#8220;Hey, check me out!  I can say an entire sentence in Spanish!&#8221;).  But then there was the long arduous time period where it just was not happening.  I&#8217;d hear people speak in Spanish but I couldn&#8217;t translate what they were saying fast enough to understand them; I&#8217;d try to reply but I couldn&#8217;t translate my thoughts to Spanish fast enough to keep their interest.  But I pushed and pushed, and suddenly one day it happened:  I was suddenly thinking in Spanish.  I could understand and speak without any problem.  I was truly bilingual, and it was fun again.</p>
<p>Learning to write computer software was like that.  So was learning to play the piano, and a host of other things.</p>
<p>Since I know that anything worth doing has a dip, and since I also believe that the size of the dip is proportional to the pursuit, I should be able to objectively analyze a new endeavor at the beginning.  I should be able to imagine how it will be to achieve excellence in this endeavor, and I should be able to envision at least some of that which will constitute the dip.  Then I can analyze up front whether I think it is worth the effort.  Then, if I so choose, I can move forward with a bit more awareness and less surprise when the dip hits.</p>
<p>However, there&#8217;s another perfectly good alternative:  I might be honest with myself and realize that I&#8217;m not willing to see it through.  In this case, I&#8217;m better off to focus my energy in other areas where I AM willing to make the investment.</p>
<p>(There is a point to all of this, really.  I&#8217;m getting there.)</p>
<p>For a good 15 years of my career, almost since my career began, I&#8217;ve thought about starting my own software company.  I&#8217;ve had numerous ideas for products that might be monetizable over that timeframe and have conducted various levels of research for many of them.  Eventually, every one of these ideas got shelved or abandoned.  And suddenly, after having first read &#8220;The Dip&#8221; and then &#8220;<a href="http://www.mvryan.org/2011/02/the-story-of-bobs-groceries-or-a-review-of-linchpin-by-seth-godin/" onclick="pageTracker._trackPageview('/outgoing/www.mvryan.org/2011/02/the-story-of-bobs-groceries-or-a-review-of-linchpin-by-seth-godin/?referer=');">Linchpin</a>,&#8221; with the context of the <a href="http://www.mvryan.org/2011/02/the-money-flo-principle/" onclick="pageTracker._trackPageview('/outgoing/www.mvryan.org/2011/02/the-money-flo-principle/?referer=');">Money Flow Principle</a>, I knew what I had been doing wrong.</p>
<p>See, all this time one main reason I&#8217;ve wanted to have my own company was because I&#8217;ve wanted to work on what I wanted the way I want to do it.  So I&#8217;ve had all these ideas for possible software companies.  And every time I&#8217;ve had an idea, one of the first things I start to think about is, &#8220;How can I make a business out of this?  How can this idea make money?&#8221;</p>
<p>It is at this point where I start exploring financial models and business plans.  I spend time thinking about how to deliver the product and how much to charge, whether it is a rich client or a web application, whether it is a product or a service, whether it is a subscription model or a license model.  I think about the customer I want to target.  I run the numbers to see if it can make money.</p>
<p>And I either can&#8217;t figure out how to make any money, or I simply get bored and quit.</p>
<p>When I read &#8220;The Dip&#8221; and thought about my career, I had a major epiphany:  I&#8217;m not sure I am actually willing to see my business through the dip.  I think I understand a little about what needs to be done.  While I don&#8217;t claim that I&#8217;ve thought of everything, I think I&#8217;ve got a fairly representative picture.  And I&#8217;m not convinced that I am interested in seeing it through.</p>
<p>However, I AM still interested in working on what I want to do, the way I want to do it.  But now that I realize that I may not be interested in doing it as a business, I feel relieved.  Suddenly I&#8217;m not compelled to monetize whatever I choose to do, because I&#8217;m not sure that is really what I want.  I&#8217;m free instead to just pursue something interesting and try to give society a valuable gift, and trust that if I do, the money will eventually flow in my direction.</p>
<p>I don&#8217;t think I can clearly express how liberating this was to me.  At a time where I was feeling somewhat trapped and beaten down, I realized I could start creating fulfillment for myself, with no obligations other than just those I make to myself, to create something that is enjoyable and satisfying and interesting to me, the way I want to do it.</p>
<p>So I did.  I created an open source software project, called <a href="http://www.zoomulus.org/" onclick="pageTracker._trackPageview('/outgoing/www.zoomulus.org/?referer=');">Zoomulus</a>.  I&#8217;ve been working on it ever since, and it has been great.  There&#8217;s not much there yet, and I&#8217;m not even sure yet what it will actually be.  But it is mine, interesting to me, done my way, and it is making a big difference in my life.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2011/02/my-career-epiphany-at-least-the-most-recent-one/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The Brand of Me</title>
		<link>http://www.mvryan.org/2010/06/the-brand-of-me/</link>
		<comments>http://www.mvryan.org/2010/06/the-brand-of-me/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 01:35:55 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.mvryan.org/?p=882</guid>
		<description><![CDATA[I attended LaunchUp, a monthly meet-up for people interested in tech startups, last Thursday.  My friend Josh Coates, Mozy founder, spoke first, where among other things he described the two types of people at the event:  people who have done, are doing, or are planning to do a startup, and people who like to talk [...]]]></description>
			<content:encoded><![CDATA[<p>I attended LaunchUp, a monthly meet-up for people interested in tech startups, last Thursday.  My friend Josh Coates, Mozy founder, spoke first, where among other things he described the two types of people at the event:  people who have done, are doing, or are planning to do a startup, and people who like to talk about it but are too chicken to do it.</p>
<p>I&#8217;m definitely in the second category.</p>
<p>Of course, Josh&#8217;s talk was the most interesting, in case he reads my blog.  But the second talk, DJ Waldow&#8217;s talk on community management, was interesting too, particularly to me as someone who&#8217;s tried (and failed) to start an effective online business.  It wasn&#8217;t so much that there was any one particular point that Waldow made that really stood out to me; rather, the more he spoke, the more I realized how important what he was saying really is:  In order to compete today, businesses have to be active in managing their online reputation and in creating awareness of themselves among their customer base.  The ultimate?  When your presence in the community and the industry is so prevalent that when they think of your business area, they think of your business.</p>
<p>Since I don&#8217;t have my own business, <strong>I</strong> am my own business.  So this made me wonder, how well am I doing?  How synonymous is my  name with the software engineering industry, or other things?</p>
<p>Since I know how incredibly interested you are, here&#8217;s a detailed table of my findings.  For each term, I conducted a search on both Google and Bing.</p>
<p><strong>Search Term:  &#8221;Matt Ryan&#8221;:</strong> Searching for just my name is pretty disheartening.  No results relating to me in the first twenty pages on either site.  It doesn&#8217;t help when you have the same name as a <a href="http://www.mattryanonline.org/" onclick="pageTracker._trackPageview('/outgoing/www.mattryanonline.org/?referer=');">pro football player</a> and a <a href="http://www.matthewryanonline.com/" onclick="pageTracker._trackPageview('/outgoing/www.matthewryanonline.com/?referer=');">musician</a>.  I don&#8217;t even show up on Wikipedia&#8217;s <a href="http://en.wikipedia.org/wiki/Matthew_Ryan" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Matthew_Ryan?referer=');">Matthew Ryan disambiguation page</a>.  Hrrmm.</p>
<p><strong>Search Term:  &#8221;Matt Ryan blog&#8221;:</strong> Not much better.  No results for me in the first ten pages on either site.</p>
<p><strong>Search Term:  &#8221;Matt Ryan homepage&#8221;:</strong> Finally, a result.  Google gave me a result for <a href="http://www.mvryan.org/" onclick="pageTracker._trackPageview('/outgoing/www.mvryan.org/?referer=');">www.mvryan.org</a>, my homepage, on page 9 result 9; Bing, oddly, gave their first result for me for my user profile page on <a href="http://developer.novell.com/wiki/index.php/User:Matt_ryan" onclick="pageTracker._trackPageview('/outgoing/developer.novell.com/wiki/index.php/User_Matt_ryan?referer=');">Novell&#8217;s developer website</a>, from back in my days working for Novell&#8217;s developer services team.</p>
<p><strong>Search Term:  &#8221;Matt Ryan software&#8221;:</strong> Now we&#8217;re honing in.  Google&#8217;s fifth result on their first page was for my developer.novell.com profile page; Bing gave two results for me on their first page; the third for my <a href="http://www.linkedin.com/in/mvryan" onclick="pageTracker._trackPageview('/outgoing/www.linkedin.com/in/mvryan?referer=');">LinkedIn profile</a>, the eighth result on that page for my user profile on SourceForge.net.</p>
<p><strong>Search Term:  &#8221;Matt Ryan software engineer&#8221;:</strong> Google showed me love twice on page one, results three and seven, but Bing really showered down their devotion by giving me five results on the first page.  I got top billing with the first result on the first page, along with results four, six, seven, and ten.</p>
<p>Bing really seems to be favoring me more than Google, but surely that&#8217;s not because I <strong>work</strong> for Microsoft; it must just be a coincidence.  Anyway, it seems I&#8217;m fairly well associated with my profession, but there&#8217;s definitely still some work to be done.</p>
<p>Some other searches:</p>
<p><strong>&#8220;Matt Ryan Microsoft&#8221;:</strong> Google, page 1 result 2; Bing, page 1 result 2</p>
<p><strong>&#8220;Matt Ryan Mozy&#8221;:</strong> Google, page 1 results 2-6 (oddly, the first result is for a Matt Ryan on the mozy.com blog but that isn&#8217;t me, even though I worked for Mozy for a year); Bing, page 1 results 1,2,3,5,6,9</p>
<p><strong>&#8220;Matt Ryan Novell&#8221;:</strong> Google, page 1 results 1-6, 8-10; Bing, page 1 results 1,2,4,5,8-10</p>
<p><strong>&#8220;Matt Ryan Eclipse&#8221;:</strong> Google, page 1 results 1,3,5,7; Bing, page 1 results 1,4,6,8,9</p>
<p><strong>&#8220;Matt Ryan IBM&#8221;:</strong> Google, page 1 result 2; Bing, page 1 results 1,10</p>
<p><strong>&#8220;Matt Ryan Spillman&#8221;:</strong> Google, page 1 results 1,2; Bing, page 1 result 1</p>
<p><strong>&#8220;Matt Ryan utah&#8221;:</strong> Google, page 2 result 2; Bing, page 1 result 1</p>
<p><strong>&#8220;Matt Ryan 350z&#8221;:</strong> Google, page 1 result 2; Bing, page 1 result 3</p>
<p><strong>&#8220;Matt Ryan world superbike&#8221;:</strong> Google, page 1 result 1 (and 2, and 3); Bing, page 1 result 5</p>
<p><strong>&#8220;Matt Ryan supercross&#8221;:</strong> Google page 1 result 9; Bing, page 1 result 9</p>
<p><strong>&#8220;Seeping Matter&#8221;:</strong> Google page 1 results 1-4,6,8; Bing, page 1 results 1-4</p>
<p><strong>&#8220;Coding Frogs&#8221;:</strong> Google page 1 results 1,2; Bing, page 1 results 1,2</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2010/06/the-brand-of-me/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Finally &#8211; A Place for Coding Frogs</title>
		<link>http://www.mvryan.org/2010/02/finally-a-place-for-coding-frogs/</link>
		<comments>http://www.mvryan.org/2010/02/finally-a-place-for-coding-frogs/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 22:37:08 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Humor]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.mvryan.org/?p=804</guid>
		<description><![CDATA[Yes, you read that correctly.  For far too long all us coding frogs have been neglected and discriminated against.  But no more!  My new software development website, www.codingfrogs.net, is up and running! I will now take questions. Q:  What is codingfrogs.net? A:  It is my new software development blog, dealing with the technical, process, and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blessedpancake.com/view/frog.svg" onclick="pageTracker._trackPageview('/outgoing/blessedpancake.com/view/frog.svg?referer=');"><img class="alignright size-thumbnail wp-image-409" title="The Coding Frog" src="http://i178.photobucket.com/albums/w257/blessedpancake/svg/frog.jpg" alt="The Coding Frog" width="150" height="130" /></a></p>
<p>Yes, you read that correctly.  For far too long all us coding frogs have been neglected and discriminated against.  But no more!  My new software development website, <a href="http://www.codingfrogs.net" onclick="pageTracker._trackPageview('/outgoing/www.codingfrogs.net?referer=');">www.codingfrogs.net</a>, is up and running!</p>
<p>I will now take questions.</p>
<p><strong>Q</strong>:  What is <a href="http://www.codingfrogs.net" onclick="pageTracker._trackPageview('/outgoing/www.codingfrogs.net?referer=');">codingfrogs.net</a>?</p>
<p><strong>A</strong>:  It is my new software development blog, dealing with the technical, process, and business aspects of software development.</p>
<p><strong>Q</strong>:  Where did you get that outstanding frog picture?</p>
<p><strong>A</strong>:  I know, huh!</p>
<p><strong>Q</strong>:  No, really &#8211; where?</p>
<p><strong>A</strong>:  It is the original creation of Rosie Leung, which she made available via Creative Commons on <a href="http://www.blessedpancake.com" onclick="pageTracker._trackPageview('/outgoing/www.blessedpancake.com?referer=');">her website</a>.</p>
<p><strong>Q</strong>:  Are only coding frogs allowed at that website, or may any type of coding animal visit?</p>
<p><strong>A</strong>:  <a href="http://www.codingfrogs.net" onclick="pageTracker._trackPageview('/outgoing/www.codingfrogs.net?referer=');">codingfrogs.net</a> welcomes any type of coding animal, but frogs get preferred seating.</p>
<p><strong>Q</strong>:  Will you allow other coding frogs to guest-post on <a href="http://www.codingfrogs.net" onclick="pageTracker._trackPageview('/outgoing/www.codingfrogs.net?referer=');">codingfrogs.net</a>?</p>
<p><strong>A</strong>:  Yes, but only if I let them.</p>
<p><strong>Q</strong>:  Isn&#8217;t the purpose of this post primarily to drive up your PageRank score for <a href="http://www.codingfrogs.net" onclick="pageTracker._trackPageview('/outgoing/www.codingfrogs.net?referer=');">codingfrogs.net</a>, even if only by a tiny amount?</p>
<p><strong>A</strong>:  Next question.</p>
<p><strong>Q</strong>:  Why <a href="http://www.codingfrogs.net" onclick="pageTracker._trackPageview('/outgoing/www.codingfrogs.net?referer=');">codingfrogs.net</a>?</p>
<p><strong>A</strong>:  Because the domain name was available, of course.</p>
<p><strong>Q</strong>:  Is it true that you created this website to Michelle Barnum would quit complaining about your technical posts?</p>
<p><strong>A</strong>:  Pretty much.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2010/02/finally-a-place-for-coding-frogs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go &#8211; Programming Language Nirvana?</title>
		<link>http://www.mvryan.org/2009/11/go-programming-language-nirvana/</link>
		<comments>http://www.mvryan.org/2009/11/go-programming-language-nirvana/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 04:35:43 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.mvryan.org/?p=718</guid>
		<description><![CDATA[Earlier this week Google announced their new programming language, called Go. Usually I don&#8217;t get too worked up about programming languages.  I already feel like I know more languages than I should need to know, and often a new language seems to me like &#8220;Hey, check this out!  Here&#8217;s a more complex or non-intuitive way [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignleft" style="width: 163px"><a href="http://golang.org/" onclick="pageTracker._trackPageview('/outgoing/golang.org/?referer=');"><img title="The Go Gopher" src="http://golang.org/doc/logo-153x55.png" alt="The Go Gopher" width="153" height="55" /></a><p class="wp-caption-text">The Go Gopher</p></div>
<p>Earlier this week <a href="http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html" onclick="pageTracker._trackPageview('/outgoing/google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html?referer=');">Google announced their new programming language</a>, called Go.</p>
<p>Usually I don&#8217;t get too worked up about programming languages.  I already feel like I know more languages than I should need to know, and often a new language seems to me like &#8220;Hey, check this out!  Here&#8217;s a more complex or non-intuitive way to accomplish a task you already know how to accomplish, but in a language you will never use professionally!&#8221;</p>
<p>I know, I&#8217;m disappointing you.</p>
<p>But Go!  Oh my, this seems different.  From the blog post:</p>
<blockquote><p>Go combines the development speed of working in a dynamic language like Python with the performance and safety of a compiled language like C or C++. Typical&#8230;</p></blockquote>
<p>Wait!  Hold on there — my heart just skipped a beat and it freaked me out.  Can you please repeat that again?</p>
<blockquote><p>&#8230;a dynamic language like <strong>Python </strong>with the performance and safety of a compiled language like <strong>C or C++</strong>.</p></blockquote>
<p>Ooh baby.  Someone help me — I&#8217;m shaking with anticipation.  A systems programming language that combines Python and C++?  Can it really be?  It seems too good to be true!  My two favorite programming languages combined in one:  It&#8217;s like true programming nirvana!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2009/11/go-programming-language-nirvana/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Three Months at Microsoft</title>
		<link>http://www.mvryan.org/2009/10/three-months-at-microsoft/</link>
		<comments>http://www.mvryan.org/2009/10/three-months-at-microsoft/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 20:37:07 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mozy]]></category>
		<category><![CDATA[Novell]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.mvryan.org/?p=703</guid>
		<description><![CDATA[Last week marked three months that I&#8217;ve been working at Microsoft. As I&#8217;ve discussed before, making the decision to leave Mozy for Microsoft was not an easy one.  Let&#8217;s face it:  I&#8217;m not exactly a spritely youth anymore.  I&#8217;ve worked at a lot of different companies — and when I say &#8220;different,&#8221; I also mean, [...]]]></description>
			<content:encoded><![CDATA[<p>Last week marked three months that I&#8217;ve been working at Microsoft.</p>
<p>As I&#8217;ve discussed before, making the decision to leave Mozy for Microsoft was not an easy one.  Let&#8217;s face it:  I&#8217;m not exactly a spritely youth anymore.  I&#8217;ve worked at a lot of different companies — and when I say &#8220;different,&#8221; I also mean, &#8220;different from each other:&#8221;  Small companies you&#8217;ve never heard of (Spillman Technologies), large companies you&#8217;ve surely heard of (IBM), companies whose politics continue to keep them from succeeding (Novell), companies who manage to succeed in spite of the politics (Mozy), and companies that just frankly exist only as dark, ghostly nightmares in the frightening nether regions of my mind (Enterasys Networks).  Yet as different as these places are from each other, one thing mostly remains the same:  the process of creating software is the same everywhere.</p>
<p>So that makes a decision to leave hard.  Since the process of creating software is the same everywhere, it is the intangibles that end up mattering, such as whether you like your boss, whether you get a nice computer or monitor, how comfortable your chair is, etc.  When you consider leaving, you wonder what unidentified intangibles you&#8217;ll be giving up and what you&#8217;ll be getting, and whether you will feel like this was a good trade a year later.</p>
<p>Leaving Novell for Mozy was like this for me.  I got many, but not all, of the intangibles I expected when I went to Mozy.  I gave up all of the intangibles I expected I&#8217;d give up from Novell, like five weeks of paid vacation and a beautiful window office on the 7th floor looking directly north to Mount Timpanogos.  Some things at Mozy ended up being worse than I expected, e.g. the 5% pay cut last spring.  Of course, I do realize that it is not Mozy&#8217;s fault that I didn&#8217;t get all the intangibles I expected; I set that expectation, not them; I failed to assess the situation accurately.</p>
<p>Nonetheless, as I contemplated leaving Mozy for Microsoft, I thought about this.  &#8220;Well, software engineering is the same everywhere.  So since the in-and-out of the job function is mostly the same, I wonder what intangibles I&#8217;m gaining and what I&#8217;m giving up?&#8221;</p>
<p>Well, I failed to assess the situation accurately again.  I made one key error:  Software engineering is NOT the same everywhere.</p>
<p>In particular, it is not the same at Microsoft.  At Microsoft, software engineering is more&#8230; uh&#8230; yeah:  more.</p>
<p>More better.</p>
<p>Have you ever worked for Microsoft?  If you haven&#8217;t, you don&#8217;t know anything about us.  I know you think you do.  You don&#8217;t.</p>
<p>Never in my career have I ever worked in any organization that took software engineering as seriously as Microsoft does.  I was very surprised to see how seriously we consider things like security and software quality.  I&#8217;m aware of the reputation Microsoft has received over the years for bugs and security issues.  Maybe things are different now, or maybe that whole thing was just a function of being the world&#8217;s largest, most powerful, and most widely used software company.  At any rate, I can tell you from personal experience that security and quality are very important here — important enough that we will delay shipment if we don&#8217;t feel like it meets our standards.  While this may seem obvious, I&#8217;ve never seen this commitment to quality permeate throughout an organization like it does here.</p>
<p>It has been incredibly refreshing to see a company take software engineering as seriously as I do.  I love that I&#8217;m free to require explanation or justification from my management when I don&#8217;t understand something.  I love that I&#8217;m supported in insisting on perfection in software design, code, and process to the degree that I can help us deliver it.  I love that people can communicate with me honestly and openly without worrying about my feelings, and that I can do the same with them, because, unlike some places I&#8217;ve worked, there is an undercurrent of trust and mutual respect between me and all of my peers wherein we know and believe that, despite having different opinions, we are each talented and capable professionals with the best interests of the company at heart.  I love being surrounded by incredible talent that makes me feel both humbled to be a part of the group and inspired to improve myself every day.  I love working for a company where, instead of feeling like my career has topped out and has nowhere else to go, I feel I have broad, wide-open vistas of learning and advancement just laying before my feet; opportunities sitting before me just waiting for me to seize them.</p>
<p>I had no idea a software company could be that much better than what I&#8217;d experienced in the past.  It is really awesome.  It may not be for everybody.  Not all software engineers care enough about delivering quality software that they will do whatever it takes — write unit tests, participate in code reviews, follow rigorous and time-consuming processes, be a small fish in a big pond — in order to do it.  But if you care about delivering quality software, like I do, I must say I highly recommend us.</p>
<p>After only three months I find myself saying something I never thought I&#8217;d say:  I love working at Microsoft.  I really do.  Intending absolutely no negative to any other company I&#8217;ve worked for (with the exception of Enterasys Networks, I have fond memories of great talent, great people, and great product deliveries at every company), working at Microsoft is unlike anything else I&#8217;ve ever experienced.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2009/10/three-months-at-microsoft/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Truth About Novell Forge</title>
		<link>http://www.mvryan.org/2009/09/the-truth-about-novell-forge/</link>
		<comments>http://www.mvryan.org/2009/09/the-truth-about-novell-forge/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 00:30:22 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Rants]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[Interesting]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Novell]]></category>
		<category><![CDATA[Shameless Self-Promotion]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[SUSE]]></category>

		<guid isPermaLink="false">http://blog.mvryan.org/?p=684</guid>
		<description><![CDATA[I got an interesting e-mail the other day from Novell: Please Note: You have been sent this email because you are listed as an administrator of one or more Novell Forge projects. When Novell Forge was first launched Novell recognized the need for a site dedicated to providing hosting services to a growing number of [...]]]></description>
			<content:encoded><![CDATA[<p>I got an interesting e-mail the other day from Novell:</p>
<p style="padding-left: 30px;"><strong><span style="font-family: Dialog; font-size: x-small;">Please Note: You have been sent this email because you are listed as an administrator of one or more Novell Forge projects.</span></strong></p>
<p style="padding-left: 30px;"><span style="font-family: Dialog; font-size: x-small;">When Novell Forge was first launched Novell recognized the need for a site dedicated to providing hosting services to a growing number of software development projects, many supporting our open source initiatives. Novell Forge quickly grew and was soon providing these service to nearly 1000 such projects. Demand for new projects has all but disappeared during the past two years while a number of additional project hosting options have begun that can provide a similar set of services to those of Novell Forge.</span></p>
<p style="padding-left: 30px;"><span style="font-family: Dialog; font-size: x-small;">Now that there are many other options, Novell can turn its focus to other areas and pass the project hosting responsibilities to these other dedicated hosting sites. Novell will be decommissioning the Novell Forge system on December 15, 2009.</span></p>
<p>This is interesting to me because it is not entirely true.  I should know, because without me there would never have been a Novell Forge.</p>
<p>It&#8217;s a bold statement, I know.  It&#8217;s one I&#8217;m happy to explain.</p>
<p>I came to Novell from IBM in 2000.  It didn&#8217;t take long to realize that Novell&#8217;s developer story and strategy, or rather the complete lack thereof, was (and still is) a significant weakness in their overall execution.  People buy a computer operating system in large part because of the applications that they can run on it; if a business wants to run a CRM system, they&#8217;ll want to be sure that whatever platform they buy will run a CRM suite that is acceptable to them.  This is why having a strong developer strategy is crucial to platform providers, and almost everyone seems to understand this.  Novell certainly should; NetWare owned the x86 server market in the 80&#8242;s and early 90&#8242;s until Microsoft entered that market.  Initially, the Microsoft offering was not necessarily better than NetWare in terms of stability or performance, but Microsoft definitely outgunned Novell when it came to applications.  It was so much easier to create applications for Microsoft&#8217;s platform that their supported portfolio dwarfed Novell&#8217;s, and that was a significant key to dethroning Novell&#8217;s dominant position in the x86 server market in the mid 90&#8242;s.</p>
<p>Anyway, when I came to Novell and learned this, I thought that probably Novell&#8217;s Developer Services organization just didn&#8217;t know what to do (a mistaken analysis, I later learned) and if I worked there I could probably fix everything.  I was pretty young, arrogant, and naive then.  But in 2002 I was presented an opportunity to work in Developer Services and I took it.</p>
<p>One of the first things I was asked to do was to provide support to customers programming to eDirectory.  I decided to try to learn more about how to do this the same way our third-party developers would, by using the resources that were available online.  I found what appeared to be our authoritative how-to-program-to-eDirectory tutorial, got most of the way through my sample app, and got stuck.  Finally I started asking questions.  I quickly learned that everything I&#8217;d been doing was wrong; the authoritative documentation was incorrect.  It used an out-of-date and deprecated API and was no longer considered best practice.  It was some two or three years out of date, but hadn&#8217;t been changed yet because changing the documentation was just too painful.</p>
<p>I felt this situation was unacceptable.  We needed the freedom to create an abundance of rich and helpful developer content and to have it published and updated freely and frequently.  We needed to be able to do this without going through drawn-out and tedious approval processes and staging phases for even minor edits.  We needed to be able to continuously deliver not only whitepapers but tutorials and sample applications.  I felt that what was needed was a complete overhaul of Novell&#8217;s developer site, converting it into a web application where administrators (Novell Developer Services employees) could update the content and have complete control over what information was being provided to our developer community.</p>
<p>I discussed this with a colleague and my manager, and then we called a formal meeting to discuss this proposal.  I think there were four Developer Services employees in the room.  As we discussed the reasons to do this, other advantages surfaced.  A key issue was that, in Novell&#8217;s then-existing developer forums, many Novell developers were already contributing to solving each other&#8217;s problems, including answering each other&#8217;s questions and even sharing code, from small snippets to complete applications.  We realized that instead of top-down support flowing from company to customer, what our customers really preferred was community support with Novell as an active participant.  As we discussed this, one of my colleagues suggested that instead of writing the web app I suggested, we should do a project hosting site, like SourceForge.  Such a site would allow us to participate as a community with our users to exchange sample code, documentation, tutorials, and other content.  Novell Forge was born.</p>
<p>As we began to socialize the idea, we found out that a separate group within Novell had been tasked with creating a project hosting site for internal company use.  When we both became aware of each other&#8217;s goals, the synergies were obvious and it seemed apparent that we should try to coordinate our efforts.  Interestingly, we had human resources to give to the project but lacked funding for capital expenses; the other group had capital expense budget but lacked human resources.  Ultimately we agreed that, as my team developed the Novell Forge solution, we would also develop an internal-use version of the site to meet the goals of this team; in exchange, they would help us to get the hardware we needed to host Novell Forge.</p>
<p>Around the time Novell Forge was launched and completed, a number of people involved directly or indirectly from that team claimed credit for having launched Novell Forge.  Some of them were quite handsomely rewarded by the company, presumably at least in part due to their claimed credit for the site.  Others still claim in public that they are responsible for the site even though they had absolutely nothing to do with the conceptualization, proposal, approval, or implementation.</p>
<p>Meanwhile, those of us who did come up with the idea, who did make the business case and get the approval and deliver the site, well, we pretty much had to settle for a brief pat on the back from Novell.  Or did we even get that?  Anyway.</p>
<p>Novell Forge, despite its pretty lame name and humble beginnings, was actually quite well received by the press.  It <a href="http://www.networkworld.com/newsletters/dir/2003/0623ds2.html" onclick="pageTracker._trackPageview('/outgoing/www.networkworld.com/newsletters/dir/2003/0623ds2.html?referer=');">earned kudos</a> for Novell from Dave Kearns of NetworkWorld, which was not exactly easy to come by.  And as Novell tried to reinvent itself with an open source focus, purchasing such open source companies as Ximian and SUSE Linux, the existence of Novell Forge was frequently cited as evidence that Novell was serious about an open source strategy (<a href="http://www.internetnews.com/dev-news/article.php/3379151" onclick="pageTracker._trackPageview('/outgoing/www.internetnews.com/dev-news/article.php/3379151?referer=');">example</a>).  Interest in the site grew quickly and it soon hosted over 1000 external projects, as stated in the e-mail I quoted above.  My team was excited about the traction the site was gaining.  We had many, many ideas for how to grow the site and make it an even more useful tool for software developers.  We had more work to do than time to do it, and it was neat to feel like what we were doing had an impact to Novell.</p>
<p>Even though Novell didn&#8217;t seem to care about it.</p>
<p>Oddly, in spite of what my team thought was a pretty obvious success, we could not get approval for funding to continue to promote the site.  The team was gradually reduced in size, again and again.  When people would leave, their vacancies would languish unfilled until that position was eventually lost.  The team was instructed to not develop the site but instead to work on undefined new work in other undefined areas, wasting many person-years of development effort.  The community could sense Novell&#8217;s lack of investment and they lost interest.  Novell Forge became a laughing stock.  It was used as evidence of what a company does when they &#8220;just don&#8217;t get&#8221; open source, when it was ironically used as evidence of Novell&#8217;s good faith not too long before.</p>
<p>Things finally came to the point where there was only one employee assigned to maintain the site, along with other unrelated duties (I, and the rest of the team, had by now been reassigned to different projects).  Novell Forge was completely unsupported by Novell&#8217;s IT group, leaving instead the support of the site to this one individual.  I recall an occasion where the site went down over the weekend and was out for a couple of days.  It was obvious that the site was in demand, because users made Novell aware of the outage quite quickly.  However, Novell was not willing to pay for 24/7 support for the site, so instead of being brought back online right away, the site was down for the entire weekend until that resource came in to work the next Monday.  My manager brought this to the attention of our team with the insistence that we address it.  He stated that from that point on, that one employee would be the primary off-hours maintenance person for the site, and I would be the backup.</p>
<p>I then asked if Novell was going to start reimbursing me for my cell phone bill.  He said no.  I asked if they were going to buy me an additional cell phone, pay that bill, and also pay me extra to carry that additional phone.  He said no.  He said they would just list my personal cell number in the emergency contact list, and would call it if there were an emergency.  I stated that in that case I maintained the right to not answer.  He stated that I would have to answer, that it was my assignment.  I claimed that Novell could not require me to answer my personal cell phone if I&#8217;m the one paying the bill.  I then reminded him that in Novell&#8217;s support organization, at least at that time, people that were expected to respond 24/7 had their cell phone bill paid by Novell, were paid an additional amount to be on call, and were paid an additional amount if they actually took a call and worked that call during off hours.  I said, &#8220;If the site is important to Novell, that is what Novell should do.  If the site is important, it should be important enough that Novell is willing to pay in order to maintain uptime and keep our customers satisfied.&#8221;</p>
<p>Novell was not willing to pay.</p>
<p>I shortly moved on to a different team within Novell, and the other guy left the company altogether.  I&#8217;m not sure who has been maintaining the site since then.</p>
<p>What Novell chooses to do with their money and their human resources is their business.  This isn&#8217;t meant as a criticism; I don&#8217;t claim to have the right experience to criticize their decision to strangle Novell Forge to death.  This is simply meant as a statement of fact, and the facts are pretty clear:</p>
<ul>
<li>You get what you pay for.</li>
<li>Novell did not pay for Novell Forge by giving due reward and recognition to those who truly brought this idea to the company.</li>
<li>Novell did not pay for Novell Forge by feeding its success with additional funding, promotion, and development.</li>
<li>Novell did not pay for Novell Forge by giving it the kind of support and maintenance that its customers expected.</li>
<li>The customers of Novell Forge were initially enthusiastic, but grew to sense the lack of commitment by the company and thus stopped participating.</li>
<li>Novell Forge died as a result.</li>
</ul>
<p>Novell Forge may be planned for decommission this December, but it died years ago.  And don&#8217;t think you can fool me, Novell.  Novell Forge did not die because of lack of interest by the user community.  Novell Forge died because you did not care about it.  Whether that was a good decision or not is not for me to decide, but please, Novell, at least be honest with your community.  We did not kill Novell Forge — you did.</p>
<p>UPDATE:  Dan Reese, a member of my team back then, <a href="http://www.danandcheryl.com/2009/10/how-to-neglect-a-product-to-death" onclick="pageTracker._trackPageview('/outgoing/www.danandcheryl.com/2009/10/how-to-neglect-a-product-to-death?referer=');">corroborated this in his blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2009/09/the-truth-about-novell-forge/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Discipline as a Prerequisite to Critical Code Contribution</title>
		<link>http://www.mvryan.org/2009/08/discipline-as-a-prerequisite-to-critical-code-contribution/</link>
		<comments>http://www.mvryan.org/2009/08/discipline-as-a-prerequisite-to-critical-code-contribution/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 23:56:38 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.mvryan.org/?p=625</guid>
		<description><![CDATA[Merriam-Webster&#8217;s dictionary defines discipline as:  &#8220;&#8230;&#8221; Nah.  Just kidding. Most software teams I&#8217;ve worked on have had some degree of discipline around what code changes go into the codebase.  This tends to take the form of: Any change should be associated with a defect or feature that is documented somewhere. Commit small, isolated, related changes, [...]]]></description>
			<content:encoded><![CDATA[<p>Merriam-Webster&#8217;s dictionary defines discipline as:  &#8220;&#8230;&#8221;</p>
<p>Nah.  Just kidding.</p>
<p>Most software teams I&#8217;ve worked on have had some degree of discipline around what code changes go into the codebase.  This tends to take the form of:</p>
<ul>
<li>Any change should be associated with a defect or feature that is documented somewhere.</li>
<li>Commit small, isolated, related changes, all associated with a single defect or feature, that can be easily rolled back.</li>
<li>Test changes before committing them; avoid breaking the build at all costs.</li>
</ul>
<p>That last one seems most obvious, but it is so critical that it has to be stated anyway.  Think of it this way:  If you work for me on an already functioning product, I would rather have you do NO WORK AT ALL than to break the build.</p>
<p>Of course, I would not pay you to do no work at all, either.  But breaking the build is taking the product in the opposite direction from where we want it to go.</p>
<p>Some time ago I worked on a software team* where a team member had a problem with this kind of discipline.  Details don&#8217;t matter too much, but the net effect was that whenever this person made a commit, the rest of the team would tense up and hold their breath as they integrated the updates.  This person had broken the build enough that his/her commits weren&#8217;t trusted by the rest of the team.  And even if the code would compile and run, you still didn&#8217;t trust the changes because this person would often sprinkle in little changes hither and yon that were not tied to a documented defect or feature, and often wouldn&#8217;t even call out the changes in the commit message.</p>
<p>(As a slight distraction here, I&#8217;ll point out how frustrating this is when the team member works in the same office as you, as cited above.  When that person works remotely, it becomes MUCH MUCH WORSE.)</p>
<p>I discussed this with my boss one day who wasn&#8217;t sure what to do.  We had a person on the team who was obviously very talented, but who was just not following good practice despite repeated requests to do so.  I offered up the suggestion that I&#8217;m restating here, which is basically the following:</p>
<p>Disciplined software engineering should be a prerequisite to having the rights to make critical code contributions.</p>
<p>In other words, no matter how talented a programmer is, they shouldn&#8217;t be allowed to contribute code to critical parts of the product if they do not exhibit sufficient discipline to be there.  So what are the &#8220;critical parts&#8221; and what is the &#8220;sufficient discipline&#8221;?  The critical parts are the parts that, if they are broken, the software doesn&#8217;t perform it&#8217;s primary function.  For a product like Firefox, the &#8220;Help&#8221; dialog is almost certainly not critical, but the HTML parsing engine definitely is.  The sufficient discipline is what I outlined above, but primarily centered around not breaking the build.</p>
<p>So to summarize, what it means is, someone who continually breaks the build should be disallowed to commit changes directly to the critical parts of the product until they earn that right back by adopting the discipline required.  Of course, if you are that free-spirited maverick, there&#8217;s a pretty strong incentive now to change your approach.  You may not be paid to be disciplined, but you are paid to deliver software, and if you can&#8217;t deliver software because your approach is irresponsible, this should encourage you to get on track.</p>
<p>Some teams choose to approach this by building elaborate systems that enforce proper behavior.  I could build a complex checkin proxy that automatically merges my changes with the latest changes in the repository, builds the product, and then runs the tests (there <strong><em>are </em></strong>tests, right?), and then only makes my commit once all of that passes acceptably.  That&#8217;s nice and all, I suppose.  But it seems like a lot of infrastructure, overhead, and process to impose upon the whole team, when to me it seems reasonable to expect that professional software engineers have enough discipline to do this on their own.</p>
<p>So if you aren&#8217;t doing this now, how do you go about changing?</p>
<p>Well, you&#8217;ve gotta have a suite of automated tests in order to do any of this &#8211; a &#8220;broken&#8221; build is defined as one that does not pass the automated tests.  If you do not have any automated tests, it is time for you to repent, my son.  I do not have time to go into this here, but you must confess your grievous sin and atone by writing an automated test and adding it to your build process.  Just one test is enough to get started &#8211; but it MUST be available as a part of the normal build process.  Then every time a build passes the test suite but is, in fact, broken, update your test suite.</p>
<p>Now that you have automated tests, insist that your developers do the following before they commit:</p>
<ul>
<li>Update.</li>
<li>Build.</li>
<li>Test.</li>
</ul>
<p>See?  It&#8217;s easy.  If the tests pass, they can commit.</p>
<p>Now it is time for you to be disciplined.  Committing code that does not pass the tests is a naughty thing to do.  Do not let your developers be naughty.  Take immediate action.  I think I&#8217;d take the following approach:</p>
<ul>
<li>First time is a meeting with the boss.  Go over the process.  Make sure they understand the process and what happened.  Personally, it seems like it would be tough to misunderstand, but hey, things happen.  Don&#8217;t be presumptuous or condescending.  This meeting alone might be enough to get most people in line.</li>
<li>If the problem continues, require peer review before checkin.</li>
<li>If the problem continues, another meeting.  This time, express that all of their current assignments have been reassigned to other members of the team, and they are being reassigned work that is not critical to the functionality of the project.  Let them know that you are concerned about the impact this will have on their performance, because they are expected to contribute at a higher level than what their new assignments will allow.  They have to demonstrate changed behavior and commitment to discipline in order to earn the right to do the important work again.</li>
<li>If the problem continues after that, it is probably performance-improvement-plan time.  Or mutual-agreement-that-they-find-a-different-employer time.</li>
</ul>
<h6>*(To my faithful readers who think they know what situation I&#8217;m speaking of, may I remind you that I&#8217;ve worked for seven different software companies and thirteen-ish different software teams over fourteen-plus years in this career, so be careful what assumptions you might make.  Thank you.)</h6>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2009/08/discipline-as-a-prerequisite-to-critical-code-contribution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Actions Speak Louder Than Code</title>
		<link>http://www.mvryan.org/2009/08/actions-speak-louder-than-code/</link>
		<comments>http://www.mvryan.org/2009/08/actions-speak-louder-than-code/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 00:19:35 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[Introspection]]></category>
		<category><![CDATA[Novell]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.mvryan.org/?p=620</guid>
		<description><![CDATA[It took me a while, but I finally settled into my routine and got to where I&#8217;m reading my RSS feeds most days again.  I was going through the posts of the past month or so, since the job change, and ran across this article on the &#8220;Making Good Software&#8221; blog about things that keep [...]]]></description>
			<content:encoded><![CDATA[<p>It took me a while, but I finally settled into my routine and got to where I&#8217;m reading my RSS feeds most days again.  I was going through the posts of the past month or so, since the job change, and ran across <a href="http://www.makinggoodsoftware.com/2009/07/07/5-top-non-technical-mistakes-made-by-programmers/" onclick="pageTracker._trackPageview('/outgoing/www.makinggoodsoftware.com/2009/07/07/5-top-non-technical-mistakes-made-by-programmers/?referer=');">this article</a> on the &#8220;Making Good Software&#8221; blog about things that keep someone from being a good software engineer, outside of (and often in spite of) an ability to engineer software.</p>
<p>I&#8217;ll summarize here.  It isn&#8217;t my intent to plagiarize; if you are remotely interested <a href="http://www.makinggoodsoftware.com/2009/07/07/5-top-non-technical-mistakes-made-by-programmers/" onclick="pageTracker._trackPageview('/outgoing/www.makinggoodsoftware.com/2009/07/07/5-top-non-technical-mistakes-made-by-programmers/?referer=');">go read the article</a>.  Here are the things:</p>
<ul>
<li>Lack of discipline</li>
<li>Big ego</li>
<li>Poor communication</li>
<li>Forgetting the customer</li>
<li>Lack of proper work prioritization</li>
</ul>
<p>I have known many of these people during my career.  Indeed, I was one of them.  I remember coming to Novell from IBM almost ten years ago.  I thought I was pretty hot stuff and I made sure my team knew it.  In fact, I actually said (this is embarrassing to admit) on more than one occasion, &#8220;There are people who know C++ better than I do, but I haven&#8217;t met any of them.&#8221;  My ego surely made me hard to work with.  It definitely was a cause of friction between myself and my management chain, and ended up being a (deserved) source of frustration and difficulty for me, until I recognized the problem and started working to address it.</p>
<p>I&#8217;m pretty ashamed of having behaved that way back then.  I hope I&#8217;m better than that today.  I guess recognizing the weakness is a good first step.  Fortunately for me, back then I was on a really great team with a lot of very capable, patient, and talented engineers that waited for me to learn from my mistakes and to grant them the mutual respect they deserved.  I consider myself pretty fortunate to have been able to learn from them what real software engineering is about.</p>
<p>Over my career I&#8217;ve had to work with people like this from time to time, software engineers that manifest one or more of these traits.  Sometimes these guys are pretty talented technically.  I&#8217;ve felt sorry for them as I&#8217;ve observed, realizing that these weaknesses are going to hold their career back until they recognize them and work to overcome them.  No amount of programming prowess will compensate for it.  And what&#8217;s even worse is, often because these people have the personality issues they have, you don&#8217;t get anywhere by trying to bring these weaknesses to their attention; they are often unreceptive to this type of feedback.  Like I said, you just have to wait until they recognize it themselves.</p>
<p>I can imagine being in a performance review with someone like this, having them explain to me all the technical awesome they did, and me replying, &#8220;Your poor soft skills are shouting so loudly that I cannot hear your technical awesomeness.&#8221;  Or, as I said in the title, actions speak louder than code.</p>
<p>I really believe this is true.  To write software professionally, of course you must have technical ability; however, this is a necessary but not sufficient condition for greatness.  The best software engineers I&#8217;ve had the fortune to work with in my career, past and present, not only had awesome technical ability but did not exhibit weakness in these areas.  And I&#8217;ll tell you what:  Those teams are wonderful teams to be a part of.  Those teams create strong. uplifting work environments and are able to deliver great products that meet customer demand.</p>
<p>Another way to say this is, in order to be a good software engineer, you must first be a good employee.</p>
<p>In fact, I&#8217;ll tell you how important I think this is.  The ability to mitigate or eliminate these defects from a software engineer&#8217;s persona is so important to me that, if I had my own company and were making the hiring decisions, I <em><strong>would not hire</strong></em> a candidate that I knew had these problems, no matter how incredible their technical ability.</p>
<p>A person with these weaknesses is really only suited to be set to the side to work on a special side R&amp;D project where interaction with other employees is limited, and they don&#8217;t have to interact with customers at all.  Problem is, those kind of projects are either a) strategically important to the long-term future of the company, or b) of little to no real value, or c) a combination, often high potential value but with a lot of inherent risk that causes the real value to be low.  If the project is strategically important or of high value, do you really want to reward the biggest jerk in your company by giving him the highest profile assignment, leaving your best engineers to maintain the legacy project?  Wouldn&#8217;t you want to have someone working on that high profile assignment that knows how to collaborate with others and assemble all the best ideas to solve the problem the best way, even if that solution isn&#8217;t his/her own?  Contrariwise, if the project is of little real value or has so much risk that it offsets the real value, why even do it at all?</p>
<p>Nope.  In my company, if I were ever to have one, I wouldn&#8217;t hire or keep an employee who had these weaknesses and was not committed to addressing them.  I&#8217;ve seen the difference, both in morale and productivity, between teams where they don&#8217;t have these problems and teams that do.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2009/08/actions-speak-louder-than-code/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

