The problem is that for a lot of projects, it
does work - for certain values of 'work' which depend on the amount of wiggle room and YAGNI there is in the initial project. It usually results in a buggy, unmaintainable mess, but one that gets the job done fast enough to meet the deadline, and works just well enough, just long enough for the developer to cash their paycheck (or pass their course) and move on to their next disaster.
The result is that there are armies of semi-trained 'developers' who don't really know how to do anything other than glue together hot garbage.
Some of these
code-
flipping programmers then conclude that gluing together hot garbage is what programming is all about, and decide that they want to try their hand at this 'operating system' thingie people think is so impressive (never mind that they often don't actually know what an OS really is, or even get that they have been using one already).
To be fair, this is often just a phase which newbies are going through, and the better ones do wise up quickly. Too many never do, though. Even for those who do get past it, it often takes a while (and maybe a few whacks with a clue-by-four) before the lesson sinks in.
In some ways, it's part of the natural progression for any programmer when trying something new, and it usually only becomes a problem when they are either trying to reach too far too soon, or persist at it long after they should have gotten a better understanding of the techniques, or if they are trying to build their career on code-flipping without regard to the consequences.