<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Pragmatic Software Design</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/" />
    <link rel="self" type="application/atom+xml" href="http://www.ebizq.net/blogs/sdesign/atom.xml" />
    <id>tag:www.ebizq.net,2008-11-06:/blogs/sdesign/71</id>
    <updated>2009-11-16T02:04:15Z</updated>
    <subtitle>Vijay Narayanan blogs about software design from several perspectives - SOA,BPM, messaging, systematic reuse, agility, and architecture.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.21-en</generator>

<entry>
    <title>16 Candidate Reusable Capabilities for Business Processes</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/11/16_candidate_reusable_capabili.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17380</id>

    <published>2009-11-16T02:00:08Z</published>
    <updated>2009-11-16T02:04:15Z</updated>

    <summary>Here area set of ideas, candidate assets if you will, of reusable software capabilities for your business processes. Please don&apos;t take these as capabilities you have to build from scratch. Instead, view them as part of your overall BPM software...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bpm" label="BPM" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="businessprocess" label="business process" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="capabilities" label="capabilities" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="integration" label="integration" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>Here area set of ideas, candidate  assets if you will, of reusable software capabilities for your business processes. Please don't take these as capabilities you have to build from scratch. Instead, view them as part of your overall BPM software infrastructure. Most of these capabilities could be provided by a single vendor or using an <a href="http://www.ebizq.net/blogs/sdesign/2009/10/build_an_abstraction_api_for_b.php">abstraction layer</a>, you can realize these using multiple ones. You can also prioritize this list when evaluating vendor offerings.<br />
<ol><br />
	<li><em>Rule   driven Exception Handler</em>: Integrate   exception handling with business rules engine. The rules could  determine how   to resolve, mitigate, and handle errors. It will  also specify routing   instructions for errors requiring human  intervention.</li><br />
	<li><em>Internationalization   Support</em>: Status   messages driven by a resource bundle as opposed to a single  locale.   Additional locale-specific resource bundles can be added as  required for your business needs.</li><br />
	<li><em>Seamless   Cross Channel Movement</em>: Enable   a business process to start in one sales channel and get completed in  another. Idea   is to support business processes that start, pause, and  get reactivated via an   alternate channel. For example, a user  can start ordering a book online and   request a customer service rep to finish the  process. The idea is to have the user's in-progress process instance data get placed in appropriate work queues in a new business process or in a new state on the original one .</li><br />
	<li><em>Business   Process Completion API</em>: Ability   to determine % complete for any business process based on the  state of the process instance . This API can provide the   ability to get current  status, estimate completion time (e.g. based on   historical data), and  what steps are remaining for the process instance to finish.</li><br />
	<li><em>Business   Activity Hold &amp; Retry API</em>: Facilitate   pause, resume, and delegation of any business activity  based on business   rules. This interface would put processing on hold as well for one or more process instances.</li><br />
	<li><em>Authentication</em>: Enabling integration with a LDAP store, or providing digital certificate based security for interfaces that instantiate the business process are examples here.</li><br />
	<li><em>Entitlements  API</em>: Enable   fine grained authorizations for business activities and  business processes.   Role based entitlements for events - i.e. if a  particular user role cannot   initiate a business process or execute a  particular activity, the software   infrastructure should prevent those actions.</li><br />
	<li><em>Content   Management integration</em>: Integrate   with content management system to serve targeted content based  on state of   business process or to augment data in a process instance.</li><br />
	<li> <em>Event Integration API</em>: Capture   or derive events and handle them using  one or more   business processes. This could also impact existing process instances that   are  in-flight.</li><br />
	<li><em>Indexed Search Integration API</em>: Ability   to execute full-text search as well as categorized search  using an indexed   search engine against completed and in-progress  business process instances. E.g.   search all process instances from a particular division or  with a particular customer code, or category etc.</li><br />
	<li><em>Process Dashboarding</em>: Provide key business process metrics - report real time status of availability,    performance, usage statistics, escalations, etc. Also provide ability  to   override/adjust in-flight process instances based on business scenarios.</li><br />
	<li><em>Business   Process Preferences API</em>: Manage   a set of process-level preferences. E.g. default logging level  for all   tasks could be set to high or all notifications get  delivered to   additional recipients, or data fixes will get audited a  different way   etc.</li><br />
	<li><em>Document Integration</em>: Attach documents using information in a process instance and attach/route content as  part of   the business process orchestration.</li><br />
	<li><em>SLA Adherence API</em>: Manage   service level agreement specifications associated with end to  end business   process as well as key business activities. Ability to  define/handle, and   proactively prevent SLA violations.</li><br />
	<li><em>KPI   Definition and Monitoring API</em>: Monitor   business processes to capture key process indicators based on  business   process. E.g. number of accounts opened today, number of  accounts opened   after multiple validation errors etc.</li><br />
</ol></p>]]>
        
    </content>
</entry>

