<?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>Reliable Systems &#187; Management</title>
	<atom:link href="http://reliable.esymmetrix.com/category/management/feed" rel="self" type="application/rss+xml" />
	<link>http://reliable.esymmetrix.com</link>
	<description>People, Processes, Hardware and Software that deliver results every time, every where.</description>
	<lastBuildDate>Thu, 16 Jul 2009 15:47:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Customers, Clients or Captive?</title>
		<link>http://reliable.esymmetrix.com/management/customers-clients-or-captive</link>
		<comments>http://reliable.esymmetrix.com/management/customers-clients-or-captive#comments</comments>
		<pubDate>Wed, 08 Jul 2009 19:42:18 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Accountability]]></category>
		<category><![CDATA[IT Management]]></category>
		<category><![CDATA[Mindset]]></category>
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://kendall.srellim.org/?p=21</guid>
		<description><![CDATA[Treating the relationship between internal departments as a Vendor/Customer has its appeal, but often leads to higher costs, strained relationships, and lost business opportunities.]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s very popular to consider the internal users of IT services as customers, acting like IT is an in-house service provider that the rest of the company purchases services from. The goal behind this is usually a reaction to a real or imagined belief that IT isn&#8217;t being responsive to the needs and budget of the rest of the company. The thinking goes that by having IT think of the rest of the company like an outside organization would of its customers, you can ensure better accountability and buy-in. Typically, organizations that go down this road also adopt a charge-back model where the IT organization charges back all or nearly all of its costs directly to the other divisions within the company that are consuming those services.</p>
<p>While there are several positive aspects that can come from this approach, there are several problems that can easily be created that stem from the problem that in most cases the rest of the company really isn&#8217;t a customer in the classical sense. Why? <strong>Because they lack a true buying choice</strong>. Furthermore, it generally isn&#8217;t in a company&#8217;s overall best interest for their divisions to really be customers of their own organization.</p>
<p>The original motivation for taking these approach is usually to address several issues:</p>
<ul>
<li><strong>Division buy-in on costs and priorities: </strong>If they are directly paying the bill, they are going to pay for what they want and not ask you for things they aren&#8217;t willing to pay for.</li>
<li><strong>Clear status and communication: </strong>The project reporting and communication model is simpler for everyone to get their head around if it&#8217;s based on something we&#8217;ve very familiar with. Each player can figure out their part.</li>
</ul>
<p>If you model the relationship between the IT organization and the rest of the company as a service provider &#8211; customer relationship, it&#8217;s easy to miss the transitive qualities of this: if they are your customer, you are their <em>vendor</em>. The word <strong>Vendor</strong> casts things in a different light: If you&#8217;re a sufficiently large organization you probably have a vendor management office whose sole job is to ensure you pay the least you can for things and fosters competition between vendors. Their job is largely to keep the company from getting too cozy with any one vendor. Are you ready to be just another vendor, like the one that bids annually to supply fresh coffee or office supplies?</p>
<h2>Benefits</h2>
<p>There are several good things that this model will tend to create.</p>
<ul>
<li><strong>Defensible functional requirements:</strong> Unreasonable requirements tend to be expensive relative to their value, and the division is more ready to discard them.</li>
<li><strong>Role Clarity:</strong> The Vendor/Customer relationship is relatively easy to understand, and each party can generally determine their role quickly. When there are disputes, there&#8217;s a natural framework for resolution.</li>
</ul>
<h2>Challenge One: Buying Choice</h2>
<p>It isn&#8217;t a long road from treating your internal divisions as customers until they look at you as a vendor. Once they consider you just another vendor (like the one they selected to provide fresh coffee to the office, or office supplies) they&#8217;ll want the advantages that come along with being a customer. For example, it&#8217;ll seem clear to them that it should be <em>optional</em> to use your services. This will feel very reasonable to upper management &#8211; it&#8217;s all part of the transitive nature of IT being accountable.  If IT can&#8217;t deliver a service at the best price, why not go to another provider?</p>
<p>This will likely start with something that will be difficult to argue against &#8211; such as a large software development project, perhaps in a language that your in-house talent isn&#8217;t familiar with.  Now, what about hosting for that product?  If you are charging back true costs for your data center to each division, you are unlikely competitively priced with what a division could get from Rackspace or Peer1.  It isn&#8217;t necessarily that those companies are more efficient than you are at doing the same thing (indeed, if they are then you should broker your own contract with them) but instead that it isn&#8217;t an apples-to-apples comparison.</p>
<h2>Challenge Two: Implied Requirements</h2>
<p>Whenever an internal IT organization takes on a project, there are a number of implied requirements that affect cost and schedule. Some of these requirements are from the IT organization itself (like technology choices) and others are from the corporation (role of internal staff and contractors, project management and reporting standards, etc.). When a division looks to bid out work to an external source, these requirements are usually unstated because in many cases they aren&#8217;t requirements the <em>division </em>has on the solution.</p>
<p>Another way to look at it is that any constraint on the solution that the customer (the division in this case) doesn&#8217;t have or care about is an implied requirement and likely a competitive disadvantage when comparing internal IT costs with external costs. In broad strokes, the difference in requirements is that a division&#8217;s requirements are almost entirely about outcomes, not methods: They care about the results their users get, not how they are achieved. IT organizations often focus their requirements on how results are achieved (using this technology, in that enterprise architecture, developed with our RUP-based approved process, tracked by our PMO) and they defer to the division the functional requirements.</p>
<h2>Local Maxima and Minima</h2>
<p>When each division or cost center is free to chose what services they are willing to pay for, they will converge over time on <strong>only those services that are good for them</strong>. Establishing shared services is generally challenging because each party will want to ensure that everyone is paying their fair share. This is often tricky to define &#8211; should it be proportioned by feature usage? Capacity?  This often creates a &#8220;first mover disadvantage&#8221; scenario where no part of the company wants to be the first to get a new service such as a database server or SharePoint Portal because they&#8217;ll be hit with the entire cost of it unless someone else comes along.</p>
<p>Secondarily, upgrading services gets challenging because no drop of rain believes it is responsible for the flood: If you want to upgrade to Exchange 2007 from Exchange 2003, one division can easily say that they don&#8217;t believe it&#8217;s necessary and thus decline the costs. If you need a larger server to house SharePoint, who is going to get the bill? A game of chicken often gets created where multiple parties all want a service, but no one wants to be the first to ask and risk subsidizing everyone else.</p>
<p>With each cost center pushing to only pay for those things it perceives sufficient direct value to take on, they are making decisions only based on what gives them the best cost or maximum value. This isn&#8217;t likely to align with providing the overall lowest costs for the company. For example, three separate departments could easily decide to implement their own direct attach storage for disk because none of them feels they can justify the cost of a SAN, however together it would be less expensive to construct and maintain a central SAN environment with SAN backup.</p>
<p>There are some straightforward exceptions to this problem where shared services are generally easy to get consensus on and cost out. Typically these are raw infrastructure services such as email or file storage where there are clear units of measure that allow for proportional billing (mailboxes and gigabytes used, for example).</p>
<h2>An Alternative: Clients, not Customers</h2>
<p>If the Customer/Vendor model isn&#8217;t the overall best approach for a company, what alternative model can provide the benefits without the unintended consequences? How about a term that&#8217;s between User (which has accumulated a substantially negative connotation) and Customer &#8211; <strong>Client</strong>.  A quick trip to the dictionary shows that a client is <em>any person or group that is the party for which professional services are rendered</em>, which fits reasonably enough.</p>
<p>As your clients, they still are entitled to a great deal, just like customers would be.  As the client of the project, they:</p>
<ul>
<li><strong>Determine success &amp; failure: </strong>Your project isn&#8217;t successful just because it follows the corporate processes or works on the corporate approved IT infrastructure; those are the constraints on how you solve problems that are immaterial to your client.  Success is determined by whether you achieved the goals the client created.  That may mean you need to do some extra communication to make sure your client knows that their goals were met, even if that&#8217;s not in the standard process.</li>
<li><strong>Decide if it&#8217;s worth the price: </strong>In the end, the problem may just not be worth solving.  Many things can be done but the cost in time and distraction exceeds the value.</li>
</ul>
<p>Unlike a customer, since you&#8217;re part of the same organization you can share with the client your insight into the costs and risks of the project in a way that no vendor ever could.  In the end this creates the best partnership that delivers long lasting results.</p>
<h2>A final note</h2>
<p>If you don&#8217;t treat your users as clients, odds are very good they will eventually get themselves a buying choice.<strong> When they do, they won&#8217;t chose you</strong>. Don&#8217;t let it come to that, it isn&#8217;t ultimately in their interest, your interest, or your company&#8217;s interest.</p>
]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/management/customers-clients-or-captive/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Watch the Gazelles Turn</title>
		<link>http://reliable.esymmetrix.com/infrastructure/watch-the-gazelles-turn</link>
		<comments>http://reliable.esymmetrix.com/infrastructure/watch-the-gazelles-turn#comments</comments>
		<pubDate>Sat, 13 Jun 2009 02:31:38 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
				<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[IT Management]]></category>
		<category><![CDATA[Technology Selection]]></category>

		<guid isPermaLink="false">http://reliable.esymmetrix.com/?p=224</guid>
		<description><![CDATA[It is very tempting to be one of the herd of gazelles in technology.  Every time there&#8217;s  a sense of a shift in the wind, everyone starts to run in a new direction.  For the past year I&#8217;ve been reading about how it&#8217;s all going to be laptop computers from here on out.  In fact, [...]]]></description>
			<content:encoded><![CDATA[<p>It is very tempting to be one of the herd of gazelles in technology.  Every time there&#8217;s  a sense of a shift in the wind, everyone starts to run in a new direction.  For the past year I&#8217;ve been reading about how it&#8217;s all going to be laptop computers from here on out.  In fact, not even full fledged laptops, but netbooks &#8211; computers with small screens and small keyboard who&#8217;s main distinguishing characteristic is that they&#8217;re less of a computer than anything else around.</p>
<p>If all this sounds a little off kilter from reality, perhaps a few hard numbers would help:</p>
<p>Quoting<a title="Computer World:  Do business desktop PC's have a future?" href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;taxonomyName=windows_and_linux_pcs&amp;articleId=9134320&amp;taxonomyId=64&amp;intsrc=kc_top" target="_blank"> Computer World</a>, who asked &#8220;Do Business Desktop PCs have a future?&#8221;:</p>
<blockquote><p>While desktop PCs account for the bulk of personal computers sold to  enterprises, the gap in laptop sales to enterprises is closing. Of 168 million  PCs sold worldwide to professional organizations in 2008, about 95 million were  desktops and 73 million were laptops. That&#8217;s compared to 94.6 million desktops  and 47.3 million laptops that shipped in 2006.</p></blockquote>
<p>Now, as with any statistics there&#8217;s two ways to look at these numbers:</p>
<ol>
<li>Laptops have grown tremendously in their total percentage of the market, and that growth rate has them on track to take over the world.</li>
<li>The majority of the growth in computer sales is coming in the form of laptops.</li>
</ol>
<p><img class="alignright size-full wp-image-227" title="gazelle" src="http://reliable.esymmetrix.com/wp-content/uploads/gazelle.jpg" alt="gazelle" width="170" height="115" />The gazelles are taking the first road.  And why not?  <strong>People love to assume the disruptive is true</strong>, it&#8217;s a lot more interesting.  Before you charge down that road, consider what seems likely.  There are a few problems with the first conclusion:</p>
<ul>
<li><strong>Two data points don&#8217;t make a pattern: </strong> If you follow the trend back farther, the sales of PC desktops has held up consistently, but laptop sales go up and down.  This would seem to indicate that the most likely interpretations of the data are that either the overall market is expanding (for example by people having two systems) or that this is a momentary, periodic surge in laptop purchases.</li>
<li><strong>Past large growth rarely projects forward: </strong> Just because there was a large growth in one year (either in absolute or percentage turns) doesn&#8217;t mean it will repeat at all.  It&#8217;s just as likely that the next year pattern will be flat or even retreat.</li>
</ul>
<p>So before you see the first twitch and assume it signals a migration of the whole herd, step back and think through the underlying facts.  Is this really the first sign of a monumental shift?  Or just another twitch of the needle?  Then look at your own situation.</p>
<p>Now, we have a few laptops, but we have more hard core desktops &#8211; the laptops are used for on the road presentations or working at Starbucks for fun.  Of course, we&#8217;re developers so we&#8217;re in the category of users that are always excluded from the norm.  But what&#8217;s not to love about a desktop?  For the same money they will always be faster and more capable than a laptop because they don&#8217;t have the burden of being small or extra power efficient.  Even if you buy into the idea that everything will be run through the web so computers are just glorified terminals&#8230;  Something still has to compose all of those web pages and make it all come together, and web apps can burn a surprising amount of processor and RAM locally.</p>
<p>In the end, I think we&#8217;re seeing a lot of folks buying second computers or getting additional laptops for other uses that complement their primary work computer experience.  Additionally, there are folks in emerging markets that need what laptops offer (self-contained, reliable power) more than performance but this reflects an increase in the overall market, not a shift in the existing market.</p>
]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/infrastructure/watch-the-gazelles-turn/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Wallpaper</title>
		<link>http://reliable.esymmetrix.com/development/software-wallpaper</link>
		<comments>http://reliable.esymmetrix.com/development/software-wallpaper#comments</comments>
		<pubDate>Mon, 18 May 2009 04:07:06 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Technology Debt]]></category>
		<category><![CDATA[Technology Migration]]></category>
		<category><![CDATA[Technology Selection]]></category>
		<category><![CDATA[Yak Shaving]]></category>

		<guid isPermaLink="false">http://reliable.esymmetrix.com/?p=207</guid>
		<description><![CDATA[
When I was growing up I spent a lot of time with my father doing woodworking.  One lesson you pick up pretty quick when woodworking is that you have to keep the work clean at each step.


If you take a piece of wood and don&#8217;t sand the surface smooth it won&#8217;t take a stain evenly.
If [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2freliable.esymmetrix.com%2fdevelopment%2fsoftware-wallpaper"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2freliable.esymmetrix.com%2fdevelopment%2fsoftware-wallpaper&#038;bgcolor=FF9900&#038;cfgcolor=FFFFFF&#038;cbgcolor=175d92" border="0" alt="kick it on DotNetKicks.com" /></a><br />
When I was growing up I spent a lot of time with my father doing woodworking.  One lesson you pick up pretty quick when woodworking is that you have to keep the work clean at each step.</p>
<p><img class="alignleft size-thumbnail wp-image-210" title="sanding" src="http://reliable.esymmetrix.com/wp-content/uploads/sanding-150x150.jpg" alt="sanding" width="150" height="150" /></p>
<ul>
<li>If you take a piece of wood and don&#8217;t sand the surface smooth it won&#8217;t take a stain evenly.</li>
<li>If you let glue creep out of the joint and get on the wood, the stain won&#8217;t look right in that spot.</li>
<li>A piece of dust on the surface will get magnified by each layer of varnish.</li>
</ul>
<p>Each layer depends on what&#8217;s underneath it.  Any flaw in a lower layer will tend to get magnified and distorted by layers above it.</p>
<p>Whenever I get involved in enterprise architecture I get reminded of this analogy because I often run into irrational exuberance that you can add a layer to an existing system and paint over the flaws underneath.  I was involved in a few projects like that early in my career:  It was too hard to talk directly to the mainframe from the web server so you put a layer in front of that.  There was already a C++ layer doing a DCE RPC gateway, but that was also too hard to program against for large use so we added a COM interface to the DCE RPC gateway.  We made some prototypes and validated the concepts and charged in full bore, only to run into big delays and teething problems near the end of the project trying to get everything polished up and suitable for production.</p>
<p>The problem is that at each turn you may be making the developer&#8217;s short term life easier by giving them an interface more natural to their preferred programming environment but since it just builds on the layers underneath it will end up with all of the limitations they have &#8211; and they can show up in the most surprising places.  For example, we ran into problems where certain input would cause failures which we ultimately discovered was caused by % being used as an insertion marker in a gateway library several layers underneath what we were doing &#8211; so at best it would drop the % and the following character, but at worst you&#8217;d get back a random data element if you managed to create a valid insertion name.</p>
<p>Layering issues are particularly problematic because they tend to be data sensitive and highly situational depending on how the various layers interact.  This means that it&#8217;s very difficult to design a comprehensive test plan:  The<strong> system can act as if it&#8217;s nondeterministic</strong>, making it infeasible to state with certainty that the various modes of the software have been demonstrated by a test plan.  At best, you can say that it worked for the exact test inputs it was given.  When you do have a problem in production, the multiple technologies in multiple layers can make it particularly hard to debug because it requires <strong>a lot of chairs around the table </strong>to hit all of the possible players.</p>
<h2>Are you decorating?  Or covering up the problem?</h2>
<p>Whenever you&#8217;re part of a team proposing adding a new layer over an existing system to fix its problems or adapt it to a new situation, you should be suspicious.  Is this really the right path to make the API look right?  Or are you temporarily covering over a problem?  If it&#8217;s the latter, it&#8217;ll just show through later &#8211; and now you have two problems to deal with not one.</p>
<p><img class="alignright size-full wp-image-211" title="floral-wallpaper" src="http://reliable.esymmetrix.com/wp-content/uploads/floral-wallpaper.jpg" alt="floral-wallpaper" width="112" height="309" />There are good occasions to add a new layer:</p>
<ul>
<li> <strong>To smooth technology upgrades: </strong>When you are shifting technologies, say from COM to .NET, you may want to create a custom layer as a new standardized interoperability adapter which will let you separate the upgrade problem into phases and handle them independently.</li>
<li> <strong>To support multiple technologies: </strong>Sometimes you need to support multiple types of clients &#8211; varying either by environment (say Java and .NET) or major architecture (say Client/Server and Web sites).</li>
</ul>
<p>And a few suspect ones:</p>
<ul>
<li> <strong>Mitigate architecture risk: </strong>To isolate a new subsystem architecture from the main codebase. We&#8217;ve heard this one before &#8211; you want to try out something new and iffy, like say Entity Framework.  To contain the risk, you want to introduce a layer between it and the rest of the platform so if it all goes bad you can easily swap it out.</li>
<li> <strong>Impedance Mismatch:</strong> You need to interact with something, but just don&#8217;t like the way it works. Perhaps it throws around ADO.NET recordsets and you prefer to work with strongly typed objects.</li>
</ul>
<p>If you find yourself in one of the suspect scenarios, you should seriously question whether the work you&#8217;d do to create and validate a layer is really forward progress or just<a title="Reliable Systems:  Effort Doesn't Equal Value" href="http://reliable.esymmetrix.com/development/effort-doesnt-equal-value" target="_self"> yak shaving</a>.  Before you go down the path, you should seriously estimate:</p>
<ul>
<li> <strong>Fixing the underlying problems:</strong> If the underlying layer(s) aren&#8217;t doing what you need, what would it take to get them changed (in the technology they&#8217;re currently in) so you could work without adding another layer? That puts the responsibility where it belongs, and keeps complexity under control. Do a full estimate of this approach.</li>
<li> <strong>Make a parallel layer:</strong> If you ignore the powerful aversion to creating duplicate routes to the same data, what if you created an alternate path to the underlying information. It may be that you bypass all of the layers or just some of the layers (such as down to the stored procedures that call the database). While this creates duplication, it lets each platform work in their own optimal way and allows for deterministic testing.</li>
<li> <strong>Using the existing layer as it is:</strong> It&#8217;s easy to overstate the impact of reusing a known system with issues. There&#8217;s a natural tendency to not realize that you&#8217;re comparing a well understood but flawed system with an unknown solution with unknown problems. Trading known problems for unknown problems makes everyone happy at the start of a project, but creates significant project risk downstream.</li>
</ul>
<h2>Put down the shovel and back away</h2>
<p>When you create a new layer on top of existing layers you are often digging your project into trouble, both <a title="Reliable Systems:  The best technology for you" href="http://reliable.esymmetrix.com/development/the-best-technology-for-you" target="_self">now and downstream</a>.  In addition to problems with each layer creating a leaky abstraction, deploying and supporting these highly layered systems is extraordinarily challenging.  It becomes prohibitively expensive to make changes in lower layers because of the high chance of unexpected side effects showing up as defects in dependent applications.  More often than not, each layer has to be held static with any changes accommodated by creating new queries or items at each layer to be served in parallel with the older methods.</p>
<p>Before you go ahead, be sure you look at the total lifecycle cost of that decision, including support and maintenance.   Have a good or bad experience with putting up some software wallpaper?  Let us know in the comments!<br />
<a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2freliable.esymmetrix.com%2fdevelopment%2fsoftware-wallpaper"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2freliable.esymmetrix.com%2fdevelopment%2fsoftware-wallpaper&#038;bgcolor=FF9900&#038;cfgcolor=FFFFFF&#038;cbgcolor=175d92" border="0" alt="kick it on DotNetKicks.com" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/development/software-wallpaper/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Careful with that thing &#8211; it&#8217;s running Vista!</title>
		<link>http://reliable.esymmetrix.com/infrastructure/careful-with-that-thing-its-running-vista</link>
		<comments>http://reliable.esymmetrix.com/infrastructure/careful-with-that-thing-its-running-vista#comments</comments>
		<pubDate>Wed, 29 Apr 2009 06:33:36 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
				<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[product feedback]]></category>
		<category><![CDATA[Technology Selection]]></category>

		<guid isPermaLink="false">http://reliable.esymmetrix.com/?p=140</guid>
		<description><![CDATA[Everyone likes to be on the winning team.  We love to root for our favorite sports team, we like the car we own and the brand behind it.  So it&#8217;s no surprise that when Apple ran their I&#8217;m a Mac ads that Windows fans were in an uproar.  Now with the Laptop Hunter series the [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-142" title="apple_or_microsoft" src="http://reliable.esymmetrix.com/wp-content/uploads/apple_or_microsoft.jpg" alt="apple_or_microsoft" width="180" height="119" />Everyone likes to be on the winning team.  We love to root for our favorite sports team, we like the car we own and the brand behind it.  So it&#8217;s no surprise that when Apple ran their I&#8217;m a Mac ads that Windows fans were in an uproar.  Now with the Laptop Hunter series the shoe&#8217;s on the other foot.   Microsoft is making a big show that Apple computers are overly expensive just for the Apple brand.  Apple fans claim that  to match a Mac, a PC has to be equipped with tons of antivirus software, a full time tech support guy, and a Witchdoctor on standby to keep it working.</p>
<h2>Seriously people</h2>
<p><strong>First, Apple makes some of the finest hardware you can possibly buy.</strong>  If you compare it nose to nose with hardware that&#8217;s actually built to the same standards then it really doesn&#8217;t represent a significant price premium.  Compare a Macintosh Pro with an equivalent Dell workstation &#8211; the cost is within 5%.  It&#8217;s amazing that Apple can afford the extra engineering of an OS with that little premium.  </p>
<p><strong>Second, Vista works great. </strong>  It&#8217;s running on many more systems than Mac OS is, and with volume comes a range of new problems.  The total amount of money I&#8217;ve spent on desktop antivirus software in 10 years of administering PCs?  $0.  The total number of virus problems I&#8217;ve had? 0.  My parents managed to get into trouble with one virus and Windows XP &#8211; but installing the (free) Microsoft Defender cleared it right up never to return.</p>
<p>As with nearly all marketing, this is a battle of perception:  Apple has done a great job of defending their brand at every turn.  This is part of their corporate ethos.  Along with a few other tenants it ensures they are a much loved but niche player:</p>
<ul>
<li>Only do something you can do uniquely well.</li>
<li>Don&#8217;t extend into markets that might ask you to compromise your values.</li>
<li>Cultivate the mystique:  Don&#8217;t show what&#8217;s behind the curtains.</li>
</ul>
<p>Microsoft on the other hand has tenants that ensure they&#8217;ll be a volume player, but an unloved one:</p>
<ul>
<li>Play to win the most market share in any market you can.</li>
<li>Build your ecosystem by making it easy for others to add value to it.</li>
<li>Cultivate the engineers:  Provide overwhelming amounts of documentation and approaches.</li>
</ul>
<p>The fact is, many people don&#8217;t need a top end piece of hardware like a Mac.  On the other hand, many people want a computer that&#8217;s just a tool, not a piece of art.  To them, the nearly infinite diversity and low cost of entry are essential.</p>
<h2>I&#8217;m a People person.  I&#8217;m Good with People!</h2>
<p>The computing needs of the average corporation and the average individual are very far apart.  To companies, <strong>computers are tools</strong> &#8211; like the desk, phone, and copier.  Very important, very powerful &#8211; tools.  They aren&#8217;t there to make you feel great or enable you to create a cool video of your vacation in France.  My partner really summed it up one day when he commented that the Mac was a really <em>personal computer </em>- it worked hard to create a personal connection.  </p>
<p>Corporations on the other hand want slow paced evolution, massive support for legacy applications and hardware (these guys are still running dot matrix printers off parallel ports) and to control costs.  They also philosophically want to have all the keys to the computers &#8211; just like they do for the buildings and offices they own.  PC&#8217;s are just end points on the large mesh that is the corporate IT network.  It&#8217;s very impersonal.</p>
<p>Microsoft makes a great deal of money providing businesses with the tools they <em>need </em>to have the computers work for them, and Apple makes a great deal of money creating computers that people <em>love</em>.  Either of these goals would be compromised by trying to do both.</p>
<h2>Vista Goggles</h2>
<p>Folks that have been in the Windows ecosystem a long time probably recognize that you could take the first year of press about Vista and substitute &#8220;Windows 2000&#8243; and find the same article written 8 years earlier.  Vista is a surprisingly large and tricky step forwards on a number of fronts, whereas Windows XP was a visual redress of Windows 2000.  </p>
<p>Almost like an SAT test:</p>
<blockquote><p>Windows 7 is to Windows Vista as</p>
<p>Windows XP is to Windows 2000.  </p></blockquote>
<p>Like Windows XP, the story on Windows 7 is making virtually no architecture changes and instead just tuning for the long haul.  That&#8217;s a great thing, because there&#8217;s a lot that works very well with Vista, and now it&#8217;ll work even better with Windows 7.</p>
<p>The humorous thing is to read now about how people are thinking about moving to Vista once 7 ships because, well, they don&#8217;t want to move to an OS that was just released.  It&#8217;s as if Vista has been aging like a fine cheese on the shelf so the very same binary code that once was toxic is now just what the doctor ordered.  To a slight degree this is true:  Vista SP1 did address some issues that affected some people, and more importantly hardware now is dramatically faster than it was two years ago (as it will be two years from now&#8230;) so what once was aggressive is now commonplace.  The same was true of Windows 2000 when it shipped.  Requiring 64MB of RAM?  That&#8217;s just crazy talk!  Only certain video cards worked reasonably with it, and video drivers to a while to stabilize.  That sounds very familiar&#8230;</p>
<p><strong>In the end, it really comes back to Perception. </strong> Probably the biggest mistake Microsoft did was not push the OEM&#8217;s that make the computers to build machines that could responsibly run the new operating system, and be clear that meant hardware 3D video cards and plenty of memory.  And oh yeah, stop putting aftermarket firewalls, antivirus, Google Desktop, and all kinds of other things on them that are ill optimized.  At my last company we got in the habit of routinely wiping each new Dell that came in and reinstalling the OS from the Dell restore CD &#8211; because that got rid of all the noise.  It was surprising how much better that worked.  Is that Microsoft&#8217;s fault?  Not directly, but they certainly could have found a way to encourage the ecosystem to forgo some profit for usability.  But that&#8217;s just not in their corporate DNA.</p>
<p>With any luck, the big story for Windows 7 will be that Microsoft pushes back against their channel, even being willing to risk it by leaving Windows XP out there for folks that don&#8217;t want to play by the Windows 7 rules.  It&#8217;s hard to put up barriers when you&#8217;re a legal monopoly, so find ways to use incentives to do it right instead of punishment for doing it wrong.  And keep up the ads, because perception does matter in the long run.</p>
<p>Who knows, it may push Apple to get better too.  Just once when my iPod updates itself to enhance stability and performance I&#8217;d love to know what exactly was unstable or slow&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/infrastructure/careful-with-that-thing-its-running-vista/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m not Cool Enough for the Web</title>
		<link>http://reliable.esymmetrix.com/development/im-not-cool-enough-for-the-web</link>
		<comments>http://reliable.esymmetrix.com/development/im-not-cool-enough-for-the-web#comments</comments>
		<pubDate>Tue, 21 Apr 2009 16:51:40 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Technology Selection]]></category>

		<guid isPermaLink="false">http://reliable.esymmetrix.com/?p=114</guid>
		<description><![CDATA[Since leaving my last company and getting into the wild as a consultant, I&#8217;ve been amazed by the divergence between the conventional wisdom prevailing on the Internet and what I see actually happening on the ground with clients.
The prevailing wisdom appears to be:

Google is the world&#8217;s best technology company.  Anything they solve they are the [...]]]></description>
			<content:encoded><![CDATA[<p>Since leaving my last company and getting into the wild as a consultant, I&#8217;ve been amazed by the divergence between the conventional wisdom prevailing on the Internet and what I see actually happening on the ground with clients.</p>
<p>The prevailing wisdom appears to be:</p>
<ul>
<li><strong>Google is the world&#8217;s best technology company.  </strong>Anything they solve they are the best at, and if you aren&#8217;t doing it their way you&#8217;re a dinosaur.</li>
<li><strong>Client / Server is dead.</strong>  All new applications will be web applications, most likely delivered as a service.</li>
</ul>
<p>We visit a lot of companies, both prospects and clients.  Here&#8217;s what we&#8217;ve actually seen over the past two years:</p>
<ul>
<li><strong>Outside of search, Google doesn&#8217;t have their act together. </strong> Pretty much everything else is an academic experiment.  There&#8217;s nothing wrong with experiments, but there&#8217;s a big distance from there to running your business.</li>
<li><strong>Business are run on Client / Server. </strong> They&#8217;re still creating new apps this way &#8211; they may use newer technologies like WPF to do it, but if it is core to making the business work, it&#8217;s usually not a web app.</li>
</ul>
<h2>With a name like Google, it&#8217;s got to be good!</h2>
<p>Our own internal experience mirrors this.  We use Exchange and Outlook for email so I can&#8217;t say a lot directly about Gmail, however it&#8217;s clear from Google&#8217;s reactions to <a title="GMail outage on Venture Beat" href="http://venturebeat.com/2009/02/24/where-were-you-during-the-great-gmail-outage-of-february-2009/" target="_blank">recent outages</a> that their perspective doesn&#8217;t fit the enterprise because it doesn&#8217;t take into account the premium companies place on predictability and communication.  Predictability meaning that things are consistent &#8211; you get a consistent experience so your users can get their jobs done.  Businesses are change averse for good reason:  Users will adapt even to crazy problems and discover the patterns that work to get their jobs done.  When the patterns keep changing, they get frustrated.  On the communication front, businesses prize feedback on knowing the true scope of a problem and how long it may take to get it resolved.  </p>
<p>SalesForce learned this a few years ago and in response introduced <a title="Trust Salesforce Site" href="http://trust.salesforce.com/" target="_blank">Trust.Salesforce.Com</a>, which went a long way to getting companies what they wanted to be comfortable with an outsourced critical solution.   If you operate a SaaS, you would do well to model after this.   Now, it isn&#8217;t necessarily bad that Google doesn&#8217;t do anything like this for Gmail &#8211; it just means it isn&#8217;t a solution for a large set of businesses.  </p>
<p>The thing we use the most internally from Google is <a title="Google Analytics" href="http://www.google.com/analytics/" target="_blank">Google Analytics</a>.  It&#8217;s very pretty and easy to use, however we&#8217;ve noticed a lot of &#8220;what&#8217;s broken today?&#8221; experiences with it, enough that we can&#8217;t recommend it to anyone.  Two of the sites we monitor appear to be chronically under counted by Google Analytics, and we can&#8217;t figure out why.  And like most things Google &#8211; you&#8217;re on self support.  Now, there are paid options however unlike email we haven&#8217;t been able to find a strong paid competitor that is actively competing with Google.  It feels like most have left the field of battle, or are <a title="WebTrends" href="http://www.webtrends.com/" target="_blank">exorbitantly expensive</a> (and aimed at large enterprises).</p>
<p>After much early on talk about how <a title="Google Docs" href="http://docs.google.com" target="_blank">Google Docs </a>was going to make Office obsolete, it simply hasn&#8217;t come to pass &#8211; and Microsoft continues to sell a lot of copies of Office.  It turns out that making a great word processor and spreadsheet is a very hard problem to do through the web.  Now, you might take the perspective that Microsoft&#8217;s announcement that they are going to offer lightweight web versions of Office 14 applications as being an admission that the old model is bankrupt, but it really points to an increase in reach:  Reaching many users that wouldn&#8217;t have been purchasing the product before.  Casual home users that wouldn&#8217;t purchase a &#8220;real&#8221; copy of office may find what they want in Google Docs, and would also be happy with a lightweight feature set of Office.</p>
<p>In Google&#8217;s defense, the products are worth what you&#8217;re paying for them:  Free.  But, you have to ask yourself:  If it wasn&#8217;t for the Google brand, would you give them the time of day?  For search, absolutely.  Finding an address and getting a street view?  Bring it on.  But don&#8217;t feel bad for depending on traditional software next time you want to buy a copy of Office, Photoshop, or use Outlook for your email.</p>
<h2>It&#8217;s all SaaS These Days</h2>
<p>Make no mistake, web applications, SaaS and Cloud Computing are all here to stay.  However, that doesn&#8217;t mean that there isn&#8217;t a lot going on in Client \ Server as well.  The key question to consider is how many applications you would have made, but done in another technology are being built as a web app instead?  There certainly are some, but for the most part web applications are creating entirely new spaces and solving problems that weren&#8217;t being solved before instead of replacing entrenched problems.  </p>
<p>Take document management:  On the surface this feels like a problem that should go entirely web and not look back because the web is very good when the readers to editors ratio is very high.  That said, the big document management companies still have very robust, integrated traditional offerings as well as their web portals.  You do have people using web document management solutions (like SharePoint) that never had document management before, which is a case of expanding the size of the market not replacing an alternative option.</p>
<p>When you are running your business, you have a set of requirements that are often best suited by a traditional client application:</p>
<ul>
<li><strong>Users need advanced capabilities: </strong> Once you stray out of the basics, it is invariably harder to provide features through web technologies than traditional technologies.  Tools are improving and making it better, but the cost per feature is lower in a modern client development environment than through a browser.  This is particularly true since you can put a browser in your app to enable things that it does really well &#8211; like show HTML content &#8211; you just let it do and keep the tricky stuff &#8211; like that big set of coordinated data entry fields &#8211; in your traditional app.</li>
<li><strong>Users are doing a lot:  </strong>One thing that is easy to lose perspective on is that when you run a client/server application every computer is bringing power to the party.  You often don&#8217;t need that strong a central server because the real action is happening out on the clients, and every new client that logs in is bringing their own muscle with them.  In the web, it&#8217;s all on the server. Not only that, but you&#8217;re rendering things in a less efficient way due to the stateless nature and limited protocols available for data exchange.</li>
<li><strong>Users need access to diverse data: </strong> With web technologies it&#8217;s straightforward to manage information once you&#8217;ve brought it into the cloud, but it&#8217;s tricky to provide end users with fast casual access to a range of data in a range of formats.  In many businesses data is coming in pieces from many sources and being assembled to produce a coherent output.  This isn&#8217;t easy to do in any environment, and it&#8217;s one thing that the modern PC operating system, particularly Windows, has gotten very good at.  You can double click a file and almost always get it to open into a good viewer.  You can preview files, drag and drop from one program into another or a file into a program.  All of this is intuitive and fast for users that aren&#8217;t fitting into a pre-packaged user scenario.  </li>
</ul>
<p>There are counter balancing effects:</p>
<ul>
<li><strong>Transient user community:  </strong>The more far flung your people are, the more work it is to keep them up to date.  The more transient that user community is, the higher a barrier installation is.  This is the leading reason why you want to make something a web app:  It just isn&#8217;t worth the deployment effort to do it any other way.</li>
<li><strong>Diverse user community:  </strong>If you want to service Linux, Windows, and the Mac then web technologies are the lowest common denominator, it&#8217;s just the way it is.</li>
</ul>
<p>What we&#8217;re seeing in the field fits into this:  People are creating a lot of new, lightweight web apps to solve point problems they probably wouldn&#8217;t have solved through technology before.  But they&#8217;re also still heavily investing in traditional applications.  </p>
<p>As a development team, it&#8217;s easy to get caught up thinking that <a title="Effort != Value" href="http://reliable.esymmetrix.com/development/effort-doesnt-equal-value" target="_self">Effort is the same as Value</a> &#8211; just because something was a lot of work it must have a commensurate value.  The fact is, that there&#8217;s just no evidence that effort and value are correlated.  On the web, if you want to create a great looking and functioning generalized tool you&#8217;re signing up for a lot of effort.  And the value may be there &#8211; it could be that you&#8217;re going to reach a whole set of new users that otherwise wouldn&#8217;t use an application at all.  On the other hand, it could be that users perceive no extra value for it being in the web so all the extra work you put into creating the graphics, testing in five browsers, establishing identity, and the dozen other things you wouldn&#8217;t have needed to worry about if you were just running on the desktop netted you nothing.</p>
<p>So if you&#8217;re a business wondering how to approach that next application you need, don&#8217;t be afraid to get one that isn&#8217;t all wrapped up in Web 2.0 goodness.  In the end, it&#8217;s all about making the solution work for you and your users.</p>
]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/development/im-not-cool-enough-for-the-web/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ignore what you know &#8211; Demand Results</title>
		<link>http://reliable.esymmetrix.com/development/ignore-what-you-know-demand-results</link>
		<comments>http://reliable.esymmetrix.com/development/ignore-what-you-know-demand-results#comments</comments>
		<pubDate>Mon, 01 Dec 2008 00:53:21 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Accountability]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software Development Process]]></category>

		<guid isPermaLink="false">http://reliable.esymmetrix.com/?p=60</guid>
		<description><![CDATA[Many if not most software project leaders came up through the development ranks.  It&#8217;s generally thought of as a distinct advantage &#8211; you know the technologies you&#8217;re using, you can form your own well reasoned opinions about how hard something is, what is possible, and how long it should take.  For a long time, I [...]]]></description>
			<content:encoded><![CDATA[<p>Many if not most software project leaders came up through the development ranks.  It&#8217;s generally thought of as a distinct advantage &#8211; you know the technologies you&#8217;re using, you can form your own well reasoned opinions about how hard something is, what is possible, and how long it should take.  For a long time, I felt that the best way to get results from development teams was to use my experience and knowledge to be very understanding of the challenges they faced and give them whatever time they asked for.  However, in the last few years I&#8217;ve run into several situations where I just couldn&#8217;t get them the extra time or relief from the most problematic requirements.  I predicted doom to the projects in question but instead <strong>I observed some of the best outcomes I&#8217;d ever experienced</strong>.</p>
<p>While the projects were successful, it bothered me that the secret sauce seemed to be a rigid adherence to schedule and delivery more than any other consideration.  This was exactly the reverse of how I wanted projects to succeed:  I wanted them to succeed because I was treating the developers how they always wanted to be, not like a stereotype from Office Space.  How could it be that better results came from ignorance of the technical details involved?</p>
<h2>Developers Will Use All Available Time</h2>
<p>Upon reflection, the first thing that struck me was how much an immobile deadline focused discussions and decision making. If you give a team more time, they will expand their process to consume it.  Time will get consumed by:</p>
<ul type="disc">
<li><strong>Elaborate Decision Making: </strong> When you have little time, you make a choice and go with it until it appears it just can&#8217;t work.  When you have a lot of time, you sit back and look for the very best option.  That then requires defining what the best is &#8211; is it fastest, or smallest, or most scalable, or whatever.</li>
<li><strong>Development Approach:</strong> Under pressure you&#8217;ll tend to go with the proven guaranteed approach.  If you have the luxury of time you&#8217;re more likely to engage in yak shaving like investigating a new tool or approach, or writing several prototypes first before you develop the real solution.  You might even just throw caution to the wind by skipping a formal design figuring you&#8217;ll have the time to just code and test your way to a solution.</li>
</ul>
<p>The more time a development team has, the harder it is to argue against spending it on up front luxuries.  It also can be harder to argue for long term best practices because the team has the time now to develop a solution any way they want.</p>
<h2>Unknowns Create Boomerang Estimates</h2>
<p>Even very experienced developers are generally terrible at estimating the duration of developing a solution.  This has been demonstrated over and over by many other parties.  The key behavior that we&#8217;ve observed is the phenomenon that from when you approach a specific development problem (like displaying a graph on a web page) until you know exactly how you&#8217;re going to solve it (and have a reason for confidence in that approach) you will tend to estimate high because in effect <strong>the only reasonable estimate is infinity</strong>.</p>
<p>Put another way, as long as you don&#8217;t know <em>how </em>you will solve a problem you don&#8217;t know for sure that it <em>is</em> solvable which means it will take an infinite amount of time to solve it.  Fortunately, developers are almost universally optimists so they believe they can solve anything eventually &#8211; so they&#8217;ll pull out a standard answer like three weeks or months or whatever feels like a big chunk of time to figure out the problem but not so big that it kills the project.   The reality is that <strong>until you know how you&#8217;re going to solve it, it feels like it could take forever</strong>.</p>
<p>Once a solution has presented itself  the development team will often find that all it will take is some cleanup and polish to be done- a very small amount of time.  What will push the team to find the answer?  We&#8217;re back to the problem of elaborate decision making when you have the luxury of time.  Finding solutions tends to not be a linear problem that will be solved with incremental development energy.  Instead, it tends to be solved by getting people together and brainstorming possible solutions until you find a few candidates and can work out what it&#8217;ll take to prove them out.  <strong>Under pressure, people tend to focus their creative energy and be more willing to compromise</strong>.   That flexibility will tend to get rid of pet requirements and developer gold-plating and focus on the most critical aspects of the problem.</p>
<h2>What&#8217;s the alternate approach?</h2>
<p>The key is to not let your knowledge and experience as a developer lead you to buy into the stories the team creates around what&#8217;s reasonable to get done and how long it will take.  Instead, you have to <strong>stick with the project&#8217;s goals first then the facts of the project</strong>.  The project&#8217;s goals form the objective reality of what has to be accomplished for the project to survive:  <strong>Deliver this functionality by that date, keep these people informed, solve these problems without causing those problems</strong>.</p>
<p>When the team runs into a wall and needs more time, instead of buying into the story of needing a lot of time, <strong>set a specific and tight goal</strong> that keeps a solid amount of time pressure on the team to solve the issue and prevent the problems above from showing up.  Ideally, find a way to give out one or two day chunks to answer incremental questions if necessary to emphasize that time is precious and has to be invested carefully.  This is where you can leverage your experience in a way that a non-developer can&#8217;t:  The team knows they can&#8217;t snow you with tech details, and you can define a specific, measurable result that can be achieved in a short period of time that they can&#8217;t argue with.  Despite this, you are bound to have to assert a few times that the time limit is the limit &#8211; solve the problem in that time.  It&#8217;s very hard because you&#8217;ve been on the other side of that conversation and it can feel like you&#8217;re the Pointy Haired Boss, but it&#8217;s fundamentally your job on the project.</p>
<p>What will nearly always happen is the team will surprise itself &#8211; <strong>a solution will be presented within the team</strong> that they can live with and can be done in the time they have.  It may be incomplete or have some risky shortcomings, and you&#8217;ll want to ask how long it&#8217;d take to address those.  You probably shouldn&#8217;t address them in the first round, but the team will feel better that you&#8217;ve considered through things and will buy into the outcome more if you ask.  You&#8217;ll also want to make a record of it so that the team can in the future recognize what was a predicted shortcoming vs. an accidental defect.</p>
<h2>Do you want it solved right?</h2>
<p>This is a question that often gets voiced within a team as a rebuttal to external time pressures and is very dangerous.  The challenge is that most non-technical people don&#8217;t get the number of ways that a problem can be solved: instead, each problem appears to have a single solution.  Take away your technical knowledge and imagine you&#8217;re the paying customer:  What&#8217;s the alternative &#8211; <strong>were you going to solve it wrong?</strong> If that&#8217;s the case, what else have you done that&#8217;s garbage?  If you took your car to a repair person and they said it&#8217;d be $500 to fix it, then when you came back they said well, if you want it fixed right it&#8217;ll actually be $1200, wouldn&#8217;t you wonder what the hell the $500 fix was?</p>
<p>Usually this statement is uttered in desperation when a team believes they just need more time to figure out a problem.  Nobody wants a problem solved wrong.  <strong>Skip the hyperbole and get down to action</strong>:  break down the problem into small chunks of time that can be invested for a specific measurable result, and make sure the team gets that overage time is the most precious commodity.</p>
<blockquote><p><strong>Side Note:</strong> This is an advantage of SCRUM in practice.  If you&#8217;re following an Agile Development practice, particularly SCRUM, this fits right in:  Focus on making each sprint deliver the user stories it was supposed to even if you have to leave some special cases for a later sprint.  The daily stand up meetings are a great place for the different team members to apply team pressure against over engineering and doomsday estimates.</p></blockquote>
<h2>Cleaning Up and Closing Out</h2>
<p>At some point you need to close out your release and ship it. For each of the areas where you&#8217;ve had to make compromises and taken shortcuts you have to choose to either:</p>
<ul>
<li><strong>Ship as Final: </strong> Decide the implementation is close enough to the intent of the end-user functional requirements that it can be the final implementation (at least until new information contradicts this decision)</li>
<li><strong>Ship as Temporary: </strong> Decide that something is better than nothing and ship the feature with limitations.</li>
<li><strong>Cut the Feature:</strong> Hold back the feature until it can be reconsidered or reimplemented.</li>
</ul>
<p>You&#8217;re nearly always better off shipping the feature, often as a final feature pending more information because <strong>it&#8217;s very hard to gauge the true impact of each limitation</strong>.  This is particularly true of user-facing features and environments where it&#8217;s possible to evolve the software rapidly.  Inevitably once it&#8217;s in the hands of your users you&#8217;ll discover aspects of it that you didn&#8217;t think of that will require rework and you may discover that the killer feature you were sure would be the hit of the release is hardly used.  In either of these cases if you&#8217;ve invested a great deal of time in making it foolproof the team will tend to resist changing it.  It&#8217;s a natural product of the presumed relationship between <a title="Effort Doesn't Equal Value" href="http://reliable.esymmetrix.com/development/effort-doesnt-equal-value">effort and value</a>.  If necessary, you might put in some temporary safeties to detect and catch the limitations you&#8217;re worried about.</p>
<p>The major exceptions to this approach are areas that are too dangerous to deploy if less than fully trustworthy.  For example, if your team is developing a data storage system, software deployment system, or other critical infrastructure your choices likely resolve down to making it as right as possible or holding the feature until it can be reworked.</p>
<p>If it turns out that the solutions that are viable within the schedule have significant limitations, you should make sure these caveats are known to the business &#8211; provided you can <strong>express them in business terms</strong>.  For example, knowing that an algorithm won&#8217;t work if your userbase doubles is probably not a significant caveat, unless you know the business plans to double in a relatively short period of time.  Every system has limits, and every software change has risks.  Business representatives don&#8217;t like to hear the same items covering the same ground repeated every time you discuss software, and it tends to make them not hear the new and important information as well as sound like you&#8217;re attempting to transfer accountability from your team to them.</p>
]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/development/ignore-what-you-know-demand-results/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>What Everyone Should Know Before They Access Your Network</title>
		<link>http://reliable.esymmetrix.com/management/what-everyone-should-know-before-they-access-your-network</link>
		<comments>http://reliable.esymmetrix.com/management/what-everyone-should-know-before-they-access-your-network#comments</comments>
		<pubDate>Fri, 12 Sep 2008 05:52:38 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[IT Management]]></category>
		<category><![CDATA[IT Operations]]></category>
		<category><![CDATA[Mobile Users]]></category>

		<guid isPermaLink="false">http://reliable.esymmetrix.com/?p=76</guid>
		<description><![CDATA[When a new hire starts with your company, what are you doing to set them up with technology to work with your organization?  You probably focus on making sure you set up their account, clean up a computer for them, and possibly set up a corporate cell phone or Blackberry.  You might also do some [...]]]></description>
			<content:encoded><![CDATA[<p>When a new hire starts with your company, what are you doing to set them up with technology to work with your organization?  You probably focus on making sure you set up their account, clean up a computer for them, and possibly set up a corporate cell phone or Blackberry.  You might also do some quick training with them so they can log in to their computer, get email, and access the Internet.  This is all pretty obvious and fits within normal tickets your IT organization handles every day.</p>
<p>Now step back for a minute and look at it from the employee&#8217;s perspective.  When someone needs access to IT resources within your company, there are really three interests you have:</p>
<ol>
<li><strong>Access:</strong> People need equipment, software, accounts, and access to IT support.  This is the basic block &amp; tackling that you are handling now.</li>
<li><strong>Effective: </strong>The tools you provide need to deliver on the business needs the user has.  Whatever&#8217;s in the way of that &#8211; defective equipment, user training, or suitability to task needs to be addressed.  The best computer with the right software in the hands of a user that doesn&#8217;t know how to use them is worthless.</li>
<li><strong>Security: </strong>Access to your network means access to all of the data and work products within it.  You need people to understand how you approach security, what they are and aren&#8217;t allowed to do, and how you&#8217;re going to work with them to maintain security.</li>
</ol>
<h2>Setting the Stage</h2>
<p>Employees often develop a personal and possessive feeling about the equipment provided to them by a company.  They think of it has their computer, just like they have a computer at home.  This creates a range of problems for your organization by extension:  If it&#8217;s their computer then when there&#8217;s a problem they&#8217;ll want their computer fixed, not a different computer that&#8217;s suitable.   <strong>They&#8217;ll come to regard problems personally</strong>, not objectively.</p>
<p>Instead, you want users to look at the equipment they&#8217;re provided to do their jobs as just that &#8211; <strong>tools that enable them to be more effective</strong>.  Stepping back into the big picture, a computer isn&#8217;t any different than a wrench or a filing cabinet.  It isn&#8217;t their computer or phone, it&#8217;s the company&#8217;s &#8211; designed to make them effective at producing whatever the company needs.   When your user community gets this, they&#8217;ll self censor their support requirements:  Watching a DVD movie on the company laptop won&#8217;t feel support-worthy.</p>
<p>The best time to establish this is to set the right expectations up front:  Have this conversation before the user gets their network account.  The goal is to make sure they understand that:</p>
<ul>
<li><strong>You&#8217;re committed to their success.  <span style="font-weight: normal;">You&#8217;re passionate about making sure they&#8217;re effective.  You have a support system designed to make sure that their issues get resolved quickly, and you have provisions for support off hours and when they&#8217;re on the road.  If they aren&#8217;t sure if you can or should help with an item, you want them to engage you anyway &#8211; You&#8217;ll let them know.</span></strong></li>
<li><strong>The technology is there to make them effective at their job. </strong>Your job (IT) is to make sure that they are as effective as possible at that.</li>
<li><strong>They are responsible for their effectiveness. </strong>If they need something &#8211; training, repair, whatever &#8211; it&#8217;s their responsibility to get it, and they can get it.</li>
<li><strong>They are responsible for their user account. </strong>Anything anyone does with that account is their responsibility.   That means if someone figures out their password, or they leave their computer unlocked, or otherwise treat their user account with less than the respect it deserves then they are going to be held responsible by the company for that.</li>
</ul>
<h2>Support Your Local Sheriff!</h2>
<p>It&#8217;s painful to hear on Monday that a user was trying to get something important done and couldn&#8217;t due to a simple issue you could have resolved.  Perhaps they knew they could have contacted you for support &#8211; but didn&#8217;t for whatever reason.  What users will remember is that they had a problem, and it kept them from getting things done.  All of the work you do to support users &#8211; special on call staff, phone numbers, email contact, whatever &#8211; didn&#8217;t work because they never got called upon.</p>
<p>To address this, you want to address as many of the human factors that keep people from calling on support as you can.</p>
<ol>
<li><strong>Make sure you&#8217;re always available: </strong>The cost of setting up a toll-free number for users to contact support is trivial.  If you don&#8217;t already have an on-call rotation, set one up and make sure there&#8217;s someone to answer that toll-free number at all times.  The same person can answer an email address designed for support.</li>
<li><strong>Make sure they know all the ways: </strong>In the past, we&#8217;ve published business cards with the 800# for support and email address, and we put these cards everywhere:  In laptop bags, in a card holder at the front desk, anywhere that we could think of so that there&#8217;d be one around when a user needed to know how to contact support.</li>
<li><strong>Talk to users about it: </strong>Be cheery.  Make sure they know that you personally are driven to make sure they&#8217;re successful, and you look at it as an honor to help them out after hours.  They need to really get that you want that phone call, because you need to conquer the very human desire not to bother or inconvenience other people.</li>
</ol>
<p>We really recommend making up a business card that has all of the key information a user needs &#8211; the contact information for support, company fax number and main phone number, remote dial in for voice mail, common URLs for external access to email and other services, pretty much anything they need to know on the road.  I&#8217;m sure you have it all committed to memory, but if you&#8217;re an employee that doesn&#8217;t travel every day you probably don&#8217;t.  Little steps like this can dramatically affect the general user population&#8217;s opinion about IT.</p>
<h2>Security Begins at Home</h2>
<p>You want to make sure that each user gets how seriously your organization takes security.   People often don&#8217;t treat their user account with the same respect they&#8217;d treat a physical key or card.  Most users wouldn&#8217;t give a stranger the keys to their office or building but would give their password out over the phone to someone who claimed they need it.</p>
<p>People worry a lot about security threats from the Internet, but most break-ins &#8211; overwhelmingly &#8211; happen from inside.  Most of these are done either through social engineering (where the intruder convinces someone to give them access) or by a disgruntled employee.</p>
<p>To address these common threats, you need to <strong>address the key social aspects of security</strong>.  In addition to normal sensible security practices,  we recommend establishing a few policies:</p>
<ol>
<li><strong>IT Personnel NEVER ask for passwords:</strong> Make it clear to your IT Support organization and every user that no one in IT will ever ask them for their user ID or password.  Therefore, if anyone calls you asking for that information you know one thing &#8211; they aren&#8217;t authorized to it.  If they give their password to IT, or IT hears that they gave it to someone else, their password will be reset.</li>
<li><strong>No one will use their account but them: </strong>If IT needs to do something logged in as you, they&#8217;ll do it in your presence &#8211; after all, you are still accountable for what happens with your account.</li>
</ol>
<p>The second one may cause some heartburn with your desktop support staff- they&#8217;re probably used to solving a range of user problems by accessing the computer as the user, and anything that&#8217;ll get in the way of that is a problem.  While it may cause some inconvenience &#8211; you aren&#8217;t going to be able to do work that requires logging in as the user if they aren&#8217;t around &#8211; the message <strong>this sends to your users about how serious you are about security is essential</strong>.  You need to be cleaner about the rules than they are.</p>
<h2>What about Non-Employees?</h2>
<p>What should you do with contractors or others that need access to your network, even temporarily?  If they are getting a user account, they should go through the same procedure.  You have the same goals:  You want them to be effective and not compromise your environment.</p>
<h2>Finally, Ditch the Input Devices</h2>
<p>Most computers come with mice and keyboards that are dirt cheap.  If this is what you&#8217;re using and you&#8217;re recycling a computer, please &#8211; get a new mouse and keyboard.  Most computer companies do the same thing when they process returns.  The fact is that keyboards get filthy quickly, and while I may not mind the crumbs from my pop tarts, it certainly isn&#8217;t going to create the right impression if I get one that&#8217;s full of someone else&#8217;s.  You should be able to score new ones for your HP, Dell, or whatever for not more than $40 and really &#8211; with what employees cost in salary and other expenses, don&#8217;t you want them to know you care?</p>
<p>Have a story about how you support your new users?  Share it in the comments below or <a title="Send Us Mail" href="mailto:kendall.miller@esymmetrix.com" target="_blank">drop us a line</a> to tell us about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/management/what-everyone-should-know-before-they-access-your-network/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Code Monkey Challenge</title>
		<link>http://reliable.esymmetrix.com/development/code-monkey-challenge</link>
		<comments>http://reliable.esymmetrix.com/development/code-monkey-challenge#comments</comments>
		<pubDate>Sat, 30 Aug 2008 00:35:33 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Code Monkey]]></category>
		<category><![CDATA[Software Development Process]]></category>
		<category><![CDATA[Yak Shaving]]></category>

		<guid isPermaLink="false">http://reliable.esymmetrix.com/?p=58</guid>
		<description><![CDATA[We spend most of our time deeply engaged in our client&#8217;s projects.  We work hard to assimilate quickly in to our client&#8217;s culture and challenges to make sure we can deliver the most value we can.  This doesn&#8217;t leave us with a lot of opportunities to do team building within our own company.  We&#8217;re committed [...]]]></description>
			<content:encoded><![CDATA[<p>We spend most of our time deeply engaged in our client&#8217;s projects.  We work hard to assimilate quickly in to our client&#8217;s culture and challenges to make sure we can deliver the most value we can.  This doesn&#8217;t leave us with a lot of opportunities to do team building within our own company.  We&#8217;re committed that employees of eSymmetrix feel a part of something a lot more than just our clients &#8211; they are part of the eSymmetrix way of getting things done, which they can be proud of.</p>
<p>In the past several months the three partners of our firm have been scattered to handle all of the challenges of our growing business, but with the completion of a major engagement with a client we had the opportunity to spend some time back together to focus on more long range concerns.  We had intended to spend the time working on product and marketing strategy for our upcoming commercial release of Gibraltar, but instead on a whim decided to do something we called the Code Monkey Challenge.</p>
<p>The goal was to <strong>make something complete and useful within a very short period of time</strong>.  Complete for us meant we were going to create a software component, test it, package it, and publish it to a new web site with descriptive content all in 48 hours.  We didn&#8217;t even have a hosting company set up beforehand.  To be useful it had to be usable by people outside of our company as delivered, and fulfill a real need, at least for a set of users.</p>
<p>We started at 9:00 AM with the goal of publishing the final version to a new web site by 6:00 PM the following day.  Our initial approach was to have one hour sprints of work divided between each team member, then meet and review and set up the next sprint.  In the end we used three hour sprints, delivering to each other through our source code system at the end of each sprint.  We made our goal &#8211; you can see the results at <a title="Gibraltar Software" href="http://www.gibraltarsoftware.com/" target="_blank">www.gibraltarsoftware.com</a>.  Most importantly, <strong>we achieved our result of bringing together our team members</strong>.</p>
<blockquote><p><strong>Update:</strong>  The small Logger we wrote as part of the Code Monkey Challenge has since been rewritten and incorporated into the Gibraltar Agent.</p></blockquote>
<p>We eliminated any distraction we could so that we could apply as much of the 48 hours as possible to the project.  We worked well into the evenings and had others provide some support to make sure we had food, coffee, and no outside distractions.</p>
<p>The intense time pressure gave us a good tool to eliminate most conflict: there simply wasn&#8217;t time for much philosophy on how to approach the different technical aspects.  The lack of time removed ambiguity that otherwise would be the source of conflict.  There wasn&#8217;t much time for yak shaving either &#8211; we had to produce results at the end of each sprint.  Still the first few sprints were spent mostly in exploration and validation of the approaches with our first rough cut of each element done by the end of the first day.  The second day was then about refining and documenting.</p>
<p>While we did skip over some aspects that we would normally do on a larger scale project, <strong>we did include most elements of our preferred development process</strong>.  We did coordinated sprints of the team separated by an after action review to adjust our plan.  We distributed code and results between the team through our source code control system, we wrote automated unit tests to verify key aspects of the system, and did peer design reviews.  If anything,<strong> the lack of time made us less likely to bypass most parts of the process</strong> because we knew we wouldn&#8217;t have time to dig our way out of any problems we created.</p>
<p>The real goal of the exercise was to bring us back together as a leadership team and establish more of the shared experiences that define interpersonal relationships.  It&#8217;s helpful to bridge the gaps that easily develop between architects and developers, developers and designers, engineering and marketing.  <strong>We all had to come together </strong>to achieve our result because it was clear that <strong>we&#8217;d all fail if we couldn&#8217;t</strong>.  Most business projects are sufficiently fuzzy that it isn&#8217;t nearly as clear what the cost of not working together is, and politics can overwhelm cooperation.  It&#8217;s an experience I&#8217;d recommend in any software team, particularly if you&#8217;re in a company that can mix skills and responsibilities.</p>
<p>The next time your shop is done with a project, or when you need a break consider doing your own Code Monkey Challenge.  It only takes two days.  Here&#8217;s the rules:</p>
<ul type="disc">
<li><strong>Produce a Real Product:</strong> Scope out a product that is really useful to a specific audience.  Sure, you&#8217;re giving it away for free, but it still needs to stand up to scrutiny.</li>
<li><strong>Marketing Material Too: </strong>What good is a product if no one knows about it or understand how or why to use it?  Even though you&#8217;re giving it away you want people to be able to understand and take advantage of your effort.</li>
<li><strong>Help and Usage Information: </strong>Like a real product, it has to be usable without you sitting over the customer&#8217;s shoulders.  Depending on what it is, you need to tell them how to install it, program with it, and provide guidance on recommended usage scenarios.</li>
<li><strong>In Little Time: </strong>Extra time is the enemy &#8211; it will reduce the pressure to work together and encourage unnecessary bells and whistles while removing the catalyst that gets everyone to work together.</li>
<li><strong>Publish to the World: </strong>If you&#8217;re  a large company, perhaps it&#8217;s just the company.  Wherever it is, it has to feel like real stakes to the team:  Your results will be on display.</li>
</ul>
<p>To set it up, be sure that you can eliminate anything that would distract the team &#8211; they can work into the evenings, have food brought in, whatever.  The closer it is to a total immersion experience the better.  It improves the sense of camerarderie developed within the team and ensures the most creative energy is directed to the project. </p>
<p>If you try it out, or have another software team building story, please <a title="EMail Kendall Miller" href="mailto:kendall.miller@esymmetrix.com" target="_blank">drop me a line</a> and tell me how it went, or leave a comment below.</p>
]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/development/code-monkey-challenge/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technology Debt?  Don&#8217;t bet on it.</title>
		<link>http://reliable.esymmetrix.com/development/technology-debt-dont-bet-on-it</link>
		<comments>http://reliable.esymmetrix.com/development/technology-debt-dont-bet-on-it#comments</comments>
		<pubDate>Sun, 27 Jul 2008 19:21:11 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[IT Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software Development Process]]></category>
		<category><![CDATA[Technology Debt]]></category>

		<guid isPermaLink="false">http://kendall.srellim.org/?p=43</guid>
		<description><![CDATA[In the past two years I&#8217;ve heard the term Technology Debt thrown around to justify a number of technology decisions.  In an effort to come up with a term that would bridge the business-technology gap, someone came up with Technology Debt to indicate that you were basically creating a future liability that would have to [...]]]></description>
			<content:encoded><![CDATA[<p>In the past two years I&#8217;ve heard the term Technology Debt thrown around to justify a number of technology decisions.  In an effort to come up with a term that would bridge the business-technology gap, someone came up with <a title="OnStartups:  Development SHort Cuts are Not Free" href="http://onstartups.com/home/tabid/3339/bid/165/Development-Short-Cuts-Are-Not-Free-Understanding-Technology-Debt.aspx" target="_blank">Technology Debt</a> to indicate that you were basically <strong>creating a future liability that would have to be paid back </strong>- rewriting a section of code or switching out a module, whatever.  Since business folks deal with assets and liabilities routinely, expressing subtle technology problems in financial terms has a lot of appeal.  The basic concept is most frequently used in relationship to software: Let&#8217;s say you defer something to a future release so you can get the release out the door.  Perhaps the feature will only work for very few customers but you don&#8217;t have time to generalize it, or the solution won&#8217;t scale as new users are added.</p>
<p>This is fine as far as it goes, but like any metaphor while it may be a way of explaining some aspects where two things are in common <strong>it&#8217;s very easy to overextend</strong> because in fact it isn&#8217;t a true financial liability.</p>
<p>Take a hypothetical example: You are supposed to add federated identity to your web application. What you <em>want </em>to do is create an identity broker that will allow your SaaS application to connect with Microsoft&#8217;s <a title="Microsoft: ADFS" href="http://www.microsoft.com/windowsserver2003/techinfo/overview/adfsoverview.mspx" target="_blank">ADFS</a>, <a title="OpenID" href="http://openid.net/" target="_blank">OpenID</a>, and a few variations of <a title="OASIS Security Services" href="http://www.oasis-open.org/committees/security/" target="_blank">SAML</a>. You believe this will get you the market reach you need, and by creating your own identity broker you can decouple your application from changes in this still evolving space, as well as support your own native security technique.</p>
<p>As you dig into it, you realize that this just isn&#8217;t feasible in the time you have: <strong>You need to get a solution done in two months</strong> to meet a commitment to a customer, and it turns out this customer just uses ADFS. It just so happens that your web framework can easily work with ADFS directly, so to save the schedule you drop back and just do ADFS. From a development standpoint this is a hack &#8211; you are doing something quickly you can&#8217;t extend to meet the original requirement and you&#8217;re pretty sure that you&#8217;ll need to undo this later and do it right, which will cost more than just doing it right the first time. This is Technology Debt.</p>
<h2>Metaphors have Limited Application</h2>
<p>The metaphor doesn&#8217;t hold for long.  First, unlike real debt <strong>there is no external requirement to pay this back</strong>.  Perhaps you never will need to support more than ADFS, or that after all of the talk customers just won&#8217;t adopt federated identity.  At the start of each release cycle, you can look at the competitive market and see what is the correct, most important work to be done.  It might be that you&#8217;ll have to make good on something you deferred, but you might not.  If you didn&#8217;t, it never was debt.  How confident are you that you can tell the difference right now?</p>
<p>Second, <strong>all technology has future liability.</strong> The more code you write, the more you have to maintain and support. That has a cost as well for the future. Depending on the nature of your product it could mean that you have to support questionable past API decisions or obscure and intricate features of your product. Every feature has a cost to maintain, every line of code you use or reference in a third party library has weight. Only talking about deferred development as technology debt implies that what you have right now is all asset, but it isn&#8217;t.</p>
<h2>Rampant Misuse</h2>
<p>The biggest challenge I&#8217;ve seen is that <strong>the metaphor is used to push development team goals on the business</strong> without having to adequately justify them.  By handing business folks something they can easily relate to, it&#8217;s easy to gloss over the underlying technical implications.</p>
<p>For example, say you have an application that&#8217;s currently written in Visual Basic 6.  You can justly claim that Microsoft has dropped support for it and that <strong>the day is coming when it will no longer run</strong> on the latest operating system (Microsoft has committed that it will run on Vista and Windows Server 2008, but that will likely be the end). This sounds very alarming indeed!  Naturally, the answer is to rewrite the entire application in .NET 3.5. Yes, this will take longer and cost a lot more than just adding the features you need to the existing code, but it eliminates all of the technology debt represented by that old nasty VB6 code.</p>
<p><strong>Now look at it a little more objectively.</strong> Yes, you will need to eliminate that VB6 code at some point &#8211; notably when you are upgrading from Vista to whatever&#8217;s next.  When will that be?  Well, if you believe the hype that people love Windows XP and may just consider Vista in the future, you have some calendar time. As long as it&#8217;s done by then, Microsoft dropping support isn&#8217;t a real issue.  We&#8217;ve yet to work with a client who&#8217;s VB6 application didn&#8217;t work just fine on Vista, thank you very much.</p>
<p>Second, with rare exception<strong> every modern technology has a half-life</strong>. The notable exceptions are COBOL, C, and C++.  You can with confidence know that these languages are still going to be in active use in 15 years and that code you create now will work with minor to modest adjustment on current platforms at that time.  I would dispute if a similar claim can be made for the latest crop of languages.  A major reason for this is that modern languages are really whole environments &#8211; a programming language and an API/runtime.  While it may be theoretically possible to write a C# compiler without toting along the .NET runtime, it isn&#8217;t going to happen.  Likewise for PHP, RoR, and even Java.  Java&#8217;s framework is much more shallow which ironically will likely give it more life because it can adapt to radical changes in computing environments and there is already an intent to decouple most of the code from specific frameworks.</p>
<p>This means that <strong>today&#8217;s latest and greatest environment will be tomorrows VB6</strong>.  Just listen to people that jumped on .NET 1.1 discuss how they&#8217;re going to upgrade to .NET 2.0 or later, and that&#8217;s really not a particularly dramatic move.</p>
<p>Fundamentally, when you purchase software you&#8217;re making <a title="Reliable Systems: Technology is not Scalable" href="http://reliable.esymmetrix.com/development/technology-is-not-scalable" target="_self">a bet in the vendor and community behind it</a>. This is one place where the LAMP stack has a number of advantages because of the openness of the environment and the institutionalized tolerance of actively supporting releases for a long time. This is fundamentally enabled by their open source nature, but even if you had the source code for a commercial product it&#8217;s not likely you could do much with it; unless it&#8217;s fairly simple the burden of maintenance is likely higher than the cost of replacing it. Counteracting this are a lot of hidden costs to open source that may be difficult for a small team to absorb.</p>
<h2>Easy Metaphors Seldom Produce Great Outcomes</h2>
<p>Next time you&#8217;re trying to bridge the gap from technology to business, try to <strong>stay away from simple metaphors</strong> like Technology Debt. Instead, <strong>have real conversations to articulate the potential business impacts of the technical decisions </strong>and then hear from the business what they are concerned about. With a real dialog, everyone is in on why you deferred work to later and what bet is being made, and no one will be surprised when you do show up in a year to start porting that VB6 app to .NET.</p>
]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/development/technology-debt-dont-bet-on-it/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Best Technology For You</title>
		<link>http://reliable.esymmetrix.com/development/the-best-technology-for-you</link>
		<comments>http://reliable.esymmetrix.com/development/the-best-technology-for-you#comments</comments>
		<pubDate>Mon, 14 Jul 2008 03:44:40 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Technology Selection]]></category>

		<guid isPermaLink="false">http://kendall.srellim.org/?p=49</guid>
		<description><![CDATA[If you spent several hours some afternoon researching on the web what technology is the best for your next project, you&#8217;d probably come to the following conclusions:  Linux is the best, or perhaps the Macintosh&#8230;  Of course everything can be written in PHP or Ruby on Rails.  If you&#8217;re feeling very stuffy, you might be old [...]]]></description>
			<content:encoded><![CDATA[<p>If you spent several hours some afternoon researching on the web what technology is the best for your next project, you&#8217;d probably come to the following conclusions:  Linux is the best, or perhaps the Macintosh&#8230;  Of course everything can be written in PHP or Ruby on Rails.  If you&#8217;re feeling <em>very </em>stuffy, you might be old fashioned and use Java or .NET, Windows or any flavor of Unix that isn&#8217;t Linux.  For your database you should just store everything as XML files, but if you feel <em>compelled</em> to have a database use MySQL.  But if you&#8217;re still a slave to the 1990&#8217;s then you might decide to keep using the corporate dinosaur<strong>-</strong> Oracle or Microsoft SQL Server.  In the end, the only constant is that <strong>whatever you&#8217;ve used in the past is certainly out of fashion and certainly a slow, archaic approach</strong> to solving problems.</p>
<p>Nearly all teams work within a relatively closed ecosystem &#8211; the technologies and people represent only a minor subset of all technologies available today.  Even within these small groups the number of choices at every level are daunting.  Even if you&#8217;ve selected your OS, language, framework, and database &#8211; what architecture model are you going to use?  What is your data access and caching strategy?  At each turn you&#8217;ll want to pick the best option but have a flood of choices to select from.  Many people can tell you about how they led a project that used any particular technology and it worked like a champ with no drawbacks.  On the surface it makes it possible to defend just about any new technology as the way to get your next project done.</p>
<p>What is very hard to find is a real comparative analysis that highlights in comparable situations the results with different technologies.  It&#8217;s not a surprise this is so &#8211; such analysis is very expensive and time consuming, and few companies would try to solve the same exact problem using competing technologies because it&#8217;s not the business they&#8217;re in.</p>
<p>Where does this leave you?  What technology should you use on the next project?  Most likely, you&#8217;ll have <strong>the best success with an incremental improvement on the technologies you already have in your toolkit</strong>.  Why?</p>
<h2>Infinite Solutions in Infinite Diversity</h2>
<p>Most conversations in technology on the web are <em>exclusive </em>- they advocate <em>X over Y</em> or <em>Y over X</em>.  The truth is much more that X <em>or </em>Y can both solve the problem but do it in different ways and with different levels of effort for a team <strong>starting from scratch</strong>.  What&#8217;s much more useful is to ask why you <em>can&#8217;t </em>solve the problem effectively with the tools and technologies that are a natural fit for your environment.  Even if a new technology may be the easiest way to solve the specific problem you&#8217;re looking at it may not be the best choice when you consider everything that goes into creating the entire software system and maintaining it over time.</p>
<p>When confronted with a strong advocate for a technology shift, keep the conversation focused on the benefits of shifting away from the natural or familiar selections for your organization.</p>
<h2>New Methods are Expensive</h2>
<p>When you introduce new technologies or tools there is always a short term hit.  Most <a title="Steve McConnnell: Classic Mistakes" href="http://www.stevemcconnell.com/rdenum.htm" target="_blank">respected research</a> indicates that even technologies and tools that have a substantial improvement in effectiveness are at best neutral on the first project that uses them.  The most successful technologies and tools are ones that are evolutions of things your team already knows.  The more divergent it is from that, the more time it will take to get over the learning curve, establish best practices, and generally become effective.</p>
<h2>Known Problems vs. Unknown Problems</h2>
<p>A common challenge when comparing a new technology against existing methods is not recognizing that while you know of all of the problems with your existing technologies, you don&#8217;t know of the problems with the new ones.  This can lead to a comparison that shows a number of critical problems with the current technology, and none on the new technology.  <strong>It isn&#8217;t that there aren&#8217;t problems with the new technology, it&#8217;s that you don&#8217;t know what they are yet.</strong> Whenever you put in a new technology, no matter how promising it is,<strong> it is going to have new, unexpected problems</strong>.</p>
<p>What&#8217;s worse is that your organization most likely has workarounds for every problem you&#8217;ve encountered, so they don&#8217;t really have the impact of a new problem.  Your development team may not know about them, but talk to the operations staff, support staff, and your users before you assume that a technology problem that worries you really is at the top of their list.  It may be that the big memory leak in a third-party library that has you wanting to rewrite a subsystem is conquered in production by having a script reset the service every night.</p>
<h2>Existing Code and Libraries</h2>
<p>It&#8217;s very easy to underestimate the value of existing libraries and practices in effectively solving problems.  When faced with a new assignment, your developers can draw from a large pool of existing, tested solutions to a range of the more mundane, plumbing aspects of the solution.  This includes storing user information, reliably working with data storage, security systems, and other functional requirements that aren&#8217;t unique to the problem at hand.  These software libraries accrue over time as developers face similar problems even in development shops that don&#8217;t place a high emphasis on modularity and reusability &#8211; as long as you have source code control and developers that aren&#8217;t paid by the line of code, they&#8217;ll naturally find ways to adapt and remold things they&#8217;ve already done to fit new needs.</p>
<p>When you have a major technology shift, losing the use of this common body of code will require the first project to reinvent it.  On the surface this may seem straightforward but it&#8217;s usually held up by <strong>a desire to understand exactly how to best accomplish the same common tasks in the new environment</strong>.  For example, you might have written your own security system for your previous environment which you&#8217;ll then need to either re-implement or drop in favor of a built-in capability of the new environment you&#8217;re targeting.  What&#8217;s worse is <strong>you need to make these critical decisions</strong> at the time <strong>when you have the least experience</strong> with the new environment:  Is its built in security system really sufficient for your needs?  What about logging?</p>
<h2>Your Customers Don&#8217;t Care</h2>
<p>With the exception of a narrow range of situations (such as developer tools), <strong>your customers really don&#8217;t care what technology you use to implement your solution</strong>.  After all, they&#8217;re buying your <em>solution </em>not the technology you wrote it in.  Even if the IT representative of the evaluation team in a potential customer objects because your entire solution is written in a technology they don&#8217;t like, in the end they are often overruled unless they can point to a practical implication that you can&#8217;t mitigate.  For example, you may get overruled because it&#8217;s a Unix shop and they won&#8217;t accept a solution that only runs on Windows.  Even in the most extreme cases, <strong>if you provide enough customer value it will conquer any customer technology objection</strong>.  If the prospect has no Windows servers, that translates into a finite cost for them to support a unique system in their environment.  If your value well exceeds that, then it isn&#8217;t the key challenge to crossing the chasm to that prospect.</p>
<p>We often hear developers discussing internals of software development and giving them the weight of user requirements.  <strong>If it isn&#8217;t visible to the customer, it isn&#8217;t a requirement</strong>. In the end, your customers don&#8217;t pay you to have a beautiful object model.  They don&#8217;t care how hard it is for you to create your product or what hoops you have to run through.  For them, <strong>it&#8217;s a cash for capabilities decision</strong>.  It may be true that doggedly sticking with an old technology will mean you can deliver fewer features with each release, or you won&#8217;t be able to run on the latest operating system but in the eyes of your customers the question is still how compelling the functionality is and whether you can run on the operating systems they use.</p>
<h2>Ignore the Pundits</h2>
<p>If you&#8217;re part of a shop that has a track record of producing results, <strong>be proud</strong>.  Don&#8217;t worry about what is all the rage at producing the next social networking site, <strong>focus on what is effective for you</strong>.  For projects that can afford the risk, take the opportunity to incrementally improve your technologies and methods:  Try out a new version of the development framework or new capabilities of the latest database version.  Just remember, you can always tell the pioneers:  <strong>They&#8217;re the ones lying on the ground with the arrows sticking out of their backs</strong>.  Unless you&#8217;re part of a dedicated research team, most often you&#8217;ll get the best results by waiting for the first round of adopters to figure out what did and didn&#8217;t pan out with the newest release and then benefit from that experience.  There&#8217;s no satisfaction in burning six months working out the kinks of version 1.0 just to have everything addressed in version 1.1 published a month later.</p>
<h2>What&#8217;s Your Experience?</h2>
<p>Have a great story about being the pioneer, working a project that was packed to the gills with the latest and greatest, only to fall on its face?  Or perhaps you found raging success completly severing your ties with the past?  <a title="EMail Kendall Miller" href="mailto:kendall.miller@esymmetrix.com">Drop me a line</a> or leave a comment about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/development/the-best-technology-for-you/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.449 seconds -->
