Building ontologies for the semantic web is from a technological point of view (meaning to put all available data into one ontology) nothing great. But there are a few critical challenges to build a really good, useful ontology. I could gather some experiences in a small project at my university, where we (the students) have tried to build an ontology from scratch by ourselves to gain some insights for the problems and challenges on the business side. The conclusion is, that there are mainly two, interlinked "obstacles" on the way to a successful ontology.
Define a domain
As already mentioned in the abstract, an ontology has to be concrete enough to provide some value for the user, which means essentially that it allows the users to gain on the one side a rough overview of a topic but on the other side to dig deeper into special aspects of a domain.
This then is clearly an optimisation problem, where the designer of an ontology has to decide for his individual case how wide and deep the domain should be outlined. Thanks God, has been thought about this problem when the OWL-Standard has been created. A designer can link to already existing ontologies (which can be found for example with Swoogle).
I would like to illustrate this with a simple example: Think about the domain of "Travel / Travelling". There are a lot of things involved in this domain. When somebody plans a journey, he or she first searches a destination. To get to the desired destination this person needs transportation. Transportation can happen by train, plane, car, bus and so on... Then you need an accomodation, want to make some sightseeing and go out to a restaurant for dinner and many other things more.
This rather incomplete example shows how many concepts can be found in one domain. And all this concepts, if they already exist as ontology, can be used from your own ontology. That is great, isn't it?
The second good news is, that the most information about a domain, is already available on the internet. Some may talk there about the Deep Web and thus discriminate between the "Surface Web" and the underlying databases / data storages. But to put this short: what can be found on the internet can be crawled (Google is maybe the best example for this). So there is already a possibility to gather the data in an automated way. Which saves time and thus costs.
But what you never should forget during your project, is the focus of your domain. How wide should it be and how deep should it go? To answer this question correctly you should always think about your future customer/user of the ontology. And you can maybe test this by yourself.