<entry>
    <title>Building Contract-First Service Capabilities - Podcast Episode</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/11/building_contract-first_servic.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17376</id>

    <published>2009-11-15T00:44:46Z</published>
    <updated>2009-11-15T00:49:12Z</updated>

    <summary>Posted an episode on building contract-first service capabilities at the reuse podcast series:Download file...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="contractfirstservicecapabilitiessoa" label="contract first service capabilities SOA" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>Posted an episode on building <a href="http://wso2.org/library/articles/soa-contract-first-design">contract-first </a>service capabilities at the <a href='http://www.artofsoftwarereuse.com/systematic-reuse-podcast-series/'>reuse podcast series</a>:<br /><br /><object type="application/x-shockwave-flash" height="28" width="300" data="http://www.ebizq.net/web_resources/cioaudio/player/emff.swf?src=http://softwarereuse.podbean.com/mf/web/v5tuxc/episode_14.mp3"><br /><param value="http://www.ebizq.net/web_resources/cioaudio/player/emff.swf?src=http://softwarereuse.podbean.com/mf/web/v5tuxc/episode_14.mp3" name="movie" /></object><br /><a href="http://softwarereuse.podbean.com/mf/web/v5tuxc/episode_14.mp3">Download file</a><br /></p>]]>
        
    </content>
</entry>

<entry>
    <title>Service Capabilities Need to Address Supportablility</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/11/service_capabilities_need_to_a.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17354</id>

    <published>2009-11-08T20:14:42Z</published>
    <updated>2009-11-08T20:39:51Z</updated>

    <summary>Enterprise software systems have several needs one of which is supportability. It is critical that your system is supportable in the production environment. Teams that start thinking about supportability during the last stage of a development cycle or when transitioning...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="logging" label="logging" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="metrics" label="metrics" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="monitoring" label="monitoring" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="soa" label="SOA" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="softwaredesign" label="software design" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="supportability" label="supportability" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>Enterprise software systems have several needs one of which is supportability. It is critical that your system is supportable in the production environment. Teams that start thinking about supportability during the last stage of a development cycle or when transitioning support responsibilities to an external team discover many rude awakenings at the last minute. When designing SOA based solutions it is equally critical that supportability needs aren't ignored. Your service design needs to consider several aspects in this space:</p>

<p>1. How will your service handle exceptions? Does it throw it back to the calling application? If it is logging them, is the format and content agreed upon by your production support team? </p>

<p>2. Related to above, it is equally essential to accurately classify exceptions in the service (as much as possible that is). This will help handle and route via an automated fashion as well. </p>

<p>3. Is there a way you can ping your services without corrupting live data? Maybe you need to setup test data and periodically ensure the services are behaving normally. The other option, depending on your business need is to handle exceptions but return partial data or data that is a bit stale etc. The service capability can continue serving requests simultaneously reporting issues. </p>

<p>2. How will clients get answers to issues during runtime? Will they call your support team and if so, what information are they expected to provide? If you have a known list of issues, you can classify them as infrastructure, data, and business logic and provide relevant answers, additional links, and contacts. </p>

<p>4. If your support team cannot isolate an issue, how will they escalate? When they do, is there information that can be of value? For example, the client application or business process name and version, stack trace, time of error, error message may be essential for troubleshooting. </p>

<p>5. Ensure your services capture relevant metrics throughout the request processing cycle. When was the request received, when processing completed, and origin IP or queue name are essential for troubleshooting. Additional, service-specific metrics might need to be captured as well (e.g. your consumer might want to know the status of a request with a particular customer number or an account identifier).</p>

<p>6. Provide tools for your support team that will make it easy for them to monitor service health, reset resources (e.g. database connection pools), and toggle integration points (e.g. an external system that needs to process the output of your service logic). These tools are very useful and will save valuable time when production issues occur. </p>

<p>These are ideas that just scratch the surface. As service capabilities <a href="http://wp.me/ptCiB-p3">get reused</a> across composite service orchestrations and business processes, supportability becomes extremely important. What have you done in your environment to make services more supportable?</p>]]>
        
    </content>
</entry>

<entry>
    <title>10 Signs Your Team Needs Systematic Reuse</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/11/10_signs_your_team_needs_syste.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17324</id>

    <published>2009-11-01T22:08:07Z</published>
    <updated>2009-11-01T22:13:29Z</updated>

    <summary>In the hectic routines of projects and deadlines it is easy to ignore reuse. After all, we are delivering code, features, and churning out applications - aren&apos;t we? May be you are waiting for the right time to start and...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="agile" label="agile" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="domain" label="domain" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="softwaredesign" label="software design" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="softwarereuse" label="software reuse" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tactical" label="tactical" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[In the hectic routines of projects and deadlines it is easy to ignore reuse. After all, we are delivering code, features, and churning out applications - aren't we? May be you are waiting for the right time to start and execute on a reuse strategy. May be you think software reuse is a big myth and isn't worth pursuing. Regardless of reason poor design will eventually inhibit your efforts to more more agile and responsive to business needs. Here are ten tell-tale signs that your team needs systematic reuse:
