Describir: A framework for analysis, implementation and re-use in knowledge-based engineering applications