For me, I have 2 main problems I encounter over and over:
- not leveraging the framework currently in use, instead a lot of hacks are put together (usually involving global state etc...)
- writing functions of hundred or even thousand lines (not even kidding). Lack of separation of concerns is the biggest gripe I have.
- also, third one for the road (yes, I said 2 but I am on a roll): bad naming of things (functions, variables, everything...)