<ol>
	<li>Management believes they can install or buy reuse. You are told reuse comes for "free" with OOPS, SOA, BPM, MDM, (you can add your favorite buzzwords here!). <em>Nothing could be farther from the truth :-) </em></li>
	<li>There is no management support for reuse. You typically hear some variation of deliver, execute, and just hit the deadline. What should be a small change rapidly mushrooms into something that touches several classes or services and forces you to change code across modules. To boot, this happens often. This of course adds technical debt and will hurt the team in the long term.</li>
	<li>Developers love to build their custom implementations for which satisfactory solutions exist. It could exist in-house, in the open source community, or available commercially. We have all met the developer who wants to build a better logger than Log4J or a better dependency injection container than Spring. Whatever. The argument usually goes this way: we have special requirements that no one else has and we have the best talent to build it (maintenance, ongoing bugfixes, support costs are conveniently excluded).</li>
	<li>No scope for reuse in the problem domain.  Nothing can be considered for reuse you are told. Our domain is so unique that it changes often - nothing is common across projects or initiatives and we need to keep churning out code to meet business needs. This might be true to an extent but but not the way it is portrayed.</li>
	<li>Your developers and technical leads tell you that their software assets are perfect - they have been made completely reusable for all future needs. Be very wary! Predicting the future is tricky and systematic reuse isn't going to guarantee perfection. More importantly, your investment in reuse is going to provide you the foundation to turn out new features and business processes quicker but doesn't eliminate the need for continuous evolution of those reusable capabilities.</li>
	<li>There are several different versions of a common need like getting customer data or getting a database connection. Each with its own set of assumptions about data structure, error handling, etc. You know there is an opportunity to create a common capability but developers find it easy to cut and paste code from one project or component into another.</li>
	<li>Each developer implements capabilities without the faintest idea of existing ones. You find duplication sprinkled liberally across your codebase - all trying to do the same thing in multiple ways. Each developer of course believes that they were the first ones to implement it (and implement it right!!).</li>
	<li>Design is an after-thought you are told. Why waste time in design when you can implement? No, you don't want big design up front - and you also don't want the opposite. This sign usually manifests itself during testing - you discover the same need across sub-systems or modules. A little design would have discovered this as a reusable capability early on.</li>
	<li>There is no investment in training, documentation, communication, or integration support for reusable assets. If you build it they won't come and you end up with a library of assets that are buggy, unusable, and worse - irrelevant to business needs.</li>
	<li>You have no hooks in the development process that will help you proactively take advantage of reuse opportunities. Reuse if any happens ad-hoc due to heroic efforts of one or two developers sporadically.</li>
</ol>
Have any of these signs resonate with your experiences? are there additional ones you can suggest?]]>
        
    </content>
</entry>

<entry>
    <title>Build an Abstraction API for BPM Interaction</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/10/build_an_abstraction_api_for_b.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17309</id>

    <published>2009-10-27T23:36:14Z</published>
    <updated>2009-10-27T23:37:06Z</updated>

    <summary>Introduce an abstraction API when integrating with a BPM solution. Why do I say that? Several reasons: Good software design practice to bind to an interface as opposed to an implementation. So individual applications won&apos;t be directly coupled with an...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="BPM" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="abstraction" label="abstraction" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="api" label="API" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="bpm" label="BPM" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="reuse" label="reuse" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="soa" label="SOA" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>Introduce an abstraction API when integrating with a BPM solution. Why do I say that? Several reasons:</p>
<ul><li>Good software design practice to bind to an interface as opposed to
an implementation. So individual applications won't be directly coupled
with an external vendor solution.</li><li>Provides you the flexibility to augment solution using multiple
vendors. Related to above point, you can utilize one vendor for a
subset of capabilities and another for a different set.</li><li>This API can be the ideal place to integrate your enterprise
capabilities within the context of BPM solutions. Instead of making
one-off or tactical modifications to a vendor solution that could be
both expensive and proprietary, you can augment missing capabilities
using the abstraction API. For example, if the BPM solution doesn't
support authentication based on active directory, this abstraction API
can provide that capability (most likely you already have this
component in your enterprise). Additionally, this is also the place to
integrate horizontal capabilities such as message routing, metrics,
monitoring, and error handling. Do you want your BPM solutions to
report exceptions differently than other applications? In the same
vein, this API can integrate with services or libraries that
encrypt/hide sensitive data attributes before returning process state
to a calling application. This has the potential to reduce duplication
of such logic across user interfaces that integrate with related
business processes.</li><li>Can potentially simplify complexities associated with a native API.
If the native API needs a set of steps for starting process instances
or get task/work items for a particular user - this abstraction API can
simplify those calls. This not only makes it easier for integration but
reduces the opportunities for errors across development efforts. This
API in essence can act as a façade.</li><li>The API standardizes access to BPM capabilities and reduces the
possibility of competing integration mechanisms across development
efforts. If one team uses the native API as-is and another builds a new
one on top - you have two ways of accessing the BPM engine. This
problem gets worse as additional teams start to use BPM.</li><li>This API could also make every business process support a core set
of functions in addition to start/stop/suspend/resume calls. For
instance, every business process can provide a getCurrentStatus() or
reassignProcessInstance() that will make it easier for managing
processes at runtime.</li></ul>
<p>This API could be realized as a web service depending on the level
of heterogeneity and performance requirements. This would essentially
act as a service enabler for your business processes.</p>
<p>The above list isn't exhaustive - are there additional ones to add to this list?</p>]]>
        
    </content>
</entry>

