阅读更多 https://github.com/gaohailang/blog/issues/3


1 adopt the right mindsets 摆正态度

包含了识别和集中精力在 high-leverage activity,为学习而优化,优先级」

2 execute, execute, execute 执行的艺术


3 build long-term value 长期价值


这些习惯来自于reinforced by scientific research, stories from industry, and concrete examples.

1 focus on high-leverage activities

- use leverage to measure your engineer effectiveness

- systematically increase the leverage of your time

三种方法: 1 find ways to get an activity done more quickly, 2 to increase the impact of an activity, or 3 to shift to activites with higher leverage

- focus your effort on leverage points / direct energy towa...


阅读更多 https://github.com/gaohailang/blog/issues/3


1 adopt the right mindsets 摆正态度

包含了识别和集中精力在 high-leverage activity,为学习而优化,优先级」

2 execute, execute, execute 执行的艺术


3 build long-term value 长期价值


这些习惯来自于reinforced by scientific research, stories from industry, and concrete examples.

1 focus on high-leverage activities

- use leverage to measure your engineer effectiveness

- systematically increase the leverage of your time

三种方法: 1 find ways to get an activity done more quickly, 2 to increase the impact of an activity, or 3 to shift to activites with higher leverage

- focus your effort on leverage points / direct energy toward leverage points, not just easy wins

招聘这件事就是需要花很长时间去做的(Facebook 好几年优化)

Employees view themselves as the guardians of high standards, and hiring is a top priority for both managers and engineers. 招聘是头等大事. 高标准的守护者。但有些工程师 view recruiting and interviews as distractions from getting their work done. 如submit feedback immediately, first humnaly-possible time slot 如早上8点中午1点等

同样比尔盖茨在慈善事业上也是. global economy worth ten of trillions of dollars, any philanthropic effort is relatively small. 所以需要 way to put in a dollar of funding or an hour of effort and benefit society by a hundred or a thousand times as much.

2 optimize for learning 为学习而优化

- own your story/adopt a growth mindset

集中在自己能改变的事上,growth mindset,把失败看做提升的机会。

- don't shorchange your learning rate

学习也是复利,越积累越学越快的「easier to apply prior insights and lessons new things,为了长期的发展,早期加大学习的投入~

- find work environments that can sustain your growth/seek work enviroments conducive to learning

转组前的准备,向同事咨询和找到noboarding的机会,同时看看 how transparent they are internally, how fast they move, what your prospective co-workers are like, and how much autonomy you'll have. 六大因素for supporting high personal and professional growth rate. 1 fast growth, 2 training, 3 openess, 4 people, 5 pace,节奏 6 autonony

节奏: • What percentage of time is spent on maintenance versus developing new products and features?

节奏: • What tools does the team use to increase iteration speed?

people: • Are there skills they can teach you?

openness: • Do teams meet to reflect on whether product changes and feature launches were worth the effort? Do they conduct post-mortems after outages? 「迭代的思路去提升而不是一开始就寻求最佳实践等」

- capitalize on opportunities at work to improve your technical skills/dedicate time on the job to develop new skills


Study code for core abstractions written by the best engineers at your company.

Write more code.

Go through any technical, educational material available internally

Master the programming languages that you use.

Send your code reviews to the harshest critics

Enroll in classes on areas where you want to improve. [coursera, edx, udemy, udacity]

Participate in design discussions of projects you’re interested in [Ask project leads if they’d mind you being a silent observer or even a participant in a design meeting]

Work on a diversity of projects [interleaved practice of different skills is more effective than repeated, massed practice of a single skill at preparing people to tackle unfamiliar problems.]

Make sure you’re on a team with at least a few senior engineers whom you can learn from.

Jump fearlessly into code you don’t know.

- locate learning opportunities outside of the workplace / always be learning



- learn new programming languages and framework

new skills can expand your mind and teach you how to think in different ways.

- invest in skills that are in high demand 如看看job posting中,看业界潮流,如深度学习和mobile development等

- read books

Bill Gates reads a lot and mostly non-fiction, using books to discover how the world works. 速度2-3x faster提升,同时作者给出了书单

- join a discussion group

I’m a part of a few book clubs and reading groups that meet regularly for discussion at cafes and apartments.如本杰明富兰克林就参加很多这样的来 discuss and debate morals, politics, or natural philosophy.

- attend talks, conferences, and meetups

- build and maintain a strong network of relationships

Lucky people dramatically increase the possibility of a lucky chance encounter by meeting a large number of people in their daily lives. 书籍 the luck factor 中有

- follow bloggers who teach

- write to teach


