software scaffolding types