<entry>
    <title>Understand Business Goals Before Implementing BPM Solutions</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/10/understand_business_goals_befo.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17298</id>

    <published>2009-10-26T00:01:01Z</published>
    <updated>2009-10-26T00:18:21Z</updated>

    <summary>Have you ever been part of a project where the technology choices, design decisions, and even low-level implementation details are determined prior to understanding the project&apos;s business goals? BPM engines are like other technologies - they are a tool in...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="BPM" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="businessgoalsbpmservicesdrivers" label="business goals BPM services drivers" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>Have you ever been part of a project where the technology choices, design decisions, and even low-level implementation details are determined prior to understanding the project's business goals? BPM engines are like other technologies - they are a tool in your toolkit to solve business problems through IT. It is critical that there is a good understanding of business goals and priorities before implementing solutions. For instance, do you know what is the single most important business driver behind the project? Is it to attract new customers? eliminate/reduce data entry? reduce cycle time across the entire value chain? If your stakeholders cannot agree on this, your BPM project will have a tough time. </p>

<p>BPM projects can help identify and potentially implement service capabilities that can be part of your service inventory. However, do you know the capabilities that are high priority for your business stakeholders? IT can easily implement services that are either tactical in scope or worse irrelevant to business priorities. </p>

<p>Naturally this topic has significant design implications. If you are integrating multiple applications as part of a BPM solution, how will you handle failed transactions/exceptions? Will alerts/notifications need to get generated from the proces flow? if yes, which steps have bottom line impact to the firm and how can mitigation be put in place? how will your existing legacy systems be exposed - will they directly get invoked from the process flow or go through a mediation layer? Is the business process facing internal or external customers? will your in-house staff need to pick-up and complete partially completed process instances? Now all these questions are extremely relevant - but without understanding the business goals you won't be able to invest design effort. </p>]]>
        
    </content>
</entry>

<entry>
    <title>Disadvantages of Building Services Code-First</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/10/disadvantages_of_building_serv.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17292</id>

    <published>2009-10-23T10:36:07Z</published>
    <updated>2009-10-23T10:40:16Z</updated>

    <summary>Posted an episode on the disadvantages of pursuing a code-first approach to building service capabilities at the reuse podcast series:Download file Episode Highlights: Most development environments provide tools for generating WSDL contracts using annotations or platform-specific tools. Existing classes can...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="soapodcastcodefirstinconsistentinteroperability" label="SOA podcast code-first inconsistent interoperability" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>Posted an episode on the disadvantages of pursuing a code-first approach to building service capabilities at the <a href='http://www.artofsoftwarereuse.com/systematic-reuse-podcast-series/'>reuse podcast series</a>:<br /><br /><object type="application/x-shockwave-flash" height="28" width="300" data="http://www.ebizq.net/web_resources/cioaudio/player/emff.swf?src=http://softwarereuse.podbean.com/mf/web/b45wg9/episode_13.mp3"><br /><param value="http://www.ebizq.net/web_resources/cioaudio/player/emff.swf?src=http://softwarereuse.podbean.com/mf/web/b45wg9/episode_13.mp3" name="movie" /></object><br /><a href="http://softwarereuse.podbean.com/mf/web/b45wg9/episode_13.mp3">Download file</a><br /></p>

<p>Episode Highlights:<br />
Most development environments provide tools for generating WSDL contracts using annotations or platform-specific tools. Existing classes can be easily exposed as service endpoints. Method signatures become web service operations and method parameters become service parameters. This saves time and effort for the immediate term.</p>

<p>From a service-orientation standpoint however, this approach has significant disadvantages:</p>

<p>   1. tools that enable contract generation out of the box often have the risk of introducing platform-specific attributes, service implementation semantics that inhibit interoperability and consequently the reuse potential.<br />
   2. The implementation contract could also have identifiers (database primary key field for instance) or implementation specific attributes (connection parameter to a proprietary system) that will needlessly couple consumers with a specific implementation.<br />
   3. This approach also challenges the provider's ability to honor SLA policy requirements such as authentication/encryption etc.<br />
   4. Service capabilities also run the risk of not reuse entity definitions - business data model entities that will effectively decouple the service contract with the implementation<br />
   5. Adding to above is the risk of exposing inconsistent error handling, error messaging, error reporting that will be apparent to your consumers. Not to mention it makes it harder for the provider to support several different overlapping implementations!<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>Building a Data Services Product Line</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/10/building_a_data_services_produ.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17251</id>

    <published>2009-10-19T00:58:05Z</published>
    <updated>2009-10-19T01:02:06Z</updated>

    <summary>The data services product line is a suite of data services that can include services across customer, account, product, pricing, and document data domains providing several capabilities for several internal applications. The suite of services can act as the single...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="dataservicessoaproductline" label="data services SOA product line" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>The data services product line is a suite of data services that can include services across customer, account, product, pricing, and document data domains providing several capabilities for several internal applications. </p>

<p>The suite of services can act as the single point of entry into interacting with core enterprise data, significantly increase reuse of core data assets across business processes, decrease time to market for new applications and services, decrease development, maintenance, and support costs across the data service domains, and be scalable and extensible as business usage and needs varied over time     </p>

<p>Customer data, account data, and document data service capabilities can be considered as individual products in the overall product line. This product line can support several sources of variation that are effectively managed across individual services. Listed below is a subset of these variations:</p>

