TL;DR: A scientific approach to creating Software. Full of information on how to master learning and handle complexity in our field.
Software Engineering applies a scientific approach to finding solutions to problems.
Engineering is stuff that works!
Software development is the process of discovering and learning, so we need to become experts at learning and handling complexity.
Software Engineering practices must allow us to build software faster and better. If not, it is just a waste of time.
Software is not a Production problem (physical things with a high cost of replication). Then we need to use different tools for the job such as testability, experiments, and continuous delivery remember that our real focus is learning and discovery.
Our Aim as software engineers is to create systems with high Stability and High Throughput (Measuring Performance)
Stability = Change Failure Rate + Recover Failure Time
High Throughput = Lead time + Frequency of Deployment
Learning is a fundamental factor in our job as professionals, and also key in the discovery process of our systems.
The main idea is to focus on small steps gathering feedback and adjusting.
- Work in a way that allows us to make mistakes
- Explore the problem and make experiments controlling the variables
- We need to learn from previous experiences
Edsger Dijkstra said
The art of programming is the art of handling complexity
- Separation of concerns
- Information hiding and abstraction
The main idea is to focus and keep things simple.
Simple != Easy
- Controlling the variables
- Continuous delivery
One of the main takeaways for me in this chapter was tackling problems from:
Business Vision, Goals > Technical Architecture > Process > Organizational Structure
Organization Structure> Business Vision, Goals > Technical Architecture > Processes
Conclusion: this book provides valuable insights about Software Engineering and the practices that allow us to work on a Scientific approach.