writing for software and systems