<p>•	Data Format<br />
•	Data Structure<br />
•	Data Source<br />
•	Event Trigger<br />
•	Data Visibility<br />
•	Error Handling<br />
•	Data Translations<br />
•	Physical Transports<br />
•	Workflow/Human approvals</p>

<p>This isn't a comprehensive list but to show how data services can be built as a family of related service capabilities.<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>Design Techniques When Refactoring Legacy Systems - II</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/10/design_techniques_when_refacto.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17214</id>

    <published>2009-10-11T16:28:41Z</published>
    <updated>2009-10-11T16:33:30Z</updated>

    <summary>This is a continuation of the earlier post on design techniques when refactoring legacy systems. This post talks about backward compatibility and Keep backward compatibility in mind If there is one thing that is tricky about refactoring legacy assets it...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="legacysystemrefactoringtightcouplingwrapingmediationrefactoringsoaservices" label="legacy system refactoring tight coupling wraping mediation refactoring SOA services" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>This is a continuation of the <a href="http://www.ebizq.net/blogs/sdesign/2009/09/design_factors_when_refactorin.php">earlier </a>post on design techniques when refactoring legacy systems. This post talks about backward compatibility and </p>

<p><strong>Keep backward compatibility in mind</strong></p>

<p>If there is one thing that is tricky about refactoring legacy assets it is backward compatibility. Although this isn't often talked about this is a very critical aspect. Creating abstractions, loosening tight couplings, and creating wrappers are all good practices but unless your change guarantees no harm you might be stepping over landmines. A lot of pain can be avoided if you take this into account. Backward compatibility is a simple goal but isn't always easy to achieve. Here are some things to think about:<br />
•	You will need to make sure that you don't leave legacy data sources in any invalid state after the refactoring changes <br />
•	In most cases you cannot save new data values into legacy database tables. Legacy data values could have hidden, implicit, or multiple meanings that are hard to fix in a single iteration or even few iterations. The best thing is to keep chipping away slowly and opportunistically. <br />
•	The changes you make to legacy components cannot break inbound or outbound data feeds, batch jobs, or terminal emulations. I have sat through some tense meetings when things break and there is financial or reputation risk involved. Add tight time windows to correct and reprocess batch jobs this is something you want to be absolutely sure about.<br />
•	Ideally you want no consumer to directly call a legacy module. You should consider yourself lucky if you happen to be in such an environment.</p>

<p><strong>Minimize point to point interactions with external systems </strong></p>

<p>If legacy modules are sending data to external systems - this could be via remote terminal emulations, messaging, batch jobs, or FTP - you can introduce an abstraction layer that will break this link. The abstraction layer might need to wrap these legacy assets before you can use them but this has several benefits. <br />
Although these practices seem straightforward you should never refactor in isolation. You most likely won't have a set of automated regression tests for your legacy application. Before making changes to your legacy code you need to be sure that new defects are not being introduced. The straightforward way to do this is using test driven development. You should: </p>

<ul>
	<li>Create a unit test</li>
        <li>Run and watch it fail</li>
        <li>Make the change to the legacy asset</li>
        <li>Re-run the test to watch it pass (if not make the change, run the test, you get the idea!)</li>
</ul>

<p>Repeat these steps for all the identified refactorings. At this point ensure that your reusable asset is integrated from the legacy app, the source code control repository is up to date, and the relevant automated tests are included in your regression test suite. You might be tempted to declare victory but resist the thought. Now you need to map out how you want to package, deploy, expose, and support this asset. For example, in the java platform the asset could be packages as a JAR. If this is a service, it could be SOAP over HTTP web service or available over JMS for queue based integrations. The key thing is that you identify the mechanics and decide what your strategy is for consuming the reusable asset. </p>]]>
        
    </content>
</entry>

<entry>
    <title>Building Reusable Service Capabilities - Podcast Episode</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/10/building_reusable_service_capa.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17189</id>

    <published>2009-10-03T12:03:00Z</published>
    <updated>2009-10-03T12:06:54Z</updated>

    <summary>Posted an episode on building reusable service capabilities as part of SOA initiatives at the reuse podcast series:Download file...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="messaging" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="reusableservicecapabiltiessoamessagingpublicationspodcast" label="reusable service capabilties SOA messaging publications podcast" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>Posted an episode on building reusable service capabilities as part of SOA initiatives at the <a href='http://www.artofsoftwarereuse.com/systematic-reuse-podcast-series/'>reuse podcast series</a>:<br /><br /><object type="application/x-shockwave-flash" height="28" width="300" data="http://www.ebizq.net/web_resources/cioaudio/player/emff.swf?src=http://softwarereuse.podbean.com/mf/web/vfb396/episode_12.mp3"><br /><param value="http://www.ebizq.net/web_resources/cioaudio/player/emff.swf?src=http://softwarereuse.podbean.com/mf/web/vfb396/episode_12.mp3" name="movie" /></object><br /><a href="http://softwarereuse.podbean.com/mf/web/vfb396/episode_12.mp3">Download file</a><br /></p>]]>
        
    </content>
</entry>

