Chapter #1 - What is Software Engineering? (2 of 3)
Software Engineering at Google Chapter #1 - What is Software
Engineering? (2 of 3)
The widening gap between CPU cycles and memory latency changes the
definition of “efficient” as hardware changes with time but the
software does not. A foo-sort may have been the fastest possible
solution 5 years ago, but on new CPUs the code would be even
faster if re-written with a bar-sort.
Measure and keep an eye on how long it takes to do a build.
Keeping this efficient helps scale the organization.
To identify organizational policies that don’t scale well, imagine
the work imposed on a single engineer but make the work 10x.
Not only should you automate things, but you should also allocate
time to the planning of the optimization and scaling of work
The “Churn Rule” is that if a team updates a widget, the team must
also update all code that depends on the widget. This way a single
team or group takes care of the widget upgrade, all dependent code
is updated, and there is no need to engage the other users of the
widget (could be dozens of other groups). This scales better than
updating the widget and then asking all of the other teams to
update their code.
The tradeoff for using development branches is that when a branch
is merged all other teams must sync their efforts to the new,
updated master. The more branches that are merged to master, the
more catching up the teams have to do.
To scale knowledge use shared communications mediums. This in turn
grows and produces more experts for your organization.
An engineer who is willing to answer questions for others helps to
scale knowledge and work output.
Turn scale to your advantage by using automation (having a
computer do more than a single human can do), expertise (fewer
humans can do more), and consolidation/consistency (limits problem
The more often you change and upgrade your infrastructure
(compiler, libraries, etc) the easier it becomes.
The flexibility of a code base is influenced by the following
factors: Conformity, stability, expertise, organizational
policies, and familiarity