- tinker on side projects

打磨技术,articularly in areas of interest that you don’t typically engage in at work.跨界.

- pursue what you love

不要passive time spent aimlessly surfing TV channels or the web.

3 Prioritize Regularly

- track to-dos in a single, easily accessible list

- focus on what directly produces value

- focus on the important and non-urgent

- protect your maker's schedule

- limit the amount of work in progress

- fight procrastination with if-then plans

- make a routine of prioritization

讲grow product's user. 增长团队。 deciated to the art of science of user growth, 优化how users flow into and out a product. 同时 data and metrics数据和指标,同时 run endless user experiments and optimizing conversion rates. 需要结合 engineering, data and product marketing to build their strategies. 和普通工程团队一样需要 building experimention frameworks, and analyzing metrics 同时不一样的是: the list of ideas for driving traffic and growth is extremely open-ended and spans virtually the entire product.


prioritizing 很难因为它本身不create anything,而且消耗精力。不需要一直做。但是if have certian personal or professional goals that you want to achieve, prioritiization has very high leverage. - see its outsized impact on your ability to get the right things done.

4 invest in iteration speed

- the faster you can interate, the more you can learn

- invest in time-saving tooling

- optimze your debuging workflow [don't underestimate how much time get spent validating that your code works]

the extra investment in setting up a minimal debugging workflow can help you fix annoying bug sonner and with less headache. 建立最小可用debug流程帮助快速进入诊断问题

- master the fundamentals of your crafts [development environment 熟悉开发环境, pay off dividends throughout your career]

知道如何在IDE/editor 中完成下面的事情:

Compiling or building code

Running a unit test or program

Reloading a web page on a development server with new changes

Testing out the behavior of an expression

Looking up the documentation for a certain function

Jumping to a function definition

Reformatting code or data in text editor

Finding the callers of a function

Rearranging desktop windows

Navigating to a specific place within a file


Learn at least one productive, high-level programming language.

Prefer the keyboard over the mouse

Automate yoru manual workflow

Test out ideas on an interactive interpreter

Make it fast and easy to run just the unit tests associated with your current changes.

- take a holistic view of your iteration loop [don't ignore any organizational and team-related bottlenecks that may be within your circle of influence] 提升公司与组织层面上的如infra,利用你影响力能触达的

5 measure what you want to improve

- measure your progress

because it’s hard to measure a goal doesn’t mean that it’s not worthwhile to do so.

常常问自己. is there some way to measure the progress of what i'm doing. 如果我做的无法 move a core metric, is it worth doing, or is there a missing key metric?

- carefully choose your top-level metric

the right metrics functions as North Star.

1 hours worked per week vs. productivity per week

2 click-through rates vs long click-through rates

3 average response time vs 95yh or 99th percentile respopnse times [To decrease the 95th or 99th percentile, however, you’ll need to hunt down the worst-case behaviors in your system.]

4 bugs fixed vs bugs outstanding

5 registered users vs. weekly growth rate of registered user

6 Weekly active users vs. weekly active rate by age of cohort [防止哪种用了不用的人- measure the fraction of users who are still weekly actives the nth week after signing up]

a metric that, when optimized, maximizes impact for the team. [whether it’s products sold, rentals booked, content generated, or something else—enables you to compare the output of disparate projects and helps your team decide how to handle externalities]

An actionable metric is one whose movements can be causally explained by the team’s efforts. 而不是哪种 page views, registered users count 等「可能是之前的报道引流的」,观察 things like signup conversion rate, or the percentage of registered users that are active weekly over time

A responsive metric updates quickly enough to give feedback about whether a given change was positive or negative

- instrument your system

[The easier it is to instrument more metrics, the more often you’ll do it.] 使用Open-source tools like Graphite, StatsD, InfluxDB, Ganglia, Nagios, and Munin make it easy to monitor systems in near real-time.

The first describes a high-level, big-picture activity, whereas the second is about gaining insight into what’s going on with systems that we’ve built. 你的系统需要越多越全面越好的instrument.

Once they had some visibility into what was happening, they were able to add caching to bring down load times from 8 seconds down to 2, fix bugs to reduce error rates down from an egregious 6% to 0.5%. 建立dashboard 等

They measure everything including “numbers of new registrations, shopping carts, items sold, image uploaded, forum posts, and application errors.” By graphically correlating these metrics with the times of code deployments, they’re able to quickly spot when a certain deployment goes awry.

At Google, site reliability engineers use a monitoring system called Borgmon to collect, aggregate, and graph metrics and to send alerts when it detects anomalies.

Twitter built a distributed platform called Observability to collect, store, and present a volume of 170 million individual metrics per minute

LinkedIn developed a graphing and analytics system called inGraphs that lets engineers view site dashboards, compare metrics over time, and set up threshold-based alerts, all with a few lines of configuration

- know your numbers [方便获取数据]

- prioritize data integrity [bad data 可能会让你做出错误的决定]

譬如 common latency numbers(见系统优化)

6 validate your ideas early and often

- approach a problem iteratively to reduce wasted effort.


- Reduce the risk of large implementations by using small validations

- use a/b testing to continuously validate your product hypotheses

- when working on a solo project, find ways of soliciting regular feedback

- adopt a willingness to validate your decisions


7 improve your project estimation skills

- incorporate estimates into the project plan

Don’t let a desired target dictate the estimates.明确特定功能特性上线时间

- allow buffer room for the unknown in the schedule

- define measurable milestones

- do the riskest takes first

Reduce variance in your estimates and risk in your project by exploring the unknown early on 先做风险大的来提前暴露出unknown.

- Approach rewrite projects with extreme caution

- know the limits of overtime / don't sprint in the middle of a Marathon

[Work overtime only if you’re confident that it will enable you to finish on time.]

8 balance quality with pragramtism

- establish a culture of reviewing code

- invest in good software abstractions to simplify difficult problems

- scale code quality with automated testing

大胆重构前先要建立 suite of unit and integration tests. alleviate the fear of modifying what might otherwise be brittle code.

- manage your technical debt

不要花太多时间在maintain一个软件上。 if you spend all your resources paying off interest on your debt, you won't have enough time left to work on new things. focus on the debt that oncurs the most interest.

9 minimize operational burden

- do the simple thing first/embrace operational simplicity

Simple solutions impose a lower operational burden because they’re easier to understand, maintain, and modify

When you first start off trying to solve a problem, the first solutions you come up with are very complex, and most people stop there. But if you keep going, and live with the problem and peel more layers of the onion off, you can oftentimes arrive at some very elegant and simple solutions.

- fail fast to pinpoint the source of errors/ build systems to fail fast


- automate mechanics over decision-making

为什么不把自动化做了? 短期没时间,能每一次都花10分钟会让人麻木而不去话一小时去构建自动化(其他如lack familiarity with automation tools, individuals act rationally according to their own self-interest but contrary to the group’s best long-term interests)

distinguished between two types of automation: automating mechanics and automating decision-making. Automating the right decisions to make, particularly in the context of building systems that can heal and repair themselves when things go wrong, turns out to be much more challenging. 譬如LB一台机器挂了把流量全部导入到另一台会打死剩下的机器

Validating that a piece of code, an interaction, or a system behaves as expected

Extracting, transforming, and summarizing data

Detecting spikes in the error rate

Building and deploying software to new machines

Capturing and restoring database snapshots

Periodically running batch computations

Restarting a web service

Checking code to ensure it conforms to style guidelines

Training a machine learning model

Managing user accounts or user data

Adding or removing a server to or from a group of services

- aim for idompotence and reentrancy/make batch processes idempotent

One technique to make batch processes easier to maintain and more resilient to failure is to make them idempotent. 让脚本执行多次也是冥等的[如网络问题,数据量大奔溃,服务没起来等]

Perhaps it generates a monthly analytics report, produces a new search index, or archives stale user data. the ability to run infrequent processes at a more frequent rate than strictly necessary, to expose problems sooner.

- plan and practice failure modes

10 invest in your team's growth

- help the people around you be successful

- making hiring a priority

- invest in onboarding and mentoring

- build shared ownership of code / AB岗位

When you’re the bottleneck for a project, you lose your flexibility to work on other things. High-priority bugs get routed to you more frequently because your expertise enables you to fix them faster.

Avoid one-person teams.

Review each other’s code and software designs.

Rotate different types of tasks and responsibilities across the team.

Keep code readable and code quality high.

Present tech talks on software decisions and architecture.

Document your software, either through high-level design documents or in code-level comments.

Document the complex workflows or non-obvious workarounds necessary for you to get things done.

Invest time in teaching and mentoring other team members.

- debrief and document collective wisdom

去询问 what worked and what didn't work. document and share the lessons so that valuable wisdom doesn't get lost

- create a great engineer culture

Appendix 作者书单,好的blogger


holy grails



holistic 全面的

back-of-the-envelope calculation 粗略计算

brittle 易碎的

debrief 询问

ramp up

measles 麻疹

philanthropic 慈善的






推荐The Effective Engineer的豆列



    免费下载 iOS / Android 版客户端