Map of Content of all software engineering notes.
Definition:
> Software engineering is programming over time.
[^fn1]
> Programming is about writing code. You take a task and write code to solve it. Software engineering is when you take that piece of code and consider:
> - How will this task evolve?
> - How will this code adapt to those changes?
> - What does this code encourage others to do?
> - How does this code encourage other programmers to use it?
> - How will I understand this code in 5 months?
> - How will a busy team member jumping around grok this?
> - What happens when the business becomes bigger?
> - When will this code stop being good enough?
> - How does it scale?
> - How does it generalize?
> - What hidden dependencies are there?
[^fn1]: [What I learned from Software Engineering at Google](https://swizec.com/blog/what-i-learned-from-software-engineering-at-google/) by [[@Swizec Teller]]
## Software engineering areas
- [[Software testing MOC]]
- [[Software operations MOC]]
- [[Devops]]
- [[Data Engineering MOC]]
## Architectures
- [[Microservices MOC]]
- [[Serverless MOC]]
- [[Monolithic architecture]]
- [[Distributed systems]]
## Aspects of maintainable software design
- [[Modularity]]
- [[Cohesion]]
- [[Separation of concerns]]
- [[Abstraction]]
- [[Coupling]]
See: [[Managing software complexity]]
## Software engineering in teams and organisations
- [[Team Topologies (concept)|Team Topologies]]
- [[Software development teams have a novelty capacity]]
- [[Technology adoption life cycle]]
- [[Measuring software delivery performance]]
- [[Writing technical documentation]]
- [[The inner and outer loops of software development workflow]]
- [[Cost of a feature]]
- [[Software engineers pay]]
- [[Books on software engineering]]
- [[Segmenting software delivery organisations]]
- [[Event storming]]
- [[Writing software design documents]]
- [[The tension between a focus on quality vs shipping when working with developers]]
## On being a good engineer
- [[YAGNI|You Aren't Gonna Need It]]
- [[Keep it simple, stupid (KISS)]]
- [[Logging and error handling approach for Node.js]]
## Non-functional concepts
- [[Latency]]
## Business
- [[Software services companies]]
- [[Software product companies]]
- [[Creating educational products for software engineers]]
- [[The business of cloud]]
- [[Hiring software engineers]]
## Methodologies
Definitions of common (non mutually exclusive) methodologies:[^jh1]
- [Scrum](https://en.wikipedia.org/wiki/Scrum_%28software_development%29) is about managing a team’s work
- [Kanban](https://en.wikipedia.org/wiki/Kanban_%28development%29) is about optimizing flow, or throughput
- [XP](https://en.wikipedia.org/wiki/Extreme_programming) is about the particulars of software creation
- [Lean](https://en.wikipedia.org/wiki/Lean_software_development) is about optimizing systems
- [[Devops]] is about promoting collaboration between developers, operations, and any other groups involved in product creation
[^jh1]: [Pick a methodology](https://jhall.io/archive/2022/01/28/pick-a-methodology-scrum-kanban-xp-lean-or-devops/) by [[@Jonathan Hall]]
## Other concepts
- [[Documentation-driven development]]
---
tags: #SoftwareEngineering #MOC