Do you know what really grinds my gears, from personal experience? The constantly changing technologies in mobile platform development.
So you want to develop for a mobile platform (like iOS). Thus you learn the best tools and APIs for the job, you get experience on them, and along the line, when implementing projects, you develop a series of well-crafted tightly designed helper libraries that make common tasks so much easier and faster. You become so good at it that you can implement a small project in a week.
And then, a year or two later, you have to throw almost all of it to the trashcan. Those APIs and libraries will have become obsolete and antiquated, and not the best way of implementing those projects. Better services are provided, better APIs, better libraries, requirements change and expand, which can't be met with that old API...
And thus 90% of those nifty helper libraries you made become useless, and you have to learn a completely new, different development environment, and write different utility libraries for it to make your job easier.
And then a year or two later, they too become obsolete and useless, as new projects once again switch to a completely different, "better" development platform, or a "better" service that replaces the old one. Once again, all those thousands and thousands of lines of code go completely to waste. They are useless because they use the old APIs and the old environment. Rinse and repeat.
Even if you are using the same API (like a graphics library) for years, newer versions of it may become so different and so backwards-incompatible, that it's effectively an entirely new library that obsoletes most of your existing helper classes.
You could implement a small project in a week with one of those old environments that you were so acquainted with, and wrote so much reusable code for... but no dice. Sucks being you. That environment is obsolete and antiquated, and doesn't meet the newest requirements for new projects, sorry.
It's quite annoying when this happens over and over and over. You wouldn't believe how much code I have written, code that I consider very cleanly and well designed, that's easy to use, efficient, and very reusable, and which I can be proud of as a programmer, that is now completely useless and obsolete, and thus is a complete waste, because it is a convenience wrapper around an old library, service or technology that has become obsolete or unsuitable.