Legacy tech: over a decade of technical debt piled up in horrible monoliths using framework versions the rest of the world has long forgotten about
Fake agile: teams follow scrum rituals but have no culture of continuous improvement, no time is provided to make the situation better
Developers have ceded control of planning work to the business, resulting in fixed work delivered to fixed deadline waterfall fun
Deeply hierarchical culture - developers have little influence or ownership, you are insulated by a layer or two from department heads you've never spoken to who impose decisions on you around architecture, features and delivery. You are a programming monkey.
Awful, painful build automation and environment setup
Fixed release cycle, no continuous delivery, pressure to rush work out the door every x weeks
Old-school developer/operations split: the two functions are entirely siloed, ops are overworked and unhappy trying to run their datacentre and devs throw work over the wall to them
Awful code quality, written in a deeply procedural style with no helpful abstractions to manage complexity. Old-timer staff who don't know any better who perpetuate this style and block change through code reviews.
Badly reinventing the wheel: there seems to be an ignorance of open source libraries and functionality already available in the frameworks in use, resulting in badly written in-house equivalents for common use cases
Quality, passionate staff get frustrated by their inability to improve the above and burn out.
The individual contributor with the most power/seniority is extremely argumentative
I have never seen so many contractors quit within a few weeks of starting