<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Rays Development Blog - Design</title>
    <link>http://www.enterprocity.com/blogs/</link>
    <description>A look into the mind of a VB Developer</description>
    <language>en-us</language>
    <copyright>Raymond Cassick</copyright>
    <lastBuildDate>Thu, 07 Jan 2010 16:40:10 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.1.8102.813</generator>
    <managingEditor>rcassick@enterprocity.com</managingEditor>
    <webMaster>rcassick@enterprocity.com</webMaster>
    <item>
      <trackback:ping>http://www.enterprocity.com/blogs/Trackback.aspx?guid=0547c3cd-a2ea-4948-bac3-f66897e8eb70</trackback:ping>
      <pingback:server>http://www.enterprocity.com/blogs/pingback.aspx</pingback:server>
      <pingback:target>http://www.enterprocity.com/blogs/PermaLink,guid,0547c3cd-a2ea-4948-bac3-f66897e8eb70.aspx</pingback:target>
      <dc:creator>Ray Cassick</dc:creator>
      <wfw:comment>http://www.enterprocity.com/blogs/CommentView,guid,0547c3cd-a2ea-4948-bac3-f66897e8eb70.aspx</wfw:comment>
      <wfw:commentRss>http://www.enterprocity.com/blogs/SyndicationService.asmx/GetEntryCommentsRss?guid=0547c3cd-a2ea-4948-bac3-f66897e8eb70</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Touch touch touch…
</p>
        <p>
To be honest I don’t get it.
</p>
        <p>
I touch my computer every day already. I use a mouse and a keyboard to do it, but
to be honest I see very little sense in using my finger to manipulate objects on my
computer. My finger tip is large, and my monitors (all 4 of them) are at a 90 degree
angle to my desk. Why would I want to use my hand to reach out (and up) to manipulate
objects on my computer screen when I can use the mouse to do it?
</p>
        <p>
Now other devices like game tables, interactive kiosks, digital book readers, Maybe
PDAs and stuff, that’s fine, but I have yet to see value in a touch screen PC that
is not at very least stylus oriented. And on that subject, what is the hot thing about
handwriting recognition. I specifically use a computer (and previously a typewriter)
because my handwriting sucks :) Why on earth would I want to write on my PC screen?
Sign a digital document? Sure, but now get someone to trust that ‘I’ signed it and
we will be all set. That technology is still not proven yet and most people don’t
really trust it. Using a finger print is a better option, and far more trusted, but
still not entirely mainstream yet.
</p>
        <p>
Yes, the touch demos that I have seen show fancy things like dragging and throwing
photos around a table top, or playing games, or ordering off of a virtual menu, and
those are all good examples of the use of touch technology, but at a very narrow focus
and scope. The demos about interactive touch counters in the stores that allow you
to compare multiple products side by side are cool too but also relay not JUST on
touch but also on RFID technology that is not really related to touch. You could do
one without the other. Games like chess, checkers, solitaire (every computer HAS to
come with a copy of that right?) are fine for touch, but would you really want to
play WOW or DOOM using touch?  
</p>
        <p>
I have YET to see one ultra compelling demonstration of using touch in an office environment
that wows me more than a mouse does. Can you imagine trying to do photo-retouching
using your finger? Editing code or creating an application form in Visual Studio using
your hands? How about highlighting text and dragging it around or changing fonts using
your hands? Now picture doing all that on a 17 or even a 21 inch screen.
</p>
        <p>
I am not saying that touch does not have it use, it does, but on a somewhat narrow
scope I think. I think you will see (my prediction) that touch WILL finally take hold
at some point, but more along the lines of interface technology that we are already
familiar with today. Give me a keyboard that I can reconfigure on the fly based upon
the application that is active on my screen, and do it that way. Give my a touch pad
to replace my mouse, or maybe two touch pads (one on each side of my virtual keyboard)
so I can do multi-touch stuff. Maybe I will reach out to my screen a bit and do larger
granularity things like flip pages on a large document, or open an application by
tapping on an icon, but touch is not the generic answer to one problem.
</p>
        <p>
