What's the most frustrating thing about being a coder?
For me it is understanding exactly what existing code does and why it is there.
Literally, I am reading code saying "what were they thinking here?"
Because I need to know.
I can't begin writing my code until I understand how it fits into the existing systems.
Does my code need to co-operate with existing components? Does it require changes to existing code? If so what, and where?
Will existing tests need to change either what they test, or how they test?
Will my code break an assumption relied on by old code?
Will it change a schema or protocol depended on by existing code?
And all of this is made much, much harder by low quality source code. Unpicking that stuff is horrendously taxing.
Lots of effort to sometimes end up saying ‘I see. After all that, we fetch the latest list of adverts, only there is a bug where that will not happen if the last advert was placed on Thursday which is the cut-off print date and nobody actually has done that yet."
But that might be thousands of lines of unstructured code, all with horrendous names, no conventions at all, no tests, and of course a custom implementation of some lame sort routine where the coder did not think to just call .sort()
That kind of work regularly makes me consider doing other work.
When I had my kitchen refitted, the old one was just ripped out. I was envious of being able to "just build a kitchen". I thought how much simpler my life would be if I could do that.
Sadly it isn't, as you need to replace all the existing functions of a five year old crufty codebase.
And it doesn't take long for software to go past its sell-by date; about five years of active development in my experience.
Just long enough for the new team to not understand what the initial team were trying to do and the constraints they were under.
So - that. Crufty old code I must understand.