Categories are for browsing and titles are for searching, and most companies design the categories carefully and the titles carelessly, which is the wrong way round. Still, browsing matters for the reader who does not know what exists, and there is a small amount of genuinely useful structure to get right.
Name them after the reader's situation, not your org chart
Getting access, Talking to customers, When something breaks. Not Finance, Operations, People. A category named after a department is a category the reader has to translate into, and they will not, because they do not know which department owns the answer and that is why they are searching.
Fewer than you think, and no second level at first
Enough categories that each holds a handful of articles, few enough that the whole list is visible without scrolling. Sub-categories are a way of avoiding the decision about what the top level is, and a base that needs them usually has articles that should have been merged.
Add one when an existing one stops being scannable
The trigger is a reader having to read a list rather than glance at it, not a plan drawn at the start. Designing the full structure before the articles exist produces categories with one article in them and articles that fit nowhere, both of which are then permanent.
Questions people ask about knowledge base categories
Can an article be in two categories?
Allow it and use it rarely. An article that genuinely belongs in two is often two articles, and a base where everything is in three categories has lost the signal that a category was supposed to carry.
Do categories matter if search is good?
Yes, for the reader who does not know what exists. Search finds what you knew to look for; a category list tells a new starter what there is. The two serve different people and both are cheap.
What about tags as well?
Tags decay faster than categories because nothing forces consistency, and a tag used once is noise in a filter list forever. If you use them, own the vocabulary the way you would own an article.
How do we fix a structure that is already wrong?
Re-categorise in one pass rather than gradually, and redirect anything whose URL carried the old category. A half-migrated structure is worse than either version of it, because now neither the browsing nor the memory of where things were works.