Formal specification techniques help discover problems in system requirements early in the development process. Algebraic techniques specify interfaces as abstract data types defined by their operations. Model-based techniques specify system behavior by modeling state and defining operations as state transitions. Both help reduce errors but require more upfront effort than informal specification. Formal specification is best for critical systems where failure costs are high.