It looks cool in movies, and sounds cool in high level technical talk, but in reality,
where I live, I need what works, and I just don’t see touch being a PC related thing
with a ton of impact like most do.
</p>
        <p>
FORCE me into a touch only interface and loose me as a customer. I WOULD use a stylus
more instead of a mouse on a laptop, but don’t make me write what I can type MUCH
faster or you loose me as a customer.
</p>
        <p>
My prediction is that the next big wave will be multi-modal interfaces. Provide me
the ability to use touch where it makes sense, and then at the same time allow me
to use a mouse or stylus or keyboard where it makes sense, at the same time and at
MY whim. I want to scroll down in an online book a few pages by using my hand to grab
and flip a PDF down a few pages then as they scroll by use my right hand with my mouse
to grab the page as I see it, stop it, and then select a few words on the screen so
I can reach up and press the bold button with my left hand on the screen? That’s great.
</p>
        <p>
And before all you naysayer out there bring up all the cool ‘things’ from movies like
Minority Report, keep in mind that was a ‘gesture based interface’ NOT touch based,
and I think that is closer to being far more useful than pure touch, but a subject
for another blog entry.<br /></p>
        <img width="0" height="0" src="http://www.enterprocity.com/blogs/aggbug.ashx?id=0547c3cd-a2ea-4948-bac3-f66897e8eb70" />
      </body>
      <title>Touch interfaces - Maybe I don't get the hype?</title>
      <guid isPermaLink="false">http://www.enterprocity.com/blogs/PermaLink,guid,0547c3cd-a2ea-4948-bac3-f66897e8eb70.aspx</guid>
      <link>http://www.enterprocity.com/blogs/2010/01/07/TouchInterfacesMaybeIDontGetTheHype.aspx</link>
      <pubDate>Thu, 07 Jan 2010 16:40:10 GMT</pubDate>
      <description>&lt;p&gt;
