3 Non-functional requirements
- Discussing non-functional requirements at the start of the interview
- Using techniques and technologies to fulfill non-functional requirements
- Optimizing for non-functional requirements
A system has functional and non-functional requirements. Functional requirements describe the inputs and outputs of the system. You can represent them as a rough API specification and endpoints.
Non-functional requirements refer to requirements other than the system inputs and outputs. Typical non-functional requirements include the following, to be discussed in detail later in this chapter.
3.1 Scalability
3.1.1 Stateless and stateful services
3.1.2 Basic load balancer concepts
3.2 Availability
3.3 Fault-tolerance
3.3.1 Replication and redundancy
3.3.2 Forward error correction and error correction code
3.3.3 Circuit breaker
3.3.4 Exponential backoff and retry
3.3.5 Caching responses of other services
3.3.6 Checkpointing
3.3.7 Dead letter queue
3.3.8 Logging and periodic auditing
3.3.9 Bulkhead
3.3.10 Fallback pattern
3.4 Performance/latency and throughput
3.5 Consistency
3.5.1 Full mesh
3.5.2 Coordination service
3.5.3 Distributed cache
3.5.4 Gossip protocol
3.5.5 Random Leader Selection
3.6 Accuracy
3.7 Complexity and maintainability
3.7.1 Continuous deployment (CD)