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

<channel>
	<title>SAP Experts: VMware Virtualization &#124; Consulting &#124; Integration - DataXstream &#187; SAP Functional</title>
	<atom:link href="http://www.dataxstream.com/category/sap-consultants-blog/sap-functional/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dataxstream.com</link>
	<description>SAP Certified Consultants</description>
	<lastBuildDate>Sat, 04 Feb 2012 05:00:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mind the Gap: How Small Lapses in Communication can Derail an SAP Implementation and Cost a Company Millions &#8211; Part 1: How SAP Can Make or Break a Company</title>
		<link>http://www.dataxstream.com/2012/02/mind-the-gap-how-small-lapses-in-communication-can-derail-an-sap-implementation-and-cost-a-company-millions-part-1-how-sap-can-make-or-break-a-company/</link>
		<comments>http://www.dataxstream.com/2012/02/mind-the-gap-how-small-lapses-in-communication-can-derail-an-sap-implementation-and-cost-a-company-millions-part-1-how-sap-can-make-or-break-a-company/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 05:00:46 +0000</pubDate>
		<dc:creator>Cameron Dunbar</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP Functional]]></category>
		<category><![CDATA[SAP Strategy]]></category>
		<category><![CDATA[sap upgrade]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP implementation]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=10225</guid>
		<description><![CDATA[In the late 90’s Hershey foods decided they needed to begin preparing themselves for Y2K.  While they were getting all their ducks in a row for what would eventually turn out to be one of the most anticlimactic “doomsday” scenarios in history, they also decided to update all their software, replace existing legacy systems, and [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">In the late 90’s Hershey foods decided they needed to begin preparing themselves for Y2K.  While they were getting all their ducks in a row for what would eventually turn out to be one of the most anticlimactic “doomsday” scenarios in history, they also decided to update all their software, replace existing legacy systems, and implement $112 million dollars’ worth of SAP ERP software (<a href="http://www.cio.com/article/31518/Supply_Chain_Hershey_s_Bittersweet_Lesson" target="_blank">Koch, 2002</a>).  It seemed like a solid, “catch-all” solution for what many people considered to be the coming apocalypse.  Of course, the world didn’t end on January 1, 2000, nor did much of anything else happen aside from a few doomsday cults feeling the sting of embarrassment and plenty of egg on their faces.  Hershey, however, was almost certainly looking back on the past couple years and regretting the rushed schedule they gave themselves for trying to cover more ground than was possible in the time allotted.<span id="more-10225"></span></p>
<p style="text-align: justify;">Hershey’s overall goal wasn’t just to update their current technologies, it was also to optimize their current supply chain, reduce costs and tighten their operations through the implementation of SAP.  It was a noble set of goals, and often required of almost any company in today’s corporate landscape.  However, after three years of updating hardware and implementing SAP, their go-live phase was considered a complete and total failure.  $100 million in sales were lost in October 1999; their stock price dropped by 35 percent, and nearly the entire operations of the company was behind schedule (<a href="http://greenspun.com/bboard/q-and-a-fetch-msg.tcl?msg_id=002SUM" target="_blank">Bill, 2000</a>).  This was not the goal of a three year, $112 million project.</p>
<p style="text-align: justify;">How did this happen?  Could it all have been avoided?  The answer to both of these questions is not as simple as “yes” or “no”.  However, there is no debating the fact that at some point, Hershey was going to have to enter the 21st century and update their legacy systems.</p>
<p style="text-align: justify;">SAP has become a necessary evil for any organization that wishes to survive in today’s cutthroat marketplace.  Simple decisions such as when and how to replenish safety stock or shipping standard quantities to customers on the first of the month need to be made automatically without any room for human intervention or error.  SAP implementation can save a company millions in optimizing their logistics and synergizing individual functional ‘silos’ within a company.  However, in order to get to that point, all companies have to implement the software to begin with, and that is where problems such as Hershey’s typically occur.  Pretty much any type of implementation can have disastrous and unintended consequences if not successful.  Each module of SAP is interconnected with many other facets of a company, such that if one small thing goes wrong in an area most people neglected to consider, then that small mistake could cause far-reaching consequences across the entire company.  This goes for even small “bolt-on” implementations to existing SAP systems.</p>
<p style="text-align: justify;">This is an issue which corporations must face if they want to remain competitive, so it is important that as time goes on, the best methods of implementing are acknowledged and respected as standard business practices.  Even though SAP has been commonplace for many decades now, companies still run afoul by neglecting basic elements that should be expected out of any implementation, no matter how small they are.</p>
<p style="text-align: justify;">As someone who works for an SAP consulting firm, I have witnessed companies that understood the fragility of how their software affects the company.  These organizations often thrive on optimizing their logistics systems and are always looking for a way to get a leg up on the competition.  I have also worked with organizations that have dreaded any type of change to their organization.  These companies were often toxic environments which suffered from very poor top-down leadership.  When all the stakes are considered, the true importance of an SAP implementation can mean the difference between a business staying open and closing their doors for good, potentially putting hundreds of good people out of work.</p>
<p style="text-align: justify;">Management Information Systems have become the heart of any business operation, and as time goes on, will become even more important within the corporate landscape.  SAP implementation is one of the most important, make-or-break steps in a company’s lifespan in the 21st century.  My career has placed me in the center of these situations and there are very clear things that anyone at any level of a company can do to help their company succeed or fail between the moments when it is decided to implement new technologies and when they go-live.  The goal of this blog posting is to analyze what those key actions are and give clear recommendations for any company which implements SAP in the future.</p>
<p style="text-align: justify;">One of the primary mistakes many organizations make is a reluctance to fully understand the importance of their software on the organization as a whole.  I have worked for managers and executives who feel their company’s software is something which “stands in the way” between them and “making money”.  Yes, these were words once given to me by a high-ranking official of a global manufacturer of carbide parts.  By devaluing a tool which can enable a company to meet and exceed their financial goals only inhibits the broader mission of the organization.</p>
<p style="text-align: justify;">FoxMeyer Drug was a $5 billion dollar subsidiary of pharmaceutical company FoxMeyer Health, which had very complex supply chains due to the variable nature of their field and product requirements.  A decision was made in the early 90’s to implement SAP as a solution to their logistic woes.  On paper, it seemed like a dream come true.  Inventory fluctuations would be kept to a minimum, transactions would be monitored in real time, and their order process would be automated and simple.    FoxMeyer has an obligation to iron out their supply chain issues and trim the fat in order to remain competitive, so the decision to utilize SAP was a very easy one to make.</p>
<p style="text-align: justify;">FoxMeyer made the choice of adopting a “Big Bang” approach to implementing the complex software (<a href="http://www.faqs.org/abstracts/Business-general/When-things-go-wrong-FoxMeyer-Drug-took-a-huge-high-tech-gamble-it-didnt-work.html">Bulkeley, 1996</a>).  A “Big Bang” approach is when a company has all segments of their operations move into their new system at the same time.  It’s described as an “instant changeover” and is often compared to rushing an entire football team through a single small door in a matter of seconds.  For smaller companies, this can be a useful strategy.  For larger ones, it’s more like fitting an entire parade through a small door in a matter of milliseconds, it’s ill-advised and simply not that great of an idea, despite the need to go-live as quickly as possible.</p>
<p style="text-align: justify;">FoxMeyer faced many more problems than just a their choice of implementation strategy.  Warehouse workers who were not properly educated on the benefits of the project felt that their jobs were in danger of being replaced by machines.  A poor initial transition to the SAP software in the first warehouse did not help boost employee morale either.  This led to a massive influx of disgruntled employees and an eventual loss of $34 million worth of inventory (<a href="http://www.uta.edu/faculty/weltman/OPMA5364TW/FoxMeyer.pdf">Scott, 2000</a>).  This could have easily been prevented by greater communication between the warehouse workers and the executives of the company as to what the ultimate goal of the implementation was, as well as how SAP could greatly benefit the company and the workers.  An overall negative view of the SAP implementation project can easily derail the process due to an end-user’s unwillingness to accept and learn how the software can benefit their jobs and ultimately make their lives easier.</p>
<p style="text-align: justify;">Eventually, FoxMeyer Drug’s implementation had gone well over-time and budget, resulting in over $100 million dollars sunk into a project which was beginning to cost the company hundreds of millions annually.  Eventually, despite annual revenue of over $5.5 billion, the division of FoxMeyer Health filed for chapter 11 bankruptcy in 1996, only 3 years after it began its implementation of SAP (<a href="http://www.nytimes.com/1996/08/28/business/chapter-11-filing-by-a-unit-of-foxmeyer.html">Unknown, 1996</a>).  While there were many reasons for the failure of the implementation, in hindsight it remains very clear the root cause of the bankruptcy was the implementation itself, and the financial hurdles that were left for the company in its wake.</p>
<p style="text-align: justify;">One of the key elements of SAP is its ability to interconnect all segments of a company.  This means that each individual transaction, accounting document and shipment can affect the financial position as they happen, keeping the system up-to-date and becoming a one-stop-shop for anything that needs to be known in order to make a decision.  Mexican-based oil company Pemex has a “control room” deep in their corporate headquarters which monitors their entire operations in real time (<a href="http://www.sap.com/community/showdetail.epx?ItemID=15055">Chavez, 2008</a>).  What is essentially a room filled with charts and graphs connected directly to SAP allows executives to see the effect millions of individual transactions have on the company as they happen.  So when someone fills their tank with Pemex at a gas station somewhere in the world, you can actually see the effect in real time with their custom-made gauges on display within the “control room”.  It is this type of real-time information which allows decision-makers at the top of a company to make the most accurate and informed decisions possible in a marketplace where everyone wants to be at several steps ahead of everyone else.<br />
This is a double-edged sword however; because having all components of an organization interconnected through SAP also means that any small change within that software can dramatically shift all of the information which is flowing through a company at any given time.  If a configuration is not setup correctly, or a default setting was not considered during implementation, a small adjustment in quantities or pricing could result in an error multiplied by the number of transactions in the system, which could manifest itself in the form of a high dollar value error.  The larger the company, the more severe a minor error in a sensitive spot can be.</p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal; text-align: justify;">In Part 2: I&#8217;ll analyze individual SAP implementation failures and their subsequent fallout&#8217;s.</p>
<p style="text-align: justify;"><strong>Can&#8217;t wait to read the rest of the Mind the Gap series? Submit your information below to receive the entire series today!</strong></p>

		<div id="usermessage21a" class="cf_info "></div>
		<form enctype="multipart/form-data" action="/category/sap-consultants-blog/sap-functional/feed/#usermessage21a" method="post" class="cform cameron-whitepaper " id="cforms21form">
		<ol class="cf-ol">
			<li id="li-21-1" class=""><label for="cf21_field_1"><span>First Name</span></label><input type="text" name="cf21_field_1" id="cf21_field_1" class="single fldrequired" value=""/><span class="reqtxt">(required)</span></li>
			<li id="li-21-2" class=""><label for="cf21_field_2"><span>Last Name</span></label><input type="text" name="cf21_field_2" id="cf21_field_2" class="single fldrequired" value=""/><span class="reqtxt">(required)</span></li>
			<li id="li-21-3" class=""><label for="cf21_field_3"><span>Company</span></label><input type="text" name="cf21_field_3" id="cf21_field_3" class="single fldrequired" value=""/><span class="reqtxt">(required)</span></li>
			<li id="li-21-4" class=""><label for="cf21_field_4"><span>Job Title</span></label><input type="text" name="cf21_field_4" id="cf21_field_4" class="single fldrequired" value=""/><span class="reqtxt">(required)</span></li>
			<li id="li-21-5" class=""><label for="cf21_field_5"><span>Email</span></label><input type="text" name="cf21_field_5" id="cf21_field_5" class="single fldemail fldrequired" value=""/><span class="emailreqtxt">(valid email required)</span></li>
			<li id="li-21-6" class=""><label for="cf21_field_6"><span>Phone</span></label><input type="text" name="cf21_field_6" id="cf21_field_6" class="single" value=""/></li>
			<li id="li-21-7" class=""><label for="cf21_field_7"><span>Optional Message</span></label><textarea cols="30" rows="8" name="cf21_field_7" id="cf21_field_7" class="area"></textarea></li>
		</ol>
		<fieldset class="cf_hidden">
			<legend>&nbsp;</legend>
			<input type="hidden" name="cf_working21" id="cf_working21" value="One%20moment%20please..."/>
			<input type="hidden" name="cf_failure21" id="cf_failure21" value="Please%20fill%20in%20all%20the%20required%20fields."/>
			<input type="hidden" name="cf_codeerr21" id="cf_codeerr21" value="Please%20double-check%20your%20verification%20code."/>
			<input type="hidden" name="cf_customerr21" id="cf_customerr21" value="yyy"/>
			<input type="hidden" name="cf_popup21" id="cf_popup21" value="nn"/>
		</fieldset>
		<p class="cf-sb"><input type="submit" name="sendbutton21" id="sendbutton21" class="sendbutton" value="Submit" onclick="return cforms_validate('21', false)"/></p></form><p class="linklove" id="ll21"></p>		<div id="usermessage21b" class="cf_info " ></div>

]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2012/02/mind-the-gap-how-small-lapses-in-communication-can-derail-an-sap-implementation-and-cost-a-company-millions-part-1-how-sap-can-make-or-break-a-company/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP EDI EDPAR Table Walkthrough &#8211; How to Cross Reference SAP Customer Number to External Customer Number (Part 1)</title>
		<link>http://www.dataxstream.com/2012/01/sap-edpar-table-sap-customer-number-cross-reference-to-external-customer-number/</link>
		<comments>http://www.dataxstream.com/2012/01/sap-edpar-table-sap-customer-number-cross-reference-to-external-customer-number/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 05:00:37 +0000</pubDate>
		<dc:creator>dkoch</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP EDI Blog]]></category>
		<category><![CDATA[SAP Functional]]></category>
		<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP PI Blog]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[ALE]]></category>
		<category><![CDATA[EDI]]></category>
		<category><![CDATA[IDOC]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[PI]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP Integration]]></category>
		<category><![CDATA[SAP PI]]></category>
		<category><![CDATA[XI/PI]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=10105</guid>
		<description><![CDATA[When creating IDOCs in SAP to send Invoices to customers via EDI you will likely have to send the customers their internal partner numbers on the EDI ANSI X12 810 Invoice Document.  In almost all cases this will not be the same as the SAP partner numbers.  So how can we set up a cross [...]]]></description>
			<content:encoded><![CDATA[<p>When creating IDOCs in SAP to send Invoices to customers via EDI you will likely have to send the customers their internal partner numbers on the EDI ANSI X12 810 Invoice Document.  In almost all cases this will not be the same as the SAP partner numbers.  So how can we set up a cross reference of SAP and external partner numbers?  Well, the answer is simple because SAP has set up a utility to handle this for you.  All you need to do is populate the EDPAR table in SAP using the VOE4 transaction.  Once this is completed the IDOC_OUTPUT_INVOIC function module will read the EDPAR table when the Invoice document output is processed and populate the LIFNR element of the E1EDKA1 or E1EDPA1 segments of the INVOIC IDOC with the external partner number.  Entries in EDPAR can be set up for multiple partners including the Sold-to, Ship-to, and Bill-To numbers so that external customer number cross-references can be passed on the IDOC if needed.</p>
<p>Let&#8217;s look at how this process works.  Let&#8217;s say we have created an invoice document in SAP.  In this case, the Sold-to, Ship-to, and Bill-to partners are all SAP customer number 15.  If we want to create an INVOIC02 IDOC on which the external customer numbers are populated for all three of these partners we would have to set up three EDPAR entries as displayed on the below screen shot.  The Customer field will contain the SAP partner number (Sold-to, Ship-to, Bill-to).  The Ext. Function field will contain the Partner Function (SP = Sold-to, SH = Ship-to, BP = Bill-to).  The External Partner field will contain the external partner number that the customer is expecting on the EDI file.  And the Int. no. field will contain the SAP partner number (Same as the Customer field).</p>
<p><span id="more-10105"></span></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/blog5.png" rel="shadowbox[sbpost-10105];player=img;"><img class="alignnone size-full wp-image-10164" src="http://www.dataxstream.com/wp-content/uploads/blog5.png" alt="" width="622" height="198" /></a></p>
<p>&nbsp;</p>
<p>After we have set up the Partner Profile (WE20) for the INVOIC for this customer we can produce the output through transaction VF02 to create the IDOC.  The INVOIC02 IDOC will display the Sold-to and the Bill-to partners at the Header level in the E1EDKA1 segments, but because we could have multiple Ship-tos on an invoice the Ship-to partner(s) are located at the Item level in the E1EDPA1 segments.  In both segments, the external partner numbers will be populated in the LIFNR element.  The segments for the three partners are displayed below:</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/blog6.png" rel="shadowbox[sbpost-10105];player=img;"><img class="alignnone size-full wp-image-10165" src="http://www.dataxstream.com/wp-content/uploads/blog6.png" alt="" width="642" height="559" /></a></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/blog7.png" rel="shadowbox[sbpost-10105];player=img;"><img class="alignnone size-full wp-image-10166" src="http://www.dataxstream.com/wp-content/uploads/blog7.png" alt="" width="621" height="526" /></a></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/blog8.png" rel="shadowbox[sbpost-10105];player=img;"><img class="alignnone size-full wp-image-10167" src="http://www.dataxstream.com/wp-content/uploads/blog8.png" alt="" width="635" height="560" /></a></p>
<p>&nbsp;</p>
<p>As you have probably noticed, the Partner Functions on the IDOCs do not match the Partner Functions in the EDPAR table.  Those would translate as follows: SP in EDPAR = AG in the IDOC, SH = WE, BP = RE.  As you can see the LIFNR field is populated with the values in the External Partner field of the EDPAR table.  These values can now be used in the EDI mapping tool to send the value to the customer.</p>
<p>This is a useful tool as new partners can be added easily using the VOE4 table by a customer service representative.  It also keeps the cross reference within SAP so that the EDI group does not have to build their own functionality to convert the partner numbers and maintain it as new customers are added or locations are changed.</p>
<p>This table can be used for other partner types and other outbound IDOCs.  You would need to check the function module that processes the output to see if it uses the EDPAR table and for which partners.  Another internal SAP table that is used for partner cross reference is the PUMA table.  This is used when creating DELVRY and SHPMNT IDOCs whose function modules do not use the EDPAR utility.  The use of the PUMA table will be discussed in a separate blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2012/01/sap-edpar-table-sap-customer-number-cross-reference-to-external-customer-number/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>It&#8217;s SAP Upgrade Time! Do You Know Where Your Customizations Are? Part 3.</title>
		<link>http://www.dataxstream.com/2011/11/sap-upgrade-and-customizations-3/</link>
		<comments>http://www.dataxstream.com/2011/11/sap-upgrade-and-customizations-3/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 14:15:54 +0000</pubDate>
		<dc:creator>Mike Salvo</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP ABAP Blog]]></category>
		<category><![CDATA[SAP Functional]]></category>
		<category><![CDATA[SAP Project Management]]></category>
		<category><![CDATA[SAP Strategy]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[SAP Testing]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[Mike Salvo]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[sap upgrade]]></category>
		<category><![CDATA[upgrade cost]]></category>
		<category><![CDATA[upgrade risk]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=3141</guid>
		<description><![CDATA[In my final post on this topic, I will discuss some of the techniques that I use to “discover” information about customizations in an SAP system, even in the absence of any documentation.  The information available to be discovered may include such details as the object name, object type, user name of the person who [...]]]></description>
			<content:encoded><![CDATA[<p>In my final post on this topic, I will discuss some of the techniques that I use to “discover” information about customizations in an SAP system, even in the absence of any documentation.  The information available to be discovered may include such details as the object name, object type, user name of the person who made the last modification, date and time of the last modification, usage statistics, where-used, and for code-based objects, even the versions and their code differences.</p>
<p><span id="more-3141"></span></p>
<h3>Discovering Direct Modifications of SAP Standard Objects – One Example</h3>
<p>As I discussed in a previous post on this topic, direct modification of SAP standard objects within the SAP namespace carries a high risk in an upgrade project.  It would be very valuable to be able to identify some details about these objects, so that further analysis could be performed to determine their disposition in the upgrade.</p>
<p>Modification of standard SAP objects typically requires that a modification registration key be obtained for that object from the SAP SSCR facility.   The SSCR facility (SAP Software Change Registration) is a procedure which registers all manual changes to SAP sources and SAP Dictionary Objects.  With a valid and authorized OSS ID for an SAP system, you can go to the SAP Support Portal on the web and view the SAP objects that were registered for modification by that OSS ID.  If there are multiple OSS IDs for any SAP system, make sure that you check all of them to capture all objects registered by all of the authorized OSS IDs for an SAP system.  Press the “Objects Registered by Me” button to view a list of the registered objects.</p>
<p><img class="alignnone" title="SSCR - SAP Software Change Registration" src="http://www.dataxstream.com/wp-content/uploads/2009/11/11.bmp" alt="SSCR - SAP Software Change Registration" width="555" height="411" /></p>
<p>Another place that you can look for this information is directly within SAP.  Table ADIRACCESS stores the registration keys which were obtained from SAP, and which were entered by the developer when the object was to be modified for the very first time.  This entry shown below from table ADIRACCESS shows that function group SCPRPS was registered with SAP for modification.</p>
<p><img class="size-full wp-image-3145 alignnone" title="ADIRACCESS" src="http://www.dataxstream.com/wp-content/uploads/2009/11/21.bmp" alt="ADIRACCESS records" width="554" height="173" /></p>
<p>Registering an object for modification does not mean that the object was actually modified.<br />
What additional evidence can we discover that would show that the object was, in fact, modified?   And, since a function group contains many objects, can we determine exactly which object or objects were modified?</p>
<p>With a little bit of forensic analysis, we can discover the specific object within the function group that was modified, the user name of the programmer who last modified the object, date of the last modification, and the line-by-line source code differences.</p>
<p>If you are familiar with the structure of function groups, you already know that they may contain many function modules, and that the source code for each function module resides within its own include file.  At the moment, we know that the function group name is SCPRPS, but we do not have the list of function modules within that function group.</p>
<p>To obtain that list, we can use the SAP function module FUNCTION_SELECT_TFDIR.<br />
The result list is shown here:</p>
<p><img class="size-full wp-image-3146 alignnone" title="FUGR SCRPRS records" src="http://www.dataxstream.com/wp-content/uploads/2009/11/31.bmp" alt="FUGR SCRPRS records" width="624" height="453" /></p>
<p>So which, if any, of these has been modified?  To determine this, we need to find all of the rows in table TRDIR where the NAME field is equal to the PNAME entries listed above.</p>
<p>Here is an excerpt from SAP table TRDIR for SAP object names that begin with the characters LSCPRPSU:</p>
<p><img class="size-full wp-image-3148 alignnone" title="LSCRPR* objects" src="http://www.dataxstream.com/wp-content/uploads/2009/11/42.bmp" alt="LSCRPR* objects" width="624" height="302" /></p>
<p>Note that for all of these objects, which are not in the customer namespace, the Author Username field (TRDIR_CNAM) is ‘SAP’.  Also note that for most of the entries listed here, the Last Changed By user name field (TRDIR_UNAM) is also ‘SAP’, except for one row, where the Last Changed By username field is not ‘SAP’.  From this row, we can see that include file LSCPRPSU36 was last modified by user DXSDEV on 10/19/2009.</p>
<p>If we look back at the result list of FUNCTION_SELECT_TFDIR and find the row where the field PNAME is equal to LSCPRPSU36, we can see that the name of the modified function module is SCPR_PRSET_CT_IMPORT_INDUSTRY.</p>
<h3>Exactly What Changes Were Implemented?</h3>
<p>By going to the Version Management Utility for this function module, we can see what the various versions of the code contained.  The Version Management Utility will also show us the transport request numbers, date and time, and username for each version of the code.  The Version Management Utility also has a code comparison tool which will highlight the line-by-line differences between versions of the source code.</p>
<p>Here is an excerpt from the side-by-side source code comparison utility which shows the modified version on the left side and the original version on the right side.  Fortunately, in this instance, the programmer left excellent notes indicating that a correction instruction from an OSS note was being applied.</p>
<p><img class="size-full wp-image-3147 alignnone" title="Modified Code" src="http://www.dataxstream.com/wp-content/uploads/2009/11/51.bmp" alt="Modified Code" width="705" height="117" /></p>
<h3>What Are the Discovery Possibilities?</h3>
<p>The manual example described above showed how to discover and analyze customizations that had been applied to a single SAP standard object.  But what if the customizations number in the hundreds or even thousands?  What about all of the customizations that were built entirely within the customer namespace?</p>
<p>It is possible to discover hundreds or even thousands of customizations regardless of which namespace they were developed in.  The key is automation, understanding that this information already resides within SAP waiting to be discovered, and more importantly, understanding the meaning of the discovered information.  I have already developed an ABAP discovery program which will mine, analyze, and report data about the following customized objects:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="319">ABAP Programs</td>
<td valign="top" width="319">Basic IDOCs</td>
</tr>
<tr>
<td valign="top" width="319">Function Modules</td>
<td valign="top" width="319">IDOC Extensions</td>
</tr>
<tr>
<td valign="top" width="319">Function Groups</td>
<td valign="top" width="319">Message Types</td>
</tr>
<tr>
<td valign="top" width="319">Class Definitions</td>
<td valign="top" width="319">Process Types Inbound</td>
</tr>
<tr>
<td valign="top" width="319">BADI Implementations</td>
<td valign="top" width="319">Process Types Outbound</td>
</tr>
<tr>
<td valign="top" width="319">Dictionary Domains</td>
<td valign="top" width="319">SAPSCRIPT FORMS</td>
</tr>
<tr>
<td valign="top" width="319">Dictionary Data Types</td>
<td valign="top" width="319">Smartforms Forms</td>
</tr>
<tr>
<td valign="top" width="319">Dictionary Transparent Tables</td>
<td valign="top" width="319">Smartforms Styles</td>
</tr>
<tr>
<td valign="top" width="319">Dictionary Structures</td>
<td valign="top" width="319">Packages</td>
</tr>
<tr>
<td valign="top" width="319">Dictionary Views</td>
<td valign="top" width="319">Logical Databases</td>
</tr>
<tr>
<td valign="top" width="319">Dictionary Append Structures</td>
<td valign="top" width="319">FICO Client Dependent and Independent Exits</td>
</tr>
<tr>
<td valign="top" width="319">Dictionary Append Fields</td>
<td valign="top" width="319">Message Classes and Messages</td>
</tr>
<tr>
<td valign="top" width="319">Search Helps</td>
<td valign="top" width="319">Number Ranges</td>
</tr>
<tr>
<td valign="top" width="319">CMOD User Exits</td>
<td valign="top" width="319">Authorization Objects</td>
</tr>
<tr>
<td valign="top" width="319">User Exits for the SD Module (MV45AF*)</td>
<td valign="top" width="319">Authorization Fields</td>
</tr>
<tr>
<td valign="top" width="319">Requirements Definitions (transaction VOFM)</td>
<td valign="top" width="319">SPA/GPA Parameters</td>
</tr>
</tbody>
</table>
<hr />
<h2>More Discovery – Usage Statistics and Where-Used</h2>
<h3>Customization Usage Statistics</h3>
<p>The goal of customization usage statistics analysis is to discover the usage frequency of customized objects.  The usage discovery may show usage anywhere from several times daily by key users, to none when analyzed over a long time period.   Since most companies really do not want to incur the cost and the risk of moving an unneeded customization into the upgrade system, objects which show no usage over long periods of usage history become targets.  Care must be used here, as some transactions are exercised only quarterly, semi-annually, or annually.  I always recommend letting the business process owner make the final decision to eliminate any customization object in the upgrade.</p>
<p>SAP keeps track of usage statistics, and this data is available for you to analyze.  You will need to check what facility is available for your particular SAP system, as the transaction codes and programs differ among various versions of SAP.   The amount of data stored within SAP is configurable, and is usually set to a small date range.  Some companies that want to analyze the statistics over longer time periods actually download and store the statistics data in their own external databases.</p>
<h3>Customization Where-Used</h3>
<p>Like usage statistics, the goal of customization where-used analysis is to discover customized objects that are orphan or not being used.  What about that custom data type that is not used in any table or structure?  What about that function module that shows an empty list when you click the where-used icon in the function builder?</p>
<p>To properly perform a where-used analysis, it is important to understand all of the various possible uses for an ABAP object.  For example, here is the selection screen of possible uses that is presented by the ABAP Dictionary when you click the where-used icon to determine the where-used list for a data table:</p>
<p><img class="size-full wp-image-3149 alignnone" title="Where-Used" src="http://www.dataxstream.com/wp-content/uploads/2009/11/61.bmp" alt="Where-Used" width="260" height="484" /></p>
<p>And what about that custom function module, which I alluded to earlier, which shows a completely empty where-used list?  Perhaps it is a remote-enabled function module that was installed by, and is currently being called by an external third-party package.   Or, perhaps it is linked to an SAP EDI inbound or outbound process code.  It is really important to be able to properly interpret the data being presented and to not draw any hasty conclusions.</p>
<h3>ABAP Programs Where-Used Analysis Example</h3>
<p>In the ABAP workbench, SAP provides a where-used facility, which reports the various areas where a single selected object is used.  For a discovery project, you may want to automate this facility to analyze groups of ABAP objects (e.g. all custom ABAP programs, all custom tables, etc.).</p>
<p>Here is an ABAP programs where-used analysis example to help illustrate how a where-used analysis might be utilized.</p>
<p>Your automated where-used analysis program to analyze custom ABAP programs reports fifteen custom programs which show no usage in any of the following areas:</p>
<p><img class="size-full wp-image-3150 alignnone" title="Where-Used ABAP Program" src="http://www.dataxstream.com/wp-content/uploads/2009/11/72.bmp" alt="Where-Used ABAP Program" width="287" height="234" /></p>
<p>A quick analysis shows that all of these fifteen programs are simple reports.  Since users typically execute their reports via transaction codes, you wonder how these fifteen programs could ever possibly be executed without transaction codes.</p>
<p>You further analyze the SAP job scheduler data as far back as possible and find that only ten of these ABAP programs were ever scheduled in a batch job.  Some of these were scheduled very recently, and some have not been scheduled for a long time (another thread of evidence that we will need to pursue).  This leaves five ABAP programs with no apparent means of being executed.</p>
<p>As further evidence, you perform a cross-check against the usage statistics report and find that two of these five ABAP programs show no usage.</p>
<p>Armed with this analysis, you are now ready to meet with the business process owners to discuss the disposition of the objects on your short list.</p>
<p>A salient point here is that you will need to gather your evidence from several different analysis sources to help paint the most accurate picture about the possible disposition of customized objects.</p>
<h2>Summary</h2>
<p>Throughout all three parts of this post, I have stressed that customizations, while necessary, add risk and cost to an upgrade project.  And customizations that are not necessary or built poorly without the constraints of best-practice controls can add high levels of risk and cost.  Here are some general guidelines to follow:</p>
<p>Many companies and their auditors consider a well-controlled and secure ERP system to be a fundamental component that is vital to the success of the business.   They recognize that an out-of-control ERP system can easily paralyze a company for extended periods of time.  With this in mind, implement and enforce best-practice controls and standards to make sure that future customizations are reviewed, approved, built, tested, documented, and implemented properly.  This may already be an internal or external audit requirement, so check with your inside and outside auditors to make sure that your controls meet the auditing requirements.</p>
<p>Periodically review, audit, and amend your best-practice controls to make sure that they are still effective in supporting the needs of the business; and that both internal staff and external consultants are in compliance of these controls.</p>
<p>Know your customizations.  Know where they are, why they are, and what they do.  Whenever feasible, it is most efficient to eliminate ABAP object customizations, especially any that were performed within the SAP namespace, and any that are not really needed because they can be implemented within standard SAP.</p>
<p>The degree of risk and cost depends on the specific type of customization that was performed.  Establish a formal review board to own the customization approval process.  Understand that approving a customization also means approving the risk and the cost burdens.  Some companies consider this to be so significant, that they include a high-level business executive as a default member of the review board.</p>
<p>Set and enforce a policy making ABAP object customization the last resort, only after all other options have been thoroughly researched and exhausted.  Here are some examples:</p>
<ol>
<li>Research forums, blogs, become active in user groups, etc. to see how other companies might also be implementing the business function that you require.</li>
<li>Find and use customer and user exits instead of directly modifying objects in the SAP namespace.</li>
<li>Determine, for example, how to implement and maintain that complex pricing procedure using the pricing condition tables instead of writing custom code and building custom tables.</li>
</ol>
<p><strong>Share Your Experience</strong>.</p>
<p>Once again, I look forward to hearing from our readers to reply to this post with their own experience with customizations, best-practice standard and policies, and success stories illustrating how your company transitioned to best-practice controls.</p>
<p style="padding-left: 30px; padding-right: 30px;"><em>[Editor's Note] This blog is third of a multi-part series:</em></p>
<ol>
<li><a href="http://www.dataxstream.com/2009/11/sap-upgrade-and-customizations-1/">Part 1</a></li>
<li><a href="http://www.dataxstream.com/2009/11/sap-upgrade-and-customizations-2/">Part 2</a></li>
<li><a href="http://www.dataxstream.com/2009/11/sap-upgrade-and-customizations-3/">Part 3</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2011/11/sap-upgrade-and-customizations-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP Mid-Month Go-Live: Got the T-shirt</title>
		<link>http://www.dataxstream.com/2010/11/sap-mid-month-go-live/</link>
		<comments>http://www.dataxstream.com/2010/11/sap-mid-month-go-live/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 15:30:02 +0000</pubDate>
		<dc:creator>Tim Cooper</dc:creator>
				<category><![CDATA[SAP Functional]]></category>
		<category><![CDATA[SAP Project Management]]></category>
		<category><![CDATA[SAP Strategy]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[Financials]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP ECC]]></category>
		<category><![CDATA[SAP ECC 6.0]]></category>
		<category><![CDATA[SAP FICO]]></category>
		<category><![CDATA[SAP Integration]]></category>
		<category><![CDATA[SAP testing]]></category>
		<category><![CDATA[sap tips]]></category>
		<category><![CDATA[Solution Manager]]></category>
		<category><![CDATA[Tim Cooper]]></category>
		<category><![CDATA[upgrades]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=5870</guid>
		<description><![CDATA[Conventional wisdom says you don’t go-live with SAP financials in the middle of the month (strictly speaking I should say the middle of the accounting period, but I’ll say month as a generic term for the posting period).  I recently went through a mid-month SAP financials and logistics go-live and so far it has been [...]]]></description>
			<content:encoded><![CDATA[<p>Conventional wisdom says you don’t go-live with SAP financials in the middle of the month (strictly speaking I should say the middle of the accounting period, but I’ll say month as a generic term for the posting period).  I recently went through a mid-month SAP financials and logistics go-live and so far it has been a success.</p>
<p>Initially the project team had the expected <strong><em>you-can’t-do-that</em></strong> reaction when the idea of a mid-month go-live was suggested.  We took three main steps to determine whether or not we were crazy or had a viable go-live option:</p>
<ol>
<li>We asked SAP.  As one of the main participants on the project we got them to do an internal review with some platinum consultants with the objective of telling us why we could not go-live mid-month.</li>
<li>We asked our project team, both client and consulting resources.  Again, the goal was to tell us why we couldn’t do it.</li>
<li>We Googled like maniacs to find something to support and justify the conventional wisdom.  We failed to find anything substantial that would deter us.</li>
</ol>
<p>Armed with the conviction that there was no reason we couldn’t go-live mid-month we set about defining the details of how we would pull it off.</p>
<h2><span id="more-5870"></span>Conventional Wisdom: Why You Don’t Go-live Mid-Month</h2>
<p>My big disclaimer is that each SAP project has unique characteristics and what worked for us may not work for you, nonetheless I encourage you to keep an open mind and push until you find your insurmountable barrier, if it exists.  I would even contend that one of the biggest barriers may be your most experienced project team members and their gut reaction.  I admit my first reaction to the suggestion was &#8220;<strong>NO,</strong>&#8221; but as we drilled into the specifics of our project my inchoate objections crumbled.  The conventional wisdom is typically grounded in truth and experience, but conventional wisdom only applies to conventional situations.  To use a <a href="http://www.dataxstream.com/2010/07/sap-project-management-consulting-cliches/">consulting</a> <a href="http://www.dataxstream.com/2021/12/sap-project-management-consulting-cliches-part-2/">cliché</a>: challenge your assumptions.</p>
<p>In our research we found a consensus that there are three main areas that make a mid-month cut-over a bad idea.</p>
<p><strong>Assets</strong>: I’m no expert on assets but the general word was that depreciation gets “messed up” if you cut over mid-month.  Owing to my limited experience in this area I’ll take that on faith, but this was not considered an issue as assets was out of scope for our project and asset postings will be done by journal entries.</p>
<p><strong>Payroll</strong>: Again, I’m not an expert on payroll, but this was another situation where payroll was out of scope as the process is outsourced to a third party provider and journal entries are posted instead.  It was not considered a show stopping concern.</p>
<p><strong>Year-to-Year Period comparisons</strong>: by cutting over mid-month some folks on the interwebs expressed concern that the month-over-month comparison for the go-live year would be no use until the third year.  Let’s say you go-live in the middle of June 2010 with partial balances in SAP (the remainder being in the legacy system), when June 2011 comes around you can’t compare the two Junes because one month is partial and one is complete.  You have to wait until June 2012 for a meaningful comparison.  This was not an issue for us because we converted three prior fiscal years of account balances with the go-live month balances being the balances as of the go-live date along with the transactional activity for the rest of the month.</p>
<h2>Factors Leading to an SAP Mid-Month Go-Live</h2>
<p>The ugly truth is that we went live mid-month out of necessity, not by choice.  Our original plan was to go-live on the first of the month, but we weren’t ready and a focused re-planning exercise identified that we could go live three weeks later.  Changing the go-live date to the first of the next month was not acceptable for a variety of reasons, including political considerations – it’s never a purely technical decision, so no surprise there.</p>
<h2>Adapting the SAP Go-Live Strategy for Mid-Month Cut-Over</h2>
<p>Once we knew we were going live mid-month we had to work out how to handle key areas of functionality: particular areas of interest were open A/P items, inventory balances, customer deposits, and the GR/IR account.  On top of this historical account balances needed to be loaded and we needed to ensure that FI conversions reconciled with logistics conversions.</p>
<h3>Finance and Logistics Reconciliation</h3>
<p>We came up with an approach that allowed us to readily identify differences between account balances converted by FI compared to the conversion by MM.  Consider the example of inventory conversion.</p>
<p>Standard SAP postings for the initial inventory balance with movement type 561 post to a pair of accounts similar to these:</p>
<ul>
<li>DR Inventory (135010)</li>
<li>CR Conversion account (399175)</li>
</ul>
<p>Instead of making this posting we changed the account determination for MM conversion to post as follows:</p>
<ul>
<li>DR Inventory (135010)</li>
<li>CR Inventory conversion (135011)</li>
</ul>
<p>Now when we converted historical balances into FI the inventory posting was:</p>
<ul>
<li>DR Inventory conversion (135011)</li>
<li>CR Conversion account (399999)</li>
</ul>
<p>The benefit of this approach was that any balance on the 135011 account meant there was a difference between what was converted via MM and via FI.  This became the basis of the work list that had to be reconciled.  The actual operational G/L account for inventory (135010) could be used immediately after the go-live without worrying about it becoming part of the ongoing reconciliation process.</p>
<p>Also, standard SAP does not allow direct posting to the inventory account (135010) and this approach allowed us to leave it as delivered.</p>
<p>We used a similar process, i.e. a conversion account instead of operational account, to support the cut over for accounts payable, customer deposits and the GR/IR account.</p>
<h3>GR/IR Conversion</h3>
<p>In our environment we are fortunate to have a situation where invoices are not received before the goods.  Consequently at the time of conversion there were purchase orders where goods have been received and not invoiced.  The typical GR/IR process is as follows:</p>
<p><strong>Goods Receipt: </strong></p>
<ul>
<li>DR Inventory (135010)</li>
<li>CR GR/IR (211200)</li>
</ul>
<p><strong>Invoice Receipt:</strong></p>
<ul>
<li>DR GR/IR (211200)</li>
<li>CR Accounts Payable</li>
</ul>
<p>At the time of conversion the good receipt has already happened and we did not want to reconstruct the PO processing so that we could use MIRO processing when the invoice is received.  Instead we converted historical balances for the GR/IR account by posting to a new account, 211201 as follows:</p>
<ul>
<li>DR Conversion account (399999)</li>
<li>CR GR/IR conversion (211201)</li>
</ul>
<p>Now when the invoices are received they will be posted with an FB60 transaction as follows:</p>
<ul>
<li>DR GR/IR conversion (211201)</li>
<li>CR Accounts Payable</li>
</ul>
<p>We know we are giving up some integrated capability for a period of time until these purchase orders and invoices wash through the system, but it means that once the GR/IR conversion account gets to zero we are done.  The typical life cycle for PO is 6-8 weeks so this is a temporary situation.  The true GR/IR account, 211200, will be used as intended and the benefits of MIGO and MIRO processing will be realized.</p>
<h3>Month End Processing in the Old System</h3>
<p>Going live mid-month also meant that the prior period was closed in the old legacy system and the month end balances were converted over in the same way as any other period.  It was a straightforward extension of our process to pull the mid-month account balances from the legacy system during go-live weekend and load them into SAP, too.</p>
<h3>Financial Statement Impacts</h3>
<p>The approach that we took meant we introduced several accounts to the chart of accounts for conversion only.  Consequently we had to update our financial statement versions to include these accounts and assign them to the correct positions in the report structure.  Clearly this is not a difficult task, but one that is needed.</p>
<h2>SAP Mid-Month Go-Live Conclusions</h2>
<p>I am skipping over some of the detailed considerations of how we made a mid-month go-live work for our project.  The details of how to make it work, the nuts and bolts of reconciliation, how we tested it (iteratively!), how we worked the differences identified between FI and MM/SD conversions, etc. aren’t here.  It wasn’t always easy and we had to do it in a short amount of time, but my key message is that we found a way to do it: the conventional wisdom wasn’t and isn’t necessarily wrong, just we found another path.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/11/sap-mid-month-go-live/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SAP Project Management Consulting Clichés &#8211; Part 2</title>
		<link>http://www.dataxstream.com/2010/11/sap-project-management-consulting-cliches-part-2/</link>
		<comments>http://www.dataxstream.com/2010/11/sap-project-management-consulting-cliches-part-2/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 13:45:40 +0000</pubDate>
		<dc:creator>Tim Cooper</dc:creator>
				<category><![CDATA[SAP Functional]]></category>
		<category><![CDATA[SAP Project Management]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP FICO]]></category>
		<category><![CDATA[SAP Integration]]></category>
		<category><![CDATA[SAP testing]]></category>
		<category><![CDATA[Tim Cooper]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=5662</guid>
		<description><![CDATA[Following my previous post I got a couple of responses from folks out on the interweb and decided I’d steal their suggestions and expand on their consulting clichés.  After all repetition and overuse are the start point for any cliché and this means I’m doing my part to sustain the cycle – reuse, recycle, renew! Is [...]]]></description>
			<content:encoded><![CDATA[<p>Following my <a href="http://www.dataxstream.com/2010/07/sap-project-management-consulting-cliches/">previous post</a> I got a couple of responses from folks out on the interweb and decided I’d steal their suggestions and expand on their consulting clichés.  After all repetition and overuse are the start point for any cliché and this means I’m doing my part to sustain the cycle – reuse, recycle, renew!</p>
<h2>Is Your Project a Hotbed of SAP Consulting Clichés?</h2>
<p>I felt compelled to come up with a 2-by-2 matrix to help you decide whether your project is cliché generator or a cliché consumer.</p>
<p><span id="more-5662"></span></p>
<p>Here’s a chart to gauge your progress</p>
<p><img src="file:///C:/Users/tcooper/AppData/Local/Temp/moz-screenshot.png" alt="" /></p>
<p><a href="http://beta.dataxstream.com/wp-content/uploads/Blog-041-003.png" rel="shadowbox[sbpost-5662];player=img;"><img class="alignnone size-full wp-image-5725" title="Blog 041-003" src="http://beta.dataxstream.com/wp-content/uploads/Blog-041-003.png" alt="" width="503" height="403" /></a></p>
<p>This is your guide to see if your project vernacular has made it to cliché status or is too localized for such weighty titles.  The matrix should be self-explanatory, and if it isn’t, then it isn’t much of matrix.  But let’s cover the bases and check we’re all working off the same playbook:</p>
<ul>
<li>If the phrase is only used by a few people on your project you’ve got yourself a clique but you haven’t got a cliché</li>
<li>If the phrase is in widespread use across your organization but strangers check for their keys and wallets when you say it in public you’ve got tribal knowledge and a clear boundary between understanding and bafflement</li>
<li>If the phrase is used in lots of projects but only by a select group &#8211; perhaps those geeky developers who speak something that sounds like a cross between Fortran and Klingon &#8211; you’ve got the beginnings of a cult going on (I appreciate you geeks, but I’m not sure my mother wants to meet all of you)</li>
<li>If you hear the phrase everywhere and everyone knows what it means you have achieved nirvana: cliché status is yours to behold!  Jolly well done, splendid, attaboy!</li>
</ul>
<h2>What Does That Mean?</h2>
<p>Here is a handful clichés submitted to me recently along with a short explanation of what I think they really mean.  If these aren’t familiar please do you best to over use them so that they do become clichés.</p>
<h3>9 women can’t make a baby in a month</h3>
<p><strong>Translation</strong>: You have critical path issue on your project.  Assigning additional resources to the task isn’t going to help.  Better resources, perhaps.</p>
<h3>This is an aggressive timeline</h3>
<p><strong>Translation</strong>: Get ready to develop a new plan.  An aggressive timeline usually assumes perfect execution, code is good, configuration is good, users are trained, security and authorizations are good, interfaces are good, master data conversion is good, transactional conversion is good, backup and restore is good, and everything works together flawlessly, without a hitch.  Or at least it will once we get through this exercise with no, well maybe minimal errors and rework.</p>
<h3>This doesn’t work the way the old system does</h3>
<p><strong>Translation</strong>: I agree, it doesn’t work the same way as the old system.  It’s SAP and it works differently.  If it was supposed to work the same way as the old system it wouldn’t be SAP.  Now tell me again, why did your company choose to implement SAP?</p>
<h3>That’s not what I wanted</h3>
<p><strong>Translation</strong>: But it is what you asked for.  In defense of the speaker I think it is very difficult to describe what you want in a clear and complete manner and very few people are good at distinguishing between <strong><em>what</em></strong> they want and <strong><em>how</em></strong> they think it should be delivered and operate.  Nonetheless on ERP projects there is always a tendency to want to make that Buick into a Bentley despite the fact that both vehicles can get you to your destination.</p>
<h3>This is working as designed</h3>
<p><strong>Translation</strong>: The design is broken.  A fork is a good implement for eating some foods, but not all foods.  Is a spork the result you were looking for?</p>
<h3>Let me get back to you on that</h3>
<p><strong>Translation</strong>: a) I have no clue, b) let me look on <a href="http://help.sap.com">http://help.sap.com</a>, c) I don’t understand what you’re asking, d) that makes no sense to me, e) why would you want to do that?  But seriously, this is consultant speak for I have no idea how to answer that question.  The good consultants figure it out and get back to you whereas the bad ones just hope you are too buried to remember to ask that question again.  You know pretty quickly whether you have good or bad consultants.</p>
<h2>The End of a Humorous Interlude</h2>
<p>I hope I managed to bring a smile to your day as you read this and the previous post – perhaps your assistant printed it so you can read it on the plane as you fly home from another week of project execution optimization driven by paradigms harnessed by unconventional quantum leaps into new challenges that seek to maximize ROI.  That won’t be a cliché any time soon, but the individual components are probably already active on a project near you.</p>
<p>Thanks for indulging me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/11/sap-project-management-consulting-cliches-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP Data Migration – Dealing With Fallout (Part 3)</title>
		<link>http://www.dataxstream.com/2010/08/sap-data-migration-dealing-with-fallout/</link>
		<comments>http://www.dataxstream.com/2010/08/sap-data-migration-dealing-with-fallout/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 14:15:25 +0000</pubDate>
		<dc:creator>Mike Salvo</dc:creator>
				<category><![CDATA[SAP ABAP Blog]]></category>
		<category><![CDATA[SAP Functional]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[ALE]]></category>
		<category><![CDATA[Basis/Netweaver]]></category>
		<category><![CDATA[Data Migration]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Mike Salvo]]></category>
		<category><![CDATA[NetWeaver]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP ABAP]]></category>
		<category><![CDATA[upgrades]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=5591</guid>
		<description><![CDATA[One of the inevitable aspects of data migration is dealing with fallout from automated data loads.  Typically, this process includes identifying the data that will not load, analyzing the error messages to determine the root cause, formatting a readable report that can be used as a tool in the cleanup process, and fixing the root [...]]]></description>
			<content:encoded><![CDATA[<p>One of the inevitable aspects of data migration is dealing with fallout from automated data loads.  Typically, this process includes identifying the data that will not load, analyzing the error messages to determine the root cause, formatting a readable report that can be used as a tool in the cleanup process, and fixing the root cause of the problem so that it does not happen again.</p>
<h2>Why the data will not load correctly.</h2>
<p>There is a litany of reasons why some data records will load correctly while others will not.  Here is a list of some common root causes:</p>
<p>&nbsp;</p>
<ol>
<ol>
<li><strong>Poor quality legacy data.</strong><br />
Legacy systems which are not as tightly integrated as SAP, and are not under master data control allow the end user a bit of freedom when entering data.  A zip code may contain too little or too many characters; the email address is not properly formatted; numeric fields have transposed digits; various forms of abbreviations (especially in the city field), a quantity of zero (0) permitted by the legacy system and uploaded into a field where SAP will not accept a quantity of 0 and even simple misspellings  all can cause stringent validation checks to trigger an error and prevent the record from loading at all.  A more sinister type of error occurs when the data is functionally incorrect, but good enough to pass all of the SAP validity checks.  In this case, the data record will technically load into SAP, but will not be functionally correct.  Duplicate customers, duplicate vendors, and the data entry error for a quantity of 1000 instead of 100, and the wrong pricing condition applied to a sales order line are examples of this scenario.</li>
</ol>
</ol>
<p>&nbsp;</p>
<p>&nbsp;</p>
<ol>
<li><strong>Functional configuration and supporting data effects.</strong><br />
Many times I have watched the load statistics for a data object plummet from near 100% in the cycle two test load to near 0% in the cycle three test load.  This is very unnerving to the client because the cycle three test load is getting rather close to the go-live date, and “by the way, shouldn’t the statistics be getting better rather than worse?”  Functional configuration changes can wreak havoc on any data load.  Flipping the switch on a data field from optional to required; turning on batch management or serialization for materials for the first time; changes in the handling of tax, tax codes, and tax jurisdiction codes; that account determination entry that is missing or not set up correctly; a missing unit of measure or unit or measure conversion factor; the storage location in the upload file which does not exist in SAP – any of these can cause a load to drop mostly or completely onto the floor.While change is inevitable on any project, it is important to control and communicate the change so that the downstream impact can be recognized and understood.   Controlled change and communication always works better than total surprise.  Perhaps if we all know ahead of time about that data field that is now required, we can impose a requirement on the data extract side to make sure that the data field is populated before it enters the upload file.&nbsp;</li>
<li><strong>Additional data in the upload file.</strong><br />
Inserting a new field in the middle of the upload file data structure might be necessary for the business to close a gap, but if that change is not communicated to the technical team so that appropriate adjustments can be made to the load object’s input structures and processing logic, the new data will surely never load, and may cause misalignment of the data fields which follow it in the upload structure.</li>
</ol>
<p><span id="more-6104"></span></p>
<h2>The Finger Pointing Game</h2>
<blockquote><p>It’s the load program!  No, it’s the data!  No, it’s the configuration!  No, it’s … (fill in your favorite finger pointing game excuse explaining why data will not load).</p></blockquote>
<p>If you ever find yourself in the midst of this type of finger-pointing game, immediately stop the madness.  For this and similar situations, I apply a simple litmus test which has never failed me yet – manually enter the EXACT upload data into SAP for the transaction which has failed.  If one can be entered manually, then the program will be able to automatically load thousands with similar upload data and functional configuration.</p>
<p>I have lead many a functional analyst &#8211; kicking, screaming, and ranting about how terrible the load program is – to the terminal to play “let’s enter one manually”.  Typically, the result is that one cannot be entered manually due to configuration issues or the lack of supporting values data.  Once these issues are cleaned up, the load program “magically” begins to process thousands of records with no trouble at all.</p>
<p>Sometimes, the load object appears to be the cause, but is not the root cause.  The important data item not being handled by the load object (which was not called out in the functional specification document), the data item which turns blue (because the functional specification document explicitly stated “put this data item into the blue category”), the formula which is not calculating the desired result (but is indeed the exact formula found in the functional specification document) – all are examples of the load object adhering accurately to an incorrect functional specification document.  The root cause, then, is the functional specification document which must first be revised and checked into the controlled document repository before making any code modifications.</p>
<h2>It’s the Program</h2>
<p>Well, OK, sometimes the load object is at fault.  But it is extremely rare.</p>
<h2>Collecting and Reporting the Technical Load Statistics</h2>
<p>Load statistics are an important <span style="text-decoration: underline;">technical</span> metric, indicating what percentage of the upload file has successfully posted a transaction into SAP.  This is a basic and simple record count check.  How many records were presented in the upload file, how many records posted successfully to SAP, and how many records failed to post.  Also, does the number of successful transaction plus the number of failed transactions equal the total number of records presented in the upload file.</p>
<p>Here is how I communicate this technical metric:</p>
<table>
<tbody>
<tr>
<td>Total records in the upload file</td>
<td>100</td>
<td></td>
</tr>
<tr>
<td>Successful technical transactions</td>
<td>90</td>
<td>90% success</td>
</tr>
<tr>
<td>Failed technical transactions</td>
<td>10</td>
<td>10% fail</td>
</tr>
</tbody>
</table>
<p>This technical metric indicates only that all of the SAP validation rules for posting the transaction have passed.  It does not indicate that the master or transactional data posted to SAP is actually correct in functional terms.</p>
<h2>The Functional Review</h2>
<p>It is very possible for an entire upload file to technically load at 100%; while at the same time, functionally fail at 100%.  The customer may be missing a partner, the material or article may be categorized incorrectly, the pricing conditions on a sales order may not have the desired validity date range, the GL posting may be to the wrong accounts.  Hence, the need a functional review and validation of the data transacted into SAP.  The data type &#8211; master or transactional &#8211; determines the type of functional review and metrics to be employed here.</p>
<p>For master data, such as of materials, customers, vendors, etc., it is impossible to individually validate the many thousands of entries in your SAP system.  But statistical methods can be employed which will guide you through a random sampling of the data, while at the same time assuring accuracy at a high degree of confidence levels.</p>
<p>For transactional data, such as inventory, open sales orders, open AR, etc., direct mathematical comparisons can be employed.  On a grand scale, if an inventory value of $15,246,321.44 is being moved from your legacy system to SAP, then that exact amount must arrive in SAP when the migration task is complete.  It may be a bit more difficult to do this mathematical comparison at a more granular level.   If, in the move to SAP you are also redesigning your material/storage location combinations, a direct comparison between the legacy system and SAP may not be possible without a translation factor.  The same scenario exists if you redesign your GL chart of accounts, where one legacy GL account now maps to several SAP GL accounts, or vice versa.</p>
<h2>Reporting the Fallout</h2>
<p>If an automated data load was not technically 100% successful, a clear set of error messages complete with a link back to the legacy data must be mined, formatted, and presented to the business for analysis.  Such a report really helps to facilitate the fallout cleanup.  The link back to the legacy data must be carefully designed into the load process to make sure that, for example, the legacy customer number, legacy vendor number, legacy sales order number, legacy purchase order number, etc. is included as part of the data being handled.  Without the link back to the legacy data, it becomes very difficult to identify which data record needs to be fixed.</p>
<p>The error message mining technique that I use depends on the load method.  I will describe two here – one for a BDC load method and one for an IDOC load method.</p>
<h2>Mining Meaningful Error Messages from a BDC Session Log</h2>
<p>At the completion of a batch input session, the batch input session overview screen (SM35) displays the technical load statistics.  In this example, out of a total of 229 transactions, 13 failed and 216 succeeded.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-1.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5594 alignnone" title="dm3-1" src="http://www.dataxstream.com/wp-content/uploads/dm3-1.jpg" alt="" width="203" height="61" /></a></p>
<p>The session log shows the status of all 229 transactions.  This screen snapshot is a fragment of the complete session log for the batch input session.  It shows many successful transactions (Type = S) and one failed transaction (Type = E).  The error message here is clear – the article does not exist or is not activated.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-2.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5596 alignnone" title="dm3-2" src="http://www.dataxstream.com/wp-content/uploads/dm3-2.jpg" alt="" width="623" height="216" /></a></p>
<p>But as you can imagine, the 13 failed transactions with error type = E are sprinkled throughout the many pages of this log file.  With only 229 transactions, this log file is quite easy to pick through to find the 13 errors.  But imagine if the number of transactions were in the thousands or tens of thousands.  How do we extract only the failed transactions and present a concise report of the failed transactions?</p>
<p>To do this, I use SAP transaction SM35P – Batch Input Log Overview.  This transaction has the ability to set a filter on any field in the batch input log file, display the filtered results, and then to export the results to a local file.</p>
<p>To enter the mode where this is possible, first press the PRINT icon.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-3.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5597 alignnone" title="dm3-3" src="http://www.dataxstream.com/wp-content/uploads/dm3-3.jpg" alt="" width="441" height="95" /></a></p>
<p>Next, set the filter.  The appropriate filter field here is SESS. TYPE.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-4.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5598 alignnone" title="dm3-4" src="http://www.dataxstream.com/wp-content/uploads/dm3-4.jpg" alt="" width="449" height="66" /></a></p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-5.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5599 alignnone" title="dm3-5" src="http://www.dataxstream.com/wp-content/uploads/dm3-5.jpg" alt="" width="570" height="459" /></a></p>
<p>We only want the errors, so set the filter for field SESS. TYPE = E.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-6.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5600 alignnone" title="dm3-6" src="http://www.dataxstream.com/wp-content/uploads/dm3-6.jpg" alt="" width="328" height="91" /></a></p>
<p>The display now shows only the 13 rows containing the error messages.  This can be exported directly to a local spreadsheet for further analysis.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-7.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5601 alignnone" title="dm3-7" src="http://www.dataxstream.com/wp-content/uploads/dm3-7.jpg" alt="" width="625" height="146" /></a></p>
<h2>Mining Meaningful Error Messages from IDOCs</h2>
<p>Depending on the IDOC and the processing module, mining the error status messages from IDOCs can be very easy or somewhat challenging.  For the more difficult scenarios, you probably will need to hone your EXCEL skills to properly join several extracts together into one complete picture.</p>
<p>When creating IDOCs with a load object, I always note the date, time, and IDOC basic type.  I will use this information as the selection criteria for transaction WE05, which is going to locate the IDOCs and display the results information I need after the IDOCs are processed.  The results that I usually collect are the error status messages, and some data content from a segment or two to illustrate exactly where the problem is in the legacy data.</p>
<p>While the background job is busy processing the IDOCs, I usually take a peek, using transaction WE05, to see how the load is progressing.  If I see that most of the IDOCs are falling onto the floor (IDOC status 51) rather than moving into the database (IDOC status 53), I usually stop the background job and begin an immediate analysis of the fallout.  If the fallout solution does not require a change to the IDOC data content (e.g. a configuration change), then I can replay the fallout using SAP transaction BD87.  If the fallout solution does require a change to the IDOC data content, then the complete set of IDOCs must be regenerated again.</p>
<p>Let’s see what WE05 can tell us about a completed Article Master load.</p>
<p>On the WE05 screen below, we can see that of the total of 14,005 IDOCs, 11,412 have processed successfully and 2,593 have failed to process.  By double clicking the Status 51 folder, the display will show only the Status 51 IDOCs – the fallout.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-8.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5603 alignnone" title="dm3-8" src="http://www.dataxstream.com/wp-content/uploads/dm3-8.jpg" alt="" width="618" height="278" /></a></p>
<p>By pressing the “status list” icon (shown above), the display will show the status messages for the fallout.    Once these messages are displayed, pressing the “export” icon allows me to save the screen contents to a spreadsheet.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-9.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5604 alignnone" title="dm3-9" src="http://www.dataxstream.com/wp-content/uploads/dm3-9.jpg" alt="" width="624" height="331" /></a></p>
<p>Now it would be really nice if I could have the article number in the spreadsheet right next to the error message.  The article number in the ARTMAS IDOC is stored in segment E1BPE1MATHEAD.  The segment content for each IDOC can be displayed by pressing the “list specific segment” icon and entering the segment name in the box.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-10.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5605 alignnone" title="dm3-10" src="http://www.dataxstream.com/wp-content/uploads/dm3-10.jpg" alt="" width="623" height="256" /></a></p>
<p>The segment display will show all fields in the segment, so I usually hide all of the columns that I don’t want to see.  Here is the E1BPE1MATHEAD segment display showing only the article number.  I can use the export icon to save the list of article numbers to another spreadsheet.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-11.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5606 alignnone" title="dm3-11" src="http://www.dataxstream.com/wp-content/uploads/dm3-11.jpg" alt="" width="326" height="373" /></a></p>
<p>Here is a portion of the complete spreadsheet showing the error messages and the article numbers side by side.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-12.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5607 alignnone" title="dm3-12" src="http://www.dataxstream.com/wp-content/uploads/dm3-12.jpg" alt="" width="625" height="250" /></a></p>
<p>A filter applied to the spreadsheet shows that the 2,593 errors are all grouped into one of three error status categories.  By selecting a single category, Excel will also show me the number of records within that failure category.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-13.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5608 alignnone" title="dm3-13" src="http://www.dataxstream.com/wp-content/uploads/dm3-13.jpg" alt="" width="208" height="235" /></a></p>
<p>Sometimes it is easier to mine the status messages directly from the IDOC status table EDIDS.  This is especially true where the processing module is a BAPI which returns an error table rather than a single error message.  In this case, when you press the “status list” icon in WE05, only the first error status message of several is displayed for each IDOC.  I find that the first message is not very helpful (as shown below).  I also find that typically the second or third message in the return status table is usually the important one.  You won’t see it displayed on the WE05 screen, but you can mine it from the EDIDS table.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/dm3-14.jpg" rel="shadowbox[sbpost-6104];player=img;"><img class="size-full wp-image-5609 alignnone" title="dm3-14" src="http://www.dataxstream.com/wp-content/uploads/dm3-14.jpg" alt="" width="629" height="220" /></a></p>
<p>SAP transactions SE11 or SE16 both support this activity.  For the selection criteria I use the IDOC number range, status 51, and status type E.  On the display screen, choose only the relevant fields for display – the IDOC number (DOCNUM), IDOC status (STATUS), status message (STATXT), the four substitution parameters for the status message (STAPA1, STAPA2, STAPA3, STAPA4) and the message type (STATYP).  All of this can be exported into a spreadsheet.  If you really want to test your Excel skills, you can write code that will move the substitution parameters into their placeholders in the status text.</p>
<h2>Preparing for the next data migration cycle &#8211; Let the fallout analysis and cleanup begin.</h2>
<p>Presenting the fallout report to the business with a set of clear error reasons and links back to the legacy data is key to enabling the legacy data cleanup process to proceed.  In the iterative process of data migration cycles, cleansing the legacy data is a step in the right direction towards an improved next conversion cycle.</p>
<p>I hope you enjoyed this blog series on data migration.  Please feel free to send comments or questions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/08/sap-data-migration-dealing-with-fallout/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SAP Data Migration – The Data Migration Plan (Part 2)</title>
		<link>http://www.dataxstream.com/2010/08/sap-data-migration-the-data-migration-plan-2/</link>
		<comments>http://www.dataxstream.com/2010/08/sap-data-migration-the-data-migration-plan-2/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 13:45:54 +0000</pubDate>
		<dc:creator>Mike Salvo</dc:creator>
				<category><![CDATA[SAP Basis Blog]]></category>
		<category><![CDATA[SAP Functional]]></category>
		<category><![CDATA[SAP Interface Blog]]></category>
		<category><![CDATA[SAP Project Management]]></category>
		<category><![CDATA[SAP Strategy]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[SAP Testing]]></category>
		<category><![CDATA[sap upgrade]]></category>
		<category><![CDATA[ALE]]></category>
		<category><![CDATA[Basis/Netweaver]]></category>
		<category><![CDATA[Change Pointers]]></category>
		<category><![CDATA[Data Migration]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[IDOC]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Mike Salvo]]></category>
		<category><![CDATA[NetWeaver]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[SAP testing]]></category>
		<category><![CDATA[upgrades]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=5282</guid>
		<description><![CDATA[If you are responsible for the success of data migration, you will want to build a detailed plan that will walk you through all of the three phases of data migration: pre-data migration preparation, the data migration itself, and post-data migration cleanup.  I like my data migration plan to contain detailed steps that ensure that [...]]]></description>
			<content:encoded><![CDATA[<p>If you are responsible for the success of data migration, you will want to build a detailed plan that will walk you through all of the three phases of data migration: pre-data migration preparation, the data migration itself, and post-data migration cleanup.  I like my data migration plan to contain detailed steps that ensure that I don’t forget anything.  Each step lists a specific named responsible person along with their area of responsibility and contact information.  Unless I am responsible for executing the task myself, I prefer the named person to be a client employee (i.e. the business owner of the process) rather than a project consultant.    This is where the responsibility should be, and it requires that the business process owners actually participate in the activity rather than sit on the sidelines and watch.</p>
<p><span id="more-6098"></span>Before you embark on your project’s first data migration test cycle, your data migration plan will probably start out as a simple list of preparation steps, data load dependencies, and cleanup steps.  As you progress through your several data migration test cycles, your plan should evolve into a rather complex list containing load methods, responsible persons, historical data volumes, historical execution times, steps that need to be modified and additional steps that need to be added.</p>
<p>I always find it rather interesting to compare the very first plan to the plan that is actually used in the cutover process.  Many project factors will cause you to amend your data migration plan.  Newly-discovered gaps, changes in the business requirements, the decision to load all of the legacy customers instead of only those customers which have been active for the past two years, and toggling back and forth between “should this one be a manual or an automated load” are only a few.   Always keep in mind that the goal in amending the plan is to keep it compatible with the changing requirements of the project.</p>
<h2>The Data Migration Preparation Phase</h2>
<p>Before you actually start the data migration main course, you will probably want to execute a series of preparation steps.  Some of these preparation steps may have a significant lead time; while others may require a system reboot to take effect.  Make sure that you carefully plan accordingly.  Here are some data migration preparation steps that I have found useful:</p>
<ul>
<li><strong>Obtain a Data Migration Login</strong><br />
Obtain a special data migration login, with all of the authorizations needed to execute all of the required tasks.  This login is only to be used during the data migration process, and is to be deleted upon the completion of the data migration process. Using the data migration login makes identification of migrated data very easy both now and several years down the road.  It also facilitates implementing a general user lockout while the data migration user is performing data migration activities.</li>
<li><strong>Technical client preparation</strong><br />
The BASIS team may want to configure the data migration target client to have less dialog processes and more background and update processes.  This configuration can significantly improve data migration performance, especially if you have the opportunity to parallel process IDOCs.  In a Virtual Machine environment, the infrastructure team can even provision additional processors and memory.  You may also need additional disk space to handle large upload files, and any intermediate files that a load program might need to create.</li>
<li><strong>Configuration for IDOC processing</strong><br />
If a data migration process involves creating and processing IDOCs, you may need to configure the ports, partner profiles, message types, and processing modules.  My preference for IDOC triggering is by using the ABAP program RBDAPP01 rather than immediate triggering.  This allows me to exercise the most scheduling control over the background processing options.</li>
<li><strong>Change Pointers</strong><br />
During a data migration turn off change pointers.  Creating what could potentially be hundreds of thousands of change pointer records that are never going to be processed is an overhead burden on system performance and disk space that you do not need.  If the migrated data needs to be sent to external systems, manually send the data <em>after</em> the data migration is complete.</li>
<li><strong>Set the Correct Open Posting Period</strong><br />
Some of the transactional data will want to post into an open financial or manufacturing posting period.  You will want someone from the business to make sure that the correct posting periods are open for business.</li>
<li><strong>Configuration Settings</strong><br />
Sometimes, special temporary functional configuration settings are made to facilitate the data migration process.  Several functional analysts may be responsible identifying and setting these prior to the start of data migration.  As these are temporary configuration settings, it is expected that they will be set to their production values after the data migration is complete.</li>
<li><strong>Basic Setup Data</strong><br />
Some data migration objects are dependent on reference data – a template from which new data migration objects can obtain some of their default values.  You will want to make sure that those who are responsible for setting up this reference data have completed their task before you start the actual data migration.  Sometimes this data is moved from the Golden Client into the target client via ALE, so you may need to set up RFC destinations, ports, distribution models, etc.</li>
<li><strong>General user lockout</strong><br />
All users except for the data migration user should be locked out of the data migration client during the actual data migration activity.  It is impossible to verify that we moved exactly $15,386,254.23 in inventory from the source system to the target system if users are performing material movements in either system during the conversion.</li>
<li><strong>Connections to External Systems</strong><br />
Depending on what connections to external systems are doing, you may want to make sure that they are disconnected prior to the start of data migration.  This will ensure that inbound interfaces, which may either modify existing migrated data or add new data, are disabled.</li>
</ul>
<h2>The Data Migration Phase</h2>
<p>When all of the preparation steps are complete, it is time to start the actual data migration.  Data must be loaded into the target system in a certain sequence that is dictated by their data dependencies.  Customers must exist before sales orders can be migrated, vendors must exist before purchase orders, materials must exist before either sales orders or purchase orders, etc.  This dependency exercise varies a bit from project to project, and should have already been determined well before you start loading the data.</p>
<p>Automated data migration tasks for a single object (e.g. customer master data) usually include some or all of the following:</p>
<ol>
<li>Creation of an upload file from the source system</li>
<li>Technical validation of the upload file</li>
<li>Functional validation of the upload file</li>
<li>Execution of a technical object to load the data into the target system</li>
<li>Technical validation of the migrated data</li>
<li>Functional validation of the migrated data</li>
<li>Collection and reporting of load statistics</li>
<li>Analyzing the fallout</li>
<li>Correcting the fallout</li>
<li>Reprocessing  the fallout</li>
</ol>
<h3>Checkpoints</h3>
<p>At a higher level, the data migration plan will string together an end to end list of all of data migration objects.  I strongly suggest that you study the list and judiciously intersperse several checkpoints at appropriate places in the plan.  A checkpoint is an activity where all interested parties meet to review status and metrics, and to determine whether or not to proceed forward.  Keep in mind that what fails to load early in the plan will geometrically cascade into larger fallout later in the plan.  That single vendor which failed to load may cause several hundred open purchase orders to also fail.  And while the business owner of the vendor master data may think the fallout of a single vendor to be quite insignificant, the business owner of open purchase orders may have an entirely different perspective.  It is important here to make sure that all of the right stakeholders are participating, and that all are in agreement about whether or not to proceed.</p>
<h3>Backup or Restore Points</h3>
<p>Another activity that you should judiciously sprinkle into the plan is several backup or restore points.  It is very painful to have successfully navigated seventy-five percent of the data migration plan, only to have the next load create a huge and unrecoverable mess in the target system.  Without a backup or restore point available, you may have to wipe the slate clean and restart the entire data migration process again.</p>
<p>Depending on the target system and the facilities available, the backup or restore point could be a full system backup, a client copy, or a virtual machine snapshot.  Whatever the means, make sure it is a part of your plan.  It’s really great if you don’t need it.  It’s also really great to have if you do need it!</p>
<h3>The Data Migration Cleanup Phase</h3>
<p>When the data migration loads are finally complete, it’s time to exercise a series of cleanup steps.  This is where we:</p>
<ol>
<li>Undo the special temporary settings and configurations that were done prior to the start of the data migration activity.</li>
<li>Adjust the technical configuration of the system to a more user-oriented system with the right amount of dialog, background, and update processes.</li>
<li>Turn change pointers back on.</li>
<li>Allow the general user population to access the system.</li>
<li>Connect the system to its inbound and outbound communication partners.</li>
<li>Disable the data migration user.</li>
<li>Archive those massive upload files.</li>
<li>Delete any intermediate processing data files.</li>
<li>Clean up the IDOC tables if needed.  But first make sure that you do not need to keep the IDOCs  for legal reasons.</li>
</ol>
<h2>An Example Data Migration Plan</h2>
<p>Click on the link below to access an example data migration plan.  This plan is not a complete data migration plan, but is intended to demonstrate format and content.<br />
<a href="http://www.dataxstream.com/dataxstream-sample-data-migration-execution-plan-request/"><strong>Sample Data Migration Plan</strong></a></p>
<h2>Stay tuned!</h2>
<p>In part 3 of this series on Data Migration, I will be discussing how to deal with fallout from automated data loads.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/08/sap-data-migration-the-data-migration-plan-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SAP Project Management Consulting Clichés</title>
		<link>http://www.dataxstream.com/2010/07/sap-project-management-consulting-cliches/</link>
		<comments>http://www.dataxstream.com/2010/07/sap-project-management-consulting-cliches/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 13:45:47 +0000</pubDate>
		<dc:creator>Tim Cooper</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP Functional]]></category>
		<category><![CDATA[SAP Project Management]]></category>
		<category><![CDATA[SAP SolMan Blog]]></category>
		<category><![CDATA[SAP Strategy]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP FICO]]></category>
		<category><![CDATA[sap tips]]></category>
		<category><![CDATA[Tim Cooper]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=5146</guid>
		<description><![CDATA[There’s an old saying (aren’t they all old?) that instructs you to avoid clichés like the plague.  SAP has generated its own set of overworked buzzword terminology and has an eco-viral-collective that churns out more and more each day.  I can hardly keep up with the acronyms. Over the years I’ve accumulated three favorites of [...]]]></description>
			<content:encoded><![CDATA[<p>There’s an old saying (aren’t they all old?) that instructs you to avoid clichés like the plague.  SAP has generated its own set of overworked buzzword terminology and has an eco-viral-collective that churns out more and more each day.  I can hardly keep up with the acronyms.<br />
Over the years I’ve accumulated three favorites of my own that I’d like to share.  The aim here is not to kill off the clichés, instead it is to suggest ways to head them off before you use one and have clients rolling their eyes at you&#8211;Or at least have a quick follow up so that the cliché actually has some value.</p>
<p><span id="more-5146"></span></p>
<h2>The Infallible 2-by-2 Matrix and the Magic Quadrant</h2>
<p>A long time ago I worked for one of the big consulting firms where every interaction with the client seemed to involve a 2-by-2 matrix.  It got to the point that some of the consultants and most of the client laughed whenever one of these was pulled out.  It became a contest to create 2-by-2 matrices for everything and at one point in my life I aspired to publishing a book of 2-by-2 matrices to enable and empower everyday people to make good life decisions.  I think <a href="http://www.graphjam.com/" target="_blank">someone beat me to it</a> at least in spirit.</p>
<p>I think the world has become conditioned by 2-by-2 matrices such that the goal is to always be in the top right hand corner – the so called magic quadrant – whereas being in the bottom left hand corner shows how much progress you still have to make.  As highly paid consultant I am supposed to help you find the path from where you are to where you want to be.  The funny thing about 2-by-2 matrices is that you can make them do whatever you want to serve your needs.  Take the example of where I should go for dinner tonight:  If I plot on one axis how likely the bill will conform to the client expense policy and plot on the other axis how well the restaurant menu prices align with my per diem I get something that looks like the graphic below.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/05/Blog-040-0011.png" rel="shadowbox[sbpost-5146];player=img;"><img class="alignnone size-full wp-image-5149" title="Blog 040-001" src="http://www.dataxstream.com/wp-content/uploads/2010/05/Blog-040-0011.png" alt="" width="490" height="329" /></a></p>
<p>If I follow this chart and adopt the recommendation of the magic quadrant I’ll be eating fast food every night because it’s cheap.  Unfortunately, I’ll feel like <a href="http://en.wikipedia.org/wiki/Super_Size_Me" target="_blank">Morgan Spurlock</a> in no time.</p>
<p>If I look at this chart with a more skeptical eye the two axes are showing similar information, so the whole thing is pretty bogus.  If you are going to use a 2-by-2 matrix to make a point with a client make sure it serves a useful purpose.  One of my favorite matrices plots employee/consultant willingness against ability as shown below.</p>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2010/05/Blog-040-002.png" rel="shadowbox[sbpost-5146];player=img;"> <img class="alignnone size-full wp-image-5150" title="Blog 040-002" src="http://www.dataxstream.com/wp-content/uploads/2010/05/Blog-040-002.png" alt="" width="463" height="345" /></a></p>
<p>In an ideal world all workers fall in the magic quadrant, i.e. are both able and willing to perform a certain task (could this be the nirvana of a low maintenance, competent and talented worker?).  The individuals who fall into other quadrants are potentially much more interesting and I would wager that not every worker falls in the same quadrant all the time.  After all, I’m not a big fan of “busy” work: I am able to do it but not very willing because I don’t value it.  But when it comes to blogging I am both willing and able (obviously!) [Ed. Note: You, sir, are a very able blogger!].  Workers who are able but unwilling present a special set of challenges for project management (you can lead a horse to water but you can’t make him drink), whereas workers who are willing but unable may be lacking skills they want to acquire.</p>
<p>The takeaway here is that there is a place for 2-by-2 matrices in conveying a message: stating an objective; starting a discussion, etc. but use them sparingly and only when it is relevant.</p>
<p>In the meantime, send me your suggestions for 2-by-2 life decision matrices and I’ll see what I can about giving you a credit in my forthcoming publication: <strong><em>Top Right Sure Beats Bottom Left</em></strong>.</p>
<h2>It Depends</h2>
<p>I don’t know anyone working on SAP projects that doesn’t laugh or roll their eyes when someone says “it depends”.  As much as I mock it, the response does have some merit.  For example, if a client asks you how SAP processes purchase orders it is difficult to give a single definitive reply and “it depends” is a great cop out.  Purchase orders: would you like an account assignment with that?  Do you want to use info records?  Do you have quota arrangements?  Do have to have requisitions for every PO?  And so on.</p>
<p>It is critical to make a rapid transition from the non-value adding “it depends” to a discussion of what matters to your client.  This is where your knowledge of their business and prior project experience come into play.  I would hope that during the project scoping and requirements gathering phases you gained enough of an understanding that you only suggest SAP processing options that are applicable to your current situation.  After all you wouldn’t discuss logistics invoice verification if you are only processing A/P invoices directly through the FI module.</p>
<h2>This Happens on Every Project</h2>
<p>This phrase shows up in various forms and the two most common variants I’ve heard are “Every project runs into this kind of thing” and “I’ve seen this before on other projects”.  If you find yourself making statements similar to these pause for a moment about how your client will perceive it.</p>
<p>I have only come across these phrases being used when a project has gone astray and has run into a crisis of some sort: testing is revealing a whole new set of requirements that weren’t captured during blueprinting; test scripts don’t have enough details; functional specifications lack detail; too many overlapping yet dependent activities, etc.</p>
<p>The best comeback I heard to &#8220;This happens on every project&#8221; was from an exasperated client who asked: &#8220;Just so I&#8217;m not surprised when it happens, what other things happen on every project that I should know about?&#8221;.  (Thank you Patrick!)</p>
<p>In short “this happens on every project” can often be traced back to an earlier failure of project management.  Sometimes the situation is unavoidable, for example, despite your guidance about not moving on to the next project phase because of incomplete deliverables your client insists on going forward because the timeline says it is time to move forward.  Sometimes, key milestones are met but the sign-off is far more conditional than it should be.  Regardless of the underlying circumstances your client probably sees you do one of two things:</p>
<ul>
<li>Reactively tell them this happens on every project and then describe how every project goes through some level of fire drill and triage to get things back on track</li>
<li>Proactively manage their expectations and make clear the potential problems the project may run into: for example, designing and developing while integration testing is never a good idea.  In this way you provide leadership, not just management, and set a course to avoid a fire drill.</li>
</ul>
<p>Typically a client does not like surprises and pro-active behavior is better than reactive.  I like to think that as a project manager I exist to prevent forest fires, not to fight them.</p>
<h2>Consulting Catchphrases Conclusions</h2>
<p>My underlying thought is that the consulting clichés have an element of truth and validity to them and you should strive to use them as a springboard to bring value to your client.  Think about where the clichés came from – usually a negative experience – and see if you can anticipate where you might feel compelled to use these catchphrases on your project and (ahem, forgive me!) avoid them like the plague.</p>
<p>Please let me know if you have any favorite overworked project phases and I’ll do a follow up posting if I get a good number of responses.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/07/sap-project-management-consulting-cliches/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The Art of Writing an SAP Functional Specification</title>
		<link>http://www.dataxstream.com/2010/04/writing-sap-functional-spec/</link>
		<comments>http://www.dataxstream.com/2010/04/writing-sap-functional-spec/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 13:00:25 +0000</pubDate>
		<dc:creator>Mike Salvo</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP ABAP Blog]]></category>
		<category><![CDATA[SAP Functional]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[functional specification document]]></category>
		<category><![CDATA[Mike Salvo]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[RICEF]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[upgrades]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=4599</guid>
		<description><![CDATA[Overview I am currently working on an SAP implementation project that is just starting its realization phase.  One of my first tasks, as a member of the technical implementation team, is to review completed functional specification documents for RICEF objects.  These documents, written by functional subject matter experts, are supposed to detail business requirements that [...]]]></description>
			<content:encoded><![CDATA[<h3>Overview</h3>
<p>I am currently working on an SAP implementation project that is just starting its realization phase.  One of my first tasks, as a member of the technical implementation team, is to review completed functional specification documents for RICEF objects.  These documents, written by functional subject matter experts, are supposed to detail business requirements that address gaps, and which need to be incorporated into the system being implemented. The purpose of the review is to make sure that the functional specification documents are complete, accurate, and contain the approval signatures required to move on to the technical design phase.</p>
<p><span id="more-4599"></span><br />
In my career, I have had the pleasure of working with some first-rate functional analysts who know how to draft an excellent functional specification document in a timely manner.  It is this type of performance that helps to move a project along in the right direction, on schedule, and within budget.  Likewise, I have had the not-so-pleasant task of working with not-so-first-rate functional analysts, who draft functional specification documents that are not clear, inaccurate, and incomplete.  The risks here are ultimately manifest as project delays and cost overruns.</p>
<h3>The Good…</h3>
<p>A really good functional specification document contains enough detailed information about the business process to enable a technical designer to use it as the foundation for drafting a complete and accurate technical design document.  The functional specification document should not only highlight the presence of a gap, but should demonstrate how the business process, accompanied by automation, will close the gap.  This document must also indicate the abnormal processing requirements – what should happen when that report or interface does not run, what are the recovery steps, how are key employees notified of the problem, etc.  The content of a functional specification document must be tuned to the flavor of the RICEF object that it is describing.  Since they perform very different tasks, a report specification document should be very much different from an interface, conversion, enhancement, or form functional specification document.  Using functional specification templates helps to insure the appropriate content for each type of RICEF object.</p>
<h3>… and the Not-So-Good.</h3>
<p>I am sometimes astonished by the sparse content that is actually offered up for review.  “We need a report” really does not tell me a whole lot about the business process that I am supposed to automate.  Nor does it even hint at the report purpose, content, layout, user interface, execution mode, authorization requirements, or error handling.  And likewise, “Build me an interface” does not even begin to describe the direction, payload content, mapping, frequency, error handling and recovery steps.  It would be so wrong for me to attempt to build a technical design on such meager functional definitions.   One of my favorite cartoons shows a development manager standing in front of rows of programmers saying “You guys start coding.  I’ll go and find out what they want”.</p>
<p>I am further astonished by:</p>
<p style="padding-left: 30px;">a)      the project managers who apply pressure to accept inaccurate and incomplete functional specification documents, to give the impression that the project is actually moving forward and making meaningful progress.</p>
<p style="padding-left: 30px;">b)      the functional analysts who whine incessantly when their paltry functional specification document is not accepted.</p>
<p>A functional specification document that does not meet expectations must be upgraded until it does.  But bouncing a functional specification document back and forth like a ping pong ball between the functional team and a technical reviewer is inefficient and wasteful.  I find that the best way to quickly firm up a weak functional specification document is to thoroughly research all of the issues that I found in the document, formulate proposed solutions where possible, and then schedule a face to face collaborative meeting with the functional analyst and the business process owner(s).  This type of collaboration can save hours, days, or even weeks of wasted ping-pong posturing, and that is always best outcome for the project.</p>
<h3><a href="http://www.dataxstream.com/2010/03/sap-upgrades-offshore-resources/">Off-Shore Technical Resources</a></h3>
<p>This face-to-face quick resolution scenario typically cannot happen if you have an off-shore technical contingent in play.  In this case, it is absolutely imperative that the functional specification document be most accurate and complete to mitigate the risk of excessive time loss.   Why is that?</p>
<p>Off-shore resources are sometimes time zone shifted eight or more hours ahead of where the project is located.  If a functional specification document is released for review, it will not be analyzed until we have left for the day.  If the off-shore reviewer has questions or raises issues, we will not see these questions or issues until the next day when we arrive at the project site.  When we respond to the questions or issues, the off-shore team will not see our response until we have left for the day.  And so on.</p>
<p>Under these conditions, a poorly written functional specification document with issues takes days instead of hours to resolve.  This leads to unnecessary project delays and cost overruns.</p>
<h3>When One is Really Many</h3>
<p>That 3PL interface, which was scoped and planned by the business process owners as a single RICEF object named “The 3PL Interface”; and for which only one interface functional specification document is written, is actually many RICEF objects.  We need to move purchase orders, inventory receipts, advance ship notices, inventory picks, and cycle counts between the two interfacing partners.  Each of these represents a different payload, different mapping, is triggered by a different point in the business process, has separate error handling and recovery procedures, and requires a separate RICEF development object.</p>
<p>That single enhancement functional specification document, which addresses all of SD pricing, has the potential to extend into many different user exits.  I just finished coding an ABAP proxy that was functionally specified as one interface.  In fact it was four.  The requirement was to search the database for sales and invoice data starting with either an invoice number, sales order number, customer name, or company name.  Each of these search techniques required the development of a separate method.  The only pieces of code that were shared among the four search techniques were the input parameters and the output return table.</p>
<p>The point here is to make sure that the project planners understand the real complexity and effort required on the development side, and to make sure that the project plan and budget reflects these more realistic metrics.  This really goes a long way to stop everyone from wondering, “It’s only one interface!  What is taking development so long?”</p>
<h3>Great Expectations</h3>
<p>So what is a reasonable set of expectations for a really good functional specification document?  What is it that we are asking the business analyst to do?</p>
<p>First, let me describe what I do not expect.  I do not expect a business analyst to write code, build tables, design efficient database retrievals, or to decide that one BAPI, function module, class, or IDOC is better than another.</p>
<p>Here is what I do expect:</p>
<p style="padding-left: 30px;">A clear definition of a business process that is repeatable, and which actually works.  As a pre-automation test for data conversions, I always require the functional analyst to manually enter one of whatever, using the standard SAP transaction for which a conversion program is to be built. Many times, they can’t because the system is not configured correctly, the supporting data is not present, or any number of other reasons which cause the transaction to fail.  An interesting observation is that there is much indignant huffing and puffing during this manual entry “test” process.  But when the manual test fails, I simply remind them that I cannot automate a broken or non-existent business process.</p>
<p style="padding-left: 30px;">A clear definition of what should happen under abnormal or failure circumstances.  This must include error handling, notification, recovery and reprocessing steps.</p>
<p style="padding-left: 30px;">A business process that can efficiently be automated.  Requiring a search of sales order header text for the phrase “This is a red order” is a very bad design for automation purposes.  While such a design is technically possible to build, it will certainly be inefficient at run time, and may not always produce all of the red orders.  This is because the key value is a free-form phrase that can and will be misspelled, and abbreviated, along with countless other mutilations of the key phrase “This is a red order”.  There are much better business processes and technical implementations that will more efficiently and more accurately find all of the red orders in your system.</p>
<p style="padding-left: 30px;">An explanation of the need for development.  Exactly what is the gap, and how will automating the business process close the gap?</p>
<p style="padding-left: 30px;">Screen shots from SAP transactions depicting data that is to be retrieved or stored.  From the screen shot in the transaction, I can usually determine the exact table and field in the SAP database.  Note that some business analysts are very adept at identifying the actual underlying table and field name.</p>
<p style="padding-left: 30px;">Clear and concise details with respect to data mappings, formulae, data transformations, conditional processing, etc.  If I come to an intersection and it is unclear whether I should continue to go straight, turn left, or turn right, then the functional specification document needs a bit more detail behind it.</p>
<p style="padding-left: 30px;">
<h3>How to insure Consistency in Functional Specification Document Review</h3>
<p>Design a separate functional specification document review checklist for each flavor of RICEF object.  Distribute these checklists to the functional specification writers so that they know what the expectations are.  Using a checklist will help to make sure that your review process is consistent and accurate.  Improve these checklists over time.  My Form functional specification checklist document now includes the following check:</p>
<p style="padding-left: 30px;">Is it physically possible to print the specified content on the specified form using the specified font style and size?  Was an actual printed mock-up provided as proof?</p>
<p>- but only after I had received a functional spec for a form that required four inches of print content on a one inch label.  And somehow, the business analyst who wrote this particular request erroneously thought that it was my problem to solve.   After all, writing code is magic!  Isn’t it?  In this case, I pushed back and insisted that an actual printed mock-up be produced &#8211; one that I would then agree to automate.</p>
<h3>Summary</h3>
<p>A good functional specification document will help tremendously in moving a project forward in the right direction with minimal cost and risk.  A poor functional specification document has serious potential to cause project delays, and  schedule and cost overruns.  The best goal for the project is to achieve a good functional specification document, using whatever means required.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/04/writing-sap-functional-spec/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The Ergonomic User Interface</title>
		<link>http://www.dataxstream.com/2010/03/the-ergonomic-user-interface/</link>
		<comments>http://www.dataxstream.com/2010/03/the-ergonomic-user-interface/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 13:00:53 +0000</pubDate>
		<dc:creator>Mike Salvo</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[SAP ABAP Blog]]></category>
		<category><![CDATA[SAP Functional]]></category>
		<category><![CDATA[SAP Technical]]></category>
		<category><![CDATA[build an interface]]></category>
		<category><![CDATA[DataXstream]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Mike Salvo]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP programming]]></category>

		<guid isPermaLink="false">http://www.dataxstream.com/?p=4110</guid>
		<description><![CDATA[Every Monday morning I hop on a plane, arrive at my destination city, pick up a rental car, and drive to my client’s site.  The car rental company gives me a different make and model car every week.  And yet, somehow, I am successfully able to open the car, adjust the seat and mirrors, start [...]]]></description>
			<content:encoded><![CDATA[<p>Every Monday morning I hop on a plane, arrive at my destination city, pick up a rental car, and drive to my client’s site.  The car rental company gives me a different make and model car every week.  And yet, somehow, I am successfully able to open the car, adjust the seat and mirrors, start the car, shift gears, and drive.  I can also operate the radio, air conditioning, heat, windshield wipers, and headlights.</p>
<p>Now, put me behind a keyboard in front of a computer application which I have never seen before. My user experience is all over the map – somewhere in the continuum between most excellent and very poor.  Some application user interfaces are extremely intuitive, well-designed and easy to navigate, logically follow the business process flow, and provide real meaningful help when needed.  Other application user interfaces are extremely difficult to navigate, are not intuitive, do not follow a logical business process flow, and offer little or no meaningful help. And sometimes in these difficult user interfaces, not only has the location of the steering wheel been moved to a totally unsuspecting location, but its appearance has been changed so that, even when I see it, I do not even recognize it as being the application’s steering wheel.</p>
<p>A well-engineered user interface is no accident.  It doesn’t just magically happen.  It must be woven into the fabric of the design and the code; and it should never be shoe-horned into the application as an after-thought.   It takes a lot of up front planning, designing, testing, functional effort and technical effort to produce a really good application user interface.  And yes, designing, building, testing, and implementing a good user interface for your application will extend the delivery time of whatever it is that you are building.</p>
<p>Why is a well-designed and ergonomic user interface so important?  You could have built the best application ever developed.  But if it is unusable, it will never get very far.   Countless hours are lost every day as thousands of frustrated users spend extra time and effort wrestling with poorly designed user interfaces, rather than focusing on their jobs.  And when the frustration levels reach a certain trigger point, the users will seek out and find alternative ways to perform their duties.</p>
<p>Here are a few examples of some very interesting user interface experiences that I have personally encountered.</p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<h2><span id="more-4110"></span>Let’s Punish the User</h2>
<p>I thought we had gotten over this one a long time ago, but I was bitten by it recently while I was completing a web form.  Here is the scenario:</p>
<p style="padding-left: 60px;">I am completing a screen form containing several fields, and I make an entry error in one of the fields.  When I try to submit the data, the application rejects the submission, and sends me a message indicating where the error field is, <strong>and then clears all of the fields on the screen and makes me re-enter all of</strong> <strong>the data again.</strong></p>
<p style="padding-left: 60px;"><span style="color: #3366ff;"> </span><em><span style="color: #3366ff;">Bad User!  And, because you made a mistake, you get to start the entire form all over again …   and again … and again … and again </span>&#8230; </em></p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<h2>When Help is not Help</h2>
<p>I am especially fond of this one.  I need help, so I look for the HELP ICON.  I find the HELP ICON (because it looks like a help icon should look, and it is located where a help icon is typically located … well, sometimes it is) and I press it.  The anticipation of actually getting the help I need is overwhelming.     And the help information finally appears on my screen and reads something like this:</p>
<p style="padding-left: 30px;">The exact details of what you want to know are located somewhere in our behemoth website.   Now, we could tell you exactly where and actually help you to solve your problem very quickly,    but we’re not going to, because then you won’t have spent hours wandering aimlessly through our website’s colossal labyrinth.  And while you are in there, don’t let the Minotaur get you!   Please go to <a href="http://www.needleinthehay.com/">www.needleinthehay.com</a>.</p>
<p>Well, at least they said “please”.</p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<h2>The Errant Error Message</h2>
<p>I can’t tell you how many times I have made a data entry mistake, only to be “helped” by this not-so-helpful error message:</p>
<p><span style="color: #3366ff;"><strong> Incorrect Entry</strong></span></p>
<p>This is irritating.  If I don’t know <strong>why</strong> it is incorrect, I can’t fix it!  If the application is intelligent enough to determine that the entry is incorrect, it certainly is intelligent enough to tell me which of its check rules were violated (in plain user-oriented language please).</p>
<p>I really like this one:</p>
<p><span style="color: #3366ff;"><strong>Program Error 1776</strong></span></p>
<p>This truly tells me everything I need to know!!!  Maybe the developer knows what error 1776 is, but I don’t.  Maybe I can find the meaning of error 1776 at <a href="http://www.needleinthehay.com/">www.needleinthehay.com</a>. (I hope the answer is not too close to the Minotaur’s lair.)</p>
<p>Hey developer – can I have your phone number so I can call you every time I see one of these messages?  Maybe then you will get the hint and stop the madness!</p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<h2>I’ve fallen in and I can’t get out</h2>
<p>Sometimes, I manage to navigate to a screen that has no obvious means of escape.  So I’m trapped until I can figure out the top-secret mouse click or keystroke combination.  Should I place the blue orb on the green pedestal?  I guess I really should have left a breadcrumb trail.  Or maybe the developer was a ZORK player!  Let’s try XYZZY!!!</p>
<p><strong><span style="text-decoration: underline;"><strong><span style="text-decoration: underline;"> </span></strong></span></strong></p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<h2>Just Give me a Good Example</h2>
<p>Like pictures, a good example is worth a thousand words.  Good examples are worth their weight in gold.  A really good example can get me to where I want to be – understanding what I need to know – much more quickly than an entire chapter of words.  Good examples are hard to come by.  They require lots of thought and planning.</p>
<p>Here is an example of a bad example:</p>
<p>2  @  2   =  4         where ‘@’ is some arithmetic operation.</p>
<p>OK &#8211; did we add or multiply here?  Who knows?  This is totally ambiguous, and a bad example.</p>
<p>Here is an example of a better example:</p>
<p>2  @  3   =  5         where ‘@’ is some arithmetic operation.</p>
<p>It is obvious here that the “arithmetic operation” was addition.</p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<h2>The Cluttered Screen</h2>
<p>One of my favorite games as a child was the type of puzzle where a group of objects is hidden somewhere in a very busy picture.  The names of the hidden objects are listed on the side of the page, and the object of this type of puzzle is to “find the hidden objects” that are on the list.</p>
<p>Some user interface designers and builders are very adept at hiding items on their incredibly busy user interface screens.   Perhaps in their youth, like me, they liked to play with “find the hidden objects” puzzles also.  The problem here is that they are designing “find the hidden objects” puzzles into their user interfaces!  Is it really necessary to squeeze in every data field and push button onto a single screen?  Is the perception here that a single screen, no matter how extremely busy, is somehow easier to use?</p>
<p>My end-user work instructions tell me that if I push the “show details” button, I will then know the meaning of life, the universe, and everything.  But where is the “show details” button?  I am really good at playing “Where’s Waldo”!  Just give me an hour or two and I will find it!</p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<h2>The Plethora of Scattered Screens</h2>
<p>The opposite of the tightly packing everything onto a single cluttered screen is the scattering of the user interface among way too many screens.  It becomes a memory exercise to remember the user interface elements that I have already touched, and a scavenger hunt to locate the interface elements that I haven’t found yet.  Let’s see … what was that part number that I entered on screen 152?  Or was it on screen 376?  And where do I go from here to get the order number?  Does anyone have a roadmap that I can follow?</p>
<p>Maybe if we could consolidate the enormous number of screens down to a few that represented logical work flow groupings, I could spend less time screen hopping and be more productive.</p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<h2>Let’s Get Colorful and Fontsy</h2>
<p><a href="http://www.dataxstream.com/wp-content/uploads/2020/12/userinterface.jpg" rel="shadowbox[sbpost-4110];player=img;"><img class="aligncenter size-full wp-image-4356" title="userinterface" src="http://www.dataxstream.com/wp-content/uploads/2020/12/userinterface.jpg" alt="" width="660" height="75" /></a><br />
They use several different font styles, sizes, and colors.</p>
<p>I suppose that’s OK, isn’t it?  It really wasn’t too difficult to read the sentence above, was it?</p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<h2>Consistency is Key</h2>
<p>Let’s examine the rental car scenario that I posed at the beginning of this blog.  The reason that I am able to quickly enter the car and drive away is because a recognized user interface standard has been established and consistently applied to all automobile makes and models.  Among the various cars that I am faced with, the gas pedal always looks like a gas pedal, and is always located on the driver’s side floor to the right.  Likewise for the steering wheel, the brake pedal, and most other major user interface elements found in a car &#8211; they all adhere to standards of look and feel and placement.</p>
<p>It should not be too surprising then, that the not-so-ergonomic user interfaces that I have encountered do not even recognize that a standard might even exist. The really difficult user interfaces mix things up, and change the appearance, behavior, and location of controls from screen to screen.</p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<p><strong><span style="text-decoration: underline;"> </span></strong></p>
<h2>Summary</h2>
<p>The ergonomic user interface – the one that is intuitive, provides real help when needed, follows an organized logical workflow, and is easy to use are important components of a really great application that end users will want to use because it actually will be the best way to do their job.</p>
<p>Here are a few guidelines that I use whenever I build a user interface:</p>
<p>1)      Totally and completely understand what the business requirements are, and what the user needs to accomplish.  This is the first and most important step to building a good user interface.</p>
<p>2)      Design the user interface to follow the workflow.</p>
<p style="padding-left: 30px;">Organize and logically group functions together.</p>
<p>3)      Determine if standards exist and consistently use them everywhere.</p>
<p style="padding-left: 30px;">Position controls in expected and predictable locations.</p>
<p>4)      Give feedback to the user in a timely manner.</p>
<p style="padding-left: 30px;">Don’t wait until screen 3 to inform the user that there is a problem back on screen 1.</p>
<p>5)      Craft meaningful error messages in user-oriented language.</p>
<p style="padding-left: 30px;">Temper the messages appropriately – if everything is hot, then nothing is hot.</p>
<p>6)      Make sure that the “help” you provide really helps.</p>
<p style="padding-left: 30px;">Ask the user to confirm before deleting anything.</p>
<p style="padding-left: 30px;">Use list of values help whenever possible.</p>
<p>7)      Use default values whenever possible.</p>
<p style="padding-left: 30px;">This avoids potential data entry errors and makes the user interface more efficient.</p>
<p style="padding-left: 30px;">For example, if I work in warehouse 2, I should not have to enter that information every time I ship an item.</p>
<p style="padding-left: 30px;">Display default values in pre-populated, grayed-out fields; but add a pushbutton to allow for the rare occasion when the user must override the default value.</p>
<p>8)      Keep training documents current.</p>
<p style="padding-left: 30px;">As a developer, you may not own the training documents – but someone does.</p>
<p style="padding-left: 30px;">There is nothing more frustrating than a training document that does not match the actual program behavior screen for screen and mouse click for mouse click.</p>
<p style="padding-left: 30px;">
<p>I hope that this blog can provide some useful hints for building effective and efficient user interfaces.  Please reply to this blog if you have any most interesting user interface stories that you would like to share with our readers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dataxstream.com/2010/03/the-ergonomic-user-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

