O seu próprio texto está bem contraditório, o que pode ser o fator deste seu "problema" em desistir, no ponto abaixo você comenta que possui grandes conhecimentos e que tem pouca ou nenhuma dificuldade:

Hoje em dia eu possuo conhecimentos em diversas linguagens e áreas da tecnologia diferentes, e eu sei que tenho capacidade de fazer coisas incríveis com pouca ou nenhuma dificuldade.

Só que mais a frente comenta que quando encontra um desafio mesmo que mínimo desiste do projeto:

... eu me deparo com algum desafio, mesmo que mínimo, que faz com que eu desista imediatamente daquilo.

"Talvez" seu pensamento sobre suas capacidades e habilidades estejam de alguma forma te auto-sabotando. As vezes o que você pode achar que seja um desafio mínimo, possa ser na verdade algo complexo e bem desafiador, dependendo dos seus conhecimentos!

Eu nunca havia pensado por esse lado, mas agora eu acredito que você tenha razão.

Acho que eu faço muita autopromoção quando na realidade eu ainda estou aprendendo.

O que eu te "recomendaria" é que continue a tentar resolver o problema, se for extenso, quebre por partes menores, cada parte por vez, mas constante. Encontrar e resolver problemas é o que todo desenvolvedor faz no seu dia a dia, e é isso que o torna em um desenvolvedor melhor hoje do que foi ontem.
Entendo, obrigado pelo conselho. Quando eu voltar das férias vou colocar tudo que aprendi aqui na massa.