<?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>bluegrayblog</title>
	<atom:link href="http://www.bluegraybox.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bluegraybox.com/blog</link>
	<description>so much to do, so little time...</description>
	<lastBuildDate>Wed, 04 Mar 2009 05:47:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Stocks</title>
		<link>http://www.bluegraybox.com/blog/2009/03/04/stocks/</link>
		<comments>http://www.bluegraybox.com/blog/2009/03/04/stocks/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 05:43:26 +0000</pubDate>
		<dc:creator>colin</dc:creator>
				<category><![CDATA[economics]]></category>

		<guid isPermaLink="false">http://www.bluegraybox.com/blog/?p=42</guid>
		<description><![CDATA[I've been thinking about the stock market lately.  Not in the sense of me making investments, but in terms of how it works, how it allocates money to commercial ventures.]]></description>
			<content:encoded><![CDATA[<p><i> Originally posted to <a href="http://colinmac.livejournal.com/39370.html">LiveJournal</a> on June 17, 2008.</i></p>
<p><i>A word of warning:  I suspect that I may be completely off-base here.  My understanding of this subject is a mix of antiquated theory and limited anecdote.  I&#8217;m throwing this out as a snapshot of my current understanding and perceptions.</i></p>
<p>I&#8217;ve been thinking about the stock market lately.  Not in the sense of me making investments, but in terms of how it works, how it allocates money to commercial ventures.  This is part of a general curiosity about what makes the world tick, but there&#8217;s also a specific self-interest in wanting to understand what motivates the companies I work for.  My background coming into this is from historical reading and personal experience.</p>
<p>But first, why do I care about the stock market?  Well, I don&#8217;t, really &#8211; not the day-to-day of it.  I&#8217;m not one of those guys who keeps a stock ticker running on his desktop.  But it&#8217;s important &#8211; these days, it&#8217;s responsible for a lot of what gets done in the world.  Most of our food, clothing, shelter, medicine, transportation, entertainment, etc. comes from publicly traded companies.   Also, the origins and theory of it are kinda cool.  Essentially, it&#8217;s a mechanism that allows a whole mess of strangers to work together on a venture that&#8217;s far to big for any one of them to tackle.  When you look at it this way, it&#8217;s a really elaborate form of human communication.  And humans, I find fascinating.  I&#8217;m really only interested in economics to the extent that it&#8217;s about people.  I&#8217;m most interested in the microeconomic end of the scale, because it&#8217;s really the psychology of decision making.  Why do people do what they do?  How much is internal motivation, and how much is external constraints?  Group behavior is also interesting, as in companies.  But as economics gets more macro, it gets away from people and eventually ends up in a bad place full of aerodynamics-grade math.</p>
<p>The other reason for caring about the stock market is that a lot of the companies I might work for are motivated by the stock market.  If they&#8217;re public companies, they end up making a lot of decisions based on how it will affect their stock.  If they&#8217;re private, they&#8217;re probably thinking about becoming public companies, or getting acquired by public companies, which influences them in similar ways.</p>
<p>My limited understanding of stocks comes from reading about 17th century trading ventures.  You want to build a ship, outfit it and crew it, and spend the better part of a year sailing it halfway round the world to bring back spices or silver or lumber or whatever.  These are huge up-front expenses and there&#8217;s a very real chance that the ship will be lost to storms or pirates.  The upside is that if all goes well, you&#8217;ll make a ton of money.  Almost nobody has the kind of money you need for that initial investment.  Even if they do, they can&#8217;t afford to lose it all.  But if you get a big group of people together, then each can bet a share they can afford to lose.  They buy shares, and they get a cut of the profits.  Now if you get a really big group of people together, you can fund a bunch of ships and play the averages.  Instead of feast or famine, you get a nice, predictable return on investment.  Instead of shares in a one-time venture, you have an ongoing business, and the shareholders get yearly dividends.  More importantly, without some mechanism like this, the happy consumers in your corner of the world will never know the joys of coffee, chocolate, or potatoes.</p>
<p>So stocks and dividends make sense.  You invest in a company.  You give them money up front, and they give you a piece of the action.  It even makes sense to trade stocks.  If you decide you&#8217;d rather have a chunk of money now, you sell your share to someone, and they get the dividend every year.  It makes sense that the value of that share could go up, if the company prospers and grows, and the yearly dividend goes up.  The important thing here is the company&#8217;s focus on profit.  Profit is a measure of how useful the company is, how well it provides a good or service that people are willing to pay for.</p>
<p>But now we get to the point where I think it starts to peel loose from reality.  If you think a company will be successful, and its shares will pay higher dividends in the future, it makes sense to buy them now and sell them for more later.  It&#8217;s logical, but it&#8217;s a critically different way of valuing the stock.  You&#8217;re buying shares based not on the dividend itself, on the profit from the venture, but on how much you expect to be able to resell the share for later.  It&#8217;s the shift from investment to speculation.  The value of the stock is no longer tied to the expected dividends, but to what people think they&#8217;ll be able to resell it for, what they think other people will think it&#8217;s worth, which is what <i>they</i> think they&#8217;ll be able to sell it for.  Profitability, useful products, business value, all of that may still influence the stock price, but they&#8217;re secondary factors.</p>
<p>We got a prime example of this in the dot-com boom, where there was really no business justification for the value of stocks.  There were companies with no product or customers.  They didn&#8217;t own anything; they hardly had any employees.  They didn&#8217;t do anything useful.  But they&#8217;d go public with a lot of buzz and their stock would skyrocket just because people thought everyone else wanted to buy it.  Once investors thought it had stopped going up, they scrambled to get out before it crashed, which ensured that it did.  Then the cycle would start over with the next cool idea &#8211; there was no end of those.</p>
<p>The key is that the investors don&#8217;t actually care about the success of the business, as long as they can get out in time.  They want the business to look promising, so others will want to invest and drive the price up, but it doesn&#8217;t have to deliver.  The rewards for investors became largely detached from value creation, from profit.  The fundamental promise of capitalism, that businesses are rewarded for doing useful stuff, is broken.</p>
<p>Something strange and bad also happens to the company&#8217;s motivations.  Remember that they&#8217;re always competing with other companies for investment money.  The things they should be focusing on &#8211; doing useful stuff &#8211; take a back seat to activities oriented around market perception.  A lot of that seems to do with growth, or the perception of.  If a company is doing useful stuff, making a profit, and plowing that back into the business (buying more ships), it will grow.  It will have more equipment and people than it did last year.  All well and good.  But this gets turned around, and growth becomes the measure of success.  So companies start doing stupid things in order to have good growth numbers.</p>
<p>Mostly, they go out and buy a bunch of smaller companies who have little to do with their core business.  They end up being less than the sum of their parts.  The guys at the little company are less motivated, because now they&#8217;re just working to make a bunch of strangers rich.  That&#8217;s even if you haven&#8217;t demoralized them by laying off a bunch of their staff.  Even if there are synergies to be leveraged (shudder), there are a lot of hurdles to overcome &#8211; cultural, political, technical, and organizational &#8211; and no guarantee that everyone will ever work effectively together.</p>
<p>So I don&#8217;t know what the answer is, or if I even understand the problem.  A lot of this is idle curiosity:  There&#8217;s a complex and important system that looks kinda broken, and I want to understand how it got that way.  It&#8217;s not like I run a company, or even manage investments.</p>
<p>But the practical side is that my understanding of this will inform decisions about where I work.  I&#8217;ve come to appreciate how much the business environment and priorities have a real impact on my day to day job.  I&#8217;ve worked at the little company that got bought.  I have friends who&#8217;ve worked for the big company doing the buying.  I have friends who have worked for the company that&#8217;s hiring lots of useless people to make the numbers look good, and others at the one that&#8217;s laying off lots of useful people to make the numbers look good.</p>
<p>If I can go into an interview and ask the right questions about their business, I&#8217;ll end up a lot happier.  I&#8217;m not job hunting now, but understanding this will also help me recognize if my company is going off the rails.  Maybe the answer is to find a company that&#8217;s not playing this game, where the owners aren&#8217;t just looking to cash out, where they&#8217;re really engaged in the business.  I&#8217;ve actually worked at a place like that years ago, a little boutique software shop.  It was really nice in a lot of ways.  I left it then because I had a lot to learn, but I might be happy going back to that kinda gig now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluegraybox.com/blog/2009/03/04/stocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Personal Information Management</title>
		<link>http://www.bluegraybox.com/blog/2008/07/24/personal-information-management/</link>
		<comments>http://www.bluegraybox.com/blog/2008/07/24/personal-information-management/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 06:30:42 +0000</pubDate>
		<dc:creator>colin</dc:creator>
				<category><![CDATA[reviews]]></category>

		<guid isPermaLink="false">http://www.bluegraybox.com/blog/?p=25</guid>
		<description><![CDATA[Originally posted to LiveJournal on July 4, 2008
Since getting my new MacBook, I&#8217;ve been trying to pull off the pure Mac play &#8211; sticking with the stock applications, choosing integration over individual features, trying to work with what I&#8217;m given.  It&#8217;s mostly worked out pretty well, but it&#8217;s taken a bit of tweaking.  [...]]]></description>
			<content:encoded><![CDATA[<p><em>Originally posted to <a title="Original LiveJournal post" href="http://colinmac.livejournal.com/39759.html">LiveJournal</a> on July 4, 2008</em></p>
<p>Since getting my new MacBook, I&#8217;ve been trying to pull off the pure Mac play &#8211; sticking with the stock applications, choosing integration over individual features, trying to work with what I&#8217;m given.  It&#8217;s mostly worked out pretty well, but it&#8217;s taken a bit of tweaking.  At this point, I&#8217;m working on a combined Mac/Google solution.</p>
<p>The ingredients are:  MacBook at home, Ubuntu Linux at work, iPod, cellphone, old Palm Vx.  Of the last three, I figured I should be able to at least ditch the Palm.  It&#8217;s a workhorse, but it&#8217;s old and doesn&#8217;t play well with the Mac.  I could go for the iPhone 3G in a few days.  That would kill off all three, plus my digital camera.  Tempting at $199, but the <del>$100</del> $60 a month service plan is nuts for the amount I&#8217;d use it.  It would take some sort of radical lifestyle or professional change to justify that.  I&#8217;m not above throwing money at problems, but that&#8217;s just profligate.</p>
<p>Getting all my info off the Palm was pretty straightforward.  Jpilot let me save all the calendar and to-do info as .ics files.  After a small but annoying bit of tweaking to DOS-format and rename them, they uploaded smoothly into iCal.  Similarly for the contacts and Address Book.  That was one of the big wins &#8211; having all of my addresses, phone numbers, email and IM in the same place.  Once that was all done, it all synched seamlessly to my iPod.  Nice.  The only snag (Apple developers, listen up!) is that the To Do list displays on the iPod in <em>alphabetical</em> order, not by priority.  Come on guys; what are you thinking?  Notes were also a bit awkward.  You have to mount the iPod as a drive and save them as files in a &#8220;Notes&#8221; folder.  No application integration there.  Still, it might make sense to start storing To Do lists as Notes.  If I work with them regularly, I may get used to them.  So that&#8217;s awkward, but not a killer.</p>
<p>The killer turned out to be that I can only sync the iPod to one machine.  The whole philosophy of the Palm is that you can go from home to work and keep your core info in sync.  Even on Linux, there was a decent client that I could run either at home or at work.  The iPod will really only talk to my home machine.  That&#8217;s kinda control-freakish.  It means that when I&#8217;m away from my MacBook, I would need to write down appointments on paper or something, and enter them in when I got back.  That&#8217;s annoying enough that it got me playing with Google Calendars.</p>
<p>Google Calendars are pretty slick.  You can have multiple calendars, set up different access constraints for them, and view them in a single display.  My girlfriend and I each have personal calendars that we share with each other, and then I have an &#8220;events&#8221; calendar that&#8217;s open to the public.  There&#8217;s probably also a middle ground for friends:  Stuff that isn&#8217;t really private, but I don&#8217;t care to have strangers knowing, like who I&#8217;m having dinner with tomorrow.</p>
<p>iCal lets you set up read-only calendar &#8220;subscriptions&#8221;.  So I re-exported my calendars, uploaded them to Google, deleted them from iCal, and slurped them back down as subscriptions.  From there, they synched to my iPod just like before.  I was also able to set up a subscription to our calendaring software at work (Zimbra).  That&#8217;s gravy.  Normally, I only have to worry about meetings and such when I&#8217;m in the office and have access to the calendar directly.  But it is nice to have them on the iPod with audible alarms and all.</p>
<p>While I was at it, I discovered that Google Calendars has a handy text messaging (SMS) interface.  You register your phone with them, and then you just send messages to &#8220;GVENT&#8221; (48368).  Sending &#8220;day&#8221; gets a response with today&#8217;s events.  &#8220;happy hour at 5pm tomorrow&#8221; creates a new event.  You can set up events (individually or by default) to send you a text message alert.  So if I&#8217;m going out without my iPod, I can have my cell phone remind me when it&#8217;s time to move on to the next round of fun.  I don&#8217;t actually see myself using that a lot, but it&#8217;s nice to have as backup.</p>
<p>I watched Merlin Mann&#8217;s &#8220;Inbox Zero&#8221; Google Tech Talk video the other weekend, and I&#8217;ve gotten all fired up on that.  I&#8217;d been letting stuff just pile up in my Gmail inbox because I don&#8217;t actually get much mail there.  Gmail doesn&#8217;t use the normal folder setup, but it has Labels, which let you do much the same thing, and a bit more besides.  So I got everything tagged and archived in short order.  Set up a few basic filters to handle list mail that I only need to check every day or two.  They&#8217;re not super sophisticated, but they do the trick.  An empty inbox is a nice feeling.</p>
<p>I also started playing with Google Docs.  I haven&#8217;t done spreadsheets or presentations yet, but the documents are nice.  They strike a good balance between features and simplicity.  I&#8217;m a little paranoid about storing all this stuff on a free &#8220;beta&#8221; service, so it was nice to find that you can easily export them as HTML (and relatively clean HTML at that).</p>
<p>So I think that may be the winning combination.  I could also look at the iPod Touch option, which would give me a way to enter data on the go.  Right now, the only problem situation on the horizon is DragonCon, where I have to track a whole lot of events, and I&#8217;m not planning on lugging my MacBook along.  It could be handy if they would publish an ics file with the complete schedule before we got down there.   Maybe a separate one for each programming track or room.  Hmm&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluegraybox.com/blog/2008/07/24/personal-information-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java Logging</title>
		<link>http://www.bluegraybox.com/blog/2008/07/24/java-logging/</link>
		<comments>http://www.bluegraybox.com/blog/2008/07/24/java-logging/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 06:06:31 +0000</pubDate>
		<dc:creator>colin</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.bluegraybox.com/blog/?p=23</guid>
		<description><![CDATA[
Spent half the day fighting with Tomcat 5.5, trying to get log messages out of my application.  I need to rant a bit here.


I&#8217;m deploying a vanilla webapp with its own log4j.xml in WEB-INF/classes.  Why does this not just work out of the box?  Because, hey, maybe you&#8217;d want to use some [...]]]></description>
			<content:encoded><![CDATA[<p>
Spent half the day fighting with Tomcat 5.5, trying to get log messages out of my application.  I need to rant a bit here.
</p>
<p>
I&#8217;m deploying a vanilla webapp with its own log4j.xml in WEB-INF/classes.  Why does this not just work out of the box?  Because, hey, maybe you&#8217;d want to use some other logging library.  Not that there are any out there that don&#8217;t suck, but y&#8217;know, maybe someday.  So we need to leave this all open-ended and configurable.
</p>
<p>
You see, once upon a time, we had Log4J.  It was good.  In fact, it was perfectly sufficient.  It solved the problem.  It did just about everything you could want.
</p>
<p>
Unfortunately, Sun was also developing their java.util.logging (JUL) around that time.  They went through the whole JSR community process, so they started earlier and finished later.  It sucked, but Sun owns Java in a very literal sense, so we were pretty much stuck with it.  Not in the sense of actually having to use it, thank god, but any poor bastard writing logging tools had to accommodate it.
</p>
<p>
So then we got Apache Commons Logging.  It&#8217;s a diplomatic facade that stands in front of either of them so your code can be agnostic about whether you&#8217;re using Log4J or JUL under the hood.  In practice, anyone who doesn&#8217;t have a paycheck from Sun <em>and</em> a gun to their head uses Log4J.  Java Developer&#8217;s Journal did a <a href="http://java.sys-con.com/read/48541_p.htm">comparison</a> of the two.  They tried to give a &#8220;fair and balanced&#8221; report, as in, &#8220;there are situations in which JUL might be the better choice.&#8221; If you read between the lines, those situations were essentially if you&#8217;re writing a toy application that would probably be fine with System.out.println().
</p>
<p>
There&#8217;s something of the paradox of choice here.  Trying to leave all your options open is ultimately less effective.  Your code has to be way more complex to support everything, and you almost always have some sort of mismatch that forces you into a limited-functionality common denominator.  It&#8217;s not worth it.  Pick something that works and go with it.
</p>
<p>
So today&#8217;s pain came about because rather than doing that, Tomcat 5.5 seems to have slapped yet another layer of indirection and indecision on things.  It seems that one of the ways in which java.util.logging sucks is that you can&#8217;t have multiple configurations within an application.  Why on earth would you want to do that?  Well, if your application is a web application server, it needs to run a bunch of java libraries as if they were standalone applications.  Kinda killer flaw there, huh?  But who can pass up the challenge of hacking around something that thoroughly broken?  And hey, it&#8217;ll make it standards-compliant.
</p>
<p>
So you end up with these gems from the <a href="http://tomcat.apache.org/tomcat-5.5-doc/logging.html">Tomcat 5.5 logging page</a>:</p>
<blockquote><p>the default Tomcat configuration will use java.util.logging.</p></blockquote>
<p>And a bit later on:</p>
<blockquote><p>The default implementation of java.util.logging provided in the JDK is too limited to be useful.</p></blockquote>
<p>How can you say that and still build in support for it?  Grow a spine, people!  How much simpler would this world be if you just followed that up with, &#8220;&#8230;so Tomcat uses Log4J exclusively.  Don&#8217;t like it?  Write your own app server.&#8221;
</p>
<p>
But no, what did they do?  They hacked together their own implementation of the java.util.logging API.  Apparently, it&#8217;s not &#8220;too limited to be useful,&#8221; but it &#8220;is not intended to be a fully-featured logging library.&#8221; Why bother?  You&#8217;ve had a fully-featured logging library for the <a href="http://logging.apache.org/log4j/1.2/manual.html">last 6 years</a>.  Why would you make the default logging configuration one which by your own admission is really not adequate?  Why not make Log4J the default?  If you really have to, then you can provide instructions on how to plug in your half-assed substitute.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluegraybox.com/blog/2008/07/24/java-logging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Harvard Business Review on the Innovative Enterprise</title>
		<link>http://www.bluegraybox.com/blog/2008/05/20/harvard-business-review-on-the-innovative-enterprise/</link>
		<comments>http://www.bluegraybox.com/blog/2008/05/20/harvard-business-review-on-the-innovative-enterprise/#comments</comments>
		<pubDate>Wed, 21 May 2008 03:06:51 +0000</pubDate>
		<dc:creator>colin</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[notes]]></category>

		<guid isPermaLink="false">http://www.bluegraybox.com/blog/?p=22</guid>
		<description><![CDATA[Notes and commentary on the book.
Apollo 13

Everybody brings up Apollo 13.  That seems to be the role model for a high-performance, results-oriented team working under high pressure.  Could we maybe pick something a little less dramatic?  Remember, this is the same crew of people who put the first man on the moon [...]]]></description>
			<content:encoded><![CDATA[<p><em>Notes and commentary on the book.</em></p>
<h3>Apollo 13</h3>
<p>
Everybody brings up Apollo 13.  That seems to be the role model for a high-performance, results-oriented team working under high pressure.  Could we maybe pick something a little less dramatic?  Remember, this is the same crew of people who put the first man on the moon less than a year earlier.  They were working at the height of American Big Science.  They were educated and trained as if the future of America, Democracy, and the world rested in their hands, which it arguably did.  At the very least, three lives, millions of dollars of equipment, and the scientific prestige of the nation hung in the balance.  I don&#8217;t care how cool your business plan is, or how much VC money you have, you&#8217;re not getting that kind of talent and motivation.
</p>
<h3>Cost of Creativity</h3>
<p>
There&#8217;s a rant in the &#8220;Creativity is not Enough&#8221; article about how organizations aren&#8217;t supposed to be creative.  They are anti-creativity, anti-chaos.  The whole point of an organization is to constrain and coordinate people&#8217;s actions to focus them on a task.  Creativity is mostly a distraction.
</p>
<p>
It&#8217;s not that this guy is an idiot and you should just ignore him; they wouldn&#8217;t have published him.  He was writing in a different time, witha different focus.  For large industrial firms, the goal is well understood, and the main effort is in execution.  He wouldn&#8217;t think of incremental process innovations as Creativity &#8211; that&#8217;s just doing things better/faster/cheaper.  In a service economy, most of the effort is in figuring out what to do.  Success is based more on adapting to the customers &#8211; understanding and meeting their needs.  And the folks in the trenches have more insight into that than the big boss back in HQ.
</p>
<p>
But the main point that he&#8217;s trying to make is still valid &#8211; that creativity and change have a cost.  The time you spend figuring out how to do things better is time not getting things done.  The time you spend on one innovation is time not spent on others.  The payoff has to justify that.  And trying to do a dozen new things at once probably means that none of them will be well done.
</p>
<h3>Summary</h3>
<p>
Now a quick summary of the key points of the book.  Since it&#8217;s a number of essays written by different people on the same topic, there&#8217;s a fair amount of overlap.  There&#8217;s also a wealth of supporting detail for these principles.
</p>
<p>
Pressure always hinders creativity.  Don&#8217;t confuse a surge of relief at dodging a bullet for the true rush of creativity.  If you have real and meaningful causes of pressure, make sure they&#8217;re communicated.  Meaningless or arbitrary pressure is even worse.
</p>
<p>
Focus helps.  Pressure plus task switching equals stress without productivity.  If you have a bunch of different things to do, sequence them; don&#8217;t multiplex.  Meetings with more than one or two others are fragmented, undirected.
</p>
<p>
To motivate people, pick an enemy and cast yourselves as the underdogs.  The enemy can be imaginary, or just a concept.
</p>
<p>
Innovation should be constant and pervasive.  Everyone should always be thinking of how to improve, how to do their work better.  Build a portfolio of ongoing experiments at different stages of maturity.  A portfolio spreads the risk.  You need both short-term/incremental and long-term/disruptive.  You need both blue-sky research and radical solutions to known problems.  You need to be willing both to take risks and to abandon unsuccessful projects.  Allow for failure; make it cheap.  Once an idea is proven, go all-out to make it happen.
</p>
<p>
Innovation needs to focus on competitive advantage.  It has to either benefit your customers, expand your market (meet the new needs of your not-yet-customers), or give you an edge over your competition.  Be alert for solutions in search of a problem, innovation for the sake of novelty.  Measure performance, cost, benefits, risks.  You compete on price, performance, or features.  You may need to segment your customers so you can focus on the specialized needs of one group.  Plan for your competitors&#8217; response to your innovation.
</p>
<p>
Build networks of innovation through trusted third parties &#8211; investors, executive search firms.
</p>
<p>
Collaborate with your customers.  Quick feedback is better than a polished release.  Get them involved before the big investment.  Get to know them better than they know themselves.  Learn what they do, not what they say they do.  Give them what they need, not what they ask for.  Show them how it will be used &#8211; mock it up, tell a story.
</p>
<p>
Try to make technology invisible to normal users.  Make failure transparent &#8211; give the user the information they need to solve the problem.  Build tools for power users, so they can scratch their own itches and help others.  People learn from experience and peers, not so much from formal training.
</p>
<p>
Each innovation needs four kinds of support:  An on-the-ground champion, an executive logistical supporter, creative idea generators, and practical implementors.
</p>
<p>
Get outsiders&#8217; perspectives.  If you want people to think outside the box, hire from outside the box.  Get fresh eyes on your business.  Varied backgrounds produce better problem-solving skills.  Focus on people who are bright, verbal, assertive, and creative.  You&#8217;ll need enough outsiders to form a critical mass.
</p>
<p>
Look at your company through the eyes of your competitors.  What are your limits, weaknesses and vulnerabilities?  Your competitors are doing your market research for you.  If they do better, it&#8217;s because they&#8217;re meeting a customer demand that you aren&#8217;t.  If they don&#8217;t, you know not to try that.
</p>
<p>
Learn from the potential customers that don&#8217;t choose you.  What are you failing to provide them?
</p>
<p>
Project groups focus on goals, not resources.  They minimize turf battles.  Align the organization&#8217;s goals with employees&#8217; intrinsic motivations.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluegraybox.com/blog/2008/05/20/harvard-business-review-on-the-innovative-enterprise/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Pin Factory</title>
		<link>http://www.bluegraybox.com/blog/2007/01/19/software-pin-factory/</link>
		<comments>http://www.bluegraybox.com/blog/2007/01/19/software-pin-factory/#comments</comments>
		<pubDate>Fri, 19 Jan 2007 06:05:06 +0000</pubDate>
		<dc:creator>colin</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.bluegraybox.com/blog/2007/01/19/software-pin-factory/</guid>
		<description><![CDATA[I started reading Adam Smith&#8217;s The Wealth of Nations.  For fun.  Because I&#8217;m a big dork. Right at the beginning, he talks about division of labor and pin factories.  Pins: little bits of wire with a point on on end and a knob on the other. The point is that a single [...]]]></description>
			<content:encoded><![CDATA[<p>I started reading Adam Smith&#8217;s <u>The Wealth of Nations</u>.  For fun.  Because I&#8217;m a big dork. Right at the beginning, he talks about division of labor and pin factories.  Pins: little bits of wire with a point on on end and a knob on the other. The point is that a single craftsman, without particular skill or tools, could only make a handful of pins a day. In a pin factory, the process is divided into more than a dozen stages, each simple and specific, with its own tools. This process is literally hundreds of times more productive. Businesses have been trying to pull off this trick ever since.</p>
<p>It worked fantastically well in the industrial age. As we moved into more of a service economy, the principle still applied, though not as strongly. In your typical office, you have specialization of skills:  Managers, admin assistants, sales, marketing, and so on. In a one person company, that one person can cover all those roles. Things will go smoother when they can divide the work up among several people, but not by a factor of hundreds.</p>
<p>As software development has become a bigger and bigger business, the obvious thing has been to try to apply the same assembly line model: analyze, subdivide, specialize. And so we come to Enterprise Software development, which pretty much follows the old waterfall model: Requirements, architecture, design, implementation, test, support. The business analysts don&#8217;t write code, the architect doesn&#8217;t write test plans, and the programmers don&#8217;t field support calls. The business analyst writes a requirements document, the architect writes an architecture document, and so on. Each stage does their piece and throws it over the wall to the next team. The principle is sound:  The more narrowly you divide up the skill set, the more specialized each group will be, and the better at their particular task. Push this far enough and eventually you can replace them with trained monkeys. Very clean, very elegant. Very efficient? Umm&#8230; no.</p>
<p>The problem is that there&#8217;s a significant difference between an Enterprise Software solution and a pin. A pin is a very simple thing. Everyone knows how it works and can tell at a glance if a given pin will do its job. Unless it&#8217;s bent, blunt or missing its head, it&#8217;s good to go. If an end user finds that one pin is poorly made, they just throw it away and get another.</p>
<p>An Enterprise Software system is not simple or obvious.  Aside from the fact that even the customer often doesn&#8217;t entirely understand how they want it to work until they start using it, the amount of information that has to be communicated from stage to stage is huge. Requirements documents can be hundreds of page. None of the workers has any innate sense of whether the information handed to them from the previous stage is complete or accurate. Every misunderstanding is multiplied down the chain. It&#8217;s like playing &#8220;telephone&#8221; with <u>War and Peace</u>.</p>
<p>The key here is that when you divide up the labor in a process, you also incur a communications cost between each stage. It&#8217;s a trade-off:  Each stage can be done more efficiently, but information about the work has to be passed between them. In the pin factory, the benefit of specialization is huge, and the communications transfer is tiny &#8211; as I said, the quality of a pin is obvious. In a software shop, the benefit of specialization may be significant, but the communications overhead is enormous. To come at it from a different angle, I&#8217;ve heard it said that a programmer is lucky if they get to spend 20% of their time actually writing code. The other 80% is communications overhead:  reading documents, sitting in meetings, writing documents. Add in the time you spend on rework due to miscommunication, and that 20% starts to sound generous. Here, the assembly line is actually less efficient.</p>
<p>So what do you do? The popularity of &#8220;Agile&#8221; tools and techniques is clearly a response to this, along with component or service oriented architectures. Break the system up into independent, well-defined pieces, and put them in front of the users as quickly as possible. The catch here is that you can&#8217;t use trained monkeys. You need people who can talk to the end users <em>and</em> write code, who can carry the product all the way through the process. Maybe they need help from experts like domain specialists or QA engineers, maybe they can divvy up some of the work to tech writers or programmers, but the key is to capture an end-to-end understanding of the product in as few heads as possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluegraybox.com/blog/2007/01/19/software-pin-factory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Under the Hood</title>
		<link>http://www.bluegraybox.com/blog/2005/04/22/under-the-hood/</link>
		<comments>http://www.bluegraybox.com/blog/2005/04/22/under-the-hood/#comments</comments>
		<pubDate>Fri, 22 Apr 2005 08:26:37 +0000</pubDate>
		<dc:creator>colin</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.bluegraybox.com/blog/?p=9</guid>
		<description><![CDATA[Imagine that you work in a large and somewhat old-fashioned office building.  If you want to send a message to your buddy Joe over at XYZ Corp, this is how it goes.  You write out your letter on a piece of paper and put a sticky note on it saying, &#8220;Please send to [...]]]></description>
			<content:encoded><![CDATA[<p>Imagine that you work in a large and somewhat old-fashioned office building.  If you want to send a message to your buddy Joe over at XYZ Corp, this is how it goes.  You write out your letter on a piece of paper and put a sticky note on it saying, &#8220;Please send to Joe Smith at XYZ Corp,&#8221; and hand it to your secretary.  She (I said this was an old-fashioned place) puts the letter in an envelope and puts Joe Smith&#8217;s name on it.  Then she looks up the address for XYZ Corp and writes that on the envelope, along with your return address.  Then she hands it off to the guys in the mail room.</p>
<p>What they do is interesting.  They look at the address for XYZ Corp and say, &#8220;Hmm&#8230; that&#8217;s out of town.  It needs to go to Central.&#8221; So they put your envelope inside another envelope and write &#8220;Central Post Office&#8221; on it.</p>
<p>When it gets to the central post office, they open the outer envelope and read the address on your letter.  They say, &#8220;Oh, this is going to Chicago,&#8221; or wherever.  So they put your envelope inside another envelope and write &#8220;Central Post Office, Chicago&#8221; on it.</p>
<p>Then it gets to the Central Post Office in Chicago.  They open up the envelope addressed to them and see the address for XYZ Corp.  So they put it in another envelope that just has the 9-digit zip code for the XYZ Corp building on it.</p>
<p>It shows up at XYZ Corp, and the guys in their mail room open up that envelope and see that it&#8217;s addressed to Joe Smith.  Somebody runs it upstairs to Joe&#8217;s secretary, and she opens the envelope and hands Joe your letter.  When Joe sends a reply back, it works the same way.</p>
<p>This is how the Internet works.</p>
<p>It&#8217;s actually more complicated &#8211; there are more middlemen &#8211; but that&#8217;s fundamentally how it all works.  It&#8217;s all these little letters (called &#8220;packets&#8221;) flying around a very, very fast postal system.  This is a pretty clear match for email, but it&#8217;s also how everything from web pages to streaming video to Voice Over IP works.</p>
<p>When you &#8220;go to&#8221; a web site, you&#8217;re really mailing out a request for a web page.  It&#8217;s like writing off to a mail-order catalog company.  There&#8217;s a standard form that defines how you ask for web pages.  You fill it out and send it in.  You&#8217;re sending this little form that says, &#8220;I want to see http://www.spuriouspundit.com/index.html&#8221;.  That request goes out through this metaphorical postal system to the spuriouspundit.com server, and some little toiling minion there xeroxes off another copy of the index.html document and mails it back to you.</p>
<p>Like I said, it&#8217;s more complicated than that.  How do you keep email and web pages and FTP sites all running on the same machine without tripping over each other?  Imagine your office building has a bunch of different departments in it, but they all share the same mail room.  Instead of a billing department and a sales department, you&#8217;ve got an email department and a web department and an FTP department.  The way it works is that they each have different post office box numbers.  Whenever a letter comes into your building, the mailroom guys just have to drop it in the right box.  One of the rules of this postal system is that the addresses on letters <em>have to</em> have a box number.  Furthermore, these box numbers are standardized, so that box 80 is the normal box number for the web department, box 25 is for email, etc.  So when you send off your web page request, you know that it&#8217;s a web page request, and wherever it&#8217;s going, it should be going to box 80.</p>
<p>This is also how you keep your responses straight.  Even if you&#8217;re the only guy at your company, you could be downloading a couple of mp3s in the background while you&#8217;re popping up new browser windows right and left.  If all that stuff is landing in the same inbox, you&#8217;ll never sort it out.  So each time you ask for a web page, you set up a new post office box just for its responses.  Your downloads go to boxes 5001 and 5002, and your web pages end up in 5003, 5004, and so on.</p>
<p>Here&#8217;s the next wrinkle.  Say you send off a request for some big, fat mp3 file that won&#8217;t all fit in one envelope.  So it gets broken up into a whole bunch of separate letters.  Now on top of that, like the real post office, stuff can get lost: Mail trucks get stolen; Some yutz in New Jersey cuts through a long-distance fiber-optic cable with a backhoe.  Even if nothing gets lost, there&#8217;s no guarantee that everything is going to show up in the order you sent it.</p>
<p>So what do you do?  First, you send a letter that effectively says, &#8220;Hey, I want to send a whole bunch of letters back and forth with you.  Here&#8217;s the address you should send all the replies to.&#8221; This is where your web browser says, &#8220;Connecting to &#8230;&#8221; in the status bar.  Once you&#8217;ve got an OK back, you say, &#8220;Send me that mp3 file.&#8221; You get a whole flood of letters back, numbered &#8220;1 of 23&#8243;, &#8220;2 of 23&#8243; and so on.  You count through them and realize that you&#8217;re missing number 17, so you send another message saying to re-send it.  When you finally have all the letters, you can put them in the right order, open them up, and glom the mp3 file together.</p>
<p>This little procedure we&#8217;re going through here is called a Protocol.  It&#8217;s not part of the postal system itself, but it&#8217;s a set of rules that people have agreed on for how to use the postal system.  In this case, it&#8217;s a way of communicating reliably through a system that isn&#8217;t reliable.  It&#8217;s a layer of communications on top of a layer of communications.  It&#8217;s very meta.</p>
<p>The internet is built up of layers of these protocols.  Like the envelopes inside envelopes, at each stage, you&#8217;re only concerned with the outermost layer.  You slip on or peel off your envelope, and everything else is just the stuff inside it, be it one layer or many.  IP, the Internet Protocol, is the postal system &#8211; simple, but not entirely reliable.  TCP, the Transmission Control Protocol, provides the reliable, ordered delivery on top of IP.  Email (SMTP), the web (HTTP), and others are actually another layer on top of TCP.  Essentially, they all define standard forms for different mail-order requests.</p>
<p>Again, it&#8217;s even more complicated than that.  But for now, lots and lots of little letters zipping back and forth across the world.  That&#8217;s the way to think of it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluegraybox.com/blog/2005/04/22/under-the-hood/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programming Mindset</title>
		<link>http://www.bluegraybox.com/blog/2005/04/17/programming-mindset/</link>
		<comments>http://www.bluegraybox.com/blog/2005/04/17/programming-mindset/#comments</comments>
		<pubDate>Mon, 18 Apr 2005 02:30:58 +0000</pubDate>
		<dc:creator>colin</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.bluegraybox.com/blog/?p=8</guid>
		<description><![CDATA[So, a friend of mine wants to learn Perl.  I figure I can teach her that &#8211; Perl is simple.  It couldn&#8217;t take more than a half-hour to get her up to speed on the basics.
Remember that Picture Hanging essay, about how you aren&#8217;t aware of how much you take for granted once [...]]]></description>
			<content:encoded><![CDATA[<p>So, a friend of mine wants to learn Perl.  I figure I can teach her that &#8211; Perl is simple.  It couldn&#8217;t take more than a half-hour to get her up to speed on the basics.</p>
<p>Remember that <a href="http://www.bluegraybox.com/blog/2004/12/02/picture-hanging/">Picture Hanging essay</a>, about how you aren&#8217;t aware of how much you take for granted once you&#8217;ve learned something?  Yeah.  I had no idea how much stuff you have to learn before you can even <em>start</em> programming.  You have to understand the environment &#8211; what&#8217;s going on in a computer &#8211; at a much deeper level than most users need.  (As the <a href="http://www.bluegraybox.com/blog/2004/11/20/the-language-of-computers/">tourist/business traveler/expatriate metaphor</a> rears its head again.)</p>
<p>First, there&#8217;s the whole command-line thing.  Fortunately, she had that down, &#8216;cuz I have no idea where I&#8217;d even start.  Your whole frame of reference has to shift to deal with that.  You have to explain about opening and reading from files &#8211; that a file is really a sequence of characters (don&#8217;t get started on bytes vs. characters).  And by the way, the end of a line is actually marked by a character, but you can&#8217;t see it.  Oh, and pipes:  They&#8217;re like files, but they don&#8217;t really live anywhere.  Ummm&#8230; yeah.</p>
<p>Then there&#8217;s the whole utility program thing: The idea that programs can be little tiny things, that they don&#8217;t have to have graphic interfaces &#8211; they &#8220;talk&#8221; to each other.</p>
<p>To most people, an application is something you <em>see</em> and interact with.  Even when you do deal with things like the filesystem, it&#8217;s mediated by a graphic interface &#8211; a metaphor.  It&#8217;s a good enough metaphor that people aren&#8217;t really aware that it <em>is</em> a metaphor, let alone what it&#8217;s a metaphor <em>for</em>.  To someone whose idea of programs is Word and Excel, the idea of &#8216;piping&#8217; the output from one program into another just doesn&#8217;t make any sense.</p>
<p>OK, so that&#8217;s all the environment.  Those are the building blocks you have to work with, the walls you live within.  Like I said, I got off fairly easy on most of that; I had someone who knew her way around the command line, and had even used grep a few times.  The next step was explaining what a program is.</p>
<p>A program is a sequence of instructions, kinda like a recipe.  But that doesn&#8217;t really capture the issue, because recipes are written for humans.  Humans are smart.  Computers are very, very stupid.  Fast, but stupid.</p>
<p>A computer is like some sort of high-speed, idiot-savant imp.  It works very quickly, and it can remember a huge amount of stuff, but it&#8217;s fundamentally dumb as a bucket of mud.  It can&#8217;t think for itself <em>at all</em>.  If you want it to do something, you have to explain in minute detail precisely how to do it.  You also have to think of all the things that could go wrong and how to deal with them.</p>
<p>Let&#8217;s imagine you&#8217;ve got this sort of imp, and you want it to go get your groceries.  It has to go to the store, find all the stuff on the list, pay for it, and come home.  Simple, right?  You&#8217;re underestimating how stupid your computer imp is.  If it knows how to walk, open doors, follow directions, and cross streets without getting run over, it&#8217;s only because someone else programmed that much for you.</p>
<p>Let&#8217;s assume you&#8217;ve got an imp programming language that gives you that much.  So you say, &#8220;Go to the grocery store, get everything on the list, pay for it, and come home.&#8221; First, it goes off and never comes back.  You go to the grocery store to see what&#8217;s up, and your imp is standing in the freezer section.  You told it to get pistachio ice cream.  They&#8217;re out.  The imp is waiting for them to restock.</p>
<p>So now you have to instruct it to try another store.  You have to give the imp a list of stores, in addition to the list of groceries.  If it gets to the last store without finding everything, it should just come home.</p>
<p>This seems too work, but it always takes your imp a really long time to get groceries.  You spend a while following him around (debugging) and discover that he&#8217;s going to every store every time, even if he already has everything.  Ooops, another fix to make.</p>
<p>You write a bunch more imp code, and send it off.  It still never comes home.  This time, it&#8217;s stuck at the cash register.  Spaghetti sauce went up 5 cents from last time, and now your imp doesn&#8217;t have enough money, and is stuck in the act of paying.  You can just give the imp some extra money, but you&#8217;ll always have to deal with the possibility that he won&#8217;t have enough.  Even though it seems less than ideal, you tell him to just come home if he doesn&#8217;t have enough money for everything.</p>
<p>Everything works fine for a while, but eventually, you realize that you haven&#8217;t had vanilla ice cream for ages.  It&#8217;s on the list.  You check the stores, and sure enough, they&#8217;ve got tons of it.  You double-check the list, and it&#8217;s on there as &#8220;Vannilla&#8221;.  Okay, maybe you could come up with a system for correcting your typos &#8211; one that won&#8217;t result in your imp buying a gun when the store is out of gum &#8211; but that&#8217;s a lot of work.  It&#8217;s easier for you to just type things right.  But if you ever sell (or even give) your imp code to other people, you know there will be an unending stream of complaints about how your stupid imp won&#8217;t buy vanilla ice cream.</p>
<p>Programming is all about developing this mindset &#8211; learning to think through all of this stuff in advance, figuring out all the ways your imp could screw up anything you tell it to do.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluegraybox.com/blog/2005/04/17/programming-mindset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Being Valuable</title>
		<link>http://www.bluegraybox.com/blog/2005/01/01/being-valuable/</link>
		<comments>http://www.bluegraybox.com/blog/2005/01/01/being-valuable/#comments</comments>
		<pubDate>Sat, 01 Jan 2005 18:44:02 +0000</pubDate>
		<dc:creator>colin</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.bluegraybox.com/blog/?p=7</guid>
		<description><![CDATA[So, I said earlier that tech people shouldn&#8217;t have to negotiate for their salaries.  Some of you took this the wrong way.  It is not validation for you just sitting in your cube, doing your job, and not paying any attention to the company around you.  That&#8217;s not good.  You should [...]]]></description>
			<content:encoded><![CDATA[<p>So, I said earlier that tech people shouldn&#8217;t have to negotiate for their salaries.  Some of you took this the wrong way.  It is not validation for you just sitting in your cube, doing your job, and not paying any attention to the company around you.  That&#8217;s not good.  You should <em>not</em> be completely ignorant of the business side of the house.</p>
<p>Let&#8217;s go through the basics here.  You are working at a job.  Your employers employ you.  They pay you a salary.  They pay you this salary because you do something that they consider useful.  &#8220;Useful&#8221; generally means &#8220;makes money for them&#8221;.  There may be a fairly indirect path to it, but what you do ultimately brings money in the door.  Your usefulness to them is measured by how much money that is.  Your <em>perceived</em> usefulness also depends on how visible the connection is between your work and money coming in.</p>
<p>This is why sales people make so much more than programmers.  Their work is directly tied to money coming in.  The sales guy can say, &#8220;I made X in sales this month.&#8221; You can argue that because you&#8217;re a really good programmer, it&#8217;s easy for the sales guys to sell your work.  You can argue that the clever work you did six months ago has resulted in a better product, and increased sales now.  But that&#8217;s very hand-wavey.  It&#8217;s hard to put dollar figures on that.</p>
<p>There are two things you can do to increase your perceived usefulness.  You can publicise your accomplishments, strengthening in the minds of your bosses the connection between your work and money coming in.  You can also focus your work on things that make (or save) the company money.  Both of these require understanding at least a bit about the business side of things.</p>
<p>Let&#8217;s say you&#8217;re a sysadmin (because if you aren&#8217;t, you probably know one), and you implemented an automated patch management system.  Well, that sure made your life easier, and gave you more time for your other work (&#8216;cuz there&#8217;s no end of <em>that</em>).  And it&#8217;s a much more scalable solution, to boot.  But how do you sell that to your boss?</p>
<p>Your boss thinks in terms of money.  It&#8217;s not that he&#8217;s inhumane or clueless, it&#8217;s just that <em>money is how you measure things</em>.  People and equipment are manifestations of money.  You are a person, and your time costs them money.  Therefore things that save you time save him money.  Now the hard part, the maddeningly imprecise part, is figuring out how much.</p>
<p>In this example, you&#8217;ll have to have some idea how much time you used to spend patching machines.  Guess &#8211; you can preface your report with, &#8220;According to our estimates&#8230;&#8221; Say you used to spend 3 hours a week patching machines, it took you a week (40 hours) to set up the system, and now you only have to spend 5 minutes a day on it.  So your system &#8220;cut patch management staffing requirements by 85%&#8221; and will &#8220;earn back its initial investment&#8221; after about 4 months.  Yes, that&#8217;s management-speak, but &#8220;automated a bunch of stuff&#8221; is meaningless to anyone outside of the tech staff.  You have to translate it &#8211; you have to explain the <em>business</em> impact of what you&#8217;re doing.</p>
<p>Note that this cuts both ways.  If you only used to spend half an hour a week patching boxes, and it took you a month to set up the system, you&#8217;ll have a hell of a time explaining <em>that</em>.  Ultimately, you need to learn to do the math up front.</p>
<p>So now what do you do with your new-found spare time?  Make yourself useful.  First, start learning the bigger picture.  Learn more about <em>why</em> you do what you do, and then why your group does what it does.  Then start thinking about how that might change, or how they <em>should</em> change.  Research new tools and techniques you could use &#8211; not just &#8220;cool&#8221; stuff, but things that will help you do your job better.  Learn to apply that business logic.</p>
<p>You can also learn more about the other parts of your company, how and why they do what they do.  First off, this is just interesting, like exploring a new world or some weird parallel universe.  But there may also be things you can do to help them out.  I&#8217;m not talking about doing their work for them; I&#8217;m talking about situations where you say, &#8220;Hey, we could write a tool to do that,&#8221; or &#8220;Don&#8217;t you have a database to track all that?&#8221; &#8211; situations where a little work by you could save them a lot of time and trouble.  You&#8217;d be amazed at how much tedious, repetitive crap other people put up with in their work &#8211; things that programmers would find some way to automate.</p>
<p>At one job, we had a graphic artist who got stuck doing a monthly update of a web page from a PDF file.  It was table after table of financial data.  She opened up the PDF file in one window, the HTML in another, and copied it field by field, by hand.  Click, drag, CTRL-C, click, CTRL-V.  For every single number in every table.  The first time she did it, it took her two full days.  She griped about it to me, and I said, &#8220;that&#8217;s insane.&#8221; I spent the next day hacking together a couple of utilities and a perl script, and came up with something that parsed the PDF file and generated the web pages.  It took about 5 seconds to run, and after that, she just had about 15 minutes of reviewing the pages and making special format tweaks.  I made a new best friend that day.</p>
<p>You can earn a lot of good karma that way.  It can also help break up the monotony of your regular work.  You pick little projects and do them incrementally, on your own terms.  You&#8217;ve got your &#8220;customer&#8221; right there, so you can try out all the XP and agile methodology stuff you&#8217;ve been reading about.  And it can give you an arena for learning new skills or technology.  A quick and simple web-based form entry application may be perfect for teaching yourself Ruby On Rails.  A report generation tool may be a good way to brush up on your Perl.</p>
<p>When you&#8217;re done, make sure everyone knows.  Tell your boss, and get him to talk to your new-found friends over in graphic design or accounting or wherever.  It&#8217;s one thing to toot your own horn, but it another when people outside your department are singing your praises.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluegraybox.com/blog/2005/01/01/being-valuable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Salary Negotiations, Addendum</title>
		<link>http://www.bluegraybox.com/blog/2005/01/01/salary-negotiations-addendum/</link>
		<comments>http://www.bluegraybox.com/blog/2005/01/01/salary-negotiations-addendum/#comments</comments>
		<pubDate>Sat, 01 Jan 2005 18:39:29 +0000</pubDate>
		<dc:creator>colin</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.bluegraybox.com/blog/?p=6</guid>
		<description><![CDATA[I just thought of another perverse incentive introduced by salary negotiations &#8211; they promote territoriality.
Negotiating 102:  Deal from a position of strength.  How can an employee get the upper hand?  By making themselves essential.  It&#8217;s not good for the company to have essential employees.  Employees get sick.  Employees go [...]]]></description>
			<content:encoded><![CDATA[<p>I just thought of another perverse incentive introduced by salary negotiations &#8211; they promote territoriality.</p>
<p>Negotiating 102:  Deal from a position of strength.  How can an employee get the upper hand?  By making themselves essential.  It&#8217;s not good for the company to have essential employees.  Employees get sick.  Employees go on vacation (or try to).  Employees get pregnant.  Employees have children, which is a whole world of conflicting priorities.  The company needs to be able to run smoothly while they&#8217;re away.</p>
<p>If employees have to bargain, they&#8217;ll strengthen their hand by hoarding information.  You become an essential employee by not sharing knowledge.  You become &#8220;the only person who knows &#8230;&#8221; In tech companies, it&#8217;s pretty easy to be the only person who understands a critical piece of code, or knows how to configure specific servers.  You generally have to work to <em>not</em> find yourself in that position.  But almost anyone can do it.  You do it by not writing things down.  You don&#8217;t document requirements, decisions, client requests, lessons learned, policies and procedures, or the reasons behind them.  You keep it all in your head.  You prevent it from becoming institutional knowledge.</p>
<p>The people who write everything down, the ones who work up procedures that everyone can follow, write code that everyone can read, and explain all the whys and wherefores of what they do?  These are the ones who really create value for the company in terms of institutional knowledge.  And if they&#8217;ve done a really good job of it, you can replace them at a moment&#8217;s notice.  Again, the ones who are the most valuable are the ones you can pay the least.  But which do you want to encourage?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluegraybox.com/blog/2005/01/01/salary-negotiations-addendum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bargaining</title>
		<link>http://www.bluegraybox.com/blog/2004/12/21/bargaining/</link>
		<comments>http://www.bluegraybox.com/blog/2004/12/21/bargaining/#comments</comments>
		<pubDate>Tue, 21 Dec 2004 17:23:45 +0000</pubDate>
		<dc:creator>colin</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.bluegraybox.com/blog/?p=5</guid>
		<description><![CDATA[Once upon a time, I got into a&#8230; heated discussion with an unspecified head honcho about salaries.  Not mine, mind you.  I didn&#8217;t think we were paying one of our guys what he was worth, what he could make in the marketplace.  Head honcho argued that his job was to keep costs, [...]]]></description>
			<content:encoded><![CDATA[<p>Once upon a time, I got into a&#8230; heated discussion with an unspecified head honcho about salaries.  Not mine, mind you.  I didn&#8217;t think we were paying one of our guys what he was worth, what he could make in the marketplace.  Head honcho argued that his job was to keep costs, including salaries, down.  If this guy wanted better money, he should bargain harder.  At the time, I <em>knew</em> that this was totally wrong-headed, but I couldn&#8217;t explain why on the spot.  So this argument has festered in the back of my head since then.</p>
<p>Employees, particularly skilled, creative workers (as we programmers flatter ourselves to be) should not have to negotiate against our managers for pay and benefits.</p>
<p>This isn&#8217;t some sort of hippie socialist crap &#8211; there are two real, clear business reasons for this.  The first is that it introduces a perverse incentive.  I&#8217;m speaking in economic terms &#8211; this has nothing to do with anyone&#8217;s sex life.  Not directly.  The second, which is sort of related, is that it&#8217;s shitty for morale.  If that sounds fuzzy-headed to you, you shouldn&#8217;t be managing anyone who&#8217;s smarter than a chimp and doing anything more complex than stamping out license plates.</p>
<p>The perverse incentive is simply that salary negotiations set up a system that rewards people for not caring about their jobs.  Negotiating 101:  The most important factor in <em>any</em> negotiation is the willingness to walk away.  You go to buy a house, and that&#8217;s the first thing anyone tells you.  Don&#8217;t fall in love with it.  If you aren&#8217;t willing to walk away from it, they can take you to the cleaners.</p>
<p>So the people who don&#8217;t really care about their jobs, the clock-watchers, the ones who can take it or leave it, who haven&#8217;t really bonded with their co-workers, who don&#8217;t really <em>believe</em> in the product or take pride in their work?  They&#8217;re the ones who can walk away.  The only thing keeping them there is the cash, so it&#8217;s going to cost you more.  The ones who aren&#8217;t like that, who are emotionally invested in the company?  You&#8217;re turning that against them.  You can&#8217;t imagine <em>that&#8217;s</em> going to make them happy when they find out.</p>
<p>Now, that part applies to everyone.  Technical staff in particular have another disadvantage: The personality traits that make them good at their jobs work against them at the negotiating table.  It&#8217;s not just through lack of people skills or anything &#8211; in order to be good technicians, they <em>have</em> to be bad at selling themselves.</p>
<p>Allow me a brief digression here.  Technical staff actually operate in a different universe from the business side of the house.  They&#8217;re &#8220;reality-based&#8221; in the disparaging way that our current administration uses the term.  Put simply, shit will either work or fail based on the properties of the observable universe.  No amount of personal motivation or focus-group work will let a spare, obsolete PC handle a million page hits a day.  There&#8217;s math there.  You can prove things.</p>
<p>On the business side of the house, to an alarming extent, believing things makes them true.  If the sales guys are confident and self-assured, if they really believe that they&#8217;re great salesmen and they have a great product, people will trust them and buy stuff from them.  If the managers believe that the current project is destined for success, and can keep everyone enthusiastic and focused, it&#8217;s much more likely to be successful.  By contrast, once people start believing it&#8217;s doomed, they don&#8217;t work as effectively, maybe they leave, and the project fails.  (This is that morale thing I mentioned earlier.) It&#8217;s all unsettlingly self-referential.</p>
<p>These traits which managers and sales people need to be effective are actually <em>bad</em> for technical folks.  Arrogance means you overlook things.  You miss subtleties that you&#8217;d catch if you were more cautious.  Two heads are always better than one; three or four better still.  (Okay, yes, there&#8217;s a limit to this.) But any technical solution will be better if you can put your ego aside and plunk your idea down in front of some other folks for a good, harsh critical review.  Being able to sell them on it by force of personality doesn&#8217;t make it better.  Being aware of your own failings and limitations makes it better.  Being able to let go of your proprietary defensiveness makes it better.  Learning to value the people who will poke holes in your designs &#8211; the ones who are &#8220;not team players&#8221; &#8211; makes it better.  A considerable amount of humility is called for here.</p>
<p>This all makes you pretty easy meat in a salary review.</p>
<p>So, point two:  Shitty for morale.  Yes, we live in a capitalist economy.  Companies compete against each other, often fiercely.  But within a company, you need to cooperate, to work together, and to trust each other.  Without that, a lot of energy gets wasted on internal politics, turf wars, and jockeying for position.</p>
<p>This is particularly acute for tech workers.  Technology is complex and huge.  People tend to be experts in a very narrow field.  Odds are that you&#8217;ll have to cross a lot of boundaries to get anything done.  Competition &#8211; feuding between fiefdoms &#8211; can slow everything to a crawl.</p>
<p>Also, it&#8217;s one thing if you&#8217;re managing guys who stamp out license plates.  You know how to stamp license plates, you can watch them doing it, and you can measure their work by the number of license plates they stamp out.  Tech guys, not so much.  Much of the time, management has no real idea what these guys are really doing.  Even if you could watch them all the time, it might not do you much good.  It can be hard or even impossible to distinguish between smart, hard-working guys and slackers.  Is the problem really hard, or are they just lazy?  Is the system running well because your admin set it up right and maintains it carefully, or is he just lucky so far?  Maybe he automated the crap out of everything, and now he just has to sit around, waiting for alarm bells to go off.  No way to know.  (A hint:  If you ever have to choose between the guy who puts in 12-hours days doing everything by hand, and the guy who has a bunch of programs doing his work for him, you want the programmer.  Brains scale better than brawn.)</p>
<p>So you have to trust these guys.  You&#8217;re best bet is to put a bunch of them together and hope they&#8217;ll keep an eye on each other.  That&#8217;s still a lot of trust, and why should they look out for you if you&#8217;re not looking out for them?  If they think you&#8217;re chiseling them on pay, they&#8217;re likely to chisel back.  It&#8217;s pretty easy to goof off and look like you&#8217;re working, particularly if you program for fun.  At best, they&#8217;re not going to put a whole lot of brain power into figuring the best way to do things.  The surest sign that this has happened is that the really good ones, the ones with a work ethic and motivation, will leave.  They have better things to do than put up with this bullshit.</p>
<p>Don&#8217;t go down that road.  Keep an eye on the market and pay your folks what they&#8217;re worth.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluegraybox.com/blog/2004/12/21/bargaining/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
