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