Touch touch touch…
&lt;/p&gt;
&lt;p&gt;
To be honest I don’t get it.
&lt;/p&gt;
&lt;p&gt;
I touch my computer every day already. I use a mouse and a keyboard to do it, but
to be honest I see very little sense in using my finger to manipulate objects on my
computer. My finger tip is large, and my monitors (all 4 of them) are at a 90 degree
angle to my desk. Why would I want to use my hand to reach out (and up) to manipulate
objects on my computer screen when I can use the mouse to do it?
&lt;/p&gt;
&lt;p&gt;
Now other devices like game tables, interactive kiosks, digital book readers, Maybe
PDAs and stuff, that’s fine, but I have yet to see value in a touch screen PC that
is not at very least stylus oriented. And on that subject, what is the hot thing about
handwriting recognition. I specifically use a computer (and previously a typewriter)
because my handwriting sucks :) Why on earth would I want to write on my PC screen?
Sign a digital document? Sure, but now get someone to trust that ‘I’ signed it and
we will be all set. That technology is still not proven yet and most people don’t
really trust it. Using a finger print is a better option, and far more trusted, but
still not entirely mainstream yet.
&lt;/p&gt;
&lt;p&gt;
Yes, the touch demos that I have seen show fancy things like dragging and throwing
photos around a table top, or playing games, or ordering off of a virtual menu, and
those are all good examples of the use of touch technology, but at a very narrow focus
and scope. The demos about interactive touch counters in the stores that allow you
to compare multiple products side by side are cool too but also relay not JUST on
touch but also on RFID technology that is not really related to touch. You could do
one without the other. Games like chess, checkers, solitaire (every computer HAS to
come with a copy of that right?) are fine for touch, but would you really want to
play WOW or DOOM using&amp;nbsp;touch?&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
I have YET to see one ultra compelling demonstration of using touch in an office environment
that wows me more than a mouse does. Can you imagine trying to do photo-retouching
using your finger? Editing code or creating an application form in Visual Studio using
your hands? How about highlighting text and dragging it around or changing fonts using
your hands? Now picture doing all that on a 17 or even a 21 inch screen.
&lt;/p&gt;
&lt;p&gt;
I am not saying that touch does not have it use, it does, but on a somewhat narrow
scope I think. I think you will see (my prediction) that touch WILL finally take hold
at some point, but more along the lines of interface technology that we are already
familiar with today. Give me a keyboard that I can reconfigure on the fly based upon
the application that is active on my screen, and do it that way. Give my a touch pad
to replace my mouse, or maybe two touch pads (one on each side of my virtual keyboard)
so I can do multi-touch stuff. Maybe I will reach out to my screen a bit and do larger
granularity things like flip pages on a large document, or open an application by
tapping on an icon, but touch is not the generic answer to one problem.
&lt;/p&gt;
&lt;p&gt;
It looks cool in movies, and sounds cool in high level technical talk, but in reality,
where I live, I need what works, and I just don’t see touch being a PC related thing
with a ton of impact like most do.
&lt;/p&gt;
&lt;p&gt;
FORCE me into a touch only interface and loose me as a customer. I WOULD use a stylus
more instead of a mouse on a laptop, but don’t make me write what I can type MUCH
faster or you loose me as a customer.
&lt;/p&gt;
&lt;p&gt;
My prediction is that the next big wave will be multi-modal interfaces. Provide me
the ability to use touch where it makes sense, and then at the same time allow me
to use a mouse or stylus or keyboard where it makes sense, at the same time and at
MY whim. I want to scroll down in an online book a few pages by using my hand to grab
and flip a PDF down a few pages then as they scroll by use my right hand with my mouse
to grab the page as I see it, stop it, and then select a few words on the screen so
I can reach up and press the bold button with my left hand on the screen? That’s great.
&lt;/p&gt;
&lt;p&gt;
And before all you naysayer out there bring up all the cool ‘things’ from movies like
Minority Report, keep in mind that was a ‘gesture based interface’ NOT touch based,
and I think that is closer to being far more useful than pure touch, but a subject
for another blog entry.&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.enterprocity.com/blogs/aggbug.ashx?id=0547c3cd-a2ea-4948-bac3-f66897e8eb70" /&gt;</description>
      <comments>http://www.enterprocity.com/blogs/CommentView,guid,0547c3cd-a2ea-4948-bac3-f66897e8eb70.aspx</comments>
      <category>Business</category>
      <category>Design</category>
      <category>Hardware</category>
      <category>Touch</category>
      <category>Interfaces</category>
    </item>
    <item>
      <trackback:ping>http://www.enterprocity.com/blogs/Trackback.aspx?guid=da09a384-7e37-4738-b7e1-4d9bdfcdac58</trackback:ping>
      <pingback:server>http://www.enterprocity.com/blogs/pingback.aspx</pingback:server>
      <pingback:target>http://www.enterprocity.com/blogs/PermaLink,guid,da09a384-7e37-4738-b7e1-4d9bdfcdac58.aspx</pingback:target>
      <dc:creator>Ray Cassick</dc:creator>
      <wfw:comment>http://www.enterprocity.com/blogs/CommentView,guid,da09a384-7e37-4738-b7e1-4d9bdfcdac58.aspx</wfw:comment>
      <wfw:commentRss>http://www.enterprocity.com/blogs/SyndicationService.asmx/GetEntryCommentsRss?guid=da09a384-7e37-4738-b7e1-4d9bdfcdac58</wfw:commentRss>
      <title>Build Vs. Buy - Innovation or stagnation?</title>
      <guid isPermaLink="false">http://www.enterprocity.com/blogs/PermaLink,guid,da09a384-7e37-4738-b7e1-4d9bdfcdac58.aspx</guid>
      <link>http://www.enterprocity.com/blogs/2009/06/21/BuildVsBuyInnovationOrStagnation.aspx</link>
      <pubDate>Sun, 21 Jun 2009 04:31:35 GMT</pubDate>
      <description>&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;Let’s be clear, to innovate you need to reach.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;There are many companies that I have run into
