Designing for Functional Safety: A Developer's Introduction