Software Engineering at Google Flashcards

1
Q

Jevons Paradox: consumption of a resource may

increase as a response to greater efficiency in its use

A

More efficient to use ==> more ppl will use it ==> overall increase in consumption

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Use open source or use a fork of open source

A

forking give you more control, but requires more responsibility.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Examples of Boil-frog problem

A

1) increasingly longer build time etc.

2) increasingly longer meeting time /communication overhead

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

The Bus Factor

A

Bus factor (noun): the number of people that need to get hit by a bus before your project is completely doomed

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Programmers work best in tight feedback loop

A

Test Driven Development (FFF), Shift-Left

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Shift-left

A

the earlier you find a problem and fix it, the lower the cost/damage

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Software today is written by teams, not individuals,

Software engineering is a team endeavor

A

collaboration, team work, pair programming

Whole is larger than parts summed together

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Three Pillars of Social Interaction

  1. Humility (Open to help others, self-improvement)
  2. Respect (Others, their skills, knowledge)
  3. Trust (others, let them drive, minimum supervision)
A

Let go the ego (You are not omniscient or infallible)
Learn to give and take criticism (constructive criticism) –<> The reason you give constructive criticism must that you want to help the other side to improve genuinely This will decide how you phase your criticism.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

The Bus Factor (avoid SPOF single point of failure)

A

Bus factor (noun): the number of people that need to get hit by a bus before your project is completely doomed

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Expertise scales well

A

knowledge sharing, team multiplier

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Expertise scales well

A

knowledge sharing, team multiplier
Documented knowledge scales better than in-person training (Team wiki)
In-person training is more interactive, specific

Mix types of training is best

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

the more you know, the more you know you don’t know

A

new curiosity drives new learning

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

chesterson’s fence

A

Don’t do away the things simply because you don’t know about them

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

chesterson’s fence

When provide decisions, also provide why/explanation

A

Don’t do away the things simply because you don’t know about them

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Documentation Tools and Culture

A

Changing Tooling –>Top down approach
Changing Culture –>bottom up approach

G3DOC is a top-down approach
Changing tooling–>easy to use–>wide adoption–>culture change.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Documentation Tools and Culture

Documentation is Code (so it should be version controlled)

A

Changing Tooling –>Top down approach
Changing Culture –>bottom up approach

G3DOC is a top-down approach
Changing tooling–>easy to use–>wide adoption–>culture change.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Google use Trunk-based development. There is rarely a “development” or “feature” or “topic” branch.

Only Release branch.

A

Development on branches is unusual and not well supported at Google, though branches are typically used
for releases. Release branches are cut from a specific revision of the repository. Bug fixes and enhancements that must be added to a release are typically developed on mainline, then cherrypicked into the release branch (seeFigure 6). Due to the need to maintain stability and limit churn on the release branch, a release is typically a snapshot of head, with an optional small number of cherry-picks pulled in from head as needed. Use of long-lived branches with parallel development on the branch and mainline is exceedingly rare.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Google do use conditional flags or control flags to enable/disable new code (A/B Test) during the TRANSITION period.

A

When new features are developed,
both new and old code paths commonly exist simultaneously, controlled
through the use of conditional flags.
This technique avoids the need for
a development branch and makes
it easy to turn on and off features
through configuration updates rather
than full binary releases. While some
additional complexity is incurred for
developers, the merge problems of
a development branch are avoided.
Flag flips make it much easier and
faster to switch users off new implementations that have problems. This
method is typically used in projectspecific code, not common library
code, and eventually flags are retired
so old code can be deleted. Google
uses a similar approach for routing live traffic through different code
paths to perform experiments that can
be tuned in real time through configuration changes. Such A/B experiments
can measure everything from the performance characteristics of the code
to user engagement related to subtle
product changes.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

What similar things google does

A

1) a staging repo to push change to go through build verification, static analysis/(tricoder vs coverity) and automation testing
2) code review with gerrit vs google’s in-house critique
3) (code ownership) each component has owners that must approve the requested change.

20
Q

What is not similar to what I do?

I still use sprint_branch (basically development branch)

A

basically, a development branch with limited life time thus limiting the scope of merging back to main

21
Q

Not updating dependency version soon enough can incur technical debt

A

In the open source world, dependencies are commonly broken by library updates, and finding library versions that all work together can be a
challenge.

Think about the breakage updating spring boot 2.0.x to 2.3.4

22
Q

why google uses static linking a lot?

A

The diamond dependency problem A–>B, C–>D
but B depends on D.1.so
and C depends on D.2.so

The diamond problem ban be avoided by doing static linking of the binary A

23
Q

Advantage of trunk-based single-repo code base?

The monolithic codebase captures all dependency information.

A

There is only one version (the tip of the trunk) to support. When you make a change, you don’t need to worry that code depending on your component may still be using version 1.2 or version 3.1 etc. All dependency breakage will be fixed at the time your change is committed.