over the years that have continuous innovation as one of their core values, but have
a buy instead of build mandate. They want to reach for the stars, but they feel they
need to (or even can) do it using existing technology.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;Why are people so build averse?&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;One thing that I have noticed is that even
when you are in a ‘buy’ environment you end up building, the building is simply different.
Instead of building UI, databases or business rules you end up building glue. Glue
code that connects disparate systems. Glue code that moves data between stores. Glue
code that provides services to secondary consumers. Glue code to allow enterprise
level reporting where reporting was not available in the purchased system.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;So explain to me again why people are so build
averse?&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;Innovation starts with the ability to take
a risk and move in a different direction. &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;It
is difficult to consider moving an industry in an entirely different direction when
you are building on top of existing applications that fit into a different paradigm. &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;After
all, are you not looking to do something different? Are you not looking to accomplish
something that the industry is not yet fully ready for in order to get a jump on the
competition? &lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;If you answer to these questions is yes then
how do you expect to be efficiently innovative using what already exists to move forward
in a different direction?&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;I know that it is simpler to buy something
off the shelf and place the responsibility to make it work on the shoulders of a vendor.
I also know that it may seem to be cheaper to buy a bunch of cots products and spend
time to data integrate them using tools like Informatica, and other data integration
methodologies. But once you stray from being able to open a shrink wrapped box and
being able to simply install and use you have strayed into a build situation, like
it or not. It is similar to putting a ton of effort into deciding what car you want
to buy then once you take ownership you drive it right over to the custom shop and
have the engine replaced with one that has more power, the interior redone to what
you really wanted, and the exterior modified. If the car you bought was under powered
and the interior was not what you wanted and the exterior was also not to your liking
then why did you buy it?&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;Consider also what gets induced when you spend
your money to glue stuff together and the industry changes. It sounds like you are
insulated in cases like this because you feel that the vendor is responsible for bringing
the application you purchased into regulatory compliance, and they are, but what about
all that glue that you built? The vendors responsibility ends at their borders and
whatever you have done to augment your systems over the years is not their responsibility.
When push comes to shove they are not responsible for how you use the system and are
only bound to deliver to you a system that fulfils the legal and regulatory requirements
of the line of business as well as the stated requirements and features of what you
purchased. They can’t be held responsible for what you glued onto their product, and
nor should they be.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;Additionally you cannot predict how they are
going to make changes as time progresses so you are stuck working your changes to
their time-lines and schedules. You will find yourself having to wait for their release
cycles and then your install, evaluate and test cycles to complete before you can
even start any decent planning to make changes to your internal systems of glue code
before you move a new version into production. If your processes are not fast enough,
or your vendors release schedule very aggressive, you can find yourself stuck in an
endless cycle of install, test, modify, and move to production, a process that can
place some very high stress on both people resources as well as hardware and software
costs, not to mention the potential for harm to your business if things do not go
right.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;I am not saying that it always makes sense
to build. No one can say that. Buy Microsoft Office and be happy that you did. Buy
an accounting package and be happy that you did. But if your business is unique, or
you need to make it unique as a differentiator, then consider the build task, even
if you need to live with a coddled together bought system in parallel as you do it.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font color=#000000 size=3 face=Calibri&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.enterprocity.com/blogs/aggbug.ashx?id=da09a384-7e37-4738-b7e1-4d9bdfcdac58" /&gt;</description>
      <comments>http://www.enterprocity.com/blogs/CommentView,guid,da09a384-7e37-4738-b7e1-4d9bdfcdac58.aspx</comments>
      <category>Design</category>
      <category>Requirements</category>
    </item>
    <item>
      <trackback:ping>http://www.enterprocity.com/blogs/Trackback.aspx?guid=52ad38f8-bd76-4a9a-a6e5-0d58852a950d</trackback:ping>
      <pingback:server>http://www.enterprocity.com/blogs/pingback.aspx</pingback:server>
      <pingback:target>http://www.enterprocity.com/blogs/PermaLink,guid,52ad38f8-bd76-4a9a-a6e5-0d58852a950d.aspx</pingback:target>
      <dc:creator>Ray Cassick</dc:creator>
      <wfw:comment>http://www.enterprocity.com/blogs/CommentView,guid,52ad38f8-bd76-4a9a-a6e5-0d58852a950d.aspx</wfw:comment>
      <wfw:commentRss>http://www.enterprocity.com/blogs/SyndicationService.asmx/GetEntryCommentsRss?guid=52ad38f8-bd76-4a9a-a6e5-0d58852a950d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Holly cow, if I get asked this one more time I think I am going to..... well, I am
