When it happened to me, it just meant that I was needing easier options to make simpler code without sacrificing any functionality at all.
It also meant that I was going nowhere in my attempts to writing a kernel. However I don't get discouraged, I have a whole life to do what I enjoy which is learn all kinds of real-life algorithms.
Just recently then I realized that I had gone too far away from my roots of knowledge and resources that allowed me to first learn programming. I remembered that I was much more productive using Windows 9x, DOS and all of the old hardware/software than using Windows XP.
So I went back installing Windows 98 in a machine and with a provisional hard disk with the first version of Windows 95.
It must be a matter of you not being able to advance. You might have more knowledge than before, but now it's time for you to learn some new things, or you won't be able to keep advancing.
I was in a situation in which I wasn't clearly able to understand how the hardware worked, so I started to figure out how to "talk" to the machine and so it showed me back the low level values. It is as if you need to know how a piece of hardware works and then you start asking the computer by programming it step by step. This is how I managed to make an almost perfect (almost as much as BIOS itself) ATA/ATAPI detector, it seemed something difficult and tedious at first, but with this method I managed to solve it step by step, had more fun I could have expected, and it led me to develop my LowEST project and then I'm currently trying to develop with reasonable success a compiler for a half C/half assembler language to make the most bulky and less valious parts of assembly an automatic process (things such as coding ifs, loops, switch, etc.).
I'm learning now and not blocking because I am doing things that adjust to what I'm currently make, and as recommended by some people on the Internet, I'm also at the edge of my capabilities to keep learning, advancing and at the same time discovering how to make working stuff.
-----------------------------------------------
What help do you need? Remember that programming is just like math, and the computer is like a logical calculator.
You cannot expect to solve a complex math formula from the more complex elements it is made of, but instead you need to start from the smaller ones. The very same applies to programming. When you have some small working code that is capable of being reused even in a "full rewrite", then things seem to start becoming clearer and falling in place for themselves.
The smaller components in my case were to make snippets of the simplest things, having them working and it keeps me learning and I know that each snippet that I manage to get working is an earning (things like turning on speaker, handling hard disks, CD-ROM, etc., from the command line).
One of the things that helped me was finding such way of experimenting with hardware and algorithms without actually having to write bunches and bunches of code over and over again, thus running out of time, energies and enthusiasm.
Now I can do many things (after reading the corresponding standards, datasheets, documents, etc.) without actually writing code but only when I exactly know how hardware will react. For instance, I can turn on the speaker like this (from DOS using LowEST modules):
Add value 3 to set bytes 0-1 to 11b in this port to turn on speaker:
I have seen that I can alter the frequency just after 2 writes of port 42h if I remember correctly:
Write values 42h and 5 (I think it means 542h) for the speaker divisor:
And can turn it off like this:
Set bits 0-1 of port 61h to 00b:
The same applies to ATA drives. I can control them manually and learn how they actually react so I am not supposing anything but I'm seeing how the computer "tells" me before my eyes how it is reacting to my commands. It is what I now do to avoid writing bunches of code and hours of debugging, and in this way my hardware code is much more accurate and when I write some, it is surprisingly compact and straightforward, even when it takes into account several workarounds for different devices.
As you can see, maybe what you need is to learn new things that are just above of your current ability (meaning that you can sort out those new things with what you know already, and combining them in a new way to master that new knowledge) and easier and more reliable ways to write long-lasting code.