Updated: you may also want to check out subsequent blog Get rid of Business Hard Code from your custom ABAP Code
IMHO, “Business hard coding” is one of the worst and underestimated ABAP programming practice.
Here just an intro to the topic while in a subsequent blog you’ll find useful stuff to get rid of it.
I always considered hard coding really a bad practice but, only recently, I’ve got the real evidence of how much it is used. It happened during the Custom ABAP Code review services we’re delivering at TechedgeGroup.
Hard coding requires the program’s source code to be adjusted any time the context changes and in business, it happens quite often.
With “Business hard coding” I’m referring to the practice of hard coding strings (literals) corresponding to codes (IDs) related to Organizational Units, Document Types and even Master Data and that is one of the worst kind of hard coding.
Some examples are Company Codes, Purchase Organizations, Sales Organizations and Accounting document types.
Instead, I would not be too much worried about “Technical hard coding“, the practice of hard coding strings corresponding to technical stuff like dictionary objects and output formats (e.g. tables, fields, colors, icons).
In add, hard coded strings returned to end-users as part of messages, titles and columns headers belong to a different bad practice related to the internationalization (i18n) topic.
A couple of examples
For a better comprehension, a couple of examples follow.
In the next picture, method ADDRESS_CONTROLS_IN contains two hard coded strings used to differentiate message severity. The first is related to Company Code and the second to Purchasing Group. Here hard code is even used generically to check everything starting with IN*.
In the next picture, method MANDATORY_VATCODE contains multiple hard coded strings to differentiate message severity. The first is related to Country Code, then to Company Code and my favorite one verifies that the GL Account beginning with ‘004’.
Why real life SAP systems are full of Business hard code?
I’m sure, most of developers will justify the use of Business hard coding explaining they have been in hurry and the time to create new customizing tables or BRF+ rule was missing. In part they are right, I know that customers (internal or external) demand often for very fast results and developers operate accordingly.
I also have evidence that a large number of developers consider Business hard coding the only way to go and let’s say even a good practice.
Discussing with them, to demonstrate they are wrong, I’m used to say that in hundreds of millions of lines of standard SAP code there is no occurrence of “Business hard coding“ (to be honest with very few exceptions like country codes and partner functions).
Why Business hard coding is so bad?
Probably the hard-coder (the author) will be proud to show his/her skills solving issues and adjusting the business hard code only he/she is aware of (lock-in). Even if at customizing level everything is correct and identical to a working scenario, different behaviors of a transaction/report are often due to business hard code.
Time saved during the development phase will lead to much additional effort during the next roll-out or at next Merge&Split when business requirements will change.
Where Business hard coding is acceptable?
In the reality, Business hard coding is an acceptable practice in:
- Throw away objects
- Short living projects
Maybe it can also be useful to classify above exceptions assigning the objects to specific throw away Packages (Development Classes) similar to $TMP but transportable to production.
Speaking about serious and productive Custom ABAP Code, I’m sure you want to get rid of Business hard coding as soon as possible.
In modern SAP systems, there are lot of alternatives to Business hard coding for example like:
- BRFplus Business Rules
- custom Customizing Tables
- Filters in BAdis as described in the must to read blog Best Practice for a SAP ECC Consolidation project: filter dependent BAdI to organize the user-exits and enhancements
- in FICO maybe also using SETS
- in MM SD maybe also via Conditions
- Report PARAMETERs and SELECT-OPTIONs
- Parameters managed in table TVARV
I’m going to share very soon also the way we use at TechedgeGroup to perform a full scan of your Custom ABAP Code looking for Business hard coding and I’m also very interested to hear your experiences and ideas.