# Modern Software Engineering

*Doing What Works to Build Better Software Faster*

2022-06-29 | `software-design` `testing` `architecture` `agile`

> This book presents software development as an engineering practice at every level. To master software engineering, we must become experts at learning and managing complexity.

---



This book presents software development as an engineering practice at every level. 
To master software engineering, we must become experts at learning and managing complexity.

### Optimize for learning

To optimize for learning, the book presents five behaviors to consider:

- Working iteratively
- Feedback
- Incrementalism
- Empiricism
- Being Experimental

The main idea is to work on small steps, collect feedback, and adjust.

### Optimize for managing complexity

The book presents other five ideas to manage complexity:

- Modularity
- Cohesion
- Separation of Concerns
- Information Hiding and Abstraction
- Managing Coupling

We need to manage the complexity of our systems.

### Tools to support engineering in software

Going deeper into some ideas that were already discussed in the book, like:

- Testability
- Deployability
- Controlling the variables
- Continuous Delivery

--- 

A great video explaining the core ideas behind this book by his author:

{{ youtube(id="TRqYQnCfgH8") }}
