<?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 engineering</title>
	<atom:link href="http://www.draftlogic.com/blog/tag/software-engineering/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>See You On The Internets!</title>
		<link>http://www.draftlogic.com/blog/2009/12/see-you-on-the-internets/</link>
		<comments>http://www.draftlogic.com/blog/2009/12/see-you-on-the-internets/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 05:20:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Engineering Musings]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[user interface]]></category>

		<guid isPermaLink="false">http://www.draftlogic.com/blog/?p=20</guid>
		<description><![CDATA[Today&#8217;s headline is courtesy of a real estate agent&#8217;s advertisement on my favorite radio station, SONiC 102.9 FM Edmonton.  The agent diligently repeats their web site address a couple of times and invites us all to visit and see their listed properties.  Being &#8216;detail oriented&#8217;, it makes me a little crazy every time I hear [...]]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s headline is courtesy of a real estate agent&#8217;s advertisement on my favorite radio station, SONiC 102.9 FM Edmonton.  The agent diligently repeats their web site address a couple of times and invites us all to visit and see their listed properties.  Being &#8216;detail oriented&#8217;, it makes me a little crazy every time I hear the ad and have to listen to the cheery closing line &#8216;See you on the Internets!&#8217;.  There is, of course, only one Internet&#8230;not a whole bunch.  And, yes, I am well aware there is a less polite way of describing those who are detail oriented&#8230;but I am trying to keep this blog family friendly so won&#8217;t be using &#8216;that&#8217; word.</p>
<p>A LESSON FOR US FROM A REAL ESTATE AGENT</p>
<p>So am I writing today to pick on poor real estate agents and radio ad copy writers that accidentally pluralize &#8216;Internet&#8217;?  Nope, I am writing today because each time I hear the  advertisement it reminds me that not everybody on the planet is &#8216;in&#8217; the information technology business.  This is important to remember for everyone involved in making or changing applications in any way:  project managers, software architects, developers, quality assurance staff, documentation writers, and technical support staff.</p>
<p>You can design and build the most fantastic application in terms of functionality and rock solid quality.  Without being usable by the intended audience, however, such an application is just as doomed to fail as one that is sparse in features and bug-ridden.</p>
<p>ENSURING USABILITY</p>
<p>How can you ensure usability?  First, it is important to understand that usability does have some core characteristics that apply across the vast majority of user audiences.  These are such things as following Windows conventions for the placement of menus, buttons, button names, button actions, etc.  In this regard, it is very important to NOT reinvent the wheel, i.e. stick with what is out there in common use.  Folks will thus have a head start on understanding how to run your application.</p>
<p>Second, usability beyond those core elements does change from user type to user type.  An application to help developers find memory leaks should thus have a user interface that differs materially from a bank teller application.</p>
<p>WHAT IS THE USER LOOKING FOR</p>
<p>So the core conventions are easy to determine and follow.  It is the special nuances that your particular set of users are expecting that are the difficult part to discover and implement.  You will need to determine who your users are going to be, what area of expertise they have, the terminology that is common among them all, and the lowest common denominator of information technology competence.</p>
<p>Each industry has its own &#8216;language&#8217;&#8211;terms not used anywhere else, or meanings for words that differ from how we use the same words outside the industry.  If your application is to appeal to these users and also to ease their learning of your application, you must be aware of these terminology needs and make use of them&#8211;or at least avoid any &#8216;faux pas&#8217; by using words in wrong ways.</p>
<p>LOWEST COMMON DENOMINATOR</p>
<p>When you are looking to determine the lowest common denominator of information technology competence, you are not looking for the single most technologically challenged user in the group and then building the user interface to accommodate for them.  Your application would drive everyone else crazy in trying to be too simple to run!  Remove the outliers from consideration and look to where you find a strong cluster of users at the lowest level of information technology competence.  That&#8217;s your target of where to make your application usable with user interface design.</p>
<p>MULTIPLE WAYS TO RUN</p>
<p>Finally, if your user clusters are varied in industry and IT competence, you can always bundle different user interface packages to suit each cluster.  Investing the time to make your application as usable as possible to each different audience you wish to sell to will pay off well in increased sales, happier users, and reduced technical support needs.</p>
<p>Hey, do you think &#8216;See you on the Internets!&#8217; has any change of dislodging &#8216;All your base are belong to us.&#8217; from fame and fortune?</p>
<p>See you on the Internets,<br />
Dean Whitford, B.Comm.<br />
Chief Operating Officer<br />
DraftLogic<br />
www.draftlogic.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.draftlogic.com/blog/2009/12/see-you-on-the-internets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>That Last Percent of the Work</title>
		<link>http://www.draftlogic.com/blog/2009/11/that-last-percent-of-the-work/</link>
		<comments>http://www.draftlogic.com/blog/2009/11/that-last-percent-of-the-work/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 06:47:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Engineering Musings]]></category>
		<category><![CDATA[development management]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.draftlogic.com/blog/?p=5</guid>
		<description><![CDATA[I have been a software engineering project manager for eleven years now, and it still amazes me how painful it is and how long it takes to finish up that 'last percent' of the work!]]></description>
			<content:encoded><![CDATA[<p>I have been a software engineering project manager for eleven years now, and it still amazes me how painful it is and how long it takes to finish up that &#8216;last percent&#8217; of the work!</p>
<p>&#8220;That doesn&#8217;t make any sense&#8221; you say?  Or perhaps you think the last percent of work should not be any different from any other part of the work?</p>
<p>Following that logic, our 20,000ish hour development effort should take a couple hundred hours for the last one percent to be finished.  The reality is we have burned five hundred or so hours and counting.  The light at the end of the tunnel is in sight but we are crawling toward it instead of running!</p>
<p>There are a number of reasons for that last percent of work taking such a disproportionate amount of effort to finish off.</p>
<p>HUMAN NATURE</p>
<p>A big part of it is the developer&#8217;s succumbing to human nature and the project manager letting such a thing happen&#8230;because it seems harmless when you consider the decisions one by one.  What I am referring to is most people&#8217;s tendency to go for the &#8216;easy kills&#8217; when assigned a number of tasks.  We do that because we like the feeling of success and forward progress we get when we finish a task.  In organizations where there is performance evaluation based on completing tasks and having quality assurance sign off on them, going for the easy kills is sometimes an act of survival, i.e. the system makes you do it, regardless of whether you want to or not.</p>
<p>The project manager&#8217;s part of this is either not assigning a priority to the tasks to ensure that things get done in a particular order regardless of their relative difficulty OR in letting it slide when some of the developers skip the hard stuff.  My sin is usually the second type.</p>
<p>BACKWARDS RIPPLE</p>
<p>Another material contributor to the hours spent finishing the last percent of work is dealing with more ripple effects than usual.  Once your application is basically completely built, any change you make has a higher probability of affecting more code&#8211;much more in both respects than when you are first starting to build the application.</p>
<p>LATE STAGE REQUIREMENTS CHANGES</p>
<p>In the same light, requirements changes that are introduced at the end of the job have a higher probability of affecting more code.</p>
<p>DEALING WITH IT</p>
<p>So now we know how we got to this painful stage, how do we get through it?</p>
<p>This first thing is to manage the expectations of all the stakeholders.  Let them know that the task list is much shortened from before but that the items left are difficult and risky.  Let any of those who are asking for requirements changes know the full potential impact of their requested change &amp; suggest, where feasible, that the change would be best left until after the first version of the product is tested and released.</p>
<p>The second thing is to maintain the development team&#8217;s morale.  Grinding through the tough tasks and dealing with ripple effects is going to be stressful, especially for those who either need or are used to frequent gratification from completing easier tasks.  Congratulate each developer for the small gains that will be made as they happen.  Keep the team updated about progress that is being made.</p>
<p>Finally, stay positive and stay focused!  Your clients on the one side and development team on the other will sense any fear or negativity you feel&#8211;and it will adversely affect their attitude.  Celebrate progress made, however glacial.  You need to keep your focus, the clients&#8217; focus, and the development team&#8217;s focus all squarely on completing the product.  You will need to be strong in resisting any changes that are not absolutely necessary, whether proposed by the client or by your development team.  In this light, you need to be prepared to re-evaluate the inclusion of any functions that are causing major problems.  If feasible, delay a troublesome function for later in order to expedite the completion of the release.</p>
<p>NEXT PROJECT</p>
<p>OK, so you and your team pushed through the resistance and finished the release.  Can you avoid making the &#8216;last percent&#8217; so painful on the next project?  Well, you won&#8217;t be able to get rid of all the nasty nuances tied to the last percent of work, but much of it can be managed away.</p>
<p>Ensure that your developer performance evaluation and task tracking system are sensitive to task difficulty and priority.  Do this by assigning higher completion credit to difficult issues &amp; assigning an exact relative priority to each task.  The completion priorities must be enforced throughout the project, otherwise the tough items will pile up for late in the project.</p>
<p>Throughout the project, carefully evaluate any change requests, whether from clients or the development team, for the degree of ripple effect and for how truly immediate they need to be.  Change requests that can reasonably delayed to a future release should all be delayed.  Ones that cannot be delayed will need to have their time required, including dealing with ripple effect and added quality assurance time, push the project completion date forward commensurately.</p>
<p><em>Until next time for more software engineering ramblings,</em><br />
Dean Whitford, B.Comm</p>
<p>Chief Operating Officer</p>
<p>DraftLogic</p>
]]></content:encoded>
			<wfw:commentRss>http://www.draftlogic.com/blog/2009/11/that-last-percent-of-the-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
