What’s Software Engineering

TL;DR: A scientific approach to creating Software. Full of information on how to master learning and handle complexity in our field.

Modern Software Engineering Book

  • 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

Optimize for Learning

Learning is a fundamental factor in our job as professionals, and also key in the discovery process of our systems.

  • Iterative
  • Incremental
  • Empiricism
  • Feedback
  • Experimental

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

Optimize for handling complexity

Edsger Dijkstra said The art of programming is the art of handling complexity

  • Cohesion
  • Coupling
  • Separation of concerns
  • Modularity
  • Information hiding and abstraction

The main idea is to focus and keep things simple. Remember that Simple != Easy

Tools to support engineering in Software

  • Testability
  • Deployability
  • 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

instead of
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.

Dave Farley Youtube Dave Farley Twitter