Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
Get a devDuck
Rubber duck debugging has never been so cute! Get your favorite coding language devDuckBuy Now
Search - "buggy documentation"
Finally did it. Quit my job.
The full story:
Just came back from vacation to find out that pretty much all the work I put at place has been either destroyed by "temporary fixes" or wiped clean in favour of buggy older versions. The reason, and this is a direct quote "Ari left the code riddled with bugs prior to leaving".
Oh no. Oh no I did not you fucker.
My boss wrote a piece of major software with another coder (over the course of month and a balf). This software was very fragile as its intention was to demo specific features we want to adopt for a version 2 of it.
I was then handed over this software (which was vanilajs with angular) and was told to "clean it up" introduce a typing system, introduce a build system, add webpack for better module and dependency management, learn cordova (because its essential and I had no idea of how it works). As well as fix the billion of issues with data storage in the software. Add a webgui and setup multiple databses for data exports from the app. Ensure that transmission of the data is clean and valid.
What else. This software had ZERO documentation. And I had to sit my boss for a solid 3hrs plus some occasional questions as I was developing to get a clear idea of whats going on.
Took a bit over 3 weeks. But I had the damn thing ported over. Cleaned up. And partially documented.
During this period, I was suppose to work with another 2 other coders "my team". But they were always pulled into other things by my Boss.
During this period, I kept asking for code reviews (as I was handling a very large code base on my own).
During this period, I was asking for help from my boss to make sure that the visual aspect of the software meets the requirements (there are LOTS of windows, screens, panels etc, which I just could not possibly get to checking on my own).
At the end of this period. I went on vacation (booked by my brothers for my bday <3 ).
I come back. My work is null. The Boss only looked at it on the friday night leading up to my return. And decided to go back to v1 and fix whatever he didnt like there.
So this guy calls me. Calls me on a friggin SUNDAY. I like just got off the plane. Was heading to dinner with my family.
He and another coder have basically nuked my work. And in an extremely hacky way tied some things together to sort of work. Moreever, the webguis that I setup for the database viewing. They were EDITED ON THE PRODUCTION SERVER without git tracking!!
So monday. I get bombarded with over 20 emails. Claiming that I left things in an usuable state with no documentation. As well as I get yelled at by my boss for introducing "unnecessary complicated shit".
For fuck sakes. I was the one to bring the word documentation into the vocabulary of this company. There are literally ZERO documentated projects here. While all of mine are at least partially documented (due to lack of time).
For fuck sakes, during my time here I have been basically begging to pull the coder who made the admin views for our software and clean up some of the views so that no one will ever have to touch any database directly.
To say this story is the only reason I am done is so not true.
I dedicated over a year to this company. During this time I saw aspects of this behaviour attacking other coders as well as me. But never to this level.
I am so friggin happy that I quit. Never gonna look back.14
Worst legacy code experience?
Well grab your spelunking gear and follow me down this rabbit hole!
It started early this year when our biggest customer asked us to send ETAs for deliveries. Simple enough, how bad could it be? Just need to add an ETA form for the drivers in their mobile app. And yes, that part was easy, but then we had to go from our mobile app to our internal system.
Welcome to the IBM AS/400! Where time has stood still for two decades and the mainframe is alive and well.
The shitshow started in March and, spoiler alert, it's still not working.
We begin by dumping the mobile app data in to a table that an RPG program watches. I'm not sure if it's a limitation of RPG or a limitation on the brains of our RPG developers, but timestamps do not exist here. There are only varchars. There are also a multitude of formats for these timestamps, because that makes life more interesting. This program breaks frequently.
If by some miracle the RPG program processes the data, then the ETA goes to a table that's completely separate from the entity it belongs on. If the data is needed, it is JOINed. The old ETA field is now permanently blank.
Why, you ask? Because RPG programs need to be recompiled every time the underlying database changes, and half our system hasn't been compiled in like 10 years. God only knows if we *can* recompile at this point. We extensively use Synon/2E, which compiles to RPG, which can (and has) been hand-modified to fix bugs instead of fixing them in the "higher" language. So now if we try to recompile, we might be losing those fixes *forever*.
Naturally, there is NO referential integrity between this tables. There's orphan rows all through the system. There's also one-to-many relationships in tables meant for one-to-one. Also there's no unique keys. You have to combine multiple fields to get a (potentially) unique key.
Now, there's a series Synon programs that run every 5 minutes to check if any data needs to be sent out. These Synon/2E programs do *full table scans* of the database and check for changes. And, of course, they're buggy as shit.
But you can't debug it there, oh no no no, the output gets pumped straight to...
Wait for it..
A fucking COBOL program.
This COBOL program takes the data from the Synon/2E programs and puts it in a horrible format called X12. X12 looks something like this:
This shit is why JSON was invented. Yes, that's what an ETA for 2017-06-10 14:00:00 looks like. The timezone is "Local Time", whatever the fuck that's supposed to mean.
So this COBOL program has logs, which should make life easy, right?
Using the 'search and audit' function in the program dumps 90 char lines of text on the screen with no line breaks. Worse, the terminal can only show 87 of those lines, so you have to push Shift+F8 to move to the right by three characters. There's no way to search for the actual ETA events using the program, and while you can filter by reference number all this garbage is sent in 5 minute batches, so you'll get a dump of irrelevant data along with the thing you're looking for. Also there's no such thing is grep in this environment, or anything even close to it.
I have hundreds of these bad data transfers to debug, so there's no way in hell I'm doing this manually.
I never did figure out exactly where the raw data is kept, but apparently it's tucked away in one of a thousand tables associated in something called "multiple member files". It seems IBM tried the "schemaless" thing long before MongoDB thought it'd be hip, and like so many MongoDB projects this too ended up a shitshow. Multiple member files are now deprecated I believe, and IBM documentation + resources are sparse anyway so that's pretty much a non-starter.
But I did figure out that the "Print" function of this program can be called directly with a batch number... So here's what I do:
Get the dates of the oldest and newest bad ETAs I'm looking at. Find those two manually and note that batch numbers. Call the "Print" function with these batch numbers (provided the difference is less than 32,767 because yay 16-bit programs). Take the print file and convert it to a "PC-Style ACII" stream and put it on the emulated file system and ancient SMB server. Copy that file and parse that garbage to find the relevant events, and finally dump it to a CSV for quick and easy viewing.
That last paragraph took me a couple weeks to figure out. Fuck IBM.
Now, finally, after fixing all the bugs I found on our side, we've finally come to the conclusion that the data we're sending is good. But! The customer is still having trouble parsing it...
You see, they're having some problems with their IBM AS/400. There's a lot of old code that's supposed to parse the data we're sending, and they're just not quite sure why it isn't working.17
I found a lot of comments in the productive code. A few 'do not touch!!!!', one 'not sure if correct' and another 'is this intended?'...
The system was buggy,
I was the only one who could work with and on it.
No documentation, an outdated diagram and no support from other sources. Since it was an inhouse product I couldn't find any help on google.
The programming language inside the application was a mix of different syntaxes and it was easy to see that many people set it up without talking with each other. There where many functions with the nearly the same name, doing either the same thing or completly different stuff.
I was/am still a junior developer so it was hell to deal with it. Not only had I limited time to work on it, but I was the only one who could help customers so I was on the phone everyday trying to help her through her own messy data.
To help myself, I started writing a documentation about my daily tasks and how to deal with different errors.3
So lets start here, as i have been preparing myself for a while for that rant. I have been putting it off for a while, but today I had enough.
Fuck react-native and fuck facebook react-native team. Bunch of lazy incompetent twats.
The all amazing framework that suppose to be speed up your development process, since you don't have to compile your code after each change. SO FUCKING WHAT if the god damned framework is so fucking buggy and so fucking shit that you constantly have to fix build, dependancies etc issues. Every day since I work on this project that is using react-native I have to deal with some of the react fucked up behaviour. You got an issue ? don't worry google it just to find out that 100 other people had the same issue. Scroll through down the bottom of the page just to find out that facebook devs have closed the issue as resolved (without fucking fixing it) because there wasnt recent replies to the post. Are you fucking kidding me? It's ok thou, create a new issue just to get an automatic reply from the bot that locks the thread and keeps it locked till you update your React-native version to the newest one. You do that and guess fucking what? Their newest version fucks up remote debugging on iOS(fucking android been broke for over a year) so say good bye to debugging your js code. Documentation is fucking trash. You found a nice function like autoCaptialise on your text input? Great! Ah wait, its not fucking working, what is wrong? You google this just to fucking found out it, function never worked on android, so why the fuck you still have it exposed and still have it in your docs? You want to add package? So fucking ez, just type npm install <name of the package>. Ha! fuck you, you still have to go and add them fucking manually in gradle in android and in pod in xcode, because obviously react-native is a one big fucking bullshit. Oh and a scroll view is a fucking glorious highlight of that framework, try add some styling to it, you gonna have loads of fun. Fuck react-native. And fuck the fucking idiot who convinced my boss that framework is so fucking great and now I have to work on this shit. Sincerely Xamarin Developer.10
I actually do have something to rant about!
The people I've decided to work with... are complete and utter fools. They don't want to keep updated with new practices and merely talk about awesome stuff... Let me elaborate.
The first person is someone I spent really many hours just writing with, I've helped him build on his personal project, which has now become our project (which I've done most of the work on now). He keeps writing about things that aren't fucking relevant for the current task - furthermore, he completely refuses to use any type of collaboration software in order to keep an eye on tasks we want to, and already have completed. He likes Git but doesn't provide helpful git messages, sometimes even stuff like 'forgot this'.. never any freaking description of what's actually been done! Not even after agreeing it should be done, he just doesn't understand what a helpful message is apparently.
I might be a bit special regarding wanting to follow practices, but how the fuck do you make any amount of money by being so ignorant!? He was a WP 'developer' a while ago, and has since changed to JS and are using a framework which he doesn't understand - he can't even remember what the documentation states.
So why do I 'work' with him? He knows a lot of phrases he's read in books, blogs, and the likes. That makes him really inspirational and positive and he really wants to become successful(like me!). But over the last few months, I've realized how bad he is at programming - he doesn't know basic programming concepts and have a hard time applying any sort of knowledge to his programming. If it's not pre-built, he can't use it, not even if the documentation has specific examples. He barely grasps the concept of binding data to a variable. He wouldn't know how to access it again though, it's just for the sake of binding it to some existing functionality.
The other guy really likes his old style. He hired me to maintain some application. Which has turned out to be a hell of several small tasks he needs to be finished or reworked - with no clear definition of the task. Most of the time, he'll do some initial changes, show the changes to me, vaguely explain what they do (not what he's trying to achieve) and first THEN ask me to do these changes, most often in some files that don't exist (he uses the wrong filenames so I have to guess/ask where the changes need to be made).
To top it all off, old syntax is used and don't get me started on the spaces+tabs for indenting lines... Because I've already added a great ESLint+Prettier conf and everything should be nicely formatted according to pre-defined rules.
But he won't take the time to install some plugins in his editor and I'm left with sometimes buggy, badly formatted code (the code I have to make changes with!) - that's while he several times have agreed that I can do what I want and that he even questions his own ways when looking at my changes which he calls by-the-book.
So why the motherfucking fuck do I keep working with him?
Well, he keeps paying so that's really nice - I haven't been able to properly execute the bigger tasks(which pays more) though, due to a lack of information or some badly written code I couldn't quite figure out how works (at a glance).
He also keeps talking about these new projects he wants to make.. he even has these freaking papers with descriptions and data-structures and we converse really good about these new awesome projects. He also likes cryptocurrencies(which is an interest of mine he has inflamed quite a bit) and lastly, he seems like a genuinely nice guy who I'd like to spend some time with even besides coding and work.
So now I stand here - stuck with people that make me feel like a demi-god or something because I use a git style-guide and ESLint+Prettier with the Airbnb style-guide.
What should I do? I'd really like some remote work and have a desperate need for money... So much so, that I might even have to pick up a fulltime job, in order to save my sorry ass - all because I like speaking with people who just like the thought of programming...
I'm actually quite lonely with my thoughts and they are the two only people I've had some sort of relationship with - who has an invested interest in programming/dev... I really like that, despite having to follow their thoughts as they surely can't follow mine.
Please be my friend or give me some paid work lol.
Also, I've been moving the last couple weeks - those weeks has been the most stressful of my life and have not contributed to my overall wellbeing and relations with people... It's good to be back at the computer again and be reading some devRant though!1
The worst technology i had to deal with was probably a piece of hardware. It was a mini-pc combined with sensors and digital IOs and thus, it should have been able to do process control all by itself.
At that time, there was hardware that did that, but this one had an intel cpu, windows embedded and some powerful libraries pre-installed.
Sounds good, didn't work. The thing was so unstable and buggy and crashed on everything. The sensor part had lots of parameters and the right order was trial and error, documentation didn't match behavior, fixes promised but never delivered.
Lucky for us: it was just a demokit, no real project.
I still remember it with a smile. We got in contact to that company at a trade fair and they had most impressive booth. I also remember their companies image movie from their homepage with developers in dark labs with holographic monitors and the boss in his shiny bright office as he looked out of the window and quoted a famous german author.
Hilarious and sad. :-)2
Whoo, 4 days into my new project, and a lot of mess already happening all over the place, in short, everyone in here consisted of the human population that fill up the average (and below) margin on everything (especially their IQ, seriously, by the time I finished telling this story, you'll wonder how the hell are these guys able to finish uni, not to mention working in IT)
Okay so, backstory, I was cut off from my previous project (the product was finally launched, but only a handful developers are kept to maintain & do enhancements, why wasn't I included? That's a story for another time), and I was sent to a new (shitty) project, by the order of the (shitty) manager, in the same institute, but different division, whom tries to copy paste everything the golden child (my previous project) has been doing, technology, environment, work culture, etc
And I'm faced with another react native application (let's call it project N), in which the team leader was so proudly explained to me, that it got released way earlier than my previous project (let's refer to it project X) even though X started a long time before they have any plan for N, N was passed down from a vendor to the internal devs whom has very little knowledge of react native, and I was supposed to "help" them with it
Day one, I learned a new english term for this, sinecure, nothing done on the first day, just introductions, a long boring meeting and got assigned to the project N, I did skim through the source code for a while, at a glance it looks like a student's assignment done overnight, reminds me of the first website I made, and this is supposed to be an app that handles monetary transactions,
Day 2, still no task given, due to their "end of sprint" session, 4 days of not having anything to work on, I analyzed the code further, and yep, it's rubbish,
- first, the code convention is shit, based on the git log, only 2 guys were working on this and neither of them had any standards with their coding, spaces, semicolons, indentations, everything is a mess, folder & file names and their placement too, not to mention redundancy everywhere, nothing is reusable, this is the first time I saw a react application that keeps defining & creating new components on every pages, and no documentation at all
- second is, the warnings, I was in awe with the disappearance of yellow warnings in the app since I found a bunch of yellow box errors on the debugger console, then I checked the main app.js file and lo and behold
console.disableYellowBox = true
Whoooo, a new breakthrough in software debugging, you won't find any potential bugs if you hide the warnings altogether, fuck, not even any config to diferentiate debugging & release environments (my last project had one)
Well worse is that ALL of the components doesn't have any proptype checking (prop is something like an attribute that is inherited from parent component to child component, CMIIW), and this cause for some issues that already happened a bit later,
- third, but not last, the software is buggy as hell, not to mention the flow & logic is messy as fuck, who the hell put a splash screen as it's own navigation entity,
After opening the app, splash screen is showing, then redirect to login page, and if user pressed back button while on login page, they'll be stuck on the splash screen, unable to navigate anywhere
Then, later that evening, one of the PO suddenly came to me and said something about telling him if I had any issues/concerns, given the opportunity, I immediately pointed out the problems, only to add up to my dissapointment, the conversation went like this,
Me: I do have concerns, 3 of them at the moment (explained like above but with more polite words)
PO: really? Well, us from the product team doesn't really care for cleanliness as long as it works
Me: bla blah (explaining about current & potential bugs and maintainability)
PO: like I said it's not urgent, we have more important goals to achieve
Me: blah blah (up to you, but I insist that at least consider this matter)
PO: A foreigner made this you know?
*how the fuck is that information even relevant? Fucking victim mentality
Me: So? It's still rubbish (continue explaining the current bugs)
PO: do you know how much this project has cost?
*cool, now you want to justify this farce by overpricing it?
PO: this much (after googling, it's around 3 years worth of average salary for senior dev in US)
*well my previous project cost almost twenty times that
PO: bla blah (saying something like, And don't go introducing changes and new stuff too much, since you're the new guy, unless you want to be seen as a show off, you gotta mingle with the devs first and once you got in a friendlier term, then you can give your opinion)
I just nods and didn't continue the convo after that, but suddenly the PO reaffirms
PO: OKAY? (in a tone like "capische?")
Okay, I'll consider that as a warning,
To be continued...
I HATE VPN SETUP
- Trying OpenSwan
Installing open swan on a Debian machine.. setting up the config.
Restarting openswan. Syntax error. No syntax error to be found.
Different tutorial.. it starts! Try to connect.. I can’t connect. Look at the logs. No errors.
Tcpdump. My traffic is coming through.. all fine.. try to connect again.. it works! (Nothing changed!)
Try to ping somewhere else.. no connectivity.
Try to ping an IP in the same network.. works fine. So I have connectivity, just no internet.
Spend an hour finding out about traffic directions of which no one seems to know what they really mean.
Boss tells me to stop using openswan because it’s deprecated and replaced by strong swan..
Reinstall Debian machine, install strongswan. Copy openswan config. Oh, they’re incompatible? Look up strong swan config, and the service starts.
Connect to the VPN.. it works! Again, no internet, just connectivity in the same network. Spend 2h debugging the config, disable firewalls everywhere, find an ancient bug in the Debian package related to my issues.. ok, let’s try compiling from source.. you know what, let’s not. I’ll throw this Debian machine away and try something completely different.
Ok, this looks easy enough! Let’s just click through the initial setup, change some firewall rules, create an L2TP VPN with a simple wizard.
Try to connect to VPN. First, it times out. Maybe a firewall issue? Turn off firewall.. ah, something happens now. I get an error message right after trying to connect to the VPN. Hmm, the port doesn’t even get opened when I enable the firewall.. this implementation seems a bit buggy.. let’s try their OpenVPN module.
Configure OpenVPN. Documentation isn’t that clear.. apparently a client isn’t actually a client but a user is a client.. ok, there’s a hidden checkbox somewhere.
Now where do I download my certificate? Oh, I need a plug-in for that.. ok, interesting. Able to download the certificate, import it, connect and.. YES!!! I can ping! But, I have no DNS..
Apparently, ICMP isn’t getting filtered but all outbound ports are.. yet the firewall is completely disabled. Maybe I need outbound NAT? Oh. There’s no clear documentation on where to configure it. Find some ancient doc, set it up, still no outbound connectivity.
Then I tried VyOS. I had a great L2TP VPN working in less than 15 mins. Thank you VyOS for actually providing proper docs and proper software.2
My answer to their survey -->
What, if anything, do you most _dislike_ about Firebase In-App Messaging?
Come on, have you sit a normal dev, completely new to this push notification thing and ask him to make run a simple app like the flutter firebase_messaging plugin example? For sure you did not oh dear brain dead moron that found his college degree in a Linux magazine 'Ruby special edition'.
Every-f**kin thing about that Firebase is loose end. I read all Medium articles, your utterly soporific documentation that never ends, I am actually running the flutter plugin example firebase_messaging. Nothing works or is referenced correctly: nothing. You really go blind eyes in life... you guys; right? Oh, there is a flimsy workaround in the 100th post under the Github issue number 10 thousand... lets close the crash report. If I did not change 50 meaningless lines in gradle-what-not files to make your brick-of-puke to work, I did not changed a single one.
I dream of you, looking at all those nonsense config files, with cross side eyes and some small but constant sweat, sweat that stinks piss btw, leaving your eyes because you see the end, the absolute total fuckup coming. The day where all that thick stinky shit will become beyond salvation; blurred by infinite uncontrolled and skewed complexity; your creation, your pathetic brain exposed for us all.
For sure I am not the first one to complain... your whole thing, from the first to last quark that constitute it, is irrelevant; a never ending pile of non sense. Someone with all the world contained sabotage determination would not have done lower. Thank you for making me loose hours down deep your shit show. So appreciated.
The setup is: servers, your crap-as-a-service and some mobile devices. For Christ sake, sending 100 bytes as a little [ beep beep + 'hello kitty' ] is not fucking rocket science. Yet you fuckin push it to be a grinding task ... for eternity!!!
You know what, you should invent and require another, new, useless key-value called 'Registration API Key Plugin ID Service' that we have to generate and sync on two machines, everyday, using something obscure shit like a 'Gradle terminal'. Maybe also you could deprecate another key, rename another one to make things worst and I propose to choose a new hash function that we have to compile ourselves. A good candidate would be a C buggy source code from some random Github hacker... who has injected some platform dependent SIMD code (he works on PowerPC and have not test on x64); you know, the guy you admire because he is so much more lowlife that you and has all the Pokemon on his desk. Well that guy just finished a really really rapid hash function... over GPU in a server less fashion... we have an API for it. Every new user will gain 3ms for every new key. WOW, Imagine the gain over millions of users!!! Push that in the official pipe fucktard!.. What are you waiting for? Wait, no, change the whole service name and infrastructure. Move everything to CLSG (cloud lambda service ... by Google); that is it, brilliant!
And Oh, yeah, to secure the whole void, bury the doc for the new hash under 3000 words, lost between v2, v1 and some other deprecated doc that also have 3000 and are still first result on Google. Finally I think about it, let go the doc, fuck it... a tutorial, for 'weak ass' right.
One last thing, rewrite all your tech in the latest new in house language, split everything in 'femto services' => ( one assembly operation by OS process ) and finally cramp all those in containers... Agile, for sure it has to be Agile. Users will really appreciate the improvements of your mandatory service.
Learning a piece of software from an external supplier. The manual is thick like the bible. The examples fail without explanation. Trying to contact support just leads you down an endless trail of support articles. Damn right I get frustrated and bored. Can you blaim me for rather hanging around on devRant than desperately trying to work around problems in someone else's system/documentation? Yeah, I have to pull my shit together, but they have to pull theirs first.