not sure what I an going to do but be assured that it may not be pretty :)
</p>
        <p>
I get asked this all the time and I am not sure why people ask it.
</p>
        <p>
"What is the best choice, implementing an interface or using inheritance?"
</p>
        <p>
"What language is the best choice?"
</p>
        <p>
"What is a better thing to use, an array or an array list?"
</p>
        <p>
To me these all sound like the same question.... "How long is a piece of string?"
</p>
        <p>
The problem is that they never seem to be satisfied with the answer "it depends".
They seem to get frustrated and think that I am holding back on them. That I am hiding
some great secret all to my self that is preventing them form becoming the next great
developer.
</p>
        <p>
In all honesty that is the best answer I can give simply because it's true. It REALLY
does depend. It depends on your situation, your project, your intent, what you want
to do and a ton of other factors that only YOU know about your project.
</p>
        <p>
I also get asked a ton "what is the difference between a programmer and a developer?"
To put it simply, the answer is that <strong>programmers</strong> ask the questions
above while <strong>developers</strong> know that the answer is 'it depends' and are
satisfied with it.
</p>
        <p>
I don't mind being asked these questions, just take the answer and learn from
it. Use it as a learning tool to become a developer.
</p>
        <p>
Being a developer is cool and fun and you get to ask a whole slew of more cool questions
like "how does one go about calculating the air speed velocity of an unladen swallow?"
</p>
        <img width="0" height="0" src="http://www.enterprocity.com/blogs/aggbug.ashx?id=52ad38f8-bd76-4a9a-a6e5-0d58852a950d" />
      </body>
      <title>Silver Bullet</title>
      <guid isPermaLink="false">http://www.enterprocity.com/blogs/PermaLink,guid,52ad38f8-bd76-4a9a-a6e5-0d58852a950d.aspx</guid>
      <link>http://www.enterprocity.com/blogs/2008/12/01/SilverBullet.aspx</link>
      <pubDate>Mon, 01 Dec 2008 05:16:28 GMT</pubDate>
      <description>&lt;p&gt;
Holly cow, if I get asked this one more time I think I am going to..... well, I am
not sure what I an going to do but be assured that it may not be pretty :)
&lt;/p&gt;
&lt;p&gt;
I get asked this all the time and I am not sure why people ask it.
&lt;/p&gt;
&lt;p&gt;
"What is the best choice, implementing an interface or using&amp;nbsp;inheritance?"
&lt;/p&gt;
&lt;p&gt;
"What language is the best choice?"
&lt;/p&gt;
&lt;p&gt;
"What is a better thing to use, an array or an array list?"
&lt;/p&gt;
&lt;p&gt;
To me&amp;nbsp;these all sound like the same question.... "How long is a piece of string?"
&lt;/p&gt;
&lt;p&gt;
The problem is that they never seem to be satisfied with the answer "it depends".
They seem to get frustrated and think that I am holding back on them. That I am hiding
some great secret all to my self that is preventing them form becoming the next great
developer.
&lt;/p&gt;
&lt;p&gt;
In all honesty that is the best answer I can give simply because it's true. It REALLY
does depend. It depends on your situation, your project, your intent, what you want
to do and a ton of other factors that only YOU know about your project.
&lt;/p&gt;
&lt;p&gt;
I also get asked a ton "what is the difference between a programmer and a developer?"
To put it simply, the answer is that &lt;strong&gt;programmers&lt;/strong&gt; ask the questions
above while &lt;strong&gt;developers&lt;/strong&gt; know that the answer is 'it depends' and are
satisfied with it.
&lt;/p&gt;
&lt;p&gt;
I don't mind being&amp;nbsp;asked these questions, just take the answer and learn from
it. Use it as a learning tool to become a developer.
&lt;/p&gt;
&lt;p&gt;
Being a developer is cool and fun and you get to ask a whole slew of more cool questions
like "how does one go about calculating the air speed velocity of an unladen swallow?"
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.enterprocity.com/blogs/aggbug.ashx?id=52ad38f8-bd76-4a9a-a6e5-0d58852a950d" /&gt;</description>
      <comments>http://www.enterprocity.com/blogs/CommentView,guid,52ad38f8-bd76-4a9a-a6e5-0d58852a950d.aspx</comments>
      <category>Design</category>
    </item>
    <item>
      <trackback:ping>http://www.enterprocity.com/blogs/Trackback.aspx?guid=e7f326d0-57a7-454e-a566-cc8864364dd7</trackback:ping>
      <pingback:server>http://www.enterprocity.com/blogs/pingback.aspx</pingback:server>
      <pingback:target>http://www.enterprocity.com/blogs/PermaLink,guid,e7f326d0-57a7-454e-a566-cc8864364dd7.aspx</pingback:target>
      <dc:creator>Ray Cassick</dc:creator>
      <wfw:comment>http://www.enterprocity.com/blogs/CommentView,guid,e7f326d0-57a7-454e-a566-cc8864364dd7.aspx</wfw:comment>
      <wfw:commentRss>http://www.enterprocity.com/blogs/SyndicationService.asmx/GetEntryCommentsRss?guid=e7f326d0-57a7-454e-a566-cc8864364dd7</wfw:commentRss>
      <title>Requirements Traceability</title>
      <guid isPermaLink="false">http://www.enterprocity.com/blogs/PermaLink,guid,e7f326d0-57a7-454e-a566-cc8864364dd7.aspx</guid>
      <link>http://www.enterprocity.com/blogs/2008/10/30/RequirementsTraceability.aspx</link>
      <pubDate>Thu, 30 Oct 2008 23:13:03 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;Been
