What does a software engineer do?