I generally dislike labeling systems. My interpretation of a label is too context-dependent and liable to shift over time. I.e. "architecture" could refer to either systems architecture or building architecture. And I frequently don't think that I'll have a conflict until some day I decide I want to learn about Napoleonic architecture for some reason. And then when I separate them, I'll end up forgetting what I called the label (was it systems-architecture? tech-architecture? application-architecture?) and I end up futzing around to figure out what the label was, breaking my flow of thought.
When creating tasks, the main question that is answered is "in which contexts would I like this note to show up?". The answer to this question is completely subjective. If, for instance, you were doing research for game level design, it makes sense for the systems architecture notes to be tagged with "game engine", "achievements", "quick save", or anything else that you will want to look up later on. The Napoleonic architecture notes could be tagged as "level design", "gameplay cues", or "side quests".
As you can see, these tags would be different for every person, and that's kind of the point. Two people can read the same content, and take the same note from it, but the intended purpose could still be completely different, and that would show up in the tags.
It can be way more simple: I use one folder for my notes, and another one for my "sources" (linear notes on articles, books, talks, etc). Files have unique filenames (guaranteed because a timestamp is added to the name when they are created). And there's no need for structure, because I open the files with Emacs using Projectile, so I can autocomplete the filenames. If I need to search the contents of the files, full text search is also accessible and quick. All note taking programs have these features, and you don't really need much more.