doing a lot of thinking recently about tractability and how far it should really be
taken. I have talked to a wide range of people over the years, ranging from project
managers, development managers, team leaders and guy-at-the-desk implementers and
am getting a wide range of answers.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;Typically
requirements traceability is critical to the success of a software project simply
because it helps you ensure that you are doing what’s needed to satisfy the customers
need and no more. But, as with may ‘processes’ in the SW realm, I think it can be
taken a bit farther than it should be. I have been told by some project and development
managers that having a concrete way to trace requirements all the way down to the
code that implements them is critical. The ability to look at the code and know exactly
why something was put into the system, and more importantly what will be impacted
by making a code change, is a ‘must have’ in any good development system. In a traceability
graph this usually ends up looking like this:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.enterprocity.com/blogs/content/binary/trace1.png" border=0&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;While
I can start to see the benefit of that I also start to see where it breaks down a
bit.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in; mso-list: l0 level1 lfo1"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;1)&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Code
is often used massively between functional areas so it leads to a very large traceability
tree. In my opinion once you get past a certain number of branches (a number I have
not really quantified yet but I will know it when I see it) the code simply gets qualified
as ‘important’ and traceability at that point really looses some value.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in; mso-list: l0 level1 lfo1"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;2)&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;The
current state of tools at this point really offers no way to store this metadata in
the source in a simple, and automated, manner. This leaves it up to the developer
to perform this task (usually in the comments) and that means that the developer gets
more work to do. As we all know, the more time something takes that does not give
the person doing it much (if any) direct value, the more likely it is that the task
does not get done. This means that the traceability data can immediately become suspect
causing no one to believe it and thus again it looses its value.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in; mso-list: l0 level1 lfo1"&gt;
&lt;font color=#000000&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;3)&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Why
do we really care that &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;FunctionX&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt; was
written to explicitly fulfill functional requirement F-101 and thus Business requirement
B-203?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;I
personally think that this deep traceability is only there to fulfill management needs
to see neat charts (ok, maybe I could have worked on the color scheme a bit) and graphs.
I also think that this is a way for managers to feel that they are ensuring value
from their developers by making sure that the developers are only writing what is
needed to satisfy the requirements and not a line of code more. In fact many developers
seem to be from my side of the camp, but some of them take it way to far in the other
direction. Their opinions are that unless the system can be ensured as ‘good’ why
track any of it at all? They know what the requirements are, they should be left on
their own to implement the code in a way that satisfies the requirements and that’s
it. Why do they need to justify their work at all as long as the end product works
well and satisfies the stated requirements?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;What
you end up with here is this:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.enterprocity.com/blogs/content/binary/conflict1.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;Who
wins form this? No one does. Most of the time when you have an all or nothing strategy
the outcome is completely non-productive. Is it good idea to have requirements traceability?
Sure it is. I think most sensible developers and managers alike will agree that knowing
why you are doing something, what the impact of changes are, and how things get tested
are all good (great) ideas. The frustration comes in trying to come up with a solution
that satisfies both camps. Something that gives both the managers and developers what
they want.&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;I
think that something is a very tight level of traceability between all levels of requirements,
both up and downwards, but then to augment that into the code by completing the traceability
down to the test cases and stopping there. With this you get something that looks
like this:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.enterprocity.com/blogs/content/binary/trace2.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;Notice
that you now have traceability form business requirements all the way down to the
test cases just like you did before but you have left the code out of it. Some folks
might say that this is missing the need (want) to trace requirements to the code that
implements them but take a closer look and you will see that it really does not. The
code traceability has not been skipped over, it has been preserved due to the physical
connection to the test cases.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;Consider
this. Every test case should be there to explicitly support a use case, or at least
one part of a use case. This means that every test should be traceable back to some
code that it is testing. This ‘traceability’ can be seen in one of two ways. First,
most test cases that reference no code inside them are easy to spot, since they have
no code inside, and second, you can easily run an automated tool to check the source
code of a test case that fails to reference any code. Clean, simple and it leaves
the developer out of it which is good.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;Now
consider the other use of full traceability down to the code level. The ability to
potentially spot dead code, or code that does not specially trace back to any requirement.
You have not lost here wither since you can again use an automated tool to run a call
tree backwards from all the test cases and ensure that you have no code written that
is not reachable by a test. Actually this should be part of a normal test regime anyway
and is part of what is called code coverage analysis, making sure that as much of
your code is tested as possible.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;Have
you lost anything? No. Well maybe some work. In fact if you take a look back to your
test practices you are already probably doing this almost 100% if you are using code
coverage analysis. If you are not doing code coverage, start. Look at what it gives
you. Management gets what they want, development gets what they want and everyone
is happy. This is a classic win-win scenario that I think everyone can live with.&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.enterprocity.com/blogs/aggbug.ashx?id=e7f326d0-57a7-454e-a566-cc8864364dd7" /&gt;</description>
      <comments>http://www.enterprocity.com/blogs/CommentView,guid,e7f326d0-57a7-454e-a566-cc8864364dd7.aspx</comments>
      <category>Design</category>
      <category>Requirements</category>
    </item>
    <item>
      <trackback:ping>http://www.enterprocity.com/blogs/Trackback.aspx?guid=38e5e0fd-8ca9-4229-bb15-36b5777b9ecd</trackback:ping>
      <pingback:server>http://www.enterprocity.com/blogs/pingback.aspx</pingback:server>
      <pingback:target>http://www.enterprocity.com/blogs/PermaLink,guid,38e5e0fd-8ca9-4229-bb15-36b5777b9ecd.aspx</pingback:target>
      <dc:creator>Ray Cassick</dc:creator>
      <wfw:comment>http://www.enterprocity.com/blogs/CommentView,guid,38e5e0fd-8ca9-4229-bb15-36b5777b9ecd.aspx</wfw:comment>
      <wfw:commentRss>http://www.enterprocity.com/blogs/SyndicationService.asmx/GetEntryCommentsRss?guid=38e5e0fd-8ca9-4229-bb15-36b5777b9ecd</wfw:commentRss>
      <title>Robustness</title>
      <guid isPermaLink="false">http://www.enterprocity.com/blogs/PermaLink,guid,38e5e0fd-8ca9-4229-bb15-36b5777b9ecd.aspx</guid>
      <link>http://www.enterprocity.com/blogs/2008/10/11/Robustness.aspx</link>
      <pubDate>Sat, 11 Oct 2008 05:54:58 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font size=3&gt;&lt;font color=#000000&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;Recently,