<entry>
    <title>Design Techniques When Refactoring Legacy Systems</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/09/design_factors_when_refactorin.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17163</id>

    <published>2009-09-27T23:55:51Z</published>
    <updated>2009-09-28T01:32:10Z</updated>

    <summary>Many SOA initiatives leverage legacy capabilities when building new services. It is important to ensure legacy services are examined before leveraging them as-is. Here are some design techniques that I use when reviewing and refactoring legacy assets. Loosen the tight...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="legacysystemrefactoringtightcouplingwrapingmediationrefactoringsoaservices" label="legacy system refactoring tight coupling wraping mediation refactoring SOA services" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>Many SOA initiatives leverage legacy capabilities when building new services. It is important to ensure legacy services are examined before leveraging them as-is. Here are some design techniques that I use when reviewing and refactoring legacy assets. <br /></p><ul><li>Loosen the tight coupling among modules</li><li>Understand the problem domain and work backwards</li><li>Wrap legacy assets</li><li>Keep backward compatibility in mind</li><li>Remove point to point interactions with external systems <br /></li></ul>

<p>This post will elaborate on the first three and I will write a follow up post on the other two.<br /></p><p><strong>Loosen the tight coupling among modules</strong></p>

<p>We've all worked with a legacy system where one module talks to another one which talks to another. In fact, a rat's nest of tight couplings might be the accepted way to address business requirements. Loosening the coupling between these legacy modules is the first step towards reusing any of the functionality. While you are doing this you will make the overall system simpler, easier to maintain, and pay down years (sometimes decades!) of technical debt.  Refactoring these tight couplings will be very painful but it does get easier over time. Remember that you don't have to completely refactor all the tight couplings. If you what is needed for your immediate iteration that should be okay. The more you bite the more time and effort you need to invest in ensuring you didn't break the existing application. Also, you are touching a legacy component or process because you have an identified need that needs to be fulfilled.</p>

<p>To loosen the tightly bound legacy modules you could pursue several tactics:   </p>

<p>    * Identify and refactor logic that is tightly bound to user interface screens. The user interface is a good place to look for all kinds of logic being out of place. <br />
    * Identify business rules or policies that are embedded alongside data access or business logic code. You will want to refactor as much as you can to <a href="http://artofsoftwarereuse.com/2009/06/02/software-reuse-quick-tip-12/">externalize them</a>. Because every team is different you can place them in a class, a method, a database table, configuration file, or even a rules engine as appropriate (see James Taylor's post on <a href="http://jtonedm.com/2009/09/22/adding-decision-management-to-your-bpm-initiative/">getting started</a> on decision management). It is more important to encapsulate than the exact means through which you implement. There is always the next iteration or release to change your mind if you were incorrect the first time.  <br />
    * Pick batch jobs or scheduled file feeds that are associated with the legacy modules in question. Often you will find connectivity, file parsing/formatting, business logic all tightly bound in them. You will want to pick and choose what you want to go after but its an excellent place to start your refactorings </p>

<p>Depending on the complexity and nature of the couplings some of these might not be necessary for each legacy asset. By eliminating the tight coupling you will be positioned to reuse the asset for future projects. Slowly but surely, you will transform the legacy application and meet your release goals.</p>

<p><b>Understand the problem domain and work backwards</b></p>

<p>Your legacy systems often have domain relevant assets that have accumulated over time. It does help to sometimes look at the domain capability and work backwards to design and code changes. If a legacy asset isn't straightforward to refactor I find this technique very useful. Instead of mulling over what to change in the legacy codebase think about <a href="http://artofsoftwarereuse.com/2009/03/27/not-sure-if-something-is-reusable-delay-the-decision/">what it is that you really want</a>. If you identify the domain relevant capability the problem becomes simpler to tackle and the changes needed start to appear naturally. For instance, your user story might be to offer a discount for a select set of users based on some business criteria. Maybe you have a legacy process that accesses customer data, transforms them, merges the data with other data loads, calculates discounts, and sends letters to your customers. It also has logic to load large files and records some metrics on them. Make a head-on refactoring of this process and you will have trouble where to start the changes (not to mention the fear of breaking working code!). Instead, step back and remind yourself what you really need. You just need the discount calculation logic and nothing else. Refactor just this logic and create a DiscountCalcualator reusable asset. The rest can stay as-is and you can always come back for more refactorings.</p>

<p><b>Wrap Functionality</b></p>

<p>Your enterprise probably has legacy software assets that are extremely valuable. It is also possible that you don't have the time or extensive knowledge to fully refactor a legacy asset and create a new one for use. In such cases you might need to make do with leaving the legacy asset where it is and still use it for your needs. If you start reusing them as-is though you will end up with lots of point to point connections between your code and the legacy asset. It will become tricky to change, upgrade, or get rid of the legacy asset. You could break consuming code and force changes every time you touch the legacy asset. Worse, you will expose your legacy error codes, naming conventions, behaviors across your codebase. Create a component that wraps the legacy asset which is between the legacy asset and the consuming code. If you don't have a wrapper that truly encapsulates the legacy functionality it will serve only as a pass-through layer adding no value. This wrapper component helps you reuse these legacy assets by enhancing the underlying functionality. To be effective, this wrapper needs to do several things: </p>

<p>    * If you have a team coding conventions/standards make sure this wrapper follows them.  <br />
    * You will want to reuse existing assets for cross cutting functionality such as logging, error handling, and security<br />
    * You will need to translate legacy error codes, error messages, and <a href="http://artofsoftwarereuse.com/2009/04/14/standardize-error-codes-for-reusable-error-handling/">use standard error codes</a><br />
    * If you need internationalization of messages/labels this wrapper can perform necessary translations<br />
    * If the wrapper is a web service you will want to reuse data types and XML schema contracts to get alignment with your logical data model. If it is a library component it needs to reuse existing base classes as appropriate.</p>

<p>The wrapped asset now can be reused by multiple consumers and you have the flexibility to change the implementation.  You get to save time and still not introduce tight coupling into your codebase. Ask your team to stop using legacy assets directly and always go through the wrapper. Make this a practice when you consume legacy assets.</p>]]>
        
    </content>
