<feed version="0.3" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns="http://purl.org/atom/ns#" xml:lang="en-US"><title> Agile RUP for Product Development</title><link rel="alternate" type="text/html" href="http://www.proteans.com/CS/Web/blogs/agilerup/default.aspx" /><tagline type="text/html"> </tagline><id>http://www.proteans.com/CS/Web/blogs/agilerup/default.aspx</id><author><url>http://www.proteans.com/CS/Web/blogs/agilerup/default.aspx</url></author><generator url="http://communityserver.org" version="1.0.0.50218">Community Server</generator><modified>2005-04-08T03:19:00Z</modified><entry><title>Best Practices of Requirements Collection</title><link rel="alternate" type="text/html" href="http://www.proteans.com/CS/Web/blogs/agilerup/archive/2005/07/06/19.aspx" /><id>9180e751-82f4-479f-b20f-6957df5e85b8:19</id><created>2005-07-06T05:30:00Z</created><content type="text/html" mode="escaped">&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;Accurate Requirements form the most essential part of the formula for
successful software product development.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;This article explains why and describes the best practices of writing
accurate requirements.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;





&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;&lt;span&gt;A Fortune 100 company embarked on a project to design and build a
sophisticated software package that it would ultimately deploy to its offices
throughout the world. Two years and about $10 million later, the field offices
refused to use the software because it didn't do what it was intended to do.
Instead of helping to streamline an important business process, the software
actually hindered it. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/font&gt;&lt;/p&gt;








