software engineering cognitive friction