Meta-knowledge in systems design: panacea...or undelivered promise
design patterns : elements of reusable object - oriented software .