I'm learning more and more that a user's expectations going into an app are key. When I started playing a game like Dark Souls, I had the full expectation that I was not going to be able to overcome every enemy that they throw at me. When I experience a Failure state, then I will blame my own lack of skill instead of blaming the game for being too challenging. Difficulty Matching happens through prompting the player to increase their skill to the level of challenge provided by the game.
Similarly, when I started using Roam, I would often come across challenges and rather than getting frustrated with software's limitations, I recognized that there was a way to accomplish my goal that I just needed to figure out.
At this point, I've been using Roam for quite some time. I understand its mechanics at a deep level, so when I come across a new challenge, I can usually see how I can combine its functionality into how I achieve the goal. At this point, the onus is on me to simply figure out the solution. Roam is a remarkably flexible application, so most of the time I'm happy with this.
However, the issues come when I'm not able to see a good solution to my problem. The solution either doesn't exist or requires far more effort than should reasonably be expected of the user. Rather than blaming my own lack of skill for not being able to implement a good solution, I'm blaming Roam's functionality and UX.
User goals change over time as User skill level increases over time. Their new skills allow them to recognize new situations where they could use the application or conceptualize new use cases altogether. Apps with continued user involvement respond to changing user goals over time. Eventually, a user's skill level will reach the limitations of the software's capabilities. Once their personal expectation that increasing their skill level will solve their problem ceases to be true, the user's continued User Involvement becomes vulnerable to competition. This happens sooner with some products than others; apps craft their own possibility space.
So this is really about goal achievement - when the user is unable to accomplish their goal in a satisfactory way using the product, whose fault is it? Is it the product's lack of functionality and ease, or is it the user's lack of skill?