</entry>

<entry>
    <title>5 Tips Before You Embark On SOA Projects</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/09/5_tips_before_you_embark_on_so.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17133</id>

    <published>2009-09-21T00:13:12Z</published>
    <updated>2009-09-21T00:38:53Z</updated>

    <summary>You are itching to board the SOA bus. Hold on a bit though because it is easy to get lost in the hype and miss the real point i.e. generation of business value. So here are 5 tips before you...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="soatipsbusinessgoalsprioritizelegacysystemsexistinginvestments" label="SOA tips business goals prioritize legacy systems existing investments" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>You are itching to board the SOA bus. Hold on a bit though because it is easy to get lost in the hype and miss the real point i.e. generation of business value. So here are 5 tips before you start your SOA initiatives. </p>

<p>#1 Seek clarity on how project goals align with your business strategy<br />
What is the SOA initiative specifically achieving for your business? is it trying to optimize an existing business process? release new offerings to generate additional revenue? build the foundation for new ones to be hosted? enable self-service for your customers? make it easy for your partners to exchange data with you? Depending on what your business goals are, the SOA strategy needs to be thought out accordingly. No use investing in prototyping business-to-business integrations if your goal is to eliminate manual step in a business process internal to the organziation.</p>

<p>#2 Aspire to marry existing IT goals with SOA<br />
I am sure SOA isn't the only thing your IT shop is pursuing. If you are trying to reduce storage costs or hosting costs align that with SOA. Same is the case if your shop is trying to execute on software product lines via architecture convergence. Decommissioning legacy systems is another one that can be tied to SOA goals. If you take a holistic view of your technology objectives, you will be surprised how effective the conversations around service orientation becomes. Without a good grasp of this, you can go in circles trying to get buy-in from key stakeholders across IT.</p>

<p>#3 Communicate with multiple levels of the technology organization <br />
SOA needs several stakeholders to succeed. Your upper management, business stakeholders, technical leads, and developers all need to be aware of SOA goals, how your project fits into the overall SOA strategy, and how is it going to impact them. You may be enforcing technology standards, introducing governance steps, and changing tools. It is important not to give rude surprises to people who's support you need!</p>

<p>#4 Take stock of existing solutions and investments<br />
Chances are your development teams have already built services. Or your enterprise has existing unused licenses. May be there is a team that is close to completing a prototype with an open-source solution. There might be message brokers or web services that need retrofitting per your new standards. Or they may need minimal rework. You should get familiar with existing investments so you can learn what worked easily, what took effort, where the challenges are, and possibly identify risks for your project. You may pleasantly surprise yourself with free code samples, or even service capabilities that you can leverage.</p>

<p>#5 Prepare a prioritized list of strategic SOA deliverables <br />
Build a list of deliverables your project is going to contribute towards SOA. You may plan to enhance existing capabilities so they are more scalable and available. May be you will build a new suite of services that are potentially reusable for future projects. Or you will reduce costs by replacing a legacy system partially or completely. Whatever it is, get the prioritized list!</p>

<p>I wouldn't get too much into contract design, governance policies, message exchange patterns, and message routing. They are all important but unless one has the big picture it isn't useful to move forward</p>]]>
        
    </content>
</entry>

