Achieving flexibility and efficiency in blackboard-based AI applications are often conflicting goals. Flexibility, the ability to easily change the blackboard representation and retrieval machinery, can be achieved by using a general purpose blackboard database implementation, at the cost of efficient performance for a particular application. Conversely, a customized blackboard database implementation, while efficient, leads to strong interdependencies between the application code (knowledge sources) and the blackboard database implementation. Both flexibility and efficiency can be achieved by maintaining a sufficient level of data abstraction between the application code and the blackboard implementation. The abstraction techniques we present are a crucial aspect of the generic blackboard development system GBB. Applied in concert, these techniques simultaneously provide flexibility, efficiency, and sufficient generality to make GBB an appropriate blackboard development tool for a wide range of applications.