| name | conceptual-pca |
| description | Use when the vocabulary of a codebase is getting too muddy, too difficult to teach, or too difficult to update and is in need of refactoring. |
Building a software project is akin to building a vocabulary. Each abstraction, be it a type or an interface, is a concept in that vocabulary. Sometimes, we get ahead of ourselves and make too many concepts that are partially overlapping, overly coupled, or exist at the wrong level of abstraction.
We can solve this by analogy to Principal Component Analysis, where data is projected across its major orthogonal axes of variation. There is an art to interpreting those orthogonal axes, but the point is to have found the axes at all and quantify how much variation in the data they explain.
Often, what we need is a "conceptual PCA" of our codebase vocabulary, where we boil down all the noise to those few, orthogonal axes that really count. Loading this skill is in effect assigning you this task.