<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DraftLogic Expert Systems CAD &#187; software development</title>
	<atom:link href="http://www.draftlogic.com/blog/tag/software-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.draftlogic.com/blog</link>
	<description>The trials and tribulations of software engineering in the realm of building systems design</description>
	<lastBuildDate>Tue, 27 Apr 2010 17:37:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Maintaining THE WALL Between Development and Production Environments</title>
		<link>http://www.draftlogic.com/blog/2009/11/maintaining-the-wall-between-development-and-production-environments/</link>
		<comments>http://www.draftlogic.com/blog/2009/11/maintaining-the-wall-between-development-and-production-environments/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 20:55:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Engineering Musings]]></category>
		<category><![CDATA[development management sins]]></category>
		<category><![CDATA[production versus release environment]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.draftlogic.com/blog/?p=17</guid>
		<description><![CDATA[There are some core rules to follow in software development; they WILL bite you if  you ignore them!]]></description>
			<content:encoded><![CDATA[<p>Yesterday I was reminded, again, of one of my very old and very important rules:  any company involved with development must maintain a wall between their development and production environments.  A related important rule is that only releases that have been subjected to sufficient testing should be used to update production environments.</p>
<p><strong>SAY IT AIN&#8217;T SO, DEAN!</strong></p>
<p>How did an &#8216;old development management sea dog&#8217; like me get stung by not complying with these rules?  Well, truth be told, the reason lies with succumbing to two of the seven deadly sins!</p>
<p>Isn&#8217;t it funny how most of our human errors can be traced back to that simple list?</p>
<p><strong>FEATURE GREED</strong></p>
<p>My first sin this week was GREED&#8211;specifically, feature greed.  Talking only about development related sins, of course!  I wanted to show the potential client &#8216;the lastest and greatest&#8217;, &#8216;the best that we could be&#8217;, &#8216;the goodies&#8217;, you name it!  My rationale was that there had not been many changes to the application executables in the prior week, so after carefully testing the changed functions and passing them I thought I was good to go with the new stuff.</p>
<p>In the haze of feature greed, I forgot about our old friends ripple effect and fault feedback ratio.</p>
<p><strong>TINY LITTLE WAVES MAKING BIG PROBLEMS</strong></p>
<p>Ripple effect, for those not in the business, is when you change something &#8216;over here&#8217; in your code and it breaks something &#8216;over there&#8217; in your code.  It can be the fault of the developer not following through with a change to all affected areas or it can be the fault of the project manager not seeing all the modules that will be affected by a change and assigning all developers that own potentially affected code to do the necessary work to deal with the effects of the change.</p>
<p>In this particular case, I took a delivery from one developer that resolved some errors in one module, all of which tested good, then I took another delivery of fixes from another developer in a different module, all of which tested good.  It was the combining of the deliveries that was the problem&#8211;fixed functionality in the one module made code in the other module (changed weeks ago and tested OK at that time), blow up on finding data again where it was expected but in a now unexpected format.</p>
<p><strong>NOBODY IS PERFECT</strong></p>
<p>The essence of humanity, none of us is perfect, is demonstrated through the fault feedback ratio.  Nobody can go in and fix an issue without ever breaking anything else.  Developers that are very careful will have an extremely low fault feedback ratio, but even the best will break something else when they go in to make the fix.</p>
<p>This was the root of the issue that caused the error during the demo.  Code that at one time was synchronized with the output of the other module became unprepared for all possible variants of that output when a change was made in module A by developer Z.  This remained undiscovered for weeks because prior to Z making the change in A, developer X had broken module B so that it had no output whatsoever.  So only after the now broken module A was put together with the now fixed module B did the new error show up.</p>
<p><strong>SUCK IT UP, PRINCESS</strong></p>
<p>The net cost of my sins is the endangering of a sale that should have been a lot easier of a closing.</p>
<p>If you are not completely willing to bear the worst case possible outcome of a blown demonstration or production roll out, don&#8217;t release to production before something is completely ready and tested!  Given the vast cost of &#8216;broken arrow&#8217; releases when you multiply by the number of users that you will take down for a while, premature production releases are simply not worth it.</p>
<p><strong>FIGHT THE POWERS THAT BE</strong></p>
<p>In my case, the decision was mine&#8211;no one was pressuring me for a premature release.</p>
<p>In many other cases, possibly yours, there is plenty of external pressure for you to release before you know you are really ready to.  You must resist, do not join the dark side!  For those that persist, quantify the worst case scenario in terms of user downtime and lost sales (or whatever set of effects would result) and the overeager stakeholder should relent from pressuring you&#8230;at least a little bit.</p>
<p><strong>AN UGLY WORD UNLESS YOU ARE TALKING ABOUT THE SLOW TREE DWELLER</strong></p>
<p>The second sin of the week was SLOTH.  In today&#8217;s parlance &#8216;laziness&#8217;.  I like to make it sound less bound-for-hellish by saying &#8216;lack of time&#8217;.  A proper amount of time allocated to make the proper tests would have exposed the issue and ensured that I stayed on the last release for the demonstration instead of the new stuff.</p>
<p>If one cannot make the time to get the proper tests done, one should not use the new release.  My failing was having a busy week with other matters and simply not having the time available, but in still doing the point tests and thinking that was enough.  It wasn&#8217;t, of course.  Complete system tests need to be done prior to releasing any code from development to production environments.</p>
<p>Licking my wounds,</p>
<p>Dean Whitford, B.Comm.</p>
<p>Chief Operating Officer</p>
<p>DraftLogic</p>
]]></content:encoded>
			<wfw:commentRss>http://www.draftlogic.com/blog/2009/11/maintaining-the-wall-between-development-and-production-environments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Engineering and Hockey&#8211;Not As Different as You May Think!</title>
		<link>http://www.draftlogic.com/blog/2009/11/software-engineering-and-hockey-not-as-different-as-you-may-think/</link>
		<comments>http://www.draftlogic.com/blog/2009/11/software-engineering-and-hockey-not-as-different-as-you-may-think/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 08:04:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Engineering Musings]]></category>
		<category><![CDATA[devil in the details]]></category>
		<category><![CDATA[good execution]]></category>
		<category><![CDATA[hockey]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[someone has to be the boss]]></category>

		<guid isPermaLink="false">http://www.draftlogic.com/blog/?p=10</guid>
		<description><![CDATA[Are hockey and software engineering more similar than they are different?  Read this blog entry for my thoughts on the subject.]]></description>
			<content:encoded><![CDATA[<p><strong>GAINING PERSPECTIVE BY BEING OUT OF THE ACTION</strong></p>
<p>Hockey is one of my favorite sports.  I love to play it, sometimes I like to watch it.  Even when you are playing, though, you watch while you are on the bench waiting for your shift.  It is when watching that one gains the most appreciation for the strategy and finer points of the game.  This is our first similarity to software engineering: the unbiased perspective, where you can really &#8217;see&#8217; what is going on, is only gained from being &#8216;off the ice&#8217; or &#8216;not a part of the project&#8217;.  In either case, if you are in the action your perspective is tainted and you will make errors that you would definitely not if you were &#8216;off the ice&#8217;.  You&#8217;ll be a better hockey player, or member of an application development team, if you can lift your mind out of &#8216;the game&#8217; to look at what is going on with some degree of detachment from time to time.</p>
<p>In the same light, I used to tell a sales manager that worked for me to &#8216;lift your head out of the swamp for a while each day&#8217;.  I said thus because he was getting so mired in the day-to-day goings on that he was losing sight of what we were needing to achieve in the coming weeks, months, and years.</p>
<p><strong>TEAM COMPOSITION</strong></p>
<p>Managing software engineering is my work.  The &#8216;game&#8217; is application development, played out in offices and on computers instead of on a few centimeters of frozen water.  It takes a team to build an application, the larger and more complex the application, the more varied and specialized the roles on the team.  The need for a team composed of people fulfilling different roles is our next similarity.  In hockey, there are two wingers, a center, two defensemen, and a goalie on the ice at one time.  Each role requires a different mindset and skills to do it well.  In software engineering, we have project managers, software architects, developers, quality assurance staff, and documentation staff.</p>
<p><strong>SOMEONE HAS TO BE THE BOSS</strong></p>
<p>Each hockey team has one and only one captain, just as there must be one and only one head project manager for each application development project.  Someone has to be the boss, able to make the decisions that must be made in a timely manner.  Oh yes, there are assistant captains and vice-project managers, but the reality is that there needs to be a bit of benevolent dictatorship going on for a team of either kind to be effective.  Some of the toughest decisions involve whom is going to do what.  The average winger can&#8217;t play defense very well, and let&#8217;s not even talk about putting anyone but a born and bred goalie in-between the pipes!  In the same light, most quality assurance staff would not make good developers.  So, in both hockey and in application development, the &#8216;captain&#8217; has to put each team member in the role that their skills and temperament make them most suitable to fulfill.  And those that don&#8217;t fit any of the roles needed on the team should be playing on a different team <img src='http://www.draftlogic.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>THE DEVIL IS IN THE DETAILS</strong></p>
<p>Finally, let&#8217;s talk about execution.  In hockey as in application development, &#8216;the devil is in the details&#8217;.  All the little things have to come together to make the big thing a success.  Passes that are crisp and on the tape, everyone giving their all from start to finish of the game, and playing your position properly.  These are the elements of winning on the ice.  Play the details right and the game will go your way.  The same goes for application development&#8211;good system architecture, robust and efficient code, effective quality assurance, and good usability make for a successful application development project.</p>
<p>OK, so MAYBE this whole blog entry is really kind of stretch&#8230;but at least I got to write about what I do and what I like to do!</p>
<p>Yours in software engineering,<br />
Dean Whitford, B.Comm.<br />
Chief Operating Officer<br />
DraftLogic</p>
]]></content:encoded>
			<wfw:commentRss>http://www.draftlogic.com/blog/2009/11/software-engineering-and-hockey-not-as-different-as-you-may-think/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
