Starting from a Terminology one can begin to define Classes and Class Hierarchies. In-between the Terminology and the Classes there might be a Step Involved where one tries to make Definitions of the Terms that one has defined in the previous step but in an informal way, which means one gives Definitions in Natural Language before defining Classes. Classes are Concepts of the designated Domain.
In top-down one starts with the most general Concept at the top and one tries subsequently to specialize these Classes, i.e. to divide more general Concepts into more specific Subconcepts. So for example one might start with an
owl:Thing, a very general thing and one has concrete Objects and abstract Objects. Somewhere under the concrete Object there are the Individuals. So in top-down one starts at the top and goes down to the bottom. The problem here is that maybe one does not need this top level Concepts in the Ontology which is determined by the Application of the Ontology, whether one need it or not. So Modeling top-down or strictly top-down might be difficult and on the other hand one might define things that are not really needed within the Ontology, then Redesigning is difficult.
The other way around would be bottom-up, so one starts with the most specific Concepts and then subsequently one groups these specific Concepts into more general Concepts. There the difficulty lies into grouping the right Concepts into a Class, therefore one has to distinguish or define similarities among these more special Concepts/Classes. In the same way like the top-down approach the bottom-up approach might not be the rigth way, because there one starts with really specific Things and then one has to define the more or less well-suited general thing that fit for that and then maybe in the end within the Application one does not need the most specific things that one defines here with the Domain. This might also be difficult and then Redesign when one has already started large Ontologies is always complex.
Best of these three possible Approaches is the
middle-out Approach where one starts with the most important Concepts. Most important of course is those are related to the Application. There one looks at the Application and it determines which are the most important Concepts that one has to consider and from these Concepts one starts to specializing into more specific Concepts and on the other hand one tries also according to the needs of the Application one tries to generalize these Concepts and to group the most important Concepts together and find some Superclasses that are required or needed by the Application.
start with most general Concept with subsequent specialization
start with most important Concepts with subsquent Specialization and Generalization