For any developer who’s spent hours hunting for a bug in a tangle of spaghetti code, glib pronouncements that “programming isn’t hard” are particularly tiresome.

Programming may be rewarding, but as veteran devs will tell you, it can also be terrible.

The reality of software development is that it can be a fulfilling but also difficult role, where compromise is frequently necessary to meet deadlines.

While the daily grind of an iOS dev may be vastly different to that of an embedded software engineer, there are common sources of pain that cut across all fields of software development.

SEE: How to become a developer: A cheat sheet (TechRepublic)

A group of European researchers polled about 180 GitHub developers, asking them what their greatest “causes of unhappiness” were and how that dissatisfaction affected their work.

Here are the most common frustrations reported by these devs.

1. Poor code quality and bad coding practices

Perhaps unsurprisingly, one of the greatest annoyances for devs is shoddy code, whether written by themselves at an earlier date or inherited from a colleague. The pain of fixing issues is compounded by poor and unclear comments, with those polled expressing particular frustration at having to work with “unexplained broken code”, as well as having to tidy up earlier work by refactoring the codebase.

2. Hunting for bugs

A related problem is pinpointing the source of unexpected and undesirable behavior in a codebase. When it comes to bugs, the most egregious for the devs surveyed are those that can’t be easily located, followed by perennial issues that won’t go away, those which are particularly unexpected and, as you’d expect, those which take a lot of time and effort to fix.

3. Disappointing technical infrastructure

Unwieldy and unhelpful technical infrastructure is another major pain point, particularly where it constrains what the developer can do, is broken or outdated, not well-documented or judged generally to be “inadequate”. Code comments that are either too general or too specific were also criticized by those polled.

4. Unclear and fanciful requirements

As with any professional, developers dislike uncertainty about what they should be doing. Those questioned cited “vague” and “unrealistic” project requirements as a source of stress, particularly where those requirements are changing right up to the last minute.

5. Maintaining past code

For a developer, having to understand, maintain and build upon code that they haven’t worked on for months or years can be tough. That challenge becomes even more acute when the code was written by people who’ve long since departed the company or it has been haphazardly cobbled together over a long period of time.

More on software development…