24
Q

Advantage of trunk-based single-repo code base?

The monolithic codebase captures all dependency information, and make possible atomic commit (the change and all its dependencies updated at the same time)

A

There is only one version (the tip of the trunk) to support. When you make a change, you don’t need to worry that code depending on your component may still be using version 1.2 or version 3.1 etc. All dependency breakage will be fixed at the time your change is committed. (atomic commit)

25
Bias is the deafult | Don't assume equity
unconscious bias everyone is in tech is accountable for the systemic inequity in tech industry because once you accept the accountability it also becomes part of your responsibility to address the issue...hence you are not part of the problem, but part of the solution.
26
Technology companies must ensure that their employees are continually receiving professional development and that this development is comprehensive and multidisciplinary Change requires that each of us, individually or as leaders of teams, invest in continuous professional development that builds not just our software development and leadership skills, but also our capacity to understand the diverse experiences throughout humanity
Growth mindset not only in technology but also include DE&I education (such as learning about other cultures)
27
systemic
sy-stem-ic
28
A common methodology today is to build for the majority use case first, leaving improvements and features that address edge cases for later. But this approach is flawed
Thus important to "shift left" with accessibility issue or have "inclusive design" as as easy language selection?o how to allow user to select "big font" if the fonts starts small?
29
Are (previous) developmental assessments a predictive measure of (future) performance?
No
30
“Build For Everyone.” --> a biased team try to build for URM but do not get feedback from URM Build with everyone --> make sure the product have feedback from URM
Shift DE&I thinking to the left (do not defer to when the project is about to complete)
31
Servant Leadership
The cure for the “management” disease is a liberal application of “servant leadership,” which is a nice way of saying the most important thing you can do as a leader is to serve your team, much like a butler or majordomo tends to the health and well-being of a household. Provide air bubble/safe environment/unblocking
32
social and technical health of the team
both are important
33
carrot-and-stick management rises when labor is cheap to replace, but also exist where creative thinking and problem-solving talents are needed
it is ineffective and harmful (to cognitive tasks) | It results in compliance(authority) but not engagement
34
If an individual succeeds, praise them in front of | the team. If an individual fails, give constructive criticism in private
Praise Publicly, Critique Privately
35
[Anti-pattern] Hire pushovers == Influence with authority [Pattern] Hire ppl better than you (Seek to replace yourself so you can move on to better things (a career goal of yourself)
Hire pushovers == Influence with authority == Team do the small stuff (since you hired pushovers) and you do the major stuff == > you will burn out, you can't take vacation, you can't leave the room...
36
[Anti-pattern] Ignore low performers ==> long feedback ==> too late/too costly to fix ==> boiled frog issue [Pattern] Identify the low performers soon, improve by one-and-one meeting often, encouragement, very specific tasks (more details) (Temporary Micro-managment)
Watch out if having high-performers to help consistent low-performaers will cost high-performers productivity
37
How to welcome onboard new hire
give very specific task assignment with very specific expectations (start with many small achievements first) (start with small bits first) When ppl ask you questions, do not give direct solutions, ask questions back or refine the problem or hints to help inspire solutions by the engineer.
38
[Anti-pattern] be everyones friend | [Pattern] Influence without authority
Don’t confuse friendship with leading with a soft touch | Do not be close friend that you manage who are not self-managing and not a hard worker.
39
[Anti-pattern] Micromanaging (treat team like children)
means you do not trust your team means you did not hire well means you have too much ego (you are not humble) Understand you won't know everything or get everything right. Trust your team
40
Be a zen master (keep calm and move on)
Mediating your reactions and maintaining your calm is more important as you lead more people, because your team will (both unconsciously and consciously) look to you for clues on how to act and react to whatever is going on around you As a leader, your job is to inspire, but inspiration is a 24/7 job. Your visible attitude about absolutely everything—no matter how trivial—is unconsciously noticed and spreads infectiously to your team. Always think positively, the problem could always be worse.
41
Build Consensus, influence without authority (Don't direct and dictate --> lack of trust)
Alignment with common "purpose", strategy, solution, direction... influence without authority, data-driven
42
Be a teacher and a mentor
start new hire with small-bites/success/well-defined tasks/problems Give team time to learn reactive mentorship and proactive mentorship
43
``` Set clear (and measurable) goals for team mate with explicit and real metrics Set precise mission statement for team ```
Build telve-factor app
44
Track happiness /eNPS (social wellness of the team)
evenly distribute visibility, recognitions, kudos
45
delegate AND get hands dirty at the same time
I am just dong this correct thing and striking a balance.
46
Authority brings Compliance | Influence brings Engagement
Engagement is better than compliance.
47
(intrinsic motivation) Autonomy, Mastery, Purpose
Autonomy/delegation/trust: You set what (needs done) team set how (to implement that) , provides ownership, encourage engagement Mastery: improving existing skills and learn new ones.