<?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>Karl Katzke &#187; webdev</title>
	<atom:link href="http://www.karlkatzke.com/categories/webdev/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.karlkatzke.com</link>
	<description>Geek of the Week</description>
	<lastBuildDate>Fri, 16 Dec 2011 19:54:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Why I Don&#8217;t Program Much Anymore</title>
		<link>http://www.karlkatzke.com/why-i-dont-program-much-anymore/</link>
		<comments>http://www.karlkatzke.com/why-i-dont-program-much-anymore/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 22:07:37 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[punditry]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=562</guid>
		<description><![CDATA[There&#8217;s been some great discussions about the state of programming. Confession: I&#8217;m much more of a sysadmin and architecture guy than anything else at this point. If it doesn&#8217;t have a quick configuration file or a GUI, at this point, I don&#8217;t do much with it because I don&#8217;t have the time to learn everything. [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s been some great discussions about the state of programming. Confession: I&#8217;m much more of a sysadmin and architecture guy than anything else at this point. If it doesn&#8217;t have a quick configuration file or a GUI, at this point, I don&#8217;t do much with it because I don&#8217;t have the time to learn everything. That&#8217;s even <i>after</i> focusing our core web environment on two technologies (php/python) and doing our best to reject anything that doesn&#8217;t fit into them. </p>
<p>Here&#8217;s the first one: <a href="http://reprog.wordpress.com/2010/03/03/whatever-happened-to-programming/">Whatever Happened to Programming @ The Reinvigorated Programmer</a>, and here&#8217;s it&#8217;s second part: <a href="http://reprog.wordpress.com/2010/03/04/whatever-happened-to-programming-redux-it-may-not-be-as-bad-as-all-that/">It May Not Be As Bad as All That</a>. </p>
<p>Pay special attention to the addendum in that second article. The money quote for me was in the big pull from a comment by jdeitrich on HackerNews: </p>
<blockquote><p>We talk about ‘flow’ quite a lot in software and I just have to wonder what’s happening to us all in that respect. Just like a conversation becomes stilted <b>if the speakers keep having to refer to their phrasebooks and dictionaries, I wonder how much longer it will be possible to retain any sort of flowful state when writing software.</b> Might the idea of mastery disappear forever under a constant torrent of new tools and technologies?</p></blockquote>
<p>It&#8217;s the death of the hobbyist programmer. There&#8217;s a new framework release in Symfony or Zend Framework every time I re-surface a week or two later. Even with 10 years experience with programming, unit tests, and a decent level of comfort from the experience with 0.x versions and up of these frameworks, I spend all the time I *should* be coding with my nose in the docs updating code that&#8217;s been deprecated or migrated. Just keeping up in one framework can be a full time job. </p>
<p>How can anything get done like this? </p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/why-i-dont-program-much-anymore/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Flux for OSX &#8211; Ding Dong, Dreamweaver&#8217;s Dead</title>
		<link>http://www.karlkatzke.com/flux-for-osx-ding-dong-dreamweavers-dead/</link>
		<comments>http://www.karlkatzke.com/flux-for-osx-ding-dong-dreamweavers-dead/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 05:01:42 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[WYSIWYG]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=560</guid>
		<description><![CDATA[I&#8217;m not interested in any of the apps in this current Mac Sale, but it did lead me to a page about Flux, which might be my next go-to for WYSIWYG HTML editing.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not interested in any of the apps in this current <a href="http://www.themacsale.com/">Mac Sale</a>, but it did lead me to a page about <a href="http://theescapers.com/flux/index.html">Flux</a>, which might be my next go-to for WYSIWYG HTML editing. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/flux-for-osx-ding-dong-dreamweavers-dead/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A few open-source/php articles&#8230;</title>
		<link>http://www.karlkatzke.com/a-few-open-sourcephp-articles/</link>
		<comments>http://www.karlkatzke.com/a-few-open-sourcephp-articles/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 17:45:17 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[gpl]]></category>
		<category><![CDATA[pecl]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=475</guid>
		<description><![CDATA[PHP Performance Tips &#8211; A few comments: xcache has a usable GUI to clear the bytecode cache and analyze hits. I haven&#8217;t used APC recently so I can&#8217;t speak to it. 20 Questions about the GPL Doctrine now in PECL &#8212; to speed up a performance-sensitive part, they&#8217;re moving some of Doctrine&#8217;s hydration code into [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://php100.wordpress.com/2009/07/13/php-performance/">PHP Performance Tips</a> &#8211; A few comments: xcache has a usable GUI to clear the bytecode cache and analyze hits. I haven&#8217;t used APC recently so I can&#8217;t speak to it. </li>
<li><a href="http://jacobian.org/writing/gpl-questions/">20 Questions about the GPL</a></li>
<li><a href="http://www.doctrine-project.org/documentation/user/1_1/en/doctrine-pecl-extension">Doctrine now in PECL &#8212; to speed up a performance-sensitive part, they&#8217;re moving some of Doctrine&#8217;s hydration code into an optional PECL extension. Recommended for anyone who&#8217;s using Doctrine in production on a high load site, but still in early alpha.</a>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/a-few-open-sourcephp-articles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Semantic Mediawiki for IT Documentation</title>
		<link>http://www.karlkatzke.com/semantic-mediawiki-for-it-documentation/</link>
		<comments>http://www.karlkatzke.com/semantic-mediawiki-for-it-documentation/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 01:25:16 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[mediawiki]]></category>
		<category><![CDATA[semantic]]></category>
		<category><![CDATA[wiki]]></category>
		<category><![CDATA[wikipedia]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=435</guid>
		<description><![CDATA[I&#8217;ve installed Semantic Mediawiki in our existing mediawiki instance at work to start tracking some of the data we need to retain for compliance and audit documentation purposes. As the list of things that we support has grown, the number of servers has grown, and our documentation overhead has grown. Most of this documentation is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve installed <a href="http://www.semantic-mediawiki.org/">Semantic Mediawiki</a> in our existing mediawiki instance at work to start tracking some of the data we need to retain for compliance and audit documentation purposes. </p>
<p>As the list of things that we support has grown, the number of servers has grown, and our documentation overhead has grown. Most of this documentation is in a relatively well-maintained mediawiki instance, but there are various parts of this solution that aren&#8217;t ideal. Namely that most of the documentation that we need to be able to generate for inspection on a moment&#8217;s notice is in <a href="http://www.semantic-mediawiki.org/wiki/Help:Introduction_to_Semantic_MediaWiki#Where_SMW_can_help">manually generated lists</a>, and is usually also pretty out of date. The need to document things like &#8216;who is served by, owns or knows the most about this application or server?&#8217; has increased at the same time as the categories for each of those have broadened and blurred into one another. A good example is that two years ago, we supported two home-grown web applications deployed on one server. This year, we support upwards of ten web applications in four or five different frameworks deployed on three servers with a separate database server&#8230; and that&#8217;s just stuff that&#8217;s home-grown, not things we run in Drupal or Plone or some other framework.</p>
<p>The out of date problem has been partially solved by a quick run through the database with an out-of-date template and some snarky emails to the responsible administrators, but a longer-term solution that made it easy to extract the data needed to be put into place. Looking through the available mediawiki plugins revealed the Semantic extension. </p>
<p>The general gist of the plugin is that the data you need to extract is already in the document and just needs to be tagged as such. In our environment, especially, there&#8217;s tons of places where lists need to be generated &#8212; list of servers supported by a person, list of servers running which operating system, etc. so on so forth. </p>
<p>The nice thing about the Semantic Mediawiki extension is that it&#8217;s freeform. We have some servers that are maintained by one person, some servers where it&#8217;s preferable to contact one person over another, and some servers that are collectively maintained and used by as large as six people. The nature of semantic tagging means that we can put as many [[maintainer::kkatzke]] tags in as we want to, and then place them in the document in ways that are readable to a human as well as a computer. </p>
<p>The inline queries make it possible to generate lots of interesting lists right off the bat. I put a template in everyone&#8217;s user page that used the {{PAGENAME}} variable as an element of the inline query, and we can suddenly see what servers a person is responsible just by going to their User: page. By using the Special:Ask page to rite a query of the pages tagged with Category:server and display ?maintainer, we can extract the current maintainer information for either a report or just to know who to bust out of bed at midnight.</p>
<p>Now all I need is a way to keep the admins to keep it up to date. Since this approach will be easier than the current manual list templates, that should be about half of it&#8230; for the rest, I&#8217;m looking into crontab-activated cattle prods that will activate one week before campus IT reports are due. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/semantic-mediawiki-for-it-documentation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programming Humor</title>
		<link>http://www.karlkatzke.com/programming-humor/</link>
		<comments>http://www.karlkatzke.com/programming-humor/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 20:09:35 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[acronyms]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[funnies]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[lol]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=388</guid>
		<description><![CDATA[Friday funnies: Secret Driven-Development Acronyms Proposed Subversion commands With both, see the comments for extra user-added LOLz. Seems people are already spooling up the laugh tracks for April Fools day.]]></description>
			<content:encoded><![CDATA[<p>Friday funnies: </p>
<p><a href="http://damieng.com/blog/2009/02/18/the-secret-driven-developmentdesign-acronyms">Secret Driven-Development Acronyms</a> </p>
<p><a href="http://phase.org/blog/30451_svn_20_in_lolalpha">Proposed Subversion commands</a></p>
<p>With both, see the comments for extra user-added LOLz. </p>
<p>Seems people are already spooling up the laugh tracks for April Fools day. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/programming-humor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Hidden Costs of a CMS</title>
		<link>http://www.karlkatzke.com/the-hidden-costs-of-a-cms/</link>
		<comments>http://www.karlkatzke.com/the-hidden-costs-of-a-cms/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 03:33:07 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Content Management System]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=368</guid>
		<description><![CDATA[The Five Hidden Costs Of Running A Content Management System (Via The Big Contrarian) I wish someone at work had read this before we implemented Zope/Plone. Sure, it&#8217;s nice to be able to train stakeholders in one system and have them maintain content on multiple sites, but the cost in systems support alone has outweighed [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://thinkvitamin.com/features/biz/the-5-hidden-costs-of-running-a-cms/">The Five Hidden Costs Of Running A Content Management System</a> <small>(Via <a href="http://www.bigcontrarian.com">The Big Contrarian</a>)</small></p>
<p>I wish someone at work had read this before we implemented Zope/Plone. Sure, it&#8217;s nice to be able to train stakeholders in one system and have them maintain content on multiple sites, but the cost in systems support alone has outweighed anything we may have gained. I think we&#8217;re seeing a resurgence in statically oriented content management systems, aka &#8220;Site Compilers,&#8221; e.g. <a href="http://whispercms.org/">WhisperCMS</a>, <a href="http://webby.rubyforge.org/">Webby</a>, <a href="http://nanoc.stoneship.org/">Nanoc</a>,  and <a href="http://www.apeth.com/RubyFrontierDocs/">RubyFrontier</a> &#8230; the latter three via <a href="http://daringfireball.net/linked/2009/01/31/webby">Daring Fireball</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/the-hidden-costs-of-a-cms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beating Captchas with Javascript</title>
		<link>http://www.karlkatzke.com/beating-captchas-with-javascript/</link>
		<comments>http://www.karlkatzke.com/beating-captchas-with-javascript/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 04:12:58 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=361</guid>
		<description><![CDATA[This is really cool, but also kinda scary. Beating a Captcha with Javascript, OCR, and a Neural Network. Before you &#8220;tl;dr&#8221;, there&#8217;s some very interesting coding techniques in there like the shortcut points that feed the neural network and the rudimentary edge detection.]]></description>
			<content:encoded><![CDATA[<p>This is really cool, but also kinda scary. <a href="http://ejohn.org/blog/ocr-and-neural-nets-in-javascript/">Beating a Captcha with Javascript, OCR, and a Neural Network</a>. Before you &#8220;tl;dr&#8221;, there&#8217;s some very interesting coding techniques in there like the shortcut points that feed the neural network and the rudimentary edge detection. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/beating-captchas-with-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kottke Redesign</title>
		<link>http://www.karlkatzke.com/kottke-redesign/</link>
		<comments>http://www.karlkatzke.com/kottke-redesign/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 01:57:57 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=355</guid>
		<description><![CDATA[I&#8217;ll go one step further than John Gruber and say that the Kottke.org redesign is like seeing an old friend with a new haircut &#8212; and hoping that it isn&#8217;t permanent and doesn&#8217;t signal a new trend.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll go one step further than <a href="http://daringfireball.net/linked/2009/01/17/kottke-redesigns">John Gruber</a> and say that <a href="http://www.kottke.org">the Kottke.org redesign</a> is like seeing an old friend with a new haircut &#8212; and hoping that it isn&#8217;t permanent and doesn&#8217;t signal a new trend.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/kottke-redesign/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reading List, 13Jan09</title>
		<link>http://www.karlkatzke.com/reading-list-13jan09/</link>
		<comments>http://www.karlkatzke.com/reading-list-13jan09/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 07:49:25 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[reading list]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[typography]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=353</guid>
		<description><![CDATA[The first reading list of 2009. Can you tell I&#8217;m working on a design or two? A few posts from Jason Santa Maria &#8211; A New Day, and the five month later Progress Report. Jason just broke things off after four and a half years with Happy Cog, but is still working on A List [...]]]></description>
			<content:encoded><![CDATA[<p>The first reading list of 2009. Can you tell I&#8217;m working on a design or two?</p>
<ul>
<li>A few posts from Jason Santa Maria &#8211; <a href="http://jasonsantamaria.com/articles/a-new-day/">A New Day</a>, and the five month later <a href="http://jasonsantamaria.com/articles/progress-report/">Progress Report</a>. Jason just broke things off after four and a half years with <a href="http://www.happycog.com/">Happy Cog</a>, but is still working on <a href="http://www.alistapart.com">A List Apart</a>.</li>
<li>In the same vein (and author), Jason&#8217;s article from 24 Magazine on <a href="http://24ways.org/2008/making-modular-layout-systems">Making Modular Layout Systems</a> for the web.</li>
<li>If you&#8217;re going to go through all that work, it makes sense to use the magic of <a href="http://www.mikeindustries.com/blog/sifr/">sIFR</a> to get the typography correct.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/reading-list-13jan09/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programming Process Constraints / &#8220;Artists Ship&#8221;</title>
		<link>http://www.karlkatzke.com/programming-process-constraints-artists-ship/</link>
		<comments>http://www.karlkatzke.com/programming-process-constraints-artists-ship/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 16:52:35 +0000</pubDate>
		<dc:creator>karlkatzke</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[punditry]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[release management]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.karlkatzke.com/?p=336</guid>
		<description><![CDATA[Paul Graham (Y Combinator, the first spam filter, and the first web-based app: Viaweb) is one of the smartest guys on the internet when it comes to startups. He makes some great points in his article about placing controls on processes in big companies and small startups. His thesis is that controls always cost more, [...]]]></description>
			<content:encoded><![CDATA[<p>Paul Graham (Y Combinator, the first spam filter, and the first web-based app: Viaweb) is one of the smartest guys on the internet when it comes to startups. He makes some great points in his article about <a href="http://www.paulgraham.com/artistsship.html">placing controls on processes in big companies and small startups</a>. His thesis is that controls always cost more, and the more controls there are, the more resources are taken up by them. </p>
<p>Given my limited experience (only eight years of working and one failed startup), typing up this disagreement feels a bit sophomoric. On the other hand, the entire focus of my career has been on setting up systems to manage constraints in a seamless fashion. In fact, I specifically work to establish controls in places where they can be automated and seen as <i>goals</i> instead of constraints. Attitude is important when you&#8217;re dealing with artists.</p>
<h2>Defining an &#8220;Artist&#8221;</h2>
<p>For the sake of this discussion, I&#8217;m going to define an artist as someone whose purpose for doing something is entirely in the heart, and whose compensation for performing at task is either entirely or primarily intangible. </p>
<p>Yes, you&#8217;ll find artists at all levels of corporations and organizations without regard for size or mission. You know you&#8217;re dealing with artists when you see them put that extra little bit in to make a project successful &#8212; and then they go home and continue to build out their knowledge and their body of work, and they&#8217;ll blog / tweet / contribute to open-source projects, and otherwise make their work indistinguishable from their life. </p>
<h2>Organizations of Artists</h2>
<p>Let&#8217;s take a step back and look at it from an entirely corporate point of view. </p>
<blockquote><p>As companies grow they invariably get more such checks, either in response to disasters they&#8217;ve suffered, or (probably more often) by hiring people from bigger companies who bring with them customs for protecting against new types of disasters.</p></blockquote>
<p>I would replace &#8220;grow&#8221; with &#8220;age&#8221; in the previous paragraph. Companies can stay the same size but integrate ideas from all over &#8212; conferences, employees that read blogs, new hires, training, regulation requirements &#8212; much the way that <a href="http://en.wikipedia.org/wiki/Horizontal_gene_transfer">bacteria transfer genes that increase antibiotic resistance</a> between neighboring bacteria. The best, most subtle ideas spread in a somewhat viral nature. </p>
<p>What do organizations made up of artists have in common? Generally, they create a lot of emotion. Look at Apple&#8217;s branding and marketing. It&#8217;s all emotional. </p>
<h2>Placing Controls in the Real World</h2>
<p>Case in point: I do volunteer work with the <a href="http://www.impactanimals.com">Impact Animal Foundation</a>. Volunteer work with a noble cause like a no-kill, 100% foster, limited intake adoption program can leave people feeling good, but it can be <i>extremely exhausting</i>. Burnout is a huge problem for both the artists in a corporation and volunteers in an emotionally involved charity. </p>
<p>To keep people from getting burnt out, the organization has some pretty <b>strict rules</b> on what kind of animals they&#8217;ll take in, how many they&#8217;ll take in, how many shifts a week someone can work &#8230; all common sense stuff. They also have a <b>process</b> for making sure a home is right for an animal that involves people trained in animal and humor behavior analysis, a home visit, &#8220;play dates&#8221; with any other animals in the house, and a <b>contract</b> that specifies that if the owner can&#8217;t take care of the animal, that it comes back to our rescue and not a kill shelter. </p>
<p>See those bolded words? Those are the controls. Just as Paul pointed out, all of these policies also come from a situation when either the organization, an individual volunteer, or an animal was hurt in some way. They may cause the organization to not adopt an animal even though there&#8217;s a willing and loving home available. On the other hand: They ensure that the organization will continue to be successful even with the emotionally charged environment that it has to operate in.</p>
<h2>Making Controls into Goals</h2>
<p>The primary goal of the animal rescue is always met:
<ol>
<li>volunteers go home feeling good at the end of the day</li>
<li>every single one of the animals that the organization adopts out are happy, safe, and loved for the rest of their lives</li>
</ol>
<p>Could we help more animals if we didn&#8217;t limit who is taken in, or were more free with adoption procedures? Yes. Could we always <b><i>know, beyond a shadow of a doubt</i></b> that the animals were in good homes? No. We&#8217;d lose fosters right and left because they&#8217;d hear horror stories of where their beloved temporary family members ended up. Could we always be sure that we weren&#8217;t stressing our network of fostering volunteers if we took in every animal that came our way? No, we&#8217;d lose fosters left and right as we placed unfair demands on them. The organization is based on it&#8217;s fosters. Without fosters, there is no animal rescue. The controls on animal intake and placement preserve the organization. </p>
<p>In the software world, a company&#8217;s based on it&#8217;s customers. Releasing broken code too quickly will send customers away. Releasing updates too late will allow competitors to get in the door &#8212; and will send customers away. Without customers, there is no company. Controls on software releases exist to preserve the organization. </p>
<p>If you&#8217;re doing it right, your artists won&#8217;t see constraints, they&#8217;ll see goals. The goal of the animal rescue is to take in the animals that are in great need (i.e. will be put down if they are not taken in) and are adoptable without an inordinate amount of work. The goal of the software company is to release software with no bugs on time. These goals serve controls, but end up serving the customer. The benchmark of a successful adoption placement is a completed application, a good home visit, and a happy union. The benchmark of a successful software release is passed tests and timely delivery. <i>These</i> are challenges suitable for artists. </p>
<p>Artists are competitive in ways that you wouldn&#8217;t otherwise suspect. Challenges add spice to what might otherwise become boring and routine. </p>
<h2>Keeping Goals from Slowing You Down</h2>
<blockquote><p>At big companies, software has to go through various approvals before it can be launched. And the cost of doing this can be enormous—in fact, discontinuous. I was talking recently to a group of three programmers whose startup had been acquired a few years before by a big company. When they&#8217;d been independent, they could release changes instantly. Now, they said, the absolute fastest they could get code released on the production servers was two weeks.</p>
<p>This didn&#8217;t merely make them less productive. It made them hate working for the acquirer.</p></blockquote>
<p>Yeah. Two weeks is ridiculous. If testing takes that long, well, <i>you&#8217;re doing it wrong</i>. No testing at all (immediate release) can also be a case of <i>you&#8217;re doing it wrong</i> &#8212; if you make a change that destroys production data, it could take you weeks to untangle &#8230; or worse, it could cause the permanent loss of that customer&#8217;s particular bit of data. Changes to production do need to be made carefully and tested. When you&#8217;re in &#8220;private beta&#8221; or &#8220;alpha&#8221; stages, customers may not expect to have their data be &#8216;permanent&#8217;&#8230; but once you reach a public beta release (especially if it&#8217;s backed by or been acquired by a large public company!), you&#8217;re held to a much higher standard.</p>
<p>Any place where procedures limit the artists from releasing needs to be evaluated. The only constraints on the artists should be completed and met BY the artists. Release testing is a good example. There was no release process when I arrived at my current job. Putting one in place was a headache until the (very passionate) developers finally &#8220;got it&#8221; that they could meet all the testing goals themselves, and they get the same sense of accomplishment by meeting them that they do from releasing an update in the first place. </p>
<p>Our developers can complete every stage in the production release process themselves except for the final release.  </p>
<ol>
<li>Write Code, commit to Subversion.</li>
<li>Write (and pass) Unit Tests.</li>
<li>Write and pass Selenium tests</li>
<li>Tag a release in Subversion.</li>
<li>Do a &#8220;mock rollout&#8221; and write out any special instructions, such as database structure changes, for sysadmins.</li>
</ol>
<p>When the release needs to go live, the Sysadmins quickly execute the above tasks. The data gets merged, the tests get run, and it gets rolled out. If the artists have done their job well, a change can take less than five minutes to go from development, through stage, and to live.</p>
<h2>Everyone Ships</h2>
<p>In our organization, it&#8217;s not the artists (developers) that ship &#8212; everyone works together to ship. The artists can clear it all the way through themselves. There&#8217;s a check/balance with the sysadmins. Ultimate responsibility lies with the managers. For a web development shop, we&#8217;re pretty large &#8212; six developers, two sysadmins, and about twenty to thirty projects or platforms.</p>
<p>I&#8217;m sure the same type of thing happens at Apple. The focus is on the artist, but everyone else is there to support the artist. In the case of the new MacBook design, a design engineer probably came up with the idea of using a monocoque frame. Did he submit the design to the purchasing department for them to find manufacturers? No, he probably either developed himself or went out and found a manufacturer capable of developing the processes they eventually used. Or he took it to his boss, who took it possibly up to Steve himself, and as a company Apple went and did it. Artists create, leaders lead, everyone ships. </p>
<p>Changes? They&#8217;re easy to sell, because they&#8217;re cheap. Processes that are streamlined so that they can be &#8220;pre-cleared&#8221; or &#8220;fast tracked&#8221; through? They&#8217;re efficient. Any restrictions? They make sense, and they&#8217;ve been taken to the leaders for clearance or confirmation. You can easily release in a few minutes even with controls in place. <b><big>Letting artists ship does not mean throwing out your controls.</big></b></p>
]]></content:encoded>
			<wfw:commentRss>http://www.karlkatzke.com/programming-process-constraints-artists-ship/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

