---
# System prepended metadata

title: Software Engineering Concepts
tags: [Software Engineer]

---

---
tags: Software Engineer, 
---

# Software Engineering Concepts


Continuous Integration vs Continuous Deployment vs Continuous Delivery

Staging meaning in software development

Infrasturcture-as-a-service vs platform-as-a-service

database per service

mesaage queue.
immediately consistent, eventual consistent


SLA service level agreement
SLO Service Level Objectives 
SLI Service Level Indicator
https://www.atlassian.com/incident-management/kpis/sla-vs-slo-vs-sli

## writing code

SOLID principles

Single Responsibility



make class methods unit testable.

depend on, or use other components.
if it does, we need to mock the subcomponent's return value.


When current time is involved in the logic, we want the time to be given/determined in test cases. Or else we have different results whenenver the tests are executed.


Optional can have anti-patterns
https://www.baeldung.com/java-optional



Spring backend barebone concepts


authentication & authorization
make use of some header.


about POJOs
- make use of `lombok` to generate setters & getters.
- usually the API model will be different from the Domain model. So we want to have transformer classes to convert these models. We can use `mapstruct` to automatically generate transaformers.
- separate the domain model from the JPA entity classes, since the domain model can also have different format from the DB table.



for defining API endpoints



Tip: whenever there is code change, think about testing them. Don't forget.


when dealing with time, timezones in a global app, try to use Clock with in Instant.now(). that way the tests can stub in a fixed clock and not depend on the varying times