&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&amp;nbsp;Sounds a similar story? Based on several surveys by various groups, there
are some stark findings: &lt;br&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;i&gt;&lt;span&gt;The Standish group reports that over 80% of projects are unsuccessful
     either because they are over budget, late, missing function, or a
     combination. (&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;a href="http://www.standishgroup.com/sample_research/chaos_1994_1.php" title="http://www.standishgroup.com/sample_research/chaos_1994_1.php"&gt;&lt;i&gt;http://www.standishgroup.com/sample_research/chaos_1994_1.php&lt;/i&gt;&lt;/a&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;)&lt;/span&gt;&lt;/i&gt;&lt;span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;i&gt;&lt;span&gt;53 percent of projects cost 189 percent of their original estimate. &lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;i&gt;&lt;span&gt;Average schedule overruns may be as high as 100%&lt;/span&gt;&lt;/i&gt;&lt;span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;i&gt;&lt;span&gt;Over 40% to 60% of defects in software are caused by poor requirements
     definition.&lt;/span&gt;&lt;/i&gt;&lt;span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;i&gt;&lt;span&gt;About One-Quarter of all projects are cancelled.&lt;/span&gt;&lt;/i&gt;&lt;span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;i&gt;&lt;span&gt;Customers do not use 20% of their product features.&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;






&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;These are some of the many findings that do not speak highly of successes
of software development projects. Based on our experience of over fifteen
products, and learning from the several surveys and research, we have
identified that the most critical factor of successful software product
development is the right requirements documentation. Poor requirements are the biggest
problem that end up increasing the budgeted engineering cost and not matching
with the expected quality. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;









&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&amp;nbsp;If we look little deeper, and see why poor requirements cause all the
havoc: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;ol&gt;
&lt;li class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;Impact on Design and Architecture&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: Incorrect or incomplete understanding of the
     current and future requirements will not enable the architects to design
     the right architecture and design that can take care of current and
     immediate future needs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;ol&gt;
&lt;li class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;Increased Dev Iterations&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: If the development team does not have the complete information,
     there will be far too many iterations and cycles around requirements
     understanding. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;ol&gt;
&lt;li class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;Impact on Quality&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: If
     the development team makes too many incorrect assumptions because of lack
     of clarity, it may arise in a lot of iterations in the later half of
     development, when the product managers realize the gap due to incorrect
     assumptions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;ol&gt;
&lt;li class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;Reduced Testablity&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: The
     test engineers do not have the complete picture to write correct test
     plans and test cases if the requirements are not properly communicated to
     the test team in the right manner. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;









&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&amp;nbsp;As these issues point out, accurate and complete documentation of
requirements is very important. In addition, presenting them in a form that
will communicate the complete and accurate picture to the development team is
equally important. If the development team cannot visualize the end product
completely, there will always be a gap between the actual vision and the
software developed and the development will go into several iterations trying
to bridge that gap. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;









&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;We have learnt a lot of lessons on requirements process from our vast
software product experience. In addition, we have done extensive research on
the best practices followed at the top software product companies in the world.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Our experience and research has helped us to
define the types of requirements needed for capturing all aspects of software.
They are: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;a.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Business Vision and Business Requirements &lt;/span&gt;&lt;/b&gt;&lt;span&gt;- "Why" requirements. These capture the high
level objectives of the organization or customer requesting the system or the
product. They can be considered as "why we are doing this"
requirements and should capture the fundamental reason for product existence.&lt;b&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;b.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Functional Requirements &lt;/span&gt;&lt;/b&gt;&lt;span&gt;- Functional requirements can be considered as the
"What" requirements. These capture the functionality that must be
built into the system to satisfy business requirements. &lt;b&gt;Use Cases&lt;/b&gt; are
great way to document functional requirements. &lt;/span&gt;&lt;i&gt;&lt;span&gt;A use case defines a goal-oriented set of interactions
between external actors and the system under consideration.&lt;/span&gt;&lt;/i&gt;&lt;b&gt;&lt;span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;c.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Non-Functional Requirements&lt;/span&gt;&lt;/b&gt;&lt;span&gt;: They are the "How" or "How Well"
requirements. They capture the technology specific and -ility requirements of
the system like compatibility, usability, usability, performance, reliability
etc.&lt;b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;d.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;UI Prototypes &lt;/span&gt;&lt;/b&gt;&lt;span&gt;- UI prototyping helps in reducing risk, decreased system size and
complexity, and reduced requirements change. The UI prototypes must be
validated by the (beta) customers before they can be frozen. We have found them
to be the most effective way of communicating requirements to the development
team. UI prototypes/screenshots provide a great visualization tool for both
development and test engineers to understand the exact software flow and they
are much more effective in designing classes and test cases.&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;We recommend "Requirements Scrubbing" after they are documented.
It is a process of carefully examining the requirements for unnecessary or
overly complex requirements, which are then removed. The idea is to eliminate
all non-essential requirements, making each requirement as simple as possible,
and substituting with cheaper options whenever possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;Finally, how would you ensure that you have covered all aspects of
requirements through functional and non-functional requirements? We have
prepared exhaustive checklists that will help you to make sure that your
requirements are ready to be published to the development team.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;









&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;Functional Requirements Checklist:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;a.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Are the requirements &lt;b&gt;complete &lt;/b&gt;? &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;b.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Are all the requirements uniquely &lt;b&gt;identifiable&lt;/b&gt;? &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;c.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Are the requirements clearly and appropriately &lt;b&gt;prioritized&lt;/b&gt;?
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;d.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Are the requirements &lt;b&gt;consistent&lt;/b&gt;? ( no internal
contradictions) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;e.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Does the set of requirements adequately address all
appropriate &lt;b&gt;exception conditions&lt;/b&gt;? &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;f.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Does the set of requirements adequately addresses &lt;b&gt;boundary
conditions&lt;/b&gt;? &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;g.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Are the requirements &lt;b&gt;feasible&lt;/b&gt;? (solution to the
set of requirements exists) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;h.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Can the requirements be implemented within known &lt;b&gt;constraints&lt;/b&gt;?
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;i.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Are the
requirements &lt;b&gt;sufficient&lt;/b&gt;? &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;j.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Are inverse requirements &lt;b&gt;explicitly stated&lt;/b&gt;? &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;k.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Are these the &lt;b&gt;simplest &lt;/b&gt;set of requirements that
meets the stake-holder's needs? &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;l.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Are all the &lt;b&gt;cross-references
to other requirements&lt;/b&gt; correct? &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;m.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Is each requirement &lt;b&gt;testable&lt;/b&gt;/verifiable? &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;n.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Ensure that each requirement needs to be a &lt;b&gt;solution &lt;/b&gt;instead
of being stake-holder's statement. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;span&gt;o.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;The requirements need to be in &lt;b&gt;customer's language &lt;/b&gt;using
customer's terminology. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Non Functional Requirements Checklist:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;a.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Performance &lt;/span&gt;&lt;/b&gt;&lt;span&gt;- performance requirements of the application -- Response time or latency
requirements; Throughput requirements; data volume requirements ( input,
stored, output), Peak or short-term load requirements.&lt;b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;b.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Platform support&lt;/span&gt;&lt;/b&gt;&lt;span&gt; - which Operating systems, prerequisite software and hardware
requirements.&lt;b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;c.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Licensing &lt;/span&gt;&lt;/b&gt;&lt;span&gt;- licensing scheme of the product and other OEM/external licensing
requirements.&lt;b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;d.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Internationalization &lt;/span&gt;&lt;/b&gt;&lt;span&gt;- what locales/languages is this software going to be built for now and
future.&lt;b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;e.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Integration requirements&lt;/span&gt;&lt;/b&gt;&lt;span&gt; - How do you want third party applications to integrate
with your application to enable more usage scenarios and sales partnership
opportunities? How do you want to integrate with third party applications for
similar benefits?&lt;b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;f.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Setup &lt;/span&gt;&lt;/b&gt;&lt;span&gt;- How should the product be deployed? You must consider install, uninstall,
repair and upgrade scenarios.&lt;b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;g.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Security &lt;/span&gt;&lt;/b&gt;&lt;span&gt;- What is the security and safety model for your application? Consider
authentication, authorization and secure data transfer. You must consider both
application and platform (windows) security.&lt;b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;h.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Configurations &lt;/span&gt;&lt;/b&gt;&lt;span&gt;- Are the Supported Configurations specified? Are the Compatibility
requirements specified ( backwards, other applications, etc.)&lt;b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;i.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Usability &lt;/span&gt;&lt;/b&gt;&lt;span&gt;- Are the usability requirements specified? Are the look
and feel requirements specified? ( Color schemes, standards etc.)&lt;b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;j.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Operational &lt;/span&gt;&lt;/b&gt;&lt;span&gt;- Are any operational constraints or requirements specified? ( the user
must be able to operate the system using ski gloves etc)&lt;b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;k.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Reliability &lt;/span&gt;&lt;/b&gt;&lt;span&gt;- Are the &lt;b&gt;reliability &lt;/b&gt;requirements specified? Are the &lt;b&gt;availability
&lt;/b&gt;requirements specified? Are the &lt;b&gt;serviceability &lt;/b&gt;requirements
specified? Are the &lt;b&gt;robustness &lt;/b&gt;requirements specified?&lt;b&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.proteans.com/CS/Web/aggbug.aspx?PostID=19" width="1" height="1"&gt;</content><slash:comments>0</slash:comments><wfw:commentRss>http://www.proteans.com/CS/Web/blogs/agilerup/commentrss.aspx?PostID=19</wfw:commentRss></entry><entry><title>Design Principles for Effective Software Product Design Engineering</title><link rel="alternate" type="text/html" href="http://www.proteans.com/CS/Web/blogs/agilerup/archive/2005/07/06/18.aspx" /><id>9180e751-82f4-479f-b20f-6957df5e85b8:18</id><created>2005-07-06T05:27:00Z</created><content type="text/html" mode="escaped">&lt;p class="MsoNormal"&gt;&lt;span&gt;Although comprehensive requirement collection or &lt;i&gt;inception&lt;/i&gt; is the most critical activity
for software product engineering, it will be naïve to think that the product
would be successful if fundamentals are not strong. The right architecture and
design is most critical artifact after requirement documents.&lt;o:p&gt; &lt;br&gt;
&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;





&lt;p class="MsoNormal"&gt;&lt;span&gt;Product design is the art of applying &lt;u&gt;technology,
economics, aesthetics and common sense (!)&lt;/u&gt;&lt;span&gt;&amp;nbsp;
&lt;/span&gt;in order to create software products which make business &lt;u&gt;profitable,
sustainable and scalable&lt;/u&gt;.&lt;br&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;





&lt;p class="MsoNormal"&gt;&lt;span&gt;Software product design should be a holistic activity,
encompassing and addressing every aspect of software – the end users, the
business vision, the release and version plan, the budget, expected revenues,
time to markets, expected lifetime of software and much more.&lt;span&gt;&amp;nbsp; &lt;/span&gt;It should not be confined to the popular
narrow belief that design is all about applying object orientation, patterns,
application blocks, frameworks etc., because they are the ‘in’ thing.&lt;o:p&gt; &lt;br&gt;
&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;





&lt;p class="MsoNormal"&gt;&lt;span&gt;In this article, we identify and analyze the factors which
should be considered while undertaking the architecture and design activity.&lt;br&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Begin with the end
in mind: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;Product
roadmap consists of software feature and release plan for finite number of years.
If you are developing product as one time activity then there is probably no
point in designing – just skip this step. But that’s hardly the case. The
design should consider all foreseeable versions of software, their features,
and create enough flexibility to incorporate these features without too much of
a fuss. The level of flexibility and extensibility in product design is
dictated by product roadmap. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;





&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Design to realize
the Business Vision: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;If
the business vision dictates aggressive time to market the first version of
software and your architect starts with a highly generic design, then the
release is bound to get delayed. The design choices should be aligned with your
organization’s business model. Specifically, the architect and design team
should always be in synchronicity with the following criterion: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Time to market&lt;/span&gt;&lt;/b&gt;&lt;span&gt; – Don’t over-design if you
     time is not on your side. For example, there is no need to create
     Interfaces and corresponding abstract classes for everything if it doesn’t
     add any value to your organization and end users. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Competition&lt;/span&gt;&lt;/b&gt;&lt;span&gt; – The design should address
     the product differentiation requirements from completion. The design
     should also consider competition from new entrants in the market. Somebody
     shouldn’t just be able to throw you out of market by replicating your
     windows product on unix!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Revenue Model:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; It is important to
     understand the revenues models which your organization has envisaged
     around the product. The design for a hosted ASP application would be
     drastically different from the model where you sell the CDs of your
     software product. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;





&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;Design for End
Users: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;How can an
end user tell me how to design!! That may be the question in the mind of an
egoist software architect. No, end user is not going to tell you. Instead, he
will forget your product after downloading the evaluation copy if you did not
consider him while designing.&lt;span&gt;&amp;nbsp; &lt;/span&gt;An
example: I never use a product if it doesn’t support the DD/MM/YYYY date
format. The requirement is simple but critical. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;span&gt;Analyze following things about end users before you get to
the UML diagrams: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Home or corporate users&lt;/span&gt;&lt;/b&gt;&lt;span&gt; – Corporate users are more
     particular about professional look &amp;amp; feel, usability, security and
     performance. Your design should not compromise these aspects.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Home users think in terms of ease of
     use, simplicity of features and compatibility on multiple platforms.
     Design what best suits to the end users.&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;o:p&gt; &lt;br&gt;
&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;






&lt;ul&gt;
&lt;li class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Internationalization&lt;/span&gt;&lt;/b&gt;&lt;span&gt; – Consider how you will
     handle when your application is run different cultures. Handling multiple
     languages, date formats, address formats etc as part of software design.&lt;/span&gt;&lt;span&gt;&lt;o:p&gt; &lt;br&gt;
&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;






&lt;ul&gt;
&lt;li class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Reason and context of using
     the software&lt;/span&gt;&lt;/b&gt;&lt;span&gt;
     – Put yourself into users’ shoes and you will surely get inputs for
     design. A music playing software should support skins while word
     processing software will not. A frequent traveler will would like the
     software to be offline capable – he should not be left chewing his nails
     if there is no connectivity.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;






&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;End users’ age group, educational background, IT skills,
etc also play important role in making the right design choices. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;br&gt;
&lt;b&gt;&lt;span&gt;Think Integration:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; For the end user, your software
product is one piece in the IT eco-system of his life. He would like it be
interoperable with other members of eco-system. If you develop walled software,
you are bound to repent sometime.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The
software product should be open enough to be integrated with other relevant
applications. And to make it open, the level and granularity of openness are
important considerations for software design. Ask these questions when you
think integration: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li class="MsoNormal"&gt;&lt;span&gt;Will
     other ISVs integrate your software with theirs?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;span&gt;Will
     you allow partners to integrate your software with others?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;span&gt;Do
     you yourself want to provide professional integration services?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;






&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;br&gt;
&lt;b&gt;&lt;span&gt;Think Deployment:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; For some reason, deployment is
considered as the last thing in software design (May be because, it is last
phase of product life cycle!). Thinking about the deployment scenarios early
can prevent products from failing. Software products can be multi-tiered,
having a mix of servers, services, clients and databases, SDKs, supporting
multiple operating systems. It should be possible to deploy them in a variety
of topologies. The designs should make sure that the consistency, security,
performance and reliability if not affected by the topology.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;br&gt;
It’s also important to understand the typical production
environment. Sometimes, the constraints of production environment force design
changes. For example, if the connectivity between different components is
intermittent then message queues may be ideal compared to synchronous
communication mechanism and the client should be offline capable.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;br&gt;
&lt;b&gt;&lt;span&gt;Build vs. Buy (vs.
Free vs. Open Source): &lt;/span&gt;&lt;/b&gt;&lt;span&gt;It is very important to make economic sense for product development
activity. As the old cliché goes ‘Don’t reinvent the wheel’. If it takes 3 man
months in developing a component of your product, you would be better off
buying it for 1000 dollars with royalty free distribution or using open source
component and spending 1 man month for customization. If you are lucky you may
get it free. For example, for .NET based product development it is a good idea
to use Application Blocks instead of writing custom code for infrastructure
components like Data Access, Logging, Exception Management and Caching etc. It
is a better idea to buy UI components from Infragistics than to develop your
own.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The design and architecture team
should make very conscious decisions when it comes to reinventing the
wheel.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;









&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;br&gt;
&lt;b&gt;&lt;span&gt;Choose the right
platform(s): &lt;/span&gt;&lt;/b&gt;&lt;span&gt;Should
you use J2EE or .NET or Cold-Fusion or LAMP (&lt;u&gt;L&lt;/u&gt;inux, &lt;u&gt;A&lt;/u&gt;pache, &lt;u&gt;M&lt;/u&gt;ySQL,
&lt;u&gt;P&lt;/u&gt;HP)? This decision largely depends on the kind of user segment you are
targeting. For example, if you are developing a fresh product for small and
medium size customers having 5-500 user, then .NET would be the best platform,
provided that majority of end users use windows. But, individual strengths and
weaknesses of each platform also play a role in arriving at the correct choice.
If your product uses Web Services or Message Queuing, then you may choose .NET
since it provides mature implementation of these technologies. Whatever you
platform choice be, it’s important to make sure that it provides enough
technology support and infrastructure services to satisfy current and future
product requirements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;br&gt;
&lt;b&gt;&lt;span&gt;Security:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; There are four aspects to
security – &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li class="MsoNormal"&gt;&lt;span&gt;Any
     part of your product should not be usable by unauthenticated and
     unauthorized parties&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;span&gt;The
     product should not compromise the stability and security of end users’ IT
     environment &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;span&gt;The
     product should adhere to law &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;span&gt;No
     body should be able to exploit your IP (Intellectual Property). Obfuscate
     and protect your code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;






&lt;p class="MsoNormal"&gt;&lt;span&gt;It is vital to incorporate stringent security into the
product design. There is nothing more damaging than bad press about security
holes in your product!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Performance &amp;amp;
Scalability:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; Even
though the memory is becoming cheaper and processors are getting smarter, there
is no escape from factoring performance and scalability issues in your design.
Bad design leads to performance degradation when the volume of concurrent
operations increases. Bad design leads to redoing the applications when it
fails to scale. The better approach is to estimate the volume progression for
all foreseeable product releases and consider it as design input for
maintaining consistent level of performance and ability to scale the product to
new levels.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Proprietary
protocols or Open Standards:&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;This is similar to the dilemma of
build vs. buy. And the solution is also similar. If proprietary protocol or
standard is not going to be the unique selling point for your product, then go
for open ones. They are more likely to be stable, mature and acceptable than
proprietary ones.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Design to enable Customization:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; Any enterprise class of product
would require some amount of customization before being useful for end users.
They may be scenarios where the product has to be customized for an industry
vertical. If such is a case for your product, design for points of
customization. It may be as simple as providing the facility to change the text
of UI object. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Support all Licensing
Models: &lt;/span&gt;&lt;/b&gt;&lt;span&gt;There can
be numerous types of software licensing models - One Time, Subscription, Named
Users, Server license and so on. Ideally, the design should be flexible enough
to incorporate all possible licensing models which the organization may want to
offer. The decision on licensing model design should not be left to the end. If
it is ambiguous, then the best way is to decouple it from product and design a
separate generic licensing manager.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Exploit Tools:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; Software tools can be effectively
used to model the components of product. They can save lot of effort and the
model produced by them can be an effective artifact to communicate the design
without ambiguities. Another usage of software tools can be to generate code.
It can be effective when the model (database model, UML etc) does not change a
lot as the product development goes into iterations.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Simplify:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;i&gt;Newton&lt;/i&gt;&lt;i&gt; was a genius, but not because of the
superior computational power of his brain. Newton's genius was, on the
contrary, his ability to simplify, idealize, and streamline the world so that
it became, in some measure, tractable to the brains of perfectly ordinary men -
Gerald M. Weinberg.&lt;/i&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Remember the
KISS principle when you design software – &lt;u&gt;K&lt;/u&gt;eep &lt;u&gt;I&lt;/u&gt;t &lt;u&gt;S&lt;/u&gt;imple &lt;u&gt;S&lt;/u&gt;tupid.
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;span&gt;Requirements
is all ‘doing the right things’, while software design is ‘doing the things
right.’&lt;span&gt;&amp;nbsp; &lt;/span&gt;Now you know why it is important
to be more watchful about design!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.proteans.com/CS/Web/aggbug.aspx?PostID=18" width="1" height="1"&gt;</content><slash:comments>2</slash:comments><wfw:commentRss>http://www.proteans.com/CS/Web/blogs/agilerup/commentrss.aspx?PostID=18</wfw:commentRss></entry><entry><title>Bottomline of any software engineering process...</title><link rel="alternate" type="text/html" href="http://www.proteans.com/CS/Web/blogs/agilerup/archive/2005/04/10/6.aspx" /><id>9180e751-82f4-479f-b20f-6957df5e85b8:6</id><created>2005-04-10T15:37:00Z</created><content type="text/html" mode="escaped">&lt;I&gt;&lt;FONT face="Times New Roman"&gt;
&lt;P&gt;&lt;FONT&gt;Design and programming are human activities; forget that and all is lost.&lt;/FONT&gt;&lt;/P&gt;&lt;/I&gt;&lt;/FONT&gt;&lt;FONT face="Times New Roman"&gt;
&lt;P&gt;- Bjarne Stroustrup, 1991&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://www.proteans.com/CS/Web/aggbug.aspx?PostID=6" width="1" height="1"&gt;</content><slash:comments>0</slash:comments><wfw:commentRss>http://www.proteans.com/CS/Web/blogs/agilerup/commentrss.aspx?PostID=6</wfw:commentRss></entry><entry><title>About this Blog...</title><link rel="alternate" type="text/html" href="http://www.proteans.com/CS/Web/blogs/agilerup/archive/2005/04/08/5.aspx" /><id>9180e751-82f4-479f-b20f-6957df5e85b8:5</id><created>2005-04-07T21:19:00Z</created><content type="text/html" mode="escaped">&lt;FONT&gt;The software product development industry has evolved as one of the most important industries of our time. There is intense competitive environment, and &lt;SPAN&gt;it is primarily the ability to create and deliver software products that better address their real customer needs&lt;/SPAN&gt;, that will determine the winners. Almost everybody in this business understands this, then why dont they achieve it ?&lt;BR&gt;&lt;BR&gt;The answer lies in the software development process itself. Over the last few decades, several visionaries, teams and companies have worked hard to define processes that will make software development more predictable in terms of time, cost and quality. Beginning from the Waterfall, Spiral models to the RUP, MSF, and now the Agile methodologies like XP, Scrum etc, there are several models that talk about the &lt;SPAN&gt;right software engineering processes&lt;/SPAN&gt;. RUP is one of the most well defined, comprehensive process frameworks, and the Agile processes represent the lightweight, people driven methodologies. &lt;BR&gt;&lt;BR&gt;Being involved in software product development for the last six years as a developer, architect and manager, this subject has fascinated me a lot. Needless to say, the element that makes this whole subject fascinating is the "people" factor. You think of an improvement in manufacturing process, design it and make necessary changes in the assembly line - more often than not, you will see the process implemented permanently. There are hardly many people would be able to say something similar for software development.&lt;BR&gt;&lt;BR&gt;In this blog, I would like to share our experiments at Proteans with various processes and present the "Agile RUP" which we have successfully applied to software product development, and still improving. &lt;BR&gt;&lt;/FONT&gt;&lt;img src="http://www.proteans.com/CS/Web/aggbug.aspx?PostID=5" width="1" height="1"&gt;</content><slash:comments>0</slash:comments><wfw:commentRss>http://www.proteans.com/CS/Web/blogs/agilerup/commentrss.aspx?PostID=5</wfw:commentRss></entry></feed>