<?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"
	>

<channel>
	<title>Compound Thinking</title>
	<atom:link href="http://compoundthinking.com/blog/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://compoundthinking.com/blog</link>
	<description>New Perspectives on Information Technology</description>
	<pubDate>Fri, 16 May 2008 03:23:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Suburbia</title>
		<link>http://compoundthinking.com/blog/index.php/2008/05/14/suburbia/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/05/14/suburbia/#comments</comments>
		<pubDate>Wed, 14 May 2008 19:11:24 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[IT Management]]></category>

		<category><![CDATA[Misc]]></category>

		<category><![CDATA[System Administration]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=319</guid>
		<description><![CDATA[Prolonged adolecence is not a new problem, it&#8217;s just new to the masses: 
Children of kings and great magnates were the first to grow up out of touch with the world. Suburbia means half the population can live like kings&#8230;.

Paul Graham
You can&#8217;t shelter people from everything bad or scary, and expect them to live in [...]]]></description>
			<content:encoded><![CDATA[<p>Prolonged adolecence is not a new problem, it&#8217;s just new to the masses: </p>
<blockquote><p>Children of kings and great magnates were the first to grow up out of touch with the world. Suburbia means half the population can live like kings&#8230;.
</p></blockquote>
<p><a href="http://www.paulgraham.com/lies.html">Paul Graham</a></p>
<p>You can&#8217;t shelter people from everything bad or scary, and expect them to live in the real world.    </p>
<p><strong>Project managers, System Administrators, and parents should take note of this.</strong></p>
<p>People can only step up and take responsibility when they actually know what&#8217;s going on.   Seems to me that there are lesions for how we talk to people about project risks, how we handle e-mail spam problems, and how we think about IT services.   It&#8217;ll be a while before I figure out what exactly all of those lesions are&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/05/14/suburbia/feed/</wfw:commentRss>
		</item>
		<item>
		<title>What is data?</title>
		<link>http://compoundthinking.com/blog/index.php/2008/05/14/what-is-data/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/05/14/what-is-data/#comments</comments>
		<pubDate>Wed, 14 May 2008 00:35:54 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[IT Management]]></category>

		<category><![CDATA[Lean IT]]></category>

		<category><![CDATA[Philosophy]]></category>

		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=292</guid>
		<description><![CDATA[Ocean asks on his blog is data an asset?
Data is certainly not like many other assets, it doesn&#8217;t depreciate, you can copy it endlessly, and it&#8217;s next to impossible to imagine a commodities market for data.    Heck copying the data can either increase it&#8217;s value (think &#8220;The DaVinchi Code&#8221;) or decrease it [...]]]></description>
			<content:encoded><![CDATA[<p>Ocean asks on his blog <a href="http://blogs.concedere.net:8080/blog/discipline/web/?permalink=Is-Data-an-Asset.html">is data an asset</a>?</p>
<p>Data is certainly not like many other assets, it doesn&#8217;t depreciate, you can copy it endlessly, and it&#8217;s next to impossible to imagine a commodities market for data.    Heck copying the data can either increase it&#8217;s value (think &#8220;The DaVinchi Code&#8221;) or decrease it (think passwords).  People don&#8217;t pay for data as much as they pay for human attention.  You can use data to get attention or you can use attention to collate, assimilate, and otherwise transform raw data into useful information, but either way data needs people to understand and interpret it to become valuable.   </p>
<p>So at best: </p>
<p><code>data + human_understanding == value </code></p>
<p>Bruce Schenier takes it one step further, calling data <a href="http://www.schneier.com/blog/archives/2006/03/the_future_of_p.html">the pollution of the the information age</a>.</p>
<p><strong>Data Pollution<br />
</strong><br />
<a href='http://compoundthinking.com/blog/index.php/2008/05/14/what-is-data/smokestack/' rel='attachment wp-att-294' title='Smokestack'><img align='right'  width= 300 src='http://compoundthinking.com/blog/wp-content/uploads/2008/03/istock_000004991624xsmall.jpg' alt='Smokestack' /></a>Data sucks up space, time and human attention.   But more than that, data can be parsed, manipulated, and transformed to fit various agendas.   And in a world where data about all of us is &#8220;owned&#8221; by various large corporations, from Amazon, to Google, to Enron, it&#8217;s not always clear how that data will be used.  Besides which millions of credit card numbers are stolen from various companies who store our data &#8220;in good faith.&#8221;   Data costs money in terms of maintenance, in terms of storage, and in terms of liability.   Heck, I know people who work for companies who have an e-mail retention policy &#8212; which is really more of a mandatory e-mail deletion policy.   </p>
<p><strong>Polluted Data<br />
</strong><br />
And that assumes that all that data is verifiable true, and that&#8217;s definitely not the case.   I sold a car once and the new owner didn&#8217;t take it to the DMV to get it registered before his friend drove it without a license and got it impounded.   And that showed up on my credit report for years.   I have a friend who somehow ended up &#8220;deceased&#8221; even though she&#8217;s still very much alive and well.</p>
<p>All of this is to say that as software developers, IT Mangers, and companies in general need to think a lot more about data, and to invest in some better terms for the various different things we call data.   </p>
<p>We need to differentiate between raw data, information,  and knowledge.   We need to help our customers think about the life cycle of the data they want us to capture.  We need to educate people about the costs and benefits associated with keeping data, and ultimately we need to follow the mantra: </p>
<p><strong>Think before you store</strong></p>
<p>And if you&#8217;re concerned about privacy, and individual liberty, please take a few min and <a href="http://www.schneier.com/blog/archives/2006/03/the_future_of_p.html">read Bruce&#8217;s article.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/05/14/what-is-data/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Threads, Processes, Rails, TurboGears, and Scalability</title>
		<link>http://compoundthinking.com/blog/index.php/2008/05/14/threads-processes-rails-trubogears-and-scalability/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/05/14/threads-processes-rails-trubogears-and-scalability/#comments</comments>
		<pubDate>Wed, 14 May 2008 00:30:24 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=306</guid>
		<description><![CDATA[Threads may not be be best way, or the only way, to scale out your code.   Multi-process solutions seem more and more attractive to me.
Unfortunately multi-process and the JVM are currently two tastes that don&#8217;t taste great together.   You can do it, but it&#8217;s not the kind of thing you want [...]]]></description>
			<content:encoded><![CDATA[<p>Threads may not be be best way, or the only way, to scale out your code.   Multi-process solutions seem more and more attractive to me.</p>
<p>Unfortunately multi-process and the JVM are currently two tastes that don&#8217;t taste great together.   You can do it, but it&#8217;s not the kind of thing you want to do too much.   So, the Jruby guys had a problem &#8212; Rail&#8217;s scalability story is only multi-process (rails core is NOT thread safe), and Java&#8217;s not so good that that&#8230;. </p>
<p>Solution:  Running &#8220;multiple isolated execution environments&#8221; in a single java process.</p>
<p>I think that&#8217;s a neat hack.    The JRuby team is to be congratulated in making this work.  It lets Rails mix multi-process concurrency with multi-threaded concurrency, if only on the JVM.  But it&#8217;s likely to incur <em>some</em> memory bloat, so it&#8217;s probably not as good as it would be if Rails itself were to become threadsafe. </p>
<p><a href='http://compoundthinking.com/blog/wp-content/uploads/2007/01/istock_000000305278small.jpg'><img align="left" src="http://compoundthinking.com/blog/wp-content/uploads/2007/01/istock_000000305278small.jpg" alt="" title="Gears" width="300" height="199" class="alignright size-medium wp-image-191" /></a><br />
I&#8217;m not sure that the Jython folks have done anything like this.   And I&#8217;m not sure they should.   It&#8217;s a solution python folks don&#8217;t really have.  Django used to have some thread-safety issues, but those <a href="http://groups.google.com/group/django-users/msg/484af837e2e08cf9">have been worked out</a> on some level.  While the Django people aren&#8217;t promising anything about thread safety,  it seems that there are enough people using it in a multi-threaded environment to notice if anything&#8217;s not working right.   </p>
<p>At the same time, TurboGears has been threadsafe, from the beginning, as has Pylons, Zope, and many other python web dev tools.  The point is, you have good web-framework options, without resorting to multiple python environments in one JVM. </p>
<p><strong>Why you actually want multi-threaded execution&#8230;<br />
</strong></p>
<p>In TurboGears we&#8217;ve found that the combination of <em>both multi-threaded and multi-process</em> concurrency works significantly better than either one would alone. This allows us to use threads to maximize the throughput of one process up to the point where python&#8217;s interpreter lock becomes the bottleneck, and use multi-processing to scale beyond that point, and to provide additional system redundancy. </p>
<p>A multi threaded system is particularly important for people who use Windows, which makes multi-process computing much more memory intensive than it needs to be. As my Grandma always said Windows &#8220;can&#8217;t fork worth a damn.&#8221;  ;)  </p>
<p>But, given how hard multi-threaded computing can be to get right TurboGears and related projects work hard to keep our threads isolated and not manipulate <em>any</em> shared resources across threads.  So, really it&#8217;s kinda like shared-memory optimized micro-processes running inside larger OS level processes, and that makes multi-threaded applications a lot more reasonable to wrap your brain around.   Once you start down the path of lock managment the non-deterministic character of the system can quickly overwhelm your brain.  </p>
<p>As far as i can see, the same would be true for a Ruby web server in Ruby 1.9, where there is both OS level thread support and an interpreter lock. </p>
<p>I&#8217;m well aware of the fact that stackless, twisted, and Nginx have proved that there are other (asynchronous) methods that can easily outperform the multi-threaded+multi-process model throughput/concurrency per unit of server hardware.   The async model requires thinking about the problem space pretty differently, so it&#8217;s not a drop in replacement, but for some problems async is definitely <em>the</em> way to go.  </p>
<p>Anyway, hats off to the Jruby team, and here&#8217;s hoping that Rails itself becomes threadsafe at some point in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/05/14/threads-processes-rails-trubogears-and-scalability/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The motivational meeting&#8230;</title>
		<link>http://compoundthinking.com/blog/index.php/2008/05/12/the-motivational-meeting/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/05/12/the-motivational-meeting/#comments</comments>
		<pubDate>Mon, 12 May 2008 23:37:14 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[IT Management]]></category>

		<category><![CDATA[Lean IT]]></category>

		<category><![CDATA[Personal Productivity]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=318</guid>
		<description><![CDATA[Last week, I ranted a little bit about motivational meetings.   Today I&#8217;ll make the opposite case. 
Why have motivational meetings?
The right way to use motivational meetings is to reaffirm the purposes of the group, and help people to connect the dots between their individual efforts and the collective goals of the group, and [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, I <a href="http://compoundthinking.com/blog/index.php/2008/05/05/motivate-me-when-im-dead/">ranted a little bit</a> about motivational meetings.   Today I&#8217;ll make the opposite case. </p>
<p><strong>Why have motivational meetings?</strong></p>
<p>The right way to use motivational meetings is to reaffirm the purposes of the group, and help people to connect the dots between their individual efforts and the collective goals of the group, and to connect those goals with their own individual aspirations. </p>
<p>Basically, motivating people is easy: </p>
<ul>
<li>Give them work that is meaningful to them <strong>and</strong> to the organization</li>
<li>Treat them with <strong>respect</strong></li>
</ul>
<p>Treating people with respect includes paying them a fair wage, and not doing any of <a href="http://cio.com/article/print/123406">these things.</a>  </p>
<p>Among other things it also means not letting people who aren&#8217;t contributing to the common goals of the organization hold back the group by not doing their job.</p>
<p>Research has shown that one of the survey questions most highly correlated with motivation and performance is: </p>
<blockquote><p>Does my supervisor, or someone at work, seem to care about me as a person? </p></blockquote>
<p>Which is another way of saying does your boss respect you.   At the same time the single highest correlation for any question was: </p>
<blockquote><p>I get to do what I do best everyday at work.</p></blockquote>
<p>So, it&#8217;s really important to line people&#8217;s intrisic skills and internal long-term motivational drivers with the work you ask them to do.   </p>
<p>If you&#8217;re not doing those two things, motivational meetings are a loss.   If you are doing them you can use a meeting to remind people of how their deeper motivations are connected to what they are doing now. </p>
<p><strong>P.S.</strong>   My info on the top questions and their correlation to performance comes from Gallop research via the very interesting book <a href="http://www.amazon.com/gp/product/0684852861?ie=UTF8&#038;tag=pragmaticsyst-20">First Break All the Rules</a>, which is one of the best, and most evidence based, books on managing for exceptional performance I&#8217;ve read. </p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/05/12/the-motivational-meeting/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Motivate me when I&#8217;m dead&#8230;</title>
		<link>http://compoundthinking.com/blog/index.php/2008/05/05/motivate-me-when-im-dead/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/05/05/motivate-me-when-im-dead/#comments</comments>
		<pubDate>Mon, 05 May 2008 13:02:54 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[IT Management]]></category>

		<category><![CDATA[Personal Productivity]]></category>

		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=312</guid>
		<description><![CDATA[It think the very idea that motivation can be &#8220;imparted&#8221; in a morning meeting, or a half day seminar is kind of demeaning.
Motivation is a complex network of hopes, dreams, fears, needs, frustrations, incentives, and personal morality.   Motivating people is as much about connecting their individual aspirations to the goals of the organization [...]]]></description>
			<content:encoded><![CDATA[<p>It think the very idea that motivation can be &#8220;imparted&#8221; in a morning meeting, or a half day seminar is kind of demeaning.</p>
<p>Motivation is a complex network of hopes, dreams, fears, needs, frustrations, incentives, and personal morality.   Motivating people is as much about connecting their individual aspirations to the goals of the organization as anything.   If people can do what&#8217;s right, become who they want to be, <em>and</em> get paid to do it, that&#8217;s a far more powerful motivator than you can get from any meeting. </p>
<p>If those things are true, you can skip the motivational meeting. Everybody would  rather sit down and <em>get some work done.</em>   And if they aren&#8217;t true it&#8217;s not likely that <em>another meeting</em> will <em>help.  </em></p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/05/05/motivate-me-when-im-dead/feed/</wfw:commentRss>
		</item>
		<item>
		<title>For some (very small) values of done&#8230;</title>
		<link>http://compoundthinking.com/blog/index.php/2008/05/05/for-some-very-small-values-of-done/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/05/05/for-some-very-small-values-of-done/#comments</comments>
		<pubDate>Mon, 05 May 2008 12:56:32 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=307</guid>
		<description><![CDATA[What does done mean?   Somebody was telling me that Ruby 1.9 was &#8220;pretty much done&#8221; last night.   
What is Ruby 1.9? Do we have a spec? A test suite? Anything? If the answer is no, it&#8217;s not ready.
&#8211;Charels Nutter (in a comment here)

Partly that&#8217;s because Charels wants 1.9 as a reference [...]]]></description>
			<content:encoded><![CDATA[<p>What does done mean?   Somebody was telling me that Ruby 1.9 was &#8220;pretty much done&#8221; last night.   </p>
<blockquote><p>What is Ruby 1.9? Do we have a spec? A test suite? Anything? If the answer is no, it&#8217;s not ready.</p>
<p>&#8211;Charels Nutter (in a comment <a href="http://headius.blogspot.com/2008/04/promise-and-peril-for-alternative-ruby.html">here</a>)
</p></blockquote>
<p>Partly that&#8217;s because Charels wants 1.9 as a reference implementation &#8212; not just usable interpreter. </p>
<p>But, that highlights one of the reasons I like the way python is developed.   There is a test suite, there is a reasnably complete set of specifications.   So, from here, it looks like Python 3 is a lot &#8220;more done&#8221; than Ruby 1.9.   But that&#8217;s OK, they are both way more done that Perl 6. ;)   </p>
<p>I&#8217;m still looking forward to Ruby 1.9, and python 3.0.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/05/05/for-some-very-small-values-of-done/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Dangers of Paying Too Well</title>
		<link>http://compoundthinking.com/blog/index.php/2008/04/30/the-dangers-of-paying-too-well/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/04/30/the-dangers-of-paying-too-well/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 19:20:21 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[IT Management]]></category>

		<category><![CDATA[Personal Productivity]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[motivation]]></category>

		<category><![CDATA[productivity]]></category>

		<category><![CDATA[salary]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=310</guid>
		<description><![CDATA[Paying people too well can lead to all kinds of social and motivational problems.   Of course, you can also run out of money, but I&#8217;m not going to talk about that problem.  I&#8217;m talking about salaries that are maintainable but significantly above the market norm. 
Clark Ching recently blogged about something I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>Paying people too well can lead to all kinds of social and motivational problems.   Of course, you can also run out of money, but I&#8217;m not going to talk about that problem.  I&#8217;m talking about salaries that are maintainable but significantly above the market norm. </p>
<p><a href="http://www.clarkeching.com/">Clark Ching</a> recently <a href="http://www.clarkeching.com/2008/04/pay-rates.html">blogged</a> about something I&#8217;ve seen a couple of times.   He worked for a company that paid developers <em>very</em> well.   You&#8217;d think that would be good for morale, but it wasn&#8217;t.   Clark puts it this way:</p>
<blockquote><p>It was horrible.  Everyone who worked there agreed.</p></blockquote>
<p>People who hated their jobs stayed just because of the money.   This meant that everybody had to work with people who hated being there, and that meant that nobody wanted to be there ;) </p>
<p>Good pay reduces turnover, which is generally a good thing.  But some turnover is good turnover, so too much pay can actually hurt you.   Beyond that great pay keeps people around, but bad experiences with managers and coworkers can do more to kill morale than you can ever replace with money.</p>
<p>The long and short of it is that you can&#8217;t paper over morale problems with money, and you can&#8217;t fix them by <em>instilling a sense of urgency</em>.   Paul Graham suggests one solution &#8212; <a href="http://www.paulgraham.com/good.html">do something good</a>.   If you&#8217;re doing something good for the world people want to help you.   I&#8217;d extend that to say if you&#8217;re building something people can be proud of, you&#8217;re far more likely to create the kind of positive morale which lasts through hard times.  </p>
<p>Case in point, <a href="http://www.pacifict.com/Story/">this story</a> of a couple of apple employees worked on the graphing calculator that was shipped with the original Macintosh computer.  The interesting part is not that they were excited to work on the project, but that they kept working on it under-cover for months and months after they had been laid off. </p>
<p>Why would they do that? </p>
<blockquote><p>I had long been proud of the elegance and simplicity of our design&#8230;. I had designed it for all users, even those who know little about computers and hate math. </p>
<p>I wanted to make mathematics as easy and enjoyable as playing a game.</p></blockquote>
<p>They did because they were proud of what they&#8217;d done, and because they wanted to make mathematics more accessible.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/04/30/the-dangers-of-paying-too-well/feed/</wfw:commentRss>
		</item>
		<item>
		<title>So many revolutions, so little time.</title>
		<link>http://compoundthinking.com/blog/index.php/2008/04/30/so-many-revolutions-so-little-time/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/04/30/so-many-revolutions-so-little-time/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 16:28:22 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[IT Management]]></category>

		<category><![CDATA[Lean IT]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[SE Michigan Tech]]></category>

		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=305</guid>
		<description><![CDATA[Tim Bray is blogging about &#8220;inflection points&#8221; in the uptake of various technologies. 
Python get&#8217;s a very positive review: 
Today you’d be nuts not to look seriously at PHP, Python, and Ruby.
So, the rise of the so-called scripting languages is one of the inflection points, but it&#8217;s not the only one.  
He singles out [...]]]></description>
			<content:encoded><![CDATA[<p>Tim Bray is blogging <a href="http://www.tbray.org/ongoing/When/200x/2008/04/24/Inflection">about &#8220;inflection points&#8221;</a> in the uptake of various technologies. </p>
<p>Python get&#8217;s a very positive review: </p>
<blockquote><p>Today you’d be nuts not to look seriously at PHP, Python, and Ruby.</p></blockquote>
<p>So, the rise of the so-called scripting languages is one of the inflection points, but it&#8217;s not the only one.  </p>
<p>He singles out web-framework development as one place where there&#8217;s a lot of stuff happening, and a lot of new &#8220;rails-like&#8221; frameworks are cropping up all the time.   TurboGears will live or die in the context of a much larger web-development revolution, and we need to be prepared to make our way forward in the midst of that. </p>
<p>What comes after rails will not be a rails clone.  It will learn the right lessons from rails, avoid the pitfalls of rails, but it will also need to carve out something new and better than rails.    For RDBMS users, I think the key difference between TG and Rails is the power and flexibility of SQLAlchemy.   We need to &#8220;sell&#8221; this better.</p>
<p>There are a lot of other revolutions coming <a href="http://www.tbray.org/ongoing/When/200x/2008/04/24/Inflection">according to Tim</a>.   And I do think we&#8217;re looking at big changes in terms of everything from programming language choice, to web-development tools, to end-user desktops, and data persistence mechanisms.    We&#8217;re also just beginning to see what the world of high-end javascript and other &#8220;rich&#8221; internet applications is going to do to our view of end-user software.  </p>
<p>He doesn&#8217;t even mention the rise of EC2 and the Google App Engine as sea-changes in the way we buy computational resources, and I think that&#8217;s going to have a huge impact.  </p>
<p>In the end my prediction is that the way we develop applications will change more in the next 5 years than it did in the last 5, and it&#8217;s time to start getting our heads wrapped around these issues, or we&#8217;ll be left behind.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/04/30/so-many-revolutions-so-little-time/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Authentication in TG2</title>
		<link>http://compoundthinking.com/blog/index.php/2008/04/30/authentication-in-tg2/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/04/30/authentication-in-tg2/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 01:28:18 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=308</guid>
		<description><![CDATA[Chris McDonough just posted a pretty extensive writeup of something he and Florent hacked up recently.   Basically he helped us to put together some helpers that turn the repoze.who project into very similar authentication/authorization system to what we had in Turbogears 1.0.    
The cool thing about this is that we [...]]]></description>
			<content:encoded><![CDATA[<p>Chris McDonough just posted a pretty extensive <a href="http://blog.repoze.org/tgrepozewho.html">writeup</a> of something he and Florent hacked up recently.   Basically he helped us to put together some helpers that turn the repoze.who project into very similar authentication/authorization system to what we had in Turbogears 1.0.    </p>
<p>The cool thing about this is that we get to share the stuff that makes sense to share, and yet maintain a backwards compatable API.   We started a project (authority) which did the same thing, all on our own, but it&#8217;s much better to be able to share. ;)  The Authority project turned out to provide a lot of useful bits and pieces which have since found homes, and that process will likely continue.     </p>
<p>I&#8217;ve said before that I&#8217;m very impressed with the work that the Repoze folks have been doing, but I think this is a particularly good example of how it&#8217;s possible to collaborate in interesting new ways on top of a shared set of interfaces. </p>
<p>There&#8217;s a lot more to be done to make python web development work better, and I&#8217;m excited because we continue to move towards a world where innovating in one area doesn&#8217;t require building a whole new stack.  </p>
<p>I think there are big benefits for users of having a healthy and diverse ecosystem.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/04/30/authentication-in-tg2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Urgency vs. Motivation</title>
		<link>http://compoundthinking.com/blog/index.php/2008/04/30/urgency-vs-motivation/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/04/30/urgency-vs-motivation/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 00:52:43 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[IT Management]]></category>

		<category><![CDATA[Lean]]></category>

		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=301</guid>
		<description><![CDATA[If stress is a weed, urgency is the seed. 
&#8211;Jason Fried
Just the other day a project manager I know asked me how she can &#8220;instill a sense of urgency&#8221; in her team.  She wants to get more done, and get it done faster.   Increasing developer productivity is a laudable goal.   [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>If stress is a weed, urgency is the seed. </p></blockquote>
<p>&#8211;<a href="http://www.37signals.com/svn/posts/966-urgency-is-poisonous">Jason Fried</a></p>
<p>Just the other day a project manager I know asked me how she can &#8220;instill a sense of urgency&#8221; in her team.  She wants to get more done, and get it done faster.   Increasing developer productivity is a laudable goal.   And she is being asked by internal and external customers for more and more stuff. </p>
<p>But I think there&#8217;s something wrong with the question.   Urgency and &#8220;time pressure&#8221; are viewed as tools which can increase productivity, and it does work &#8212; in the short term.   </p>
<p>In the long term motivation, tools, skills, and processes along with things like good unit test coverage, and good &#8220;architecture&#8221; determine productivity.   Constant urgency, looming deadlines (particularly if they are artificial), and constant pressure actually hurt motivation, remove the slack required for building good tools, discourage process improvements, and create all kinds of technical debt.  This debt can be measured in terms of decreased test coverage, and &#8220;short-cut&#8221; coding techneques which undermine good architectural choices.</p>
<p>To put it more bluntly, urgency often produces short term results at the expense of long-term productivity.</p>
<p>If you push a little bit, as I did with my friend, you will usually find that the problem is not a lack of urgency, it&#8217;s a lack of motivation.   Motivating people is hard, and if they have been burned out by too much &#8220;urgency&#8221; it just gets harder. </p>
<p>I&#8217;ve done it too.  But now-days when I hear people pushing a &#8220;sense of urgency&#8221; I take it as an opportunity to start looking for deeper motivation issues.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/04/30/urgency-vs-motivation/feed/</wfw:commentRss>
		</item>
		<item>
		<title>On Layoffs, &#8220;Jelled Teams,&#8221; and my new job status</title>
		<link>http://compoundthinking.com/blog/index.php/2008/04/24/on-layoffs-jelled-teams-and-my-new-job-status/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/04/24/on-layoffs-jelled-teams-and-my-new-job-status/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 03:35:27 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[IT Management]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/?p=303</guid>
		<description><![CDATA[I don’t think it’s possible to over emphasize the importance of developing teams in software companies.  Software production is a group activity, and Brooks, Lister, Demarco and Weinberg all announced this same thing in various ways.  And they have been saying it for a long time.  The Mythical Man Month, The Peopleware [...]]]></description>
			<content:encoded><![CDATA[<p>I don’t think it’s possible to over emphasize the importance of developing teams in software companies.  Software production is a group activity, and Brooks, Lister, Demarco and Weinberg all announced this same thing in various ways.  And they have been saying it for a long time.  The Mythical Man Month, The Peopleware Papers, and The Psychology of Computer were all written over a quarter century ago. </p>
<p>But, in spite of 30 years, and thousands of pages written, <strong>people still don’t get it. </strong></p>
<p><a href="http://www.flickr.com/photos/jurvetson/"><image align="right" src="http://compoundthinking.com/blog/wp-content/uploads/2008/04/tower.jpg" /></a>Up until Monday I was working on a suite of fantastic applications for patient data and hospital management.   I was part of a small, but very talented team of developers doing amazing things.   Sure we had great tools like Python, Ext.js, TurboGears, etc.   But the fundamental reason we were so successful is that we had a great team that worked together really well.  </p>
<p><strong>How do you know you&#8217;ve got a great team?</strong></p>
<p>Chad Fowler’s very good (but very poorly titled) book <em>My Job Went to India: and all I got was this  book</em> has a chapter explaining how before he became a programmer he was a musician, and someone gave him this powerful advice: </p>
<blockquote><p>“Always try to be the worst player in the band.”   </p></blockquote>
<p>If you seek out people who are better than you, people who will push you &#8212; people who will make you grow just to keep up &#8212; you won’t have the option of stagnating.  <strong>You either get better, or you get out</strong>.   That’s how I felt on this team, and I know it&#8217;s how we all felt. </p>
<p>We knew each-other, knew our strengths and weaknesses, and we knew that together we could make things happen. We knew how to challenge one another, and if something went wrong, we would take action to fix it as a team.  </p>
<p><strong>Great teams are a huge asset</strong></p>
<p>I can honestly say that it was the best team of people I’ve ever worked with, and we were producing products with real revenue attached &#8212; in other words, we were making money, and lots of it.   </p>
<p>But as you can probably guess, after the acquisition came layoffs.  And the team was chopped in half.   Even though the team consisted of the best developers in the company, even though we were the most profitable part of the company, even though things were going amazingly well in our little corner of the world &#8212; we were still torn asunder by layoffs. </p>
<p>There may be some higher corporate logic behind this.   And perhaps at some level it was the right thing to do, though I doubt it.   I am convinced that Lister and Demarco are right is arguing (via peopleware) that a “jelled team” is an incredibly valuable resource for a company.  They get stuff done, and get it done quickly, because they already know how to work together well. We cared about one another, cared about our work, and cared about our company, we were motivated, skilled, and we got things done.   Loosing that is loosing a lot. </p>
<p><strong>I got lucky</strong></p>
<p>I was fortunate enough to be the newest member of the team, and was one of the folks that was let go.   Why fortunate?  Because I don’t have to sit around every day trying to get stuff done without the rest of the team, because I don’t have to be reminded every single day of what once was, but is no more. </p>
<p>And because I can take this opportunity to take a breath, look around and try to find a job which fits my long term goals.  I don’t know exactly what I want to do yet, but I do know that I want to do something good for python, something good for the world, and something where I get to work with great people. </p>
<p>So if you’re interested, feel free to drop me an e-mail (mark.mchristensen@gmail.com).   </p>
<p><strong>Please hire these guys &#8212; they are amazing!</strong></p>
<p>But more importantly there are some other great developers who are also looking for jobs.   I’ve seen them perform miracles in C#, Java, Python, and any number of other languages.   And I know them well enough to know that they would each be a huge asset to any company who’s looking to develop a great team. </p>
<p>One of the things you need the most in team development is someone who has a picture of how it could be better, of what’s possible, and the will to make it so.    In addition to their technical skills, I know that’s something they all have.   So, if you’re looking for one or more highly skilled software developers in the Atlanta area (or you’re willing to work with remote people) I can’t recommend them highly enough.   Please send me e-mail if you’re interested and I’ll pass the info on to the right people.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/04/24/on-layoffs-jelled-teams-and-my-new-job-status/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Summer of Code meets TurboGears</title>
		<link>http://compoundthinking.com/blog/index.php/2008/04/22/google-summer-of-code-meets-turbogears/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/04/22/google-summer-of-code-meets-turbogears/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 14:32:47 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[Python]]></category>

		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/index.php/2008/04/22/google-summer-of-code-meets-turbogears/</guid>
		<description><![CDATA[The TurboGears community is proud to welcome the participation of six Google Summer of Code participants.   These students have proposed very interesting projects, done a lot of research, and promise to make TurboGears and related projects better.
The goal of the Google Summer of Code project is to get students more involved in the [...]]]></description>
			<content:encoded><![CDATA[<p>The TurboGears community is proud to welcome the participation of six Google Summer of Code participants.   These students have proposed very interesting projects, done a lot of research, and promise to make TurboGears and related projects better.</p>
<p>The goal of the Google Summer of Code project is to get students more involved in the Open Source community, and I&#8217;m very excited about getting to know this group of students better, and seeing them show their stuff.  And of course I&#8217;m looking forward to all the things they promise to do, from building automated build and test systems, to creating a super-easy CRUD interface builder, and improving the performance of Genshi templates. </p>
<p>We also had a large number of student proposals which weren&#8217;t accepted for the GSoC project, some of which were very, very good.  The competition was very tough this year, and I am hopeful that some of those students will get involved in the TurboGears community anyway.</p>
<ul>
<li><strong>DBSprockets User Interface</strong> by Alberto Valverde González</li>
<li><strong>Documentation Production System</strong> by Bruno José de Moreaes Melo</li>
<li><strong>Genshi optimization &#038; XPath </strong>rewrite by Marcin Kurczych</li>
<li><strong>ToscaWidgets Library for OpenLayers and jQuery</strong> by Sanjiv Singh</li>
<li><strong>Improving TurboGears2 support on Jython</strong> by Ariane Paola Gomes</li>
<li><strong>TurboGears Quality Assurance Initiative</strong> by Steven Mohr</li>
</ul>
<p>As you can see the majority of these projects are about improving stuff that&#8217;s used in TurboGears, but are generally useful tools on their own.  We&#8217;re committed to principle of re-usable components, and the GSoC proposals we received have shown that there are a lot of other people commited to that same approach.  </p>
<p>I&#8217;m particularly interested in Stephen Mohr&#8217;s project, because I think having a reliable build and test system available so that we can easily determine if a change in one of our dependencies breaks things is critical in for a world of interconnected but independent components to be viable.   </p>
<p>But most of all I&#8217;m very excited that Google chose us to participate and that we had such a great set of proposals to choose from.  Thanks Google! and thanks everybody who wrote a proposal.</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/04/22/google-summer-of-code-meets-turbogears/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Command line meme</title>
		<link>http://compoundthinking.com/blog/index.php/2008/04/11/command-line-meme/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/04/11/command-line-meme/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 01:29:21 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/index.php/2008/04/11/command-line-meme/</guid>
		<description><![CDATA[I thought the top 10 command line meme was interesting, and it seems to be going around. 
For me nosetests seems to be by far the most run command on my system &#8212; I guess that means I&#8217;ve been infected the testing meme as well.

ramoth:mramm markramm$  history&#124;awk '{a[$2]++} END{for(i in a){printf &#8220;%5d\t%s\n&#8221;,a[i],i}}&#8217;&#124;sort -rn&#124;head
  [...]]]></description>
			<content:encoded><![CDATA[<p>I thought the top 10 command line meme was interesting, and it <a href="http://www.b-list.org/weblog/2008/apr/10/meme/">seems</a> <a href="http://bethesignal.org/blog/2008/04/10/shell-history-stats/">to</a><a href="http://agiletesting.blogspot.com/2008/04/meme-du-jour-shell-history.html"> be</a> <a href="http://lucumr.pocoo.org/cogitations/2008/04/10/shell-history/">going</a> <a href="http://planet.ubuntu.com/">around</a>. </p>
<p>For me nosetests seems to be <em>by far</em> the most run command on my system &#8212; I guess that means I&#8217;ve been infected the testing meme as well.</p>
<p><code><br />
ramoth:mramm markramm$  history|awk '{a[$2]++} END{for(i in a){printf &#8220;%5d\t%s\n&#8221;,a[i],i}}&#8217;|sort -rn|head</p>
<p>  169	nosetests<br />
   52	ls<br />
   48	cd<br />
   31	Python<br />
   27	sphinx-build<br />
   27	bzr<br />
   20	svn<br />
   17	hg<br />
   15	ping<br />
   11	easy_install<br />
</code></p>
<p>Also I&#8217;ve been working on TurboGears 2 docs, and I&#8217;m loving sphinx.   I also note that 6 of the items on the list are python, and 3 of them are version control systems that I use to manage python code.  I expected svn to come in a lot higher, but I reallized that  this list is has been influenced by the fact that i use QuickSilver to launch my text editor, and I have been using the svn plug-in a lot. </p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/04/11/command-line-meme/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Documentation tools</title>
		<link>http://compoundthinking.com/blog/index.php/2008/03/21/documentation-tools/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/03/21/documentation-tools/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 20:50:41 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/index.php/2008/03/21/documentation-tools/</guid>
		<description><![CDATA[Zed Shaw and I spent quite a bit of time talking about Documentation tools, since we are both working on books for Prentice Hall and we both want to have an open-source, reusable tool-chain that helps us get tested code into our documentation easily and effectively. 
Zed did a bunch of hacking and came up [...]]]></description>
			<content:encoded><![CDATA[<p>Zed Shaw and I spent quite a bit of time talking about Documentation tools, since we are both working on books for Prentice Hall and we both want to have an open-source, reusable tool-chain that helps us get tested code into our documentation easily and effectively. </p>
<p>Zed did a bunch of hacking and came up with this: </p>
<p><a href="http://www.zedshaw.com/projects/zapps/idiopidae.html">http://www.zedshaw.com/projects/zapps/idiopidae.html</a></p>
<p>Which has a very simple syntax for importing code into your plain-text documentation file.   It&#8217;s a simple parser that we use to parse the document source and the export files, create parse trees, and do a bit of simple processing.  One of the main advantages of this for book writers is that you can have the source code imported into your plain text documentation automatically, and repeatedly.  That means you can <strong>look at the code</strong> while you&#8217;re writing.  The final parsed output will allow you to convert the plain text document into your final output format (HTML, LaTeX, or whatever) and it will use pygments to code formating/colorization, and interlieve the code into the rendered document. </p>
<p>I also learned that the tool being used to do the new Python 2.6/3.0 documentation has been <a href="http://sphinx.pocco.org"> cleaned up and released </a>as a general purpose documentation tool.  It&#8217;s ReST (ReStructured Text) all the way, which seems to be a small price to pay for such attractive docs, and such a wide feature set.  It also relies on imports from specific line numbers &#8212; which is a lot more fragile than marking sections for import, but does not require you to be able to include delimiters in your source code files. </p>
<p>I haven&#8217;t had a chance to use it yet, but I&#8217;m very excited about it as a tool for the TurboGears online Documentation. </p>
<p>Hooray for better doc tools!</p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/03/21/documentation-tools/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Summer of Code</title>
		<link>http://compoundthinking.com/blog/index.php/2008/03/21/google-summer-of-code/</link>
		<comments>http://compoundthinking.com/blog/index.php/2008/03/21/google-summer-of-code/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 20:26:49 +0000</pubDate>
		<dc:creator>Mark Ramm</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://compoundthinking.com/blog/index.php/2008/03/21/google-summer-of-code/</guid>
		<description><![CDATA[First I want to congratulate Chris Arent and Chris Perkens who put a lot of work into the Google Summer of Code application for TurboGears.   The GSoC has been very good for python, and good for TurboGears in the past, and it&#8217;s really nice to take this to the next step and become [...]]]></description>
			<content:encoded><![CDATA[<p>First I want to congratulate Chris Arent and Chris Perkens who put a <strong>lot</strong> of work into the Google Summer of Code application for TurboGears.   The GSoC has been very good for python, and good for TurboGears in the past, and it&#8217;s really nice to take this to the next step and become a GSoC mentoring organization this year. </p>
<p>With that said, there is one project being sponsored by the TG team which I want to highlight because I really want to see get picked up by talented and motivated student.  The first would be the Genshi speedup stuff, this is going to require some python profiling and optimization skills (obviously with lots of mentor help) and will likely require some C coding as well.   But it will be a huge benift not just to TurboGears, but also to Trac, and all kinds of other Python projects which want to produce XML output for whatever reason.  Recent benchmarks have shown that TG2 is very fast when you don&#8217;t use genshi match templates &#8212; so making this stuff faster will have a big performance impact. </p>
<p>So if you&#8217;re a student, and interested in doing something challenging, interesting, and useful, please take a look at this, and the rest of our <a href="http://docs.turbogears.org/GSoC/Ideas2008">GSoC ideas</a> on the wiki &#8212; and feel free to suggest new things on the <a href="groups.google.com/group/turbogears">mailing list</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://compoundthinking.com/blog/index.php/2008/03/21/google-summer-of-code/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
