Tuesday, December 2, 2008

need for one standard for all SAP projects

currently every individual SAP project in a big IT firm has its own project specific naming convention and code quality standard. if an IT firm has 20 SAP projects running then 20 different project standards are prepared by each manager inspite all 20 projects are involved techanically and functionally in same technology. i explain why we DON'T need different project standards for same technology. how does one common standard applicable across all projects in a big company improve the desired level of code quality, code readability for all SAP developers in a company and easy adaptability of developer across all projects without wasting 2 -3 days reading same documents? i have worked in four SAP projects and observed various contradictory code quality assurance standard.
(1) in my previous project, use of 'field-symbol' is not allowed. although in my present project, use of 'field-symbol' is highly recommended to replace 'work-area' and data manupulation in internal table without 'modify' statement. utility of this tool is immense other than stated two ovious scenarios.
(2) in one project, it is ok to read an internal table using 'Binary Search' always and religiously. but it doesn't make sense to read an internal table using 'Binary Search' for once or twice as 'Binary Search' requires 'Sorting' which itself is very time consuming. in such case, linear search is good performance wise if requirement is not beyound 4 times or read inside loop itself.
(3)another contradictory thing i noticed that one project allows 'modify' satement with 'where' clause for internal table inside loop while other project rates it as bad coding style as modify statement works in linear fashion starting from index 1 to n which unnecessarily increases record (internal table) processing time. so, how do they suggest to modify internal table ? take one scenario: based on outer looped internal table1, if one has to modify the content of internal table2. then sort the internal table2 outside loop based on conditional fields. read this internal table2 inside loop assigning field-symbol based on conditional fields. if it finds a record then simply change the content of field-symbol which gets reflected in internal table2. so, basically one replaces linear processing by sorting+binary search. latter is good performance wise if records are in great number in production system.
(4)one project allows to modify database table in 'user-exit/BAdi' directly where as other project doesn't allow it without 'update perform/update function' module because it violates the concept of 'All or None' database update. as previous approach will lead to inconsistent database if respective standard transaction fails in middle of processing before executing 'commit' statement.
(5)one rediculous thing was-one project didn't prefer 'inner join' because QA guy feared that it might lead to data loss in complex situation. priceless!!!
bottom line is that each has developed one specific standard QA list which reflects limitation of one's knowledge. sad part is this kind of industry practice at project level is common everywhere. one effective solution can be that only few selected efficient techanical experts of company should set the standard of code quality for all projects. It will easy to implement best industry practices in SAP technology as ignorance of latest update in technology as well as lack of wider exposure are reason for this inconsistency.

I am not able to appreciate the benefits of following different naming conventions for different projects in a same company. as far as functionality and performance of codes are concerned, it is not going to alter anything. so, sticking to one standard for naming will enhance more standarisation of code maintenance. when client buys a specific namespace from SAP then accordingily the naming can be changed while maintaining rest things intact. as for example, if a client wants that all custom developments shud start with 'PPP' initial then what one has to do is just add this initail 'PPP' to custom name using already fixed one naming convention.