in one of my many quests for knowledge about the good old NNTP protocol (be on the
lookout for a really cool Usenet news reader to be released by Enterprocity within
the next few months) I was pointed towards something called Postel’s Law, also referred
to as the robustness principal.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font size=3&gt;&lt;font color=#000000&gt;In
a nutshell the law is simple. It states:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="COLOR: black; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;font size=3&gt;“Be
conservative in what you do, be liberal in what you accept from others.” – Jon Postel&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000 size=3&gt;You can
see it for yourself right &lt;a href="http://www.faqs.org/rfcs/rfc793.html"&gt;here&lt;/a&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font size=3&gt;&lt;font color=#000000&gt;at
the bottom of page 12 in RFC 793 (TCP).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font size=3&gt;&lt;font color=#000000&gt;Since
I am embarking on my new role as a Senior Software Engineer next week I thought that
me getting pointed to this quotation form &lt;a href="http://en.wikipedia.org/wiki/Jon_Postel"&gt;Jon
Postel&lt;/a&gt; was quite apropos.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font size=3&gt;&lt;font color=#000000&gt;This
is something that I have seen so much of over the last few years as my old role as
a Senior Applications Engineer, both in the products that I supported as well as in
the products that I helped others build. Many times companies can get involved in
a finger pointing match over who owns a bug (us or them, it’s not OUR fault) or if
something is even a bug or not. Many times engineering would point to a message we
got from another component in the users solution (we did VoIP Gateways talking SIP
so in these cases is was &lt;a href="http://en.wikipedia.org/wiki/Session_Initiation_Protocol"&gt;SIP&lt;/a&gt; messages)
and said that the message was malformed in some way, and this was why our stack threw
it on the garbage heap, or leaked memory, or threw an exception, or dropped a call,
or some other undesirable behavior that caused someone to pick up their land line
and call me.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font color=#000000&gt;&lt;font size=3&gt;It
all boiled down to &lt;/font&gt;&lt;a href="http://en.wikipedia.org/wiki/Robustness_Principle"&gt;&lt;font size=3&gt;Postel’s
Law&lt;/font&gt;&lt;/a&gt;&lt;font size=3&gt;. &lt;/font&gt;&lt;span style="COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font size=3&gt;The
third party SIP stack that we used &lt;span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 115%; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;(no
names here please) &lt;/span&gt;was not very robust at all in its ability to take in things
that were not 100% to the RFC. It was a good stack that did its job and had a good
team behind it but when it came to handling SIP messages, it was very picky to say
the least. One message that&amp;nbsp;was not a complete verbatim to the ABNF used in the
RFC and that message was ‘wrong’ and the behavior was indeterminate.&amp;nbsp;That and
the fact that there are some really nebulous areas in the RFC that did not help, made
it look at times like the product had some serious issues, and in my opinion it did,
from a users perspective. Taking this to another level, many of these malformed messages
were in message headers that our product did not even care about, that just ended
up adding insult to injury there.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&gt;&gt;&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font size=3&gt;&lt;font color=#000000&gt;In
user land, people don’t care about all the stuff behind the scenes; they just want
things that they paid for to work. Add to the fact that other products that may not
have been better in all other respects did not have a problem dealing with these errant
messages, and our product became even more suspect in the eyes of the customers. All
engineers need to understand that a customer’s perception is reality. Even if YOU,
as an engineer, know that the problem is really NOT with your product but with the
other one, or a bug in a third party component that you use in your system, the customer
sees an exception thrown in YOUR product or poor behavior in YOUR product and not
the others; your product is the one with the problem.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;
&lt;font color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;font size=3&gt;&lt;font color=#000000&gt;So,
this is just gentle reminder to all engineers out there (myself included) that not
only do you need to validate all input to your systems (a good thing that some of
us may take way too far) but you also need to decide HOW you are going to act when
you detect that bad input. Throwing an exception when you are the upper layer, right
next to a human user, may not be the best (be on the lookout for a posting on the
use of exceptions :) ). 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.enterprocity.com/blogs/aggbug.ashx?id=38e5e0fd-8ca9-4229-bb15-36b5777b9ecd" /&gt;</description>
      <comments>http://www.enterprocity.com/blogs/CommentView,guid,38e5e0fd-8ca9-4229-bb15-36b5777b9ecd.aspx</comments>
      <category>Design</category>
      <category>Error Handling</category>
    </item>
  </channel>
</rss>