Red Huang

Red Huang

The Google Way of Software Engineering (1) - What is Software Engineering

This series will provide summaries and insights on the Google Way of Software Engineering.

Time and Change#

Between one-time projects and decade-long endeavors, a shift occurs: a project must start responding to constantly changing external factors.

For any project without an upgrade plan from the beginning, this shift can be very painful for three reasons, each making the others more complex.

  • You are executing tasks that are not yet completed for this project; more hidden assumptions have been made.
  • Engineers attempting the upgrade are unlikely to have experience with such tasks.
  • The scale of the upgrade is often larger than usual, completing several years' worth of upgrades at once instead of incrementally.

image

We need a clearer understanding of the difference between "works by coincidence" and "maintainable."

Halem's Law - If there are enough users, your contractual commitments don't matter: your system's observable behavior will be relied upon.#

Cleverness versus Simplicity and Maintainability: Depending on the categorization of programming style, code that relies on fragile or unreleased content falls into the former, while following best practices and planning for the future falls into the latter.

If the cost of a task is deemed too high to be avoided in the future, we may still be using a compiler version from ten years ago. Missing out on optimization opportunities can come at a cost of 25% increase in computational resources.

Stagnation is a choice, but often an unwise one.

Shifting Left#

Shifting security issues left becomes particularly important when problems are discovered early in the development process, reducing costs.

image

Investing in Decision-Making - Distributed Architecture#

As the codebase grows larger, compilation times also increase, requiring more resources to be invested in local machines. However, in most cases, high-performance desktop development machines remain idle, which is not a good investment.

Developing a distributed build system and deploying it to the production environment speeds up the build process for everyone. But over time, the distributed build system itself becomes bloated.

The cost savings achieved by implementing a distributed build system may outweigh the negative costs of "building and maintaining." However, as these costs increase, we may not anticipate all of them.

Software Engineering vs. Programming#

Programming is the direct act of generating code; software engineering is a set of strategies, implementation methods, and tools.

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.