technical thinking