<entry>
    <title>Reducing Integration Risks</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/09/reducing_integration_risks.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17100</id>

    <published>2009-09-13T19:30:58Z</published>
    <updated>2009-09-13T21:02:51Z</updated>

    <summary>Many SOA solutions consist of integrating applications, services, and backend processes to fulfill business requirements. You can design these solutions for the absolute best case and you are sure to get disappointed in production. A more prudent approach is, as...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bpm" label="BPM" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="integrationrisks" label="integration risks" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="soa" label="SOA" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>Many SOA solutions consist of integrating applications, services, and backend processes to fulfill business requirements. You can design these solutions for the absolute best case and you are sure to get disappointed in production. A more prudent approach is, as always, to design for the real world consisting of interruptions, exceptions, and unscheduled outages. Here are some pointers when designing integration solutions: <br />
	</p><ul><li>Depending on how much reliability you need consider using reliable messaging&nbsp;</li><li>Introduce appropriate level of abstraction with each integration point. You many end up with a rat's nest of point to point integrations only to find out that the system you integrated with is about to be decomissioned.i.e. you need to <a href="http://wp.me/ptCiB-1x">wrap legacy capabilities</a>.<br /></li><li>Provide administrative capabilities to manage each integration point. Ideally, you should be able to enable/disable and/or throttle the number of messages going through etc. This is exactly what Michael Nygard advises when talking about circuit breakers in his book <a href="http://www.amazon.com/Release-Production-Ready-Software-Pragmatic-Programmers/dp/0978739213/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1252872080&amp;sr=8-1">Release It</a>.&nbsp;</li><li>Make sure you can smoke test integration points after scheduled and unscheduled downtime. You don't want to find out that a routine patch deployed on a sunday is causing an outage for your business users monday morning.</li><li>Provide the ability to vary logging/auditing at runtime. For instance, specific to an integration point you might want to provide verbose logging to troubleshoot an issue and revert back to the normal level after the problem goes away. You shouldn't&nbsp;redeploy or restart the app for these eventualities.</li><li>Build as much contextual information as possible while <a href="http://wp.me/ptCiB-fV">generating exceptions</a>. Integration points can be painful to troubleshoot without appropriate error detail. Also, you should design a solution for assessing the impact on your system. Expect your business users to ask questions like - how many transactions were impacted? what about transactions that were in-flight? when the problem is resolved, can the transactions resume processing? is there a report of all transactions that need to get completed today (due to SLA, regulatory, or financial reasons) and are being impacted?</li></ul>These aren't exhaustive but to provide the reader with the need to tackle and address integration risks early.<br />]]>
        
    </content>
</entry>

<entry>
    <title>Enterprise Data Services - Podcast Episode</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/09/enterprise_data_services_-_pod.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17081</id>

    <published>2009-09-07T23:26:51Z</published>
    <updated>2009-09-07T23:30:33Z</updated>

    <summary>Posted an episode on enterprise data services and how they help with systematic reuse and master data management (MDM) initiatives at the reuse podcast series:Download file...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="BPM" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="SOA" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="soabpmmdmdataservices" label="SOA BPM MDM data services" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>Posted an episode on enterprise data services and how they help with systematic reuse and master data management (MDM) initiatives at the <a href='http://www.artofsoftwarereuse.com/systematic-reuse-podcast-series/'>reuse podcast series</a>:<br /><br /><object type="application/x-shockwave-flash" height="28" width="300" data="http://www.ebizq.net/web_resources/cioaudio/player/emff.swf?src=http://softwarereuse.podbean.com/mf/web/b8qq9v/episode_11.mp3"><br /><param value="http://www.ebizq.net/web_resources/cioaudio/player/emff.swf?src=http://softwarereuse.podbean.com/mf/web/b8qq9v/episode_11.mp3" name="movie" /></object><br /><a href="http://softwarereuse.podbean.com/mf/web/b8qq9v/episode_11.mp3">Download file</a><br /></p>]]>
        
    </content>
</entry>

<entry>
    <title>Think About Support Needs Early</title>
    <link rel="alternate" type="text/html" href="http://www.ebizq.net/blogs/sdesign/2009/09/think_about_support_needs_earl.php" />
    <id>tag:www.ebizq.net,2009:/blogs/sdesign//71.17078</id>

    <published>2009-09-06T16:42:35Z</published>
    <updated>2009-09-07T20:12:10Z</updated>

    <summary>Too many projects wait till the very end to think about supportability. Your system or solution will not magically become supportable overnight. It is critical that your design efforts meet support needs. Here are some questions that will influence your...</summary>
    <author>
        <name>Vijay Narayanan</name>
        <uri>http://www.ebizq.net/MT4/mt-cp.cgi?__mode=view&amp;blog_id=71&amp;id=171</uri>
    </author>
    
        <category term="software design" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="productionsupportdesignneeds" label="production support design needs" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.ebizq.net/blogs/sdesign/">
        <![CDATA[<p>Too many projects wait till the very end to think about supportability. Your system or solution will not magically become supportable overnight. It is critical that your design efforts meet support needs. Here are some questions that will influence your design:</p><ul><li>How will production support get notified of exceptions/incidents? Do they need notification real-time or periodically? You might need a notification component. Depending on your requirements, the component might need to send alerts/messages to one or more parties. You might also need to support sending messages to different destinations (mobile phones, support consoles).<br /></li><li>What information needs to be provided in the application-specific logs? Error location, error code, stack trace, possible causes, and resolution information needs to be captured. Additionally, application specific logs might also capture time of error, machine name, and runtime statistics such as heapsize/thread usage etc. <br /></li><li>How will an exception get resolved? Are there errors that need human intervention? Is there a need to pause transactions and resume processing when exceptions are resolved? Returning <a href="http://artofsoftwarereuse.com/2009/08/25/software-reuse-quick-tip-17/">contextual and actionable information</a> is essential in these cases. Depending on the volume and error categories you might want to design a facility for viewing exceptions and resubmitting failed transactions.<br /></li></ul>Equally important is the need to include as much detail about errors as possible. Without adequate details on the error it is not possible for your support staff to act on an issue. These needs become even more critical when pursuing SOA and BPM initiatives. Your supportability needs to extend beyond a single application and your ability to track events and transactions across multiple applications become critical. As more systems get integrated, it becomes imperative that your support staff is educated about error detection, resolution, and escalation. <br />]]>
        
    </content>
</entry>

</feed>

