So ok here it is, as asked in the comments.

Setting: customer (huge electronics chain) wants a huge migration from custom software to SAP erp, hybris commere for b2b and ... azure cloud
Timeframe: ~10 months….

My colleague and me had the glorious task to make the evaluation result of the B2B approval process (like you can only buy up till € 1000, then someone has to approve) available in the cart view, not just the end of the checkout. Well I though, easy, we have the results, just put them in the cart … hmm :-\
The whole thing is that the the storefront - called accelerator (although it should rather be called decelerator) is a 10-year old (looking) buggy interface, that promises to the customers, that it solves all their problems and just needs some minor customization. Fact is, it’s an abomination, which makes us spend 2 months in every project to „ripp it apart“ and fix/repair/rebuild major functionality (which changes every 6 months because of „updates“.

After a week of reading the scarce (aka non-existing) docs and decompiling and debugging hybris code, we found out (besides dozends of bugs) that this is not going to be easy. The domain model is fucked up - both CartModel and OrderModel extend AbstractOrderModel. Though we only need functionality that is in the AbstractOrderModel, the hybris guys decided (for an unknown reason) to use OrderModel in every single fucking method (about 30 nested calls ….). So what shall we do, we don’t have an order yet, only a cart. Fuck lets fake an order, push it through use the results and dismiss the order … good idea!? BAD IDEA (don’t ask …). So after a week or two we changed our strategy: create duplicate interface for nearly all (spring) services with changed method signatures that override the hybris beans and allow to use CartModels (which is possible, because within the super methods, they actually „cast" it to AbstractOrderModel *facepalm*).
After about 2 months (2 people full time) we have a working „prototype“. It works with the default-sample-accelerator data. Unfortunately the customer wanted to have it’s own dateset in the system (what a shock). Well you guess it … everything collapsed. The way the customer wanted to "have it working“ was just incompatible with the way hybris wants it (yeah yeah SAP, hybris is sooo customizable …). Well we basically had to rewrite everything again.
Just in case your wondering … the requirements were clear in the beginning (stick to the standard! [configuration/functinonality]). Well, then the customer found out that this is shit … and well …

So some months later, next big thing. I was appointed technical sublead (is that a word)/sub pm for the topics‚delivery service‘ (cart, delivery time calculation, u name it) and customerregistration - a reward for my great work with the b2b approval process???

Customer's office: 20+ people, mostly SAP related, a few c# guys, and drumrole .... the main (external) overall superhero ‚im the greates and ur shit‘ architect.
Aberage age 45+, me - the ‚hybris guy’ (he really just called me that all the time), age 32.
He powerpoints his „ tables" and other weird out of this world stuff on the wall, talks and talks. Everyone is in awe (or fear?). Everything he says is just bullshit and I see it in the eyes of the others. Finally the hybris guy interrups him, as he explains the overall architecture (which is just wrong) and points out how it should be (according to my docs which very more up to date. From now on he didn't just "not like" me anymore. (good first day)
I remember the looks of the other guys - they were releaved that someone pointed that out - saved the weeks of useless work ...

Instead of talking the customer's tongue he just spoke gibberish SAP … arg (common in SAP land as I had to learn the hard way).
Outcome of about (useless) 5 meetings later: we are going to blow out data from informatica to sap to azure to datahub to hybris ... hmpf needless to say its fucking super slow.
But who cares, I‘ll get my own rest endpoint that‘ll do all I need.

First try: error 500, 2. try: 20 seconds later, error message in html, content type json, a few days later the c# guy manages to deliver a kinda working still slow service, only the results are wrong, customer blames the hybris team, hmm we r just using their fucking results ...
The sap guys (customer service) just don't seem to be able to activate/configure the OOTB odata service, so I was told)
Several email rounds, meetings later, about 2 months, still no working hybris integration (all my emails with detailed checklists for every participent and deadlines were unanswered/ignored or answered with unrelated stuff). Customer pissed at us (god knows why, I tried, I really did!). So I decide to fly up there to handle it all by myself

  • 5
    Sitting together with the SAP guy (great guy btw). The SAP odata interface I have to use needs a few ids which i dont have and dont get ... what?? Hmm, we have some test data! Ok cool...doesnt work ... no way... let me check .... oh hardcoded -1 for date ... eyerolls. I need a few days to fix it, he said (more eyerolls)

    (useless flight, needless to say)

    All I needed was some public company registration data (publicly available from a super fast government rest service). Instead we are going to tunnel it through our super fucking slow SAP and corrupt (SAP encrypted/obfuscated gibberish json properies) the data ...well done sir.

    Complaint from my side: please provide a nice (aka human-readable) restful JSON service, Fastforward 2 months …

    Rest service has the same fields, same bugs as the „pure SAP experience" but adds about 10-20 seconds to response time … hmm

    And it still needs an id which I dont have ....
  • 6
    So i ask the c# guy (as its going through azure now ...) to return the id with another call. Sure, np. 10 minutes later he proudly comes back. Postman does his thing..... drumrole. He appended the id to a freetext description field 😳

    Vanishes instantly during the time im occupied trying to figure out if he's mocking me, doing some reality check (lucid dreaming, hello?) probably several seconds up to a minute probably???

    So back to him (i found him an hour later): can u make it a separate field, NO ... I need it ... ok, 2 weeks. Silence!

    Umm why so long? Bc we only have only one instance and we need it for another project? I walk away thinking how a newly added field could possibly break a system …

    2 months later we did it, kinda, still still slow and buggy. We did all kinds of worksrounds to handle their fucking inconsistent crashing slow abomination. Customer still angry at us, because the checkout is soo slow (why just why?)

    (to be continued)
  • 4
    @cantthinkofone here it is, more to come
  • 2
    @mojo2012 Welcome to devRant!
    I read the whole thing; boy was that a story! Great rant!

    Yeah SAP is a fucking mess and so are a lot of "SAP developers" or "SAP Admins".
    We have to work from time to time with a company which sets up "RESTful" APIs for customers so they can use SAP data in their webshops. Holy fuck are they messed up. It's unbelievable!
    They developed the API themselves and rent/sell it as a product to customers and it is fucking unreliable, inconsistent and vaguely to not unusable documented.
    Not to say that they can't even fucking read our emails when we report bugs.
    About once a month it happens that the whole webshop goes down because their "API" is offline. Why? They do updates but then forget to check if it actually works again afterwards.
    Fucked up retards.

    Need I say that they dont seem to understand what URL decoding of GET params is? Or how to fucking properly create consistent routes?
    Some are POSTs with post params, others are GET with query params. The response body contains JSON with a field for the status code, yet the response status code is always 200 (except for internal server errors).

    My boss plays with the idea that we should create our own API for SAP, because those fuckers can't do it at all.
  • 2
    @PonySlaystation haha reminds me of my current project. Pre-test-deployment on PROD (SAP hosted SAP-cloud ...) and PROD is offline for 2 weeks straight and SAP can't figure out why ... customer wanted to cancel the contract, SAP sends layers ... *facepalm*

    Their Hana DB is so super slow that the simplest queries take forever (let alone the JDBC driver bugs ...)

    Now I have the glorious task to upgrade hybris to the newest version, and let SAP host it on Azure to make it work faster *facepalm (not the last time)*

    Initially (in the other project) my first thoughts were really like: wow nice, what's better than connect to a REst service that does all the dirty work, and we can just consume it ... well, needless to say I way naive to think SAP can do that ....

    Btw, have you ever seen the ABAP code behind their webservices? Then you'll understand ...
  • 2
    I have no words. I honestly don't know what to say... When you said you had a story about this I would never imagine it would be *this*

    Can't wait for the rest tho ahaha
  • 2
    @cantthinkofone I have to wait 2h again, and I'll use my next rant/post for some advertisement for my open source hybris alternative, so you have to wait for tomorrow or saturday .. sorry on that ;-)
  • 2
    @mojo2012 I don't really know how the code or tables of SAP look like. An SAP dude ince told me that they have tables with up to 800 colums and not even SAP devs themselves know what some of these colums are used for if they're even used at all. They allegedly were left from older versions and may be deprecated but nobody dares to remove them.

    I don't know if it's true, but it is enough to send shivers down my back...
  • 1
    Maybe the time has come to create a product that destroys SAP once and for all in every aspect...

    Even just a 15 minute support call to an SAP certified support person costs fucking $60 here. These creedy cunts...
    I'm glad we don't use SAP in our company, otherwise I'd be selling heroin on the streets for my boss so we could keep it running.
  • 3
    don't know about the numbers but yes, there are countless obfuscated columns like KNR1 which means KundenNummeR (=customer number). You have to undestand german to get some idea of what it should mean.

    The way SAP works is that it is actually some kind of runtime, where you are able to manipulate it's own source code while it runs.

    Sounds creepy? Well that's the reason why noone touches the core anymore, because everything could blow up.

    SAP is it's own IDE! (inception hello?) You debug your code from within itself - while it's running.

    To make it work somehow, people tend to implement their stuff in the (in)famous z-tables. Z stands for "super special custom do your own shit I don't care"-table. You can't destroy the whole system there ... well but it defeates its pupose because you can't adapt system functionality, just extend it ... arg bad shit going on there believe me.

    That's why lidl just wasted halb a billion (yes!) with a SAP migration that they cancelled
  • 2
    @mojo2012 HOLY FUCK! That's a lot of money...
    Interesting system! 🙈🔫

    I heard of IT projects (non-SAP), financed by the swiss government, that cost millions and they had to abort them too. And even in my canton they had to stop some school software project of CHF 10 million (local govt. financed...) half way in, because the IT company made false promises and was utterly incompetent.
  • 2
    Just starting with Hybris, can't wait to run into the nightmares you describe... :( sad times...
  • 1
    @PonySlaystation "They allegedly were left from older versions and may be deprecated but nobody dares to remove them."
    That is true. The amount of times I was looking for a field, found one that stored exactly what I wanted but then saw "oh but it's deprecated" after is insane.

    Also, something I will never understand with SAP is why do they repeat information in their tables? The first thing my teacher told us when we were learning SQL was to never repeat data, and then I start working with SAP and it's like "here's a million tables with the exact same information". There's so many things wrong with it, I don't even know where to start.
  • 1
    I usually save/cache sata from SAP to my own storage somewhere and query that. I update the cache every 4-24h instead of dealing with direct calls. SAP is a Slow hot mess and just plain useless nowadays
  • 2
    I’ll be back to read this in a bit lol
  • 2
    Imagine said customer wanting us to implement real-time pricing with direct calls to SAP. A simple add-to-cart in hybris triggers up to 5 cart calculations ....

    Make ur conclusions ...
Add Comment