<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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" version="2.0">

<channel>
	<title>Reliable Systems</title>
	
	<link>http://reliable.esymmetrix.com</link>
	<description>People, Processes, Hardware and Software that deliver results every time, every where.</description>
	<pubDate>Mon, 01 Dec 2008 14:43:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/ReliableSystems" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">1694954</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.feedburner.com</feedburner:feedburnerHostname><item>
		<title>Ignore what you know - 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 - 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 - 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 - 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 - 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 - 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 - <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 - <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 - 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>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Freliable.esymmetrix.com%2Fdevelopment%2Fignore-what-you-know-demand-results';
  addthis_title  = 'Ignore+what+you+know+-+Demand+Results';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ReliableSystems?a=JUKvN"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=JUKvN" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=43YEn"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=43YEn" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=EN0Rn"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=EN0Rn" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ReliableSystems/~4/470754977" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/development/ignore-what-you-know-demand-results/feed</wfw:commentRss>
		</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 - 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 - <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 - 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 - 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 - training, repair, whatever - 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 - 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 - special on call staff, phone numbers, email contact, whatever - 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 - 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 - overwhelmingly - 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 - 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 - 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 - you aren&#8217;t going to be able to do work that requires logging in as the user if they aren&#8217;t around - 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 - 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 - 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>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Freliable.esymmetrix.com%2Fmanagement%2Fwhat-everyone-should-know-before-they-access-your-network';
  addthis_title  = 'What+Everyone+Should+Know+Before+They+Access+Your+Network';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ReliableSystems?a=DHc0L"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=DHc0L" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=e5tAl"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=e5tAl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=i1QPl"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=i1QPl" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ReliableSystems/~4/390374271" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/management/what-everyone-should-know-before-they-access-your-network/feed</wfw:commentRss>
		</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 - 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 <a title="Gibraltar Software:  Code Monkey Challenges" href="http://www.gibraltarsoftware.com/code-monkey-challenges" target="_blank">Code Monkey Challenge</a>.</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 - you can see the results at <a title="Gibraltar Software:  Code Monkey Logger" href="http://www.gibraltarsoftware.com/cmlogger" target="_blank">www.gibraltarsoftware.com</a>.  Most importantly, <strong>we achieved our result of bringing together our team members</strong>.</p>
<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 - 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 - 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 - 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>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Freliable.esymmetrix.com%2Fdevelopment%2Fcode-monkey-challenge';
  addthis_title  = 'Code+Monkey+Challenge';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ReliableSystems?a=aULFO"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=aULFO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=ZElTo"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=ZElTo" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=5vqjo"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=5vqjo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ReliableSystems/~4/378526015" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/development/code-monkey-challenge/feed</wfw:commentRss>
		</item>
		<item>
		<title>Technology Debt?  Don’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 - 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 - 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 - 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://kendall.srellim.org/wp-admin/post.php?action=edit&amp;post=24">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>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Freliable.esymmetrix.com%2Fdevelopment%2Ftechnology-debt-dont-bet-on-it';
  addthis_title  = 'Technology+Debt%3F++Don%26%238217%3Bt+bet+on+it.';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ReliableSystems?a=whg9O"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=whg9O" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=TByWo"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=TByWo" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=l9rHo"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=l9rHo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ReliableSystems/~4/362543837" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/development/technology-debt-dont-bet-on-it/feed</wfw:commentRss>
		</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 - 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 - 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 - 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 - 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>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Freliable.esymmetrix.com%2Fdevelopment%2Fthe-best-technology-for-you';
  addthis_title  = 'The+Best+Technology+For+You';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ReliableSystems?a=VLC4O"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=VLC4O" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=wIpdo"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=wIpdo" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=SjwRo"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=SjwRo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ReliableSystems/~4/362543838" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/development/the-best-technology-for-you/feed</wfw:commentRss>
		</item>
		<item>
		<title>Pick Your Scale, any Scale.</title>
		<link>http://reliable.esymmetrix.com/development/pick-your-scale-any-scale</link>
		<comments>http://reliable.esymmetrix.com/development/pick-your-scale-any-scale#comments</comments>
		<pubDate>Mon, 07 Jul 2008 03:51:17 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
		
		<category><![CDATA[Management]]></category>

		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[Infrastructure]]></category>

		<category><![CDATA[IT Management]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[Project Management]]></category>

		<category><![CDATA[Scalability]]></category>

		<category><![CDATA[Technology Selection]]></category>

		<guid isPermaLink="false">http://kendall.srellim.org/?p=23</guid>
		<description><![CDATA[Let&#8217;s say you&#8217;re starting a project to create a new software system. How big does it need to scale? Realistically, either:

This new system fits into an existing business, possibly replacing a prior application, so you can predict with some accuracy the different aspects of scalability that apply to it.
It doesn&#8217;t, and you can&#8217;t.

The second scenario [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s say you&#8217;re starting a project to create a new software system. How big does it need to scale? Realistically, either:</p>
<ol>
<li>This new system fits into an existing business, possibly replacing a prior application, so you can predict with some accuracy the different aspects of scalability that apply to it.</li>
<li><strong>It doesn&#8217;t, and you can&#8217;t.</strong></li>
</ol>
<p>The second scenario is the most interesting one. First off, let&#8217;s face it - your new system isn&#8217;t going to be the next Facebook, MySpace, or eBay. In short, you don&#8217;t need to worry about having your system needing to be designed front to back as a super-scalable system. This is good because the options at that level are time consuming and resource intensive.</p>
<p>The key question you need to understand when laying out a new software system is to what degree it needs to scale without being re-written? This scale is unlikely to be your &#8220;best case&#8221; business size, because scalability has opportunity cost. This scale should be defined as specifically as reasonable, and clearly understood and validated by both business and technical staff. This ensures that if your business grows beyond expectations that it won&#8217;t come as a surprise if you need to make even major changes to your system.</p>
<h2>Creating facts from Air</h2>
<p>Let&#8217;s say you&#8217;re starting to develop an application that fits into the second category above. You still need to work out what your scalability target is.</p>
<p>To make any decision that is better than random, you have to work out some aspects of the expected scaling of the application. In the absence of <em>real </em>facts to extrapolate scalability from, you need to cooperate with the business side to established <em>presumed </em>facts of the scalability requirements. This may sound a lot like assumptions, but they really go beyond that because these will <em>become </em>facts as you develop the system. As a starting point, make it clear to all involved that:</p>
<ol>
<li>If the targets are low, it should be assumed you&#8217;ll have to turn away business because the system can&#8217;t scale above them.</li>
<li>If the targets are high, the system will cost more and take longer to create.</li>
</ol>
<p>In most businesses, the second outcome is worse than the first. Why? Because the second is a price you pay up front, before the system goes into service. The first is based on an assumption: you might have to turn away business. You also might be able to realize it in time and address the issue. From a business standpoint, this is a better trade off. Finally, there&#8217;s the non-technical aspects:</p>
<ol>
<li>The sooner you have a working system, the sooner the business can validate the market and start getting real data on uptake to adjust your scalability goals</li>
<li>Unless the product is a failure, you expect demand to eventually exceed the capacity of the system, it&#8217;s just a matter of when. If it does, then you should be able to afford rewriting all or part of the system. In other words, the funds to solve the problem should be available if you have the problem.</li>
</ol>
<p>From this comes an axiom of scalability:</p>
<blockquote><p>The system needs to be based on the lowest scale that will provide enough time and money to replace it with a new system.</p></blockquote>
<p>Put another way, a system that is faster or more scalable than it needs to be for the business was more expensive and took longer to develop than necessary. Think of it like a race car: The ideal Indy Car would fall apart just after the judges validated it won without breaking the rules. Any stronger and that strength could have been put into something else. The time you spent making it more scalable than necessary could have added more features, fixed more defects, or gotten it out the door sooner.</p>
<h2>Establish a Growth Curve</h2>
<p>The growth curve needs to be sufficient to inform the developers of what decisions to make at each point. To get there, start with describing the scale from the business stand point. During design of the actual system you can keep translating this into the specific requirements for speed, storage, and capacity based on the behavior of the actual system. This will prevent you from achieving technical goals that don&#8217;t satisfy the business goals.</p>
<p>For most systems, you want to establish the business goals for:</p>
<ol>
<li><strong>Number of Possible Users: </strong>How many accounts will there be on the system? This is an upper bound of the number of people that could access the system if they wanted to.</li>
<li><strong>Number of Simultaneous Users: </strong>Number of accounts that will be accessing the system at the same time. For most applications, at the same time is likely best thought of as in the same 15-30 minutes.</li>
<li><strong>Number of Customers: </strong>For most applications delivered to businesses the number of customers (e.g. businesses) drives the scalability of some parts of the system (such as configuration and data storage) will scale based on the number of customers, not the number of accounts those customers have.</li>
<li><strong>Data In and Out: </strong>If the system is going to have any imports and exports that aren&#8217;t user-driven (such as EDI feeds or a public API) then the number of partners (other entities that will exchange information with you) and the frequency of exchange need to be determined.</li>
</ol>
<p>Things to not bother with:</p>
<ol>
<li><strong>Response Time:</strong> For customer interactive products, response time is dictated by what end users will tolerate and is not really going to be a business decision (aside from deciding if you&#8217;re going to produce something your customers are willing to use). For non-interactive products or back-end this may need more discussion with the business, but again - the business is going to expect you to be able to figure out what will make it a success.</li>
<li><strong>Data Retention:</strong> Assume it all has to be kept and more indefinitely. In the end, storage is cheap and this design decision rarely costs a lot of made up front but is expensive to reverse. Data also has the amazing power to make heroes out of IT when the business starts posing questions later and you can answer them. Generate as many facts as you can now to help you out later.</li>
</ol>
<p>These items are past the point of diminishing returns with the business. You should work them out within the development team and document them, but you shouldn&#8217;t believe that any business sign off you might get is binding or useful.</p>
<h2>Build to the Scale</h2>
<p>Once you&#8217;ve established your growth curves, pick your candidate architecture and translate the growth curves into system performance requirements.</p>
<blockquote><p><strong>Hypothetical Example: </strong>If you need to support 1000 simultaneous users for a web application, determine the dynamic web hits per second by determining how often an average user will request a dynamic page (say ever 5 seconds, which is very fast for most dynamic applications) These two numbers would give you a dynamic hits per second of (1000/5) = 200. Then add how long each page will take to calculate (make a goal of say 250ms) to get how many requests you need to be able to process at the same time: (200 * 0.250) = 50. This is the key scale point for your web application: When deployed, it must support 50 requests being processed in parallel. You&#8217;ll need to get to this point by either making it <em>really </em>scalable on a single server, or splitting the load over multiple servers.</p></blockquote>
<p>One thing that should jump out of the math behind this is that anything you can do to make the calculation time of a single page drop pays big dividends: If you drop the average calculation time by half (125ms) then the number of requests in parallel drops by half (200*0.125) = 25. This in turn may well cut the number of servers you need in half, easing your maintenance and deployment cost. If you can&#8217;t do this, reduce the number of dynamic pages requested per second by either making more static pages (such as pre-rendering pages that change but don&#8217;t change frequently) or caching dynamic pages that have some predictable consistency (which really makes them static pages). This is often much trickier to do and test, so your best first option is to reduce the time for each page.</p>
<blockquote><p><strong>Side Point: </strong>This also highlights an easy way to accommodate guessing low on a system that&#8217;s been in service for a year or more: If you&#8217;re processor bound you can replace that hardware with current units and often pick up 30% per year it&#8217;s been since you purchased the original hardware. This won&#8217;t save you from network problems, disk storage problems, or <a title="Memory Still Matters, at least until you go 64-bit" href="http://kendall.srellim.org/development/memory-still-matters-at-least-until-you-go-64-bit" target="_self">some memory problems</a>, but it is surprisingly handy.</p></blockquote>
<p>As you look at each candidate architecture, look at each component and determine the critical &#8220;how much, how fast, how often&#8221; factors based on the business inputs. If you change your architecture or external interface design (the user interface or import/export capabilities) you need to re-evaluate if you&#8217;ve moved the targets as well because your design goals no longer reflect the business growth curves.</p>
<h2>Really, to the Scale</h2>
<p>Within your development team you will typically have two types of developers you need to watch: Those that never consider scale and those that obsessively consider scale. The former will build it however and then wait to see if there is a performance problem. The latter will try to make every system the next Amazon. Neither situation is good. Identify early people&#8217;s tendencies and work to manage them to the center. Remember that<strong> the system is only as scalable as its slowest part</strong>, and there is <em>always </em>a slowest part.</p>
<p>You can get good results by having the people that are most concerned about scalability move around on the project to different subsystems. This will tend to keep them too busy to earn the keeper of the nanosecond award on any one system (which they will do if you let them stay put and just work on one system) and will make it unlikely that more cavalier developers can hide a problem. It will also help the team learn from each other: It often isn&#8217;t worth making a specific feature as fast as possible, and it is always worth thinking about what will make a feature fast before coding it.</p>
<p>Finally, <strong>budget time in the development team to fix scalability issues. </strong>Regardless of how much work you put into it, once the real system is build and tested you&#8217;ll find places that are slower and less scalable than you expected. If nothing else, you need to develop an accurate model of how the system should perform in production so you can check the real world against it later. As your business grows, you need to be able to get ahead of it and understand when it is time to make the code faster, add hardware, or do something else to stay one step ahead.</p>
<h2>Disk is Your Friend, but Beware the Network</h2>
<p>If you&#8217;ve gone over the system from nose to tail and you&#8217;re disk bound, you&#8217;ve probably optimized that design as well as you can. Disk has gotten faster at a much slower pace than memory or processor, and being disk bound means you&#8217;re getting all the requests where they need to go in a timely manner and are able to process the inputs and outputs, so now <strong>it&#8217;s in the hands of the hardware.</strong> Unfortunately at that point there generally isn&#8217;t much more you can do: The difference in performance between server drives and the fastest drives money can buy isn&#8217;t very much.</p>
<p>If you&#8217;re finding that you aren&#8217;t disk bound and you aren&#8217;t processor bound then be worried. You&#8217;re either network throughput bound or you&#8217;re network latency bound. If you&#8217;re network throughput bound, you can probably fix it cost effectively with some basic engineering either in how you select what to send across the network or what you cache so you don&#8217;t need to send it across. You should try to give yourself some headroom here for growth, but <strong>faster networks can be purchased</strong> and you can generally tweak the software to mitigate this in minor updates.</p>
<p>Being network latency bound is a more serious issue because it often means that you are at the practical scalability limit of your application. The difference in network latency between relatively cheap hardware and the best hardware isn&#8217;t very much, and has been essentially constant for the last 10 years. <strong>You can&#8217;t buy your way out of this problem.</strong> It also is typically caused by a badly designed interface between components of the system which will need to be substantially or entirely rethought and rebuilt to address, which isn&#8217;t easy to do with a running system. If you find yourself in this situation and you aren&#8217;t sure you have met your business goals you should rethink your approach immediately. Because no amount of money on hardware can get you out of this problem, caution is the word of the day.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Freliable.esymmetrix.com%2Fdevelopment%2Fpick-your-scale-any-scale';
  addthis_title  = 'Pick+Your+Scale%2C+any+Scale.';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ReliableSystems?a=omETO"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=omETO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=hO8ro"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=hO8ro" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=ZsRso"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=ZsRso" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ReliableSystems/~4/362543839" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/development/pick-your-scale-any-scale/feed</wfw:commentRss>
		</item>
		<item>
		<title>High and Low are Equally Wrong</title>
		<link>http://reliable.esymmetrix.com/development/high-and-low-are-equally-wrong</link>
		<comments>http://reliable.esymmetrix.com/development/high-and-low-are-equally-wrong#comments</comments>
		<pubDate>Wed, 25 Jun 2008 22:21:06 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
		
		<category><![CDATA[Management]]></category>

		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[EBS]]></category>

		<category><![CDATA[IT Management]]></category>

		<category><![CDATA[Project Management]]></category>

		<category><![CDATA[Software Development Process]]></category>

		<category><![CDATA[Yak Shaving]]></category>

		<guid isPermaLink="false">http://kendall.srellim.org/?p=48</guid>
		<description><![CDATA[In software development, you&#8217;re always being asked to estimate things:  How long will the whole project take?  Just this feature?  What if we changed this feature to remove this aspect?   This is all part of the feedback cycle that is fundamental to product creation:  We have a certain amount of time and money for a [...]]]></description>
			<content:encoded><![CDATA[<p>In software development, you&#8217;re always being asked to estimate things:  How long will the whole project take?  Just this feature?  What if we changed this feature to remove this aspect?   This is all part of the feedback cycle that is fundamental to product creation:  We have a certain amount of time and money for a given set of functionality, but if there&#8217;s something really juicy and it just takes a little more time, then maybe we adjust, or if we can get a lot of value for a little effort, perhaps we do a little mini release first.  The business decisions feed the development estimates which in turn inform new business opportunities.</p>
<p>Getting the feedback wrong can be disastrous: <strong>The right functionality late can kill your business; </strong>perhaps half a loaf earlier is better.  On the other hand, some things the market won&#8217;t accept half way so a full loaf it is.  The business needs to trust the information it&#8217;s getting isn&#8217;t random or capricious to make good decisions, and the development team needs to be able to provide a best guess without fear of misunderstanding.</p>
<p>It&#8217;s natural to pad estimates with the idea that it&#8217;s better to under promise and over deliver - so that means to guess long and come in well early.  But in the end, is that really any better?</p>
<h2>You&#8217;re Guessing, and Possibly Lucky</h2>
<p>We&#8217;ve been experimenting with the new <a title="Evidence Based Scheduling" href="http://www.fogcreek.com/FogBugz/LearnMore.html?section=PredictShipDates" target="_blank">Evidence Based Scheduling </a>features of <a title="FogBugz" href="http://www.fogcreek.com/FogBugz/" target="_blank">FogBugz </a>(which we use internally for managing our software development) and one thing that it highlights quickly is that estimation isn&#8217;t good if you&#8217;re early, bad if you&#8217;re late - it&#8217;s about getting your average as close to the mark as you can.  Take a look at a graph of most of my estimates:<img class="alignnone" src="http://kendall.srellim.org/wp-content/uploads/2008/02/ebsgraph.jpg" alt="Evidenced Base Scheduling Graph" /></p>
<p><strong>Ideally, the graph line would have a 1:1 slope,</strong> indicating that on average you are accurate.  Further, you want your estimates clustered pretty near to the line itself.  What you can see from my estimate curve is that I&#8217;m uneven - I tend to underestimate shorter tasks (under 1.5 hours) and overestimate longer tasks (and that&#8217;s after removing some really bad outliers&#8230;).  But notably if you draw a ruler on the 1:1 line you&#8217;ll see that<strong> I&#8217;m not even close.</strong> Don&#8217;t let the hash lines fool you - look at the numbers to see.  The thing is, the other developers in our company that are all regarded as skilled, senior developers aren&#8217;t particularly more accurate on any one estimate, and the averages work out similarly.</p>
<h2>So what?</h2>
<p>Why isn&#8217;t it a great thing when we beat our estimates?  There are several potential pitfalls:</p>
<h2>Features based on Effort</h2>
<p>We&#8217;d all like to believe in the rosy model that our customers ask for features and then we build them into the software, so if we&#8217;re done early then it&#8217;s a pure win.  It&#8217;s my experience that it&#8217;s <strong>much more like a game of Tetris</strong>:  What features we take on is dependent on how much effort we <em>think </em>they&#8217;ll take.  Every feature has an amount of effort above which it isn&#8217;t worth it any more.  When hashing out what makes it and what doesn&#8217;t, the effort estimate is a big factor.</p>
<p>If we overestimate the effort of features, then we are slanting the project management decisions away from customer-selected features in favor of the developer&#8217;s whims.  This is because some features will be estimated to take more effort than they&#8217;re worth, and a more invisible internal team dynamic.  If a project is doing well on schedule,<strong> it&#8217;s very human to take advantage of this</strong> to try out newer, riskier things, over-engineer a feature, or do other things within the team that would otherwise be successfully argued against because of their effort.  In general, the more time available, the more <a title="Wiktionary:  Yak Shaving" href="http://en.wiktionary.org/wiki/yak_shaving" target="_blank">yak shaving</a> the team will do.</p>
<p> <a href="http://kendall.srellim.org/wp-content/uploads/2008/02/do_not_shave_yaks.jpg"><img class="aligncenter size-full wp-image-7" title="Do Not Shave Yaks" src="http://kendall.srellim.org/wp-content/uploads/2008/02/do_not_shave_yaks.jpg" alt="" width="500" height="386" /></a></p>
<p>Once a schedule is accepted, the business will tend to act on it as fact:  Customers that can&#8217;t wait for it will end up being turned away and others will be promised a schedule.  This is a necessary but painful aspect:  Developers are generally optimists and will not want to say no to a customer even though it&#8217;s generally not in the best interest of either the company or customer to rush a feature. You want the business to stick with your decisions and not pass the buck on saying no to the customer, but you also need them to trust that it&#8217;s a fair trade.</p>
<h2>Approach based on Effort</h2>
<p>Within the development team, decisions are made at every level on how to implement a feature with an eye towards both the feature&#8217;s estimate and the overall project&#8217;s status.  Even when not explicitly laid out, a <strong>team that believes the overall schedule is tight will feel pressured to find ways to reduce the effort </strong>on anything they do.  This means when deciding between a careful implementation that may take longer but be more scalable or easier to support the team will often opt for a more direct path to completion even if the estimate was based on the more careful approach.</p>
<p>If done as a conscious decision in consultation with the project&#8217;s sponsors, this can be a way of bringing the project back on track but really<strong> it&#8217;s just another way of cutting functionality to make schedule</strong>:  You&#8217;re going to cut out something you intended to deliver (say a more generalized, upgradeable framework for reporting) even though you meet the letter of the requirement in front of you (delivering a few reports).  This can lead to nasty surprises for the team down the road when your sponsor&#8217;s find out that they didn&#8217;t get what they thought they would.</p>
<p>Alternately, if you overestimate one feature it may have put another feature under pressure so a more expedient and risky approach was adopted for it to fit it into the schedule.  If the true effort had been known, a different decision could have been made.</p>
<h2>Make Your Guesses A Coin Toss</h2>
<p>In the end, being early and being late just have different ways they create problems for your development project.  Your goal when estimating is to not try to find the estimate that has the highest probability of being sufficient to get the job done but instead <strong>the estimate that is equally likely to be high as low</strong>.  In aggregate if you have enough of these items on your project (say more than 25) then you&#8217;re entire project&#8217;s estimate should also be just as likely high as low.</p>
<p><strong>There is still a place for the traditional high estimate: </strong>When you move outside of the project sponsor and the development team to users that need a guarantee.  There the downside of missing a date is much worse than the impact of being early.</p>
<p>On your next project, try out the 50/50 approach and make it clear to both the development team and the business.  You&#8217;ll probably notice that people develop a more subtle appreciation for the fact that estimates are based on probabilities.  This can help you skip over the discussions that aren&#8217;t useful about why you are where you are and instead keep focusing on the business goals for your current situation.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Freliable.esymmetrix.com%2Fdevelopment%2Fhigh-and-low-are-equally-wrong';
  addthis_title  = 'High+and+Low+are+Equally+Wrong';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ReliableSystems?a=lFarO"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=lFarO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=5OGZo"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=5OGZo" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=Q9Wto"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=Q9Wto" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ReliableSystems/~4/362543840" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/development/high-and-low-are-equally-wrong/feed</wfw:commentRss>
		</item>
		<item>
		<title>Remote Access for Everyone</title>
		<link>http://reliable.esymmetrix.com/infrastructure/remote-access-for-everyone</link>
		<comments>http://reliable.esymmetrix.com/infrastructure/remote-access-for-everyone#comments</comments>
		<pubDate>Tue, 17 Jun 2008 23:48:00 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
		
		<category><![CDATA[Infrastructure]]></category>

		<category><![CDATA[Mobile Users]]></category>

		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://kendall.srellim.org/?p=47</guid>
		<description><![CDATA[Back in the day, corporate remote access meant modem pools that people dialed into from wherever they were.  Even then it was like watching a feature film on your IPod; you got a sense of the action but it was ultimately as much frustrating as useful.
Things change.  Over the past eight years broadband [...]]]></description>
			<content:encoded><![CDATA[<p>Back in the day, corporate remote access meant modem pools that people dialed into from wherever they were.  Even then it was like watching a feature film on your IPod; you got a sense of the action but it was ultimately as much frustrating as useful.</p>
<p>Things change.  Over the past eight years broadband in some form has become available in most cities across the nation.  This bandwidth has made dedicated remote access a thing of the past.  Now you can provide remote access to your employees over your Internet connection.  Traditionally, IPSec has been the technology of choice to provide a virtual private networking solution for your employees but over the past two years there&#8217;s been a new game in town - SSL VPNs.</p>
<p>if you are using IPSec for your mobile users, you owe it to them and you to check out one of the SSL VPN options at your disposal.  We&#8217;ve used IPSec VPNs for network to network access reliably, but they&#8217;ve always been tough to support for mobile users.  Offhand, there isn&#8217;t any specific reason this should be true, but it is.  For mobile users, we seem to consistently run into a few problems:</p>
<ul>
<li><strong>Installation: </strong> The success rate for an average user being able to install an IPSec client and get the VPN tunnels to work, even with phone support, was around 15%.  Most of the time the user had to bring in the computer or we had to send a tech on site.</li>
<li><strong>Compatibility: </strong> Different physical network technologies - notably DSL - run into performance problems with IPSec in many configurations, requiring adjustments on the client, routers, or other things that you just can&#8217;t expect end users to understand.</li>
<li><strong>Portability: </strong> IPSec is very easy to block on a network.  In fact, it took some time for most network routers to be compatible with IPSec.  Now try to get it to work at 8 PM over a wireless network in a hotel in Buffalo.</li>
</ul>
<p>In contrast, a few years ago at the urging of <a title="Watchguard" href="http://www.watchguard.com/" target="_blank">Watchguard</a> (our resident firewall vendor) we tried out their SSL VPN product, which was basically a version of the <a title="Citrix Web Site" href="http://www.citrix.com/lang/English/home.asp" target="_blank">Citrix</a> Access Gateway SSL VPN solution running on a Watchguard hardware appliance.  Out of the box it worked - every time, and even faster than IPSec.  We had resisted the option because we preferred standards-based solutions, and this sounded like yet another proprietary security technology.  We used a demonstration appliance for a month but the feedback from our users was so strong we purchased a unit after a few weeks.  Upon reflection, there really is a good bit of sense to why it works so well:</p>
<ul>
<li><strong>SSL is Simple, IPSec is complicated: </strong>SSL is a single TCP/IP socket with a relatively straightforward, self-configuring, and invisible to intervening appliances.</li>
<li><strong>SSL is essential, IPSec is a threat: </strong> No one can afford to block SSL on their network without basically admitting to not having a network at all.  It&#8217;s very expensive to proxy by decrypting and re-encrypting, so few companies do it.  On the other hand, many networks view with suspicion the goal of establishing an encrypted connection out of their network, so blocking IPSec may sound like a good idea.</li>
</ul>
<p>With the SSL VPN solution we had about an 85% end-user self install rate without support, and a 100% rate of not requiring a tech to go on site.  Even better, the reviews from end users was that it was fast to connect, easy to use, and performance was good.  Because it was so easy to get set up, many more users started connecting from home in the evenings or in bad weather to get work done.  The net cost? While your firewall probably offers an IPSec client for free, you can expect to pay a few thousand for a dedicated SSL VPN appliance and depending on licensing $50-$200 per concurrent additional user after the first five or so.  For a company with say 100 users that might have at most 20 concurrent users the cost is in the order of $4,000 to $6,000.</p>
<h2>Making the Business Case</h2>
<p>Jumping from &#8220;free&#8221; to $6,000 may seem questionable until you look at it from the value standpoint:  A service that was expensive to setup and of questionable reliability became cheap to set up and rock solid.   In other words, this is the real cost to provide this service.  An unreliable solution isn&#8217;t a business solution.  If it&#8217;s more than your business is willing to pay, wait a little while - the cost has come down by half in the last two years, and some vendors (like Watchguard in their Fireware Pro product) are offering it alongside their free IPSec VPN option.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Freliable.esymmetrix.com%2Finfrastructure%2Fremote-access-for-everyone';
  addthis_title  = 'Remote+Access+for+Everyone';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ReliableSystems?a=xsKeO"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=xsKeO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=wGOxo"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=wGOxo" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=LTDeo"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=LTDeo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ReliableSystems/~4/362543841" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/infrastructure/remote-access-for-everyone/feed</wfw:commentRss>
		</item>
		<item>
		<title>So Why are You Still Hosting?</title>
		<link>http://reliable.esymmetrix.com/infrastructure/so-why-are-you-still-hosting</link>
		<comments>http://reliable.esymmetrix.com/infrastructure/so-why-are-you-still-hosting#comments</comments>
		<pubDate>Fri, 13 Jun 2008 05:18:44 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
		
		<category><![CDATA[Infrastructure]]></category>

		<category><![CDATA[Management]]></category>

		<category><![CDATA[IT Management]]></category>

		<category><![CDATA[IT Operations]]></category>

		<guid isPermaLink="false">http://kendall.srellim.org/?p=46</guid>
		<description><![CDATA[Right now, the power is out at my home. That doesn&#8217;t happen often - in fact, it&#8217;s been almost two years since we lost power long enough for my UPS to shut down my home network. Normally this would be a small inconvenience, but I still host a few things for my wife out of [...]]]></description>
			<content:encoded><![CDATA[<p>Right now, the power is out at my home. That doesn&#8217;t happen often - in fact, it&#8217;s been almost two years since we lost power long enough for my UPS to shut down my home network. Normally this would be a small inconvenience, but I still host a few things for my wife out of my house which are now down. The largest of these is a fairly popular forum for an author she likes, but there are other sites as well.</p>
<p>Why am I still hosting these at home? Really there&#8217;s no reason - I&#8217;ve shifted hosting for my personal services out to other providers, and our company services are also hosted by hosting companies.  I just haven&#8217;t moved her stuff out of my house.</p>
<p>We talk with a lot of small and medium sized businesses that are still hosting all of their own services internally for pretty much the same reasons - they originally had them in house when they were much smaller and the market was different, and haven&#8217;t considered what it would mean to have those computers live somewhere else.  <strong>It&#8217;s time for a change.</strong></p>
<h2>Why It&#8217;s time to Use the Cloud</h2>
<p>You should look at all of your important business services - things that your business can&#8217;t operate without - and work out a plan to no longer host those items in your facility.   As a first step, just consider what it means to <strong>provide the same applications and services, but have the computers not live within your company.</strong> The main goals for moving these services out are:</p>
<ol>
<li><strong>Business Agility: </strong>When you use a hosting company it&#8217;s easier to change capacity as your needs change, even to bring services up temporarily as a trial run and then shut them down if they don&#8217;t pan out.   This makes it easy to experiment with new software technology without the traditional problems of hosting getting in the way.</li>
<li><strong>Low Cost Reliability: </strong>If you want those services available, the cost to outfit a room to provide redundant cooling and power for a single rack of equipment is easily $50,000.   To host one rack of equipment in a basic Tier-2 data center can cost around $1,500 to $3000 a month, which includes power and Internet.  At that rate, how quickly will you get an ROI on your facility investment?</li>
<li><strong>Improved Focus:</strong> Getting this equipment out of your shop improves your focus on the things you really need to be spending time on:  Projects for the business and end-user support.  <strong>The rest of it is overhead.</strong></li>
<li><strong>Access from Anywhere:</strong> When you set up your services so they can live in the cloud and be used from your office, it&#8217;s easy to make those same services available to employees from home and from laptops.  Not as second class citizens but with all of the ranks and privileges of being in the office.  This helps you leverage employee talent wherever it is.  It&#8217;s also easier to set up rock-solid extranet access for customers and suppliers.</li>
</ol>
<p>When you start looking at each thing you provide as a service, you might also find that some of them - like Microsoft Exchange - really aren&#8217;t worth hosting yourself at all even in a data center, and it&#8217;d be ultimately in your best interest to outsource it entirely to a hosted Exchange provider.   There are number that can do this very effectively.  While the cost may seem high based on what it cost you to purchase your initial Exchange licenses, when you look at the real cash costs for Exchange over two to three years they are very cost effective.</p>
<p>Once you&#8217;ve taken the step of taking an existing service and outsourced it entirely, you might even consider a Software as a Service offering for some of your core services (such as a hosted CRM). This is the most aggressive mode of outsourcing and does create a set of unique risks and opportunities.</p>
<h2>But I can&#8217;t See It</h2>
<p>Two common objections we hear from IT administrators about moving services out of their shop, even if it&#8217;s just relocating servers into a data center. is that it will make it hard for them to get upgrades when necessary because the business won&#8217;t be able to see &amp; feel the new equipment.  <strong>Out of sight, out of mind</strong> as the saying goes.  The second main objection is that the IT administrators want to be able to do a <strong>laying of hands</strong> on the equipment to maintain it.  There&#8217;s a comfort factor in knowing you can walk into a room and flip the power switch or move a drive or just bask in the warm glow of blinking lights.</p>
<p><strong>Here&#8217;s the good news: </strong>Both of these reasons are not only suspect in their own right, but are preventing your shop from getting to the next level in IT&#8217;s relationship with the business.</p>
<p>First, even though vendors do a good job of making server hardware look serious and fun, in the end <strong>it&#8217;s just a business appliance</strong>:  It either is good enough to deliver for the business or it isn&#8217;t.    With rare exception, there is no extra business value for it to look good, new, or cool.    If you find that you need to show the business physical servers to explain your costs, you&#8217;re missing out on the critical opportunity to establish <strong>a real partnership between business and IT</strong>.    You need to be sure you&#8217;re spending when it&#8217;s time to spend and saving when it&#8217;s time to save, and have discussions in the language the business would use for any other service it would acquire.</p>
<p>Second, If your IT administration patterns and practices require routinely touching your physical infrastructure then you need to re-examine them.    It generally means you either have equipment that is no longer up to the task or that you&#8217;re not doing enough automation of IT tasks.    If you have trouble-prone hardware, it&#8217;s time to either <strong>fix the fundamental issue or ditch the hardware</strong>.    Ironically, this type of problem is often easier in a hosted environment because it generally isn&#8217;t your problem: it&#8217;s the hosting company&#8217;s.</p>
<p>Automation is essential because humans are the most error-prone part of any standard process.   Your routine IT administration time shouldn&#8217;t be going to consistent tasks - they should be automated, leaving your time for user support and other business value-add services.    That&#8217;s right - even in your shop with your existing staff you can find more time to spend on projects instead of support events by automating recurring tasks.</p>
<h2>Some Things Still Stay</h2>
<p>There are some things that should be on site for performance reasons.   Regardless of how big your Internet connection is, <strong>you&#8217;re going to want basic file and printer sharing services to be local.</strong> Depending on the size of your site, you&#8217;ll probably also want a directory server for whatever your directory system is (e.g. Microsoft Active Directory).   Even here the central services help:  If you have a reasonable Internet connection, you can <strong>have your local file server back itself up to the data center</strong> by using one of a few distributed backup systems (such as <a title="Microsoft Data Protection Manager" href="http://www.microsoft.com/systemcenter/dpm/default.mspx">Microsoft&#8217;s Data Protection Manager </a>or a third-party option like NSI Software&#8217;s Double-Take).   This eliminates the time and attention that local disk backups require.</p>
<h2>Perhaps not Now, but Soon - and For the Rest of Your Life</h2>
<p>It may not be appropriate to move a number of your services outside yet; If you have only one business site, light access by employees externally, and aren&#8217;t expecting that to change then you can host most things yourself.    A number of the considerations still apply - but you might just use an external facility for your public web presence and for backing up your essential data for business continuity.</p>
<p>Even if you don&#8217;t do much now, you should <strong>find some opportunity to put a service outside</strong> so you and your company can gain experience at working with external hosting providers and you&#8217;ll stay current on the capabilities and costs so that as new business requirements evolve you&#8217;re ready to take care of them.  You&#8217;ll be in a better position to advise your company on when to move things out of the shop, and as you do you&#8217;ll discover that instead of focusing your time and talent inward at the routine operations of infrastructure you&#8217;ll have time for those projects that really make a difference to your business.</p>
<h2>How Has the Cloud Delivered For You?</h2>
<p>Have a story about what has and hasn&#8217;t worked with hosting?  <a title="EMail Kendall Miller" href="mailto:kendall.miller@esymmetrix.com">Drop me a line</a> or post a comment to share it.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Freliable.esymmetrix.com%2Finfrastructure%2Fso-why-are-you-still-hosting';
  addthis_title  = 'So+Why+are+You+Still+Hosting%3F';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ReliableSystems?a=YPYnO"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=YPYnO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=d2jho"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=d2jho" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=AC43o"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=AC43o" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ReliableSystems/~4/362543842" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/infrastructure/so-why-are-you-still-hosting/feed</wfw:commentRss>
		</item>
		<item>
		<title>Make Multiscreen the Rule</title>
		<link>http://reliable.esymmetrix.com/uncategorized/make-multiscreen-the-rule</link>
		<comments>http://reliable.esymmetrix.com/uncategorized/make-multiscreen-the-rule#comments</comments>
		<pubDate>Sat, 07 Jun 2008 23:02:05 +0000</pubDate>
		<dc:creator>Kendall Miller</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://kendall.srellim.org/?p=45</guid>
		<description><![CDATA[I&#8217;ve been a big fan of multiple screens on any computer I use - going back to my first job where I put an older portrait display on my Macintosh IIcx.  In that day (1991) it was one of the most amazing features of the Macintosh - you could just pop in extra cards [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been a big fan of multiple screens on any computer I use - going back to my first job where I put an older portrait display on my Macintosh IIcx.  In that day (1991) it was one of the most amazing features of the Macintosh - you could just pop in extra cards and connect screens, and boom - have a wildly shaped desktop with different color capabilities and purposes.</p>
<p>Ever since in every shop I visit I push for two screens to be the default configuration of any computer.   Large screens are great, but there are real practical limits where a larger screen doesn&#8217;t do much for productivity, but a second screen will.  The best part is that two modest sized screens are invariably cheaper than the same number of pixels in a large screen due to manufacturing cost.</p>
<h2>Bring On the Workspace</h2>
<p>The primary advantage of two or more screens is they are a very cost effective way of increasing the amount  of information your users can see at one time.  For between $200 and $400, you can add a 19&#8243; LCD flat panel to a system.  With that, users can do several tasks much easier:</p>
<ol type="1">
<li><strong>Comparisons:</strong> When you want to compare two things, say two Word documents or spreadsheets, it&#8217;s generally ideal to have twice as much desktop area as you normally use for just one.  This allows you to interact with each the way you&#8217;re used to without having to adjust to navigation and toolbars being in the wrong place because you&#8217;re cramming things into a size you don&#8217;t normally use (and the document may not be oriented for.</li>
<li><strong>Active and Background tasks:</strong> A great use of multiple screens is to have one for your active working task and another for background tasks you are monitoring.  For example, put Outlook on a secondary screen and your main task (say development, writing an article, or analyzing a spreadsheet) on your main screen.  In this configuration, it&#8217;s important that your main screen is directly in front of you and your secondary screen is off to the side where it won&#8217;t be distracting.</li>
</ol>
<h2>Why Not Just Bigger?</h2>
<p>Why not just get one larger monitor?  There are a few advantages to multiple displays.</p>
<ol type="1">
<li><strong>Maximize Behavior:</strong> When you maximize a window, it goes to the dimensions of the monitor it&#8217;s on.  This makes it really easy to move windows from screen to screen quickly because you just need to maximize it then drag it, it will size to the full extent of the target window.  Get to love maximize - if you can see the background, you&#8217;re not displaying as much information as you could.</li>
<li><strong>Too big is too big:</strong> You should be able to see the entire extent of your screen without moving your head and really without moving your eyes a lot.  The entire screen should be in your peripheral vision.  With very large screens, you&#8217;ll tend to find that you don&#8217;t use all the screen because some is too far to the left or right for comfort.  This is particularly an issue with the latest very large widescreen monitors (over 24 inches diagonally).  If you find that you just can&#8217;t use the entire screen, then that monitor is just too big, you really should have another.</li>
<li><strong>Optimize for Purpose:</strong> Instead of accepting just one generally good shape and set of capabilities you can optimize different screens for different uses.  When using two screens, I like to have my primary be a 24&#8243; widescreen and my secondary be a 20&#8243; normal aspect ratio.  This fits well with my normal set of activities where I want some extra width for my primary activities but I find that I like the normal ratio for my background task screen where I leave Outlook and put things like online help windows, web sites I&#8217;m monitoring, etc.  I worked with a quality assurance manager who had three screens with the center one in portrait orientation which fit her work very well - she would have the application being tested on one screen, the QA tracking application on another, and her email or other background window on a third.</li>
</ol>
<h2>Common Objections</h2>
<p>The most common objection, particularly from people that aren&#8217;t used to working with multiple screens, is that <strong>it&#8217;s too expensive.</strong> This is usually because the cost is viewed as a percentage of increase to new computer cost.   From that standpoint it looks significant - if your shop tries to keep individual computers in the $1500 range (which is very easy in the current market for a typical desktop) this will increase the cost by around $250, closing in on 20%!  Why, that would require that you increase your budget for desktop PC purchases by 20%, who&#8217;s going to pay for that?</p>
<p>This objection completely ignores both the total cost of ownership of a computer and, more importantly, <strong>the</strong> <strong>value of the computer as a tool to the user.</strong> A second screen adds very little to the TCO over one screen (LCD monitors are low support cost items) so if you looked at the entire cost of the PC over its life - say $5000 - this cost is much more reasonable.</p>
<p>A second objection is that users will not use it for productivity gains but to instead couple non-work activities with work time or in general just not be able to make effective use of the space.  While users may become very successful on their own with multiple screens, some quick orientation on how to make the best use multiple screens will pay off with users changing how they work with applications to take advantage of the new capability.  If you don&#8217;t do this, many will pick it up on their own as they watch their peers.</p>
<p>At the last company I worked at before eSymmetrix, I finally achieved the goal of everyone - even the receptionist - having two screens.   No more was it a privilege for the elite or the engineers; the benefits apply to any information worker so it was done everywhere.</p>
<script type="text/javascript">
  addthis_url    = 'http%3A%2F%2Freliable.esymmetrix.com%2Funcategorized%2Fmake-multiscreen-the-rule';
  addthis_title  = 'Make+Multiscreen+the+Rule';
  addthis_pub    = '';
</script><script type="text/javascript" src="http://s7.addthis.com/js/addthis_widget.php?v=12" ></script>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/ReliableSystems?a=CbvMO"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=CbvMO" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=8b9Ko"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=8b9Ko" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/ReliableSystems?a=xgMEo"><img src="http://feeds.feedburner.com/~f/ReliableSystems?i=xgMEo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ReliableSystems/~4/362543843" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://reliable.esymmetrix.com/uncategorized/make-multiscreen-the-rule/feed</wfw:commentRss>
		</item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 67.058 seconds --><!-- Cached page served by WP-Cache -->
