The lifestyle of a developer includes constantly learn new technologies, adapting to new environments, and overcoming challenges when learning and practicing their craft. Unfortunately, failure to overcome obstacles in these situations can introduce a sense of mounting frustration in developers that can negatively impact learning outcomes and influence retention in a field. Aside from heated venting session on Reddit, Twitter, and other blogging sites there has been a lack of a concerted effort in cataloging and categorizing the frustrating experiences developers face. Understanding these frustrating experiences is the first step to alleviating them. To gain better grasp, we sent a survey to software developers asking them to describe their frustrating experiences. From the survey, 67% of respondents acknowledged that frustration is a severe problem for them. With the 45 responses we received, we were able to define a taxonomy of the causes.
P.I.L.E. of Trouble
These frustrations were grouped into 4 categories Perception- how the individual views the issue, Internal- sprouting from some internal conflict, Lack Of Experience- situations that require generally more familiarity which comes with time, and External- sprouting from something out of the individual’s control.
Under the hood of these categories the groups of frustration were defined as follows:
- (1) large goal spaces, high cognitive complexity: “Where do I begin? “
- (2) gulf of completion: “I’m almost done but there is a little thing in my way”
- (3) large artifacts: “There’s so much to understand”
- Fear of Failure: The obsession over the fear of not succeeding setting the individual back
- Internal Hurdles: Individuals placing pressure on themselves
- Simple Problem: Management and peers downplaying the intensity of tasks
Lack Of Experience
- Mapping Behavior to Cause: Difficulties identifying the connections between portions of code; having issues creating a mental model
- Programming Experience: Learning a new language warrants learning a new syntax
- New Project Adjustment: Getting acclimated to a new project
- Programming Tools : The learning curve of new tools includes learning new features and shortcuts; broken tools add to the burden
- Unavailability of Resources: Undocumented code creates confusion
- Peers: Sometimes it’s hard to resist the urge to help your neighbor, what about when your neighbor needs too much from you?
- Limited Time: Not enough time allotted to complete a task
In comparing the causes, we found instances where one causes contributed to another. We called these instances multipliers. Multipliers acknowledged what supplemental frustrations could have increased the frustration of the participant. However, every response does not have a multiplier. Multipliers were not mentioned in the single response of every participant but were conceived from further questions asked during the survey. This discovery opened the opportunity to explore this taxonomy further.
After this study we found that a deep understanding of frustration in software development is a field that has a lot of questions that remain unanswered. There are a couple questions that we plan on exploring in the future:
- How often do these causes show up?
- Are any of them more severe than others?
- Do these situations vary across genders?
- How do certain multipliers affect other causes?
The paper, Exploring Causes of Frustration for Software Developers, presenting these results (co-authored by Denae Ford and Chris Parnin) has been accepted for presentation at the 2015 ICSE Cooperative and Human Aspects of Software Engineering Workshop, in Florence, Italy, in May 2015. In addition, a buzzfeed post has been published with these findings.