DEV Community

Cover image for Modern Software Engineering - Book Notes
Jorge Tovar
Jorge Tovar

Posted on • Updated on


Modern Software Engineering - Book Notes


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

Top comments (0)

An Animated Guide to Node.js Event Loop

Node.js doesn’t stop from running other operations because of Libuv, a C++ library responsible for the event loop and asynchronously handling tasks such as network requests, DNS resolution, file system operations, data encryption, etc.

What happens under the hood when Node.js works on tasks such as database queries? We will explore it by following this piece of code step by step.