Placeholder Image

字幕列表 影片播放

  • MALE SPEAKER: Thank you for coming to Edmond Lau's talk.

  • He will be talking about how to be a more effective engineer.

  • I met him about four months ago or so,

  • and it was also during one of his talks.

  • And I was just blown away by it.

  • And I thought it would be so useful to share his experience

  • and knowledge with the rest of Google.

  • He is actually also an ex-Google.

  • So, he worked at Google before.

  • He also worked at various startups.

  • And this talk will be based on his experience as well

  • as everyone he interviewed with, and what

  • makes for an effective engineer and for an effective team.

  • So without further ado, let me introduce to you Edmond Lau.

  • [APPLAUSE]

  • EDMOND LAU: Yeah, it's great to be back.

  • I think it's been maybe 10 years since I first joined

  • Google right out of school.

  • I joined the search quality team.

  • And since leaving Google, I've worked

  • at a bunch of different startups,

  • including Ooyala, Quora, and Qup.

  • And two of those were actually founded by former Googlers.

  • And so, even though I've been away

  • from Google for quite some time, Google culture

  • has actually been a large part of the various startups

  • that I worked at.

  • And earlier this year, I did publish a book, "The Effective

  • Engineer."

  • And what I like to do during this talk

  • is share with you some of the stories and lessons

  • that I've collected during these experiences.

  • And so my promise to you during this talk

  • is that you sort of walk away with a framework and a set

  • of actual strategies that you can apply to your day

  • to day job on how to become more effective as an engineer.

  • But, before we dive into the meat of the talk,

  • I want to do a quick poll and get a show of hands.

  • Who here has pulled a long night on a project for work before?

  • Who here has done that-- who's done work on the weekends

  • before?

  • A large number.

  • Who here has worked multiple months on a project, only

  • to see maybe it not actually launch?

  • What about working multiple months on a project and then

  • see it launch, but not actually sort

  • of seeing the impact or the effect

  • that you actually wanted?

  • And let's do one more.

  • Who here has to do pager duty?

  • And how many of you have been paged in the middle of night

  • or over the weekends before?

  • Yeah, so it's a good number of people.

  • And when this stuff happens, a lot of times we sort of wonder,

  • was all this time and energy, was it worth it?

  • Was this actually the best use of my time?

  • And this isn't a question that you just sort of ask at Google.

  • It's also questions that we ask at other places as well.

  • I remember when I left Google, the week

  • immediately afterwards, I jumped-- dove head first

  • into my first startup.

  • I didn't even take a week of break.

  • And this first startup was Ooyala.

  • It was an online video company focused on building

  • a platform for the enterprise.

  • It was founded by a former Googler.

  • I remember my very first week, the CTO told me,

  • you're responsible for building this feature that's

  • already been promised to a paying customer.

  • And the video player has written an actionscript,

  • because it was a Flash based video player.

  • And it was a language that I didn't know.

  • The servers were all written in Ruby

  • on Rails, which I had no familiarity with.

  • And there was not a single unit test

  • across the entire codebase.

  • And so, I was really scared of just accidentally breaking

  • something production.

  • And so, my first two weeks there,

  • I ended up pulling 70 to 80 hour weeks to try to get that done.

  • And when I want to talked to my CTO

  • about how intense this felt, his response was sink or swim.

  • There's no life preserver coming.

  • You're just going to have to work hard.

  • And that was a very intense and very stressful

  • time in my career.

  • And so, the next startup I joined

  • wasn't all that different.

  • When I join Quora, which was a question answer site,

  • the jobs page actually read, you should

  • be ready to make this startup the primary focus of your life.

  • That's sort of how intense the culture was.

  • And that time, all of these narratives

  • about how you need to work hard to succeed sort of really

  • lined up with how we were thinking.

  • My team and I, we really wanted to succeed.

  • But at the same time, we knew we were the underdogs.

  • While we were building an online video

  • platform for the enterprise, YouTube was free.

  • Our biggest competitor, Brightcove,

  • dominated most of the market.

  • And so we thought, one of our secret weapons

  • was that we're just going to outwork everyone else.

  • We're going to work so hard that we're

  • going to overcome all these obstacles and actually succeed.

  • And it took a while before I started wondering,

  • was this actually the best use of our time?

  • Because we worked on projects where

  • we'd spend multiple months building a future for a paying

  • customer, but then they would never use it.

  • Or at Quora, we'd build content tools.

  • And it just wouldn't get the adoption from users

  • that we actually wanted.

  • There were all these things where we spent so much time

  • on these projects, by the end of day,

  • it didn't really lead to any impact.

  • And so, we started sort of wondering,

  • can we actually work smarter?

  • Can we deliver significantly more value

  • while working fewer hours?

  • And it's sort of like after doing years of actually working

  • these crazy hours before I had this key insight that effort

  • doesn't really equal impact.

  • You may have good intentions, but those good intentions

  • don't actually lead to results.

  • Think about a staff engineer at Google.

  • They probably produce more than twice the impact

  • or twice the output of a more junior engineer,

  • but they're probably not working 2x the hours.

  • Or think about Jeff Dean.

  • So, I heard Google had to sort of invent some new engineering

  • level for him, like senior Google fellow.

  • He probably produces more than 10x the impact of most of us

  • in this room.

  • But he's not working 10x the hours

  • because that's physically impossible.

  • There aren't that many hours in the day.

  • And so, the notion that effort is

  • sort of what determines our impact

  • isn't really a correct one, and we need a better framework

  • for the really understanding and thinking and reasoning

  • about impact and effectiveness.

  • And so, that's sort of where I sort of came

  • upon this principle of leverage, where leverage

  • is defined as impact that you produce for the time

  • that you invest.

  • It's the rate of return on your investment of time and energy.

  • It's the ROI.

  • It's the rate of impact.

  • If you think about the Pareto Principle, the 80-20 Rule,

  • it's the 20% of work that actually

  • produces 80% of the results.

  • Those are the tasks, those are the activities that actually

  • are extremely high leverage.

  • Now, sort of a central thesis that I want you to take away

  • from this talk is that this central concept of leverage

  • is really the guiding metric that effective engineers should

  • use to determine how and where to spend their time.

  • Now, it might seem a little obvious and maybe

  • a little simple to some of us, but the same time, oftentimes

  • we're so engrossed in what we're doing,

  • we're so focused on the project that we're working on

  • that we don't really take the time to ask,

  • are we working the right thing?

  • We're attending meetings.

  • That might not be the best use of our time.

  • Or we're fixing the next urgent bug,

  • or we're just fighting the next fire.

  • Or we're working on projects that end up not shipping or not

  • going anywhere.

  • And we don't really take a step back to think about,

  • was our time on these projects actually well spent?

  • Were those activities actually high leverage?

  • And you can think about if you're walking along the road

  • and you see a boulder, that boulder is really hard to move.

  • But if you can find the right lever,

  • then you can apply just a little bit of force

  • and move that boulder out of the way,

  • because that lever amplifies your output.

  • In a similar way, in software engineering,

  • we're looking for those levers where

  • we can amplify our energy, our time and produce massive gains.

  • And so, the next question we might ask ourselves,

  • given that we have this framework,

  • is how do we actually apply it to engineering?

  • What are the highest leverage activities for engineers?

  • This is a question that I really personally wanted to answer.

  • I knew that working 60 to 80 hour weeks

  • simply wasn't sustainable.

  • It wasn't going to help us win in our different markets.

  • Also, I'd spend a lot of time on engineering hiring

  • and recruiting.

  • And I'd screen thousands of resumes or interview

  • maybe 500 candidates.

  • And I really want to know, how do we actually

  • identify the most effective engineers to hire for our team?

  • I'd also spent about maybe a year and a half building

  • the on boarding and training programs

  • for engineers at Quora.

  • This was basically what every new engineer at Quora

  • would go through.

  • And I wanted to know, how do we actually

  • train engineers and teach them to be more effective?

  • And so, I really wanted to know the answer to this question.

  • And so, that's what started me on a quest

  • where I quit my job at Quora and then basically took two years

  • to explore this question.

  • And I went around Silicon Valley.

  • I interviewed a bunch of engineering leaders

  • from different companies.

  • So, VPs, directors, managers, tech leads,

  • people from larger companies like Google, Facebook,

  • LinkedIn, Twitter.

  • A few were from more medium size companies like Dropbox, Square,

  • Airbnb, Box, Etsy.

  • And even smaller startups: Instagram, Reddit, Lyft

  • at the time was pretty small.

  • And I grilled them.

  • I asked them really hard questions.

  • Asked them, what separates the most effective engineers

  • you've worked with from everyone else?

  • What are the most valuable lessons

  • that you've learned in the past year?

  • What investments have you made for your team that

  • have paid the highest returns?

  • I really wanted to know what from their experiences proved

  • out to be the highest leverage activities that engineers

  • everywhere should be focusing on.

  • And now 22 months later, I basically

  • had a collection of stories, lessons, and actual strategies

  • on how to be more effective engineer.

  • Now, everyone's story was different,

  • but there were a lot of common themes.

  • And in this book, this is still a lot

  • of those common themes through actual strategies

  • that you and I can apply in our day to day jobs as engineers.

  • And so, what I'd like to do for the rest of this talk

  • is actually share with you five of those high leverage

  • activities for engineers that I think

  • would be really useful for us to incorporate in our day

  • to day jobs.

  • The first high leverage activity really

  • starts in our own mindset, how we

  • think about our own development as engineers.

  • And that activity is optimizing for learning

  • This Mantra is something that has guided all of my own career

  • decisions.

  • Every change I made from company to company or from company

  • to writing a book was because I saw an opportunity

  • to actually increase my learning rate.

  • And this is really important because learning

  • is something that actually compounds over time.

  • What you learn today sets you up for other opportunities

  • and other learning that you might have in the future.

  • And when I say that it compounds over time,

  • I actually mean a few things.

  • One, this curve of learning is actually exponential.

  • Just like if you were investing in your financial investments,

  • your investment portfolio, your financial investments

  • compound over time exponentially.

  • In a similar way, investments in yourself

  • also do the same thing.

  • So, the second implication is that the earlier

  • on in your career that you invest

  • in yourself, the more time that learning

  • has to compound the long run.

  • And thirdly even small deltas in your learning rate

  • can have tremendous impact on how much

  • knowledge and how much learning you have in the long term.

  • And so, it's really hard actually

  • to quantify how much we're learning, but suppose

  • you actually could.

  • Suppose you could actually improve yourself by 1% per day.

  • What would that mean?

  • Well, it would mean by the end of the year, after 365 days,

  • you'd actually be 37 times better than you

  • were at the being of the year.

  • That's a huge difference.

  • And the best engineers and the best engineering leaders

  • actually aggressively and relentlessly optimize

  • in their own learning.

  • One of the pieces of advice Tamar Bercovici, who

  • is a senior engineering manager at Box,

  • tells all of the engineers he manages,

  • is to own your own story.

  • What she means by that is that you need to take

  • control and take ownership of your own learning and growth,

  • rather than waiting for opportunities to come to you

  • and find opportunities to really invest in yourself.

  • Read books, take classes, work on side projects, attend talks.

  • These are all ways that you can invest in yourself

  • and then those investments will compound

  • in your career in the long run.

  • And so, when you think about growing your career,

  • ask yourself how might you improve yourself

  • every single day?

  • And commit to making a habit out of that.

  • Now learning is one thing that compounds.

  • But another thing that also compounds

  • and that also is very high leverage

  • is actually investing in your own iteration

  • speed, how quickly you can get things done.

  • The faster we can get things done,

  • the more impact we'll have in the long run.

  • And because we're all engineers, one

  • of the best ways that we can invest in our iteration speed

  • is actually by investing in tools.

  • When I was talking with Bobby Johnson, who's

  • the former engineering director at Facebook,

  • he made the observation to me that he

  • found that people who are successful, almost all of them

  • wrote a lot of tools.

  • He said the strongest engineers and his team

  • spend probably a third of their time working on tools.

  • Tools to do monitoring, tools to make debugging easier,

  • tools to just glue the system together.

  • But the surprising thing was that he

  • said this wasn't actually obvious on his team.

  • Because a lot of engineers, we like

  • working on the new shiny tool.

  • We want to be the author of some new system.

  • We want to build this new data storage system

  • and be the author of that.

  • When in reality, even more mundane tasks,

  • such as investing in tools and investing in your own iteration

  • speed, can be extremely high leverage and have huge payoffs.

  • This is sort of the reason why a lot of big companies, Google,

  • Facebook, Twitter, LinkedIn, Dropbox,

  • they all have teams the focus on development tools.

  • Because if you can decrease bill times by, say,

  • even one minute per day and engineers are building,

  • say, 10 times per day, and you have 1,000 engineers,

  • that's a one engineering month saved per day.

  • I remember when I joined Google back in 2006

  • and I was compiling in a Google web server on search quality

  • team.

  • It was something that you kicked off and then you went home

  • and it compiled itself overnight.

  • That's how long it took.

  • And by the time I left in 2008, sort

  • of when Blaze was getting introduced, bill times I think

  • dropped to around 20 minutes.

  • And that was huge.

  • I'm sure it's probably dropped down even further since then.

  • I'm not sure how fast it is now.

  • I see I see some shakes of the head.

  • But all of these investments in bill times

  • are extremely high leverage.

  • Because it means that you can, instead of doing things

  • in large batches, you're doing them

  • more iteratively over time.

  • One of the proudest accomplishments

  • that we did while at Quora was we

  • had a system where we could actually

  • deploy code production 40 to 50 times per day.

  • For every time an engineer pushed to commit to get,

  • it would automatically kick off a suite of a few thousand unit

  • tests.

  • And if all those tests passed, that code

  • would then ship to a canary machine, that would then

  • run another battery of tests.

  • And if that passed, the code would be automatically shipped

  • to all our webmachines production.

  • And that entire process only took six or seven minutes,

  • which meant that we could push code production 40, 50 times

  • a day.

  • And that changed deployments which,

  • from any team to this one off event

  • that they have to do maybe every week, maybe even every day,

  • to something that was a very normal part of a development.

  • And it meant if we had a question, how often is

  • this feature that's on our web page actually being used,

  • it means that an engineer could just add a simple log line,

  • push that code to production, and then start getting

  • some data back within minutes.

  • So, a lot of these questions that

  • are impossible with a slower workflow, we

  • were able to do because of a system

  • of continuous deployment.

  • And you might wonder, when does it make sense for us

  • to invest in tools?

  • And a good rule of thumb that I got from Raffi Krikorian,

  • who grew the infrastructure team at Twitter

  • from about 50 engineers to 450 engineers,

  • used to tell his team that if you have to do something

  • more than twice manually, you should build

  • a tool for the third time.

  • And that's a good rule of thumb, because we

  • tend to underestimate how often we're going to need

  • to manually do certain tasks.

  • Sometimes we get started, we do things manually

  • because it seems to be simpler.

  • And then requirements change, or we mess up

  • during our manual steps.

  • And then we end up spending a lot more time

  • than we actually could have.

  • Instead, if we had invested in tooling and automation sooner,

  • we could save ourselves a lot of time.

  • And so, when you're working on a project,

  • you should also always ask yourself, what are the events?

  • What are the bottlenecks that you face during development?

  • How can you speed those things up?

  • Because all of those improvements

  • will sort of compound in how fast

  • or how quickly you can get things done.

  • You can also ask same question when you're debugging, as well.

  • Say you're building an Android app

  • and you're debugging this photo sharing

  • flow that's a few clicks away from the home screen.

  • Could you wire up your flow so that when you start the app,

  • you land right on that screen?

  • Simple tweaks like to optimize your own debugging flow

  • to really optimize your iteration

  • speed can have a huge difference in the long run in how

  • productive and effective you are

  • I've talked a lot about how to get things done quickly.

  • But another important question to think about

  • is not only how to get things done quickly,

  • but how to get the right things done quickly.

  • And so, that's another key high leverage activity

  • is actually validating your ideas aggressively

  • and iteratively.

  • And a good example of how to do this right as well as how

  • to do this wrong actually comes from Etsy.

  • Etsy is a company that sells handmade goods online,

  • and last year they hit almost $2 billion in revenue.

  • And they had this one project where

  • they were trying to build infinite scrolling

  • on the results page.

  • So, when you type a query at Etsy,

  • you see a bunch of product products.

  • And the product page is paged.

  • And they were exploring, maybe we

  • should add infinite scrolling.

  • Similar to how on Google Images, if you scroll down on the image

  • search page, results just sort of keep loading onto that page.

  • And so they'd spent many months building this out,

  • ironing bugs, and just when they were about to ship,

  • they decide, we should probably test this.

  • And so, they ran an AB test.

  • And they found that click through rates actually dropped

  • by 10%.

  • Purchase rates actually dropped by nearly 25%.

  • So, there was no way they were going to actually launch

  • this product.

  • Then they actually spent some time

  • trying to figure out why this wasn't working.

  • And they realized that for this product change

  • to actually work, it sort of relies on two assumptions.

  • One is that if we show more results to users,

  • they'll be more likely to buy products.

  • And the second is that if we show results

  • faster to the users so that they don't actually have to page,

  • they would also choose to buy more.

  • But the key insight is that each of these assumptions

  • could have been independently validated with much less work.

  • If the assumption is that if we show more results to users,

  • they will buy more, they could have just increased

  • the page size.

  • And in fact, when they did that after the fact,

  • they found that that really had no impact on purchases.

  • An assumption that maybe a faster page

  • will lead to more purchases, that's something a little bit

  • harder to test.

  • But they got a little creative.

  • They artificially added some latency

  • to some fraction of users, made the page slower.

  • And when they tried that test, they

  • found out that also didn't have much of an impact.

  • Each of those tests were much easier to run.

  • Very little engineering effort required.

  • And if they had run those tests first,

  • then they would have realized their basic assumptions

  • behind infinite scrolling didn't even prove out in the wild.

  • And so, there was no real reason to actually invest all

  • that time and effort to build infinite scrolling.

  • They sort of took these lessons to heart

  • when they worked on a different project, which

  • was rebuilding the product page when you click through

  • on a search result.

  • They actually went through 14 different iterations

  • of this page when they were redesigning it.

  • And they broke down the redesign project

  • into a number of different testable assumptions.

  • Does showing more related products on the page actually

  • decrease bounce rate?

  • Does showing the price in your native currency,

  • does that increase purchases?

  • Does showing a default shipping option

  • and the price of a default shipping

  • option make a difference?

  • Does swapping sides of the page make a difference?

  • They broke down each of these assumptions, each

  • of these hypotheses, and tested each one.

  • And there were a bunch of ones that didn't work.

  • They failed.

  • But, all of the information that they collected from these 14

  • different tests helped them build confidence

  • in theories about which changes did matter,

  • which ones did make an impact.

  • And so with that, they were able to launch a redesign

  • that when I talked to Mark Hedlund, who

  • was the former VP of product engineering at Etsy,

  • he said that this was actually the single largest

  • experimental win in Etsy's history.

  • It was the most successful project

  • that they launched in terms of purchasing performance.

  • And it was only possible because they

  • learned that experiment driven product design

  • is a very powerful tool.

  • Now, this is something that I think,

  • at least when I was in search quality,

  • Google did pretty well.

  • They run a lot of AB tests.

  • They sort of validate a lot of changes

  • to prove these changes are actually improving searches

  • and improving the bottom line.

  • But another take away from Etsy is

  • that incrementally validating your assumptions

  • is a very high leverage technique.

  • If you can break down a large problem into smaller testable

  • hypotheses, and then evaluate each one,

  • you can really build confidence in what works

  • and what doesn't work.

  • Or if a test proves that your assumption is correct,

  • then you have more confidence that the path you're going down

  • is the right path.

  • If it proves your assumption is incorrect,

  • then that means you maybe need to revise your project plan.

  • At the very least, this could save you months of effort.

  • And in startups, there is this idea

  • of focusing on the minimal viable product.

  • What's the smallest version of the product that

  • takes the least amount of effort to build that you can

  • show to real users and get feedback

  • and validation that what you're building, what you're designing

  • is actually the right thing to do?

  • That's a very powerful idea.

  • Now something, while Google, especially search,

  • it does a good job with their AB testing,

  • I think the idea of building this minimal viable product

  • is an idea that they can definitely leverage more.

  • Because a lot of times at Google,

  • we sort of build products for speed.

  • We optimize for performance, we optimize for scale

  • rather than really focusing and asking a question.

  • Like, is this product actually the right

  • thing to build in the first place?

  • Because it doesn't matter if something is really performance

  • if it's not the right thing that users actually want.

  • One of the good rules of thumb that I got from Zach Brock,

  • who was an engineer manager at Square,

  • is that he would constantly ask his engineers, what's

  • the scariest part of the project that you're working on?

  • That's the part of the most unknowns, the most risks.

  • That's the part you should actually tackle first.

  • Because you want to reduce and tackle the risk

  • head on so that if it proves that these risky areas are

  • there aren't doable or don't impact your bottom line,

  • you can cut your losses short and move on.

  • And so, when you're working on projects,

  • you should really ask yourself, can you

  • break this down into smaller testable hypotheses?

  • Can you use an inexpensive test to validate

  • that what you're doing is the right thing?

  • How might you expend 10% of your effort upfront

  • to validate that the project you're working on

  • will actually work?

  • Because that 10% is a very high leverage use of your time.

  • It can save you months of wasted effort further on.

  • Validation definitely is very important

  • and can save you wasted effort.

  • But another powerful technique, another high leverage activity

  • that can help you reduce wasted effort,

  • is this idea of minimizing operational burden.

  • A lot of times, we spend so much time maintaining and operating

  • our software that we don't really have time

  • to actually build new things.

  • And if we can minimize the operational burden

  • that we actually have on a day to day basis,

  • we can spend a lot more time actually focusing on impact.

  • And a great story which really illustrate this point

  • comes from Instagram.

  • When they were acquired in 2012 by Facebook

  • for a billion dollars, they actually

  • only had a team of 13 employees.

  • And of those 13 employees, only five of them were engineers.

  • They had a really small team supporting

  • over 40 million users.

  • So by any metric, this was a pretty effective team.

  • And I was curious, what was it that allowed the Instagram

  • team to be that effective?

  • And so, I sat down with Mike Krieger, the co-founder

  • of Instagram, and I asked him, was there

  • any secret sauce to this?

  • What was your key technique?

  • And he said one of the most important mantras that they

  • had on Instagram was to do the simple thing first.

  • They actually had this on posters in the office.

  • During design meetings, when someone

  • was proposing a new feature, they would actually

  • challenge each other, is this the simplest thing

  • that we can do?

  • If not, why are we adding all this complexity?

  • The key insight here was that every feature they added,

  • every system they added, was another potential fire

  • that they might have to put out in the future.

  • And with such a small team, they couldn't

  • afford to spend all that time just putting out fires.

  • And they were very aggressive and very stringent

  • about cutting sources of complexity.

  • And this actually a very common theme.

  • And I mentioned in the beginning of how I went around and asked

  • a lot of leaders, what's the most valuable lesson you've

  • learned the past year?

  • And it turns out that a lot of engineering leaders,

  • including Mike Curtis, who is the head of engineering

  • at Airbnb, or Chris Lambert, who's the CTO of Lyft,

  • and a bunch of other leaders, all

  • said that they wished they had made things simpler.

  • They wish they hadn't added so much complexity

  • in the last year.

  • And the reason why this was such a common theme

  • is because we often ignore the hidden costs that

  • are associated with complexity.

  • When you introduce sources of complexity,

  • we're actually introducing an ongoing tax

  • that we have to pay as we develop software in the future.

  • And this tax actually comes in a variety of forms.

  • On the most basic level, there's code complexity.

  • That when we're dealing with a very complex code,

  • it's hard to ramp up on.

  • It's hard to understand.

  • It's hard to reason about.

  • And as engineers, sometimes we see complex code

  • and then we tiptoe around it.

  • We decide, we're not going to touch this code base

  • because it's a little hairy.

  • And then, we miss out on opportunities to actually build

  • things that might be impactful.

  • Or we do things in a roundabout way

  • just so that we can avoid the complex piece of code.

  • Besides code complexity, there's also system complexity.

  • So, how many moving pieces are there actually in your system?

  • I was teaching a workshop at Pinterest.

  • It was a five week workshop for engineers

  • on how to be more effective.

  • And one of the stories I gathered from them

  • was that back in 2011 when they were scaling their site,

  • they actually had six different data storage systems.

  • They were running Cassandra, MySQL, Membase, Memcached,

  • MongoDB, and Redis.

  • And they actually only had a team of three back end

  • engineers.

  • That's insane.

  • There were, like, two systems per engineer.

  • Each system on paper set claims that they

  • would solve some scalability problem that they were facing.

  • But in reality, each system just failed in its own special way.

  • It was just another fire that they had to set out.

  • And so, when you make choices that

  • really sort of fragment our infrastructure,

  • that has a lot of ongoing taxes that we have to pay.

  • It means that we're spending-- we're thus

  • able to pull together resources to really strengthen

  • libraries and abstractions for a particular system.

  • It means we have to take time to understand the failure

  • modes of each system that we introduce.

  • It means that every new engineer who joins a team

  • not to ramp up on one additional system.

  • And so, it took a while, but in the end,

  • Pinterest finally learned that it's much simpler

  • to have a system, a scheme, where you can just

  • add more machines to scale.

  • And so, they cut out a lot of the other systems

  • that it didn't really need and ended up

  • with a much simpler system that they could actually maintain.

  • So, we've talked about code complexity and system

  • complexity.

  • Another such complexity is product complexity.

  • Now, that comes when there isn't a clear vision for where

  • the product is going or there isn't enough product focus.

  • Product complexity leads a lot to code complexity

  • and simple complexity because it means

  • you have to write more code and build more systems in order

  • to maintain and support the features that you're building.

  • And when you have a wide surface area in your product,

  • every new feature that you want to add

  • becomes harder to add because you

  • think about how does this fit in to the existing context of all

  • the other features.

  • There's more code branches you have to look over.

  • There's more issues and bugs that are filed.

  • There's more context switching that you have to deal with

  • to go back and forth from feature to feature.

  • And all of the time that you spend doing this context

  • switching is time that you're not

  • investing in abstractions, [INAUDIBLE]

  • paying technical debt.

  • And so, those are all things that end up slowing you down.

  • [INAUDIBLE] last soft of complexity,

  • organizational complexity.

  • Because when you have all of this complexity in your code

  • and your systems and your product,

  • it means that you need a larger team to actually deal

  • and manage with them all.

  • And that means you have to spend more

  • time hiring and interviewing.

  • You spend more time training, onboarding, mentoring

  • new engineers.

  • And so, there's another tax on the organization as well.

  • Now alternatively, some teams decide

  • OK, let's just split our team to smaller teams

  • and each team sort of manage a separate component.

  • Or maybe even have a one person team for each component.

  • And there's cost for that as well.

  • It's less motivating to work on your own.

  • If you get stuck, it can become more demotivating.

  • The quality can go down because it's harder

  • to get feedback from your coworkers

  • if you don't the same shared context.

  • And your bus factor also goes down.

  • I remember when I was working at Ooyala,

  • there was one point in time where

  • I was the only person who was knowledgeable about this piece

  • of software called the logs processor.

  • So, the logs processor was responsible for processing

  • all of our customer's data and then produce the reports

  • that they could actually read and sort of understand

  • what their viewers were doing.

  • And I was taking a much needed vacation down in Hawaii.

  • I was hiking around one of the volcanoes there.

  • And then, I suddenly get a text, and it's from the CTO.

  • And it says, logs processor is down.

  • I said, well that sucks.

  • Unfortunately at that time, I was the only person

  • who knew how to fix it.

  • And also unfortunately, there's no Wifi in volcanoes.

  • And so, that wasn't a great situation.

  • It was bad for me because my vacation was interrupted.

  • It was bad for the team because they depended on me.

  • And it was bad for our customers because they couldn't

  • get the reports and the data that they needed

  • to operate their business.

  • And so, there are all these costs of complexity

  • on these different levels.

  • On the level of code, systems, product, organization.

  • And they all come from this core thing

  • where we added more complexity than we needed.

  • And so, that's why this theme of asking ourselves

  • what's the simplest solution to this problem is so important.

  • Because it allows us to stem off this complexity

  • explosion at its bud at the very beginning.

  • And so, minimizing operational burden is super important.

  • And the last high leverage activity I like to close on

  • is actually building a great engineering culture.

  • I mentioned earlier on how I've spent a lot of time

  • on engineering hiring and recruiting.

  • And one of the questions that I'll

  • ask a lot of the candidates I interview

  • is, what's one thing you like and one thing you dislike

  • about your previous company?

  • And over time, this really helped

  • paint a picture of what exactly attracts an engineer

  • to a company.

  • What are the things that turn them off?

  • And it should actually come as no surprise

  • that engineers, they like to work in environments where

  • they can focus on high leverage activities.

  • They want to work in environments

  • where there's a chance to focus on and optimize on learning.

  • They want to work at places where everyone

  • is very productive and getting a lot of things done,

  • and there's good tooling and good iteration speed.

  • They want to work at places where products aren't going

  • to waste because assumptions and hypotheses weren't

  • being tested earlier on.

  • They want to work at places where they can actually

  • build new features as opposed to just maintain and pay off

  • taxes for old existing ones.

  • Now, Google is a sort of great place

  • in that there's a very strong sense of engineering culture.

  • But this is also something that you can focus on your team,

  • as well.

  • On a team level, you can really ask,

  • what are the highest leverage activities

  • that you can start working on?

  • You can think about how can you invest in your own learning

  • and in your own growth to really sort

  • of further your own career?

  • You can think about what tools can you build

  • or what workflows can you improve for both yourself

  • and for your team to really improve your iteration speed?

  • Or think about a project that you're working

  • on that's a multimonth project.

  • Are there ways that you can break it down

  • into testable hypotheses that you can validate to make sure

  • that you're actually building the right thing for customers,

  • for users, or other members of the team?

  • Or think about if you're working on something

  • that seems a little bit too complex,

  • is there a way to actually make it simpler

  • and pay off these future taxes on complexity?

  • Or think about, how can you improve the engineering culture

  • in your own team so that new engineers who join the team

  • can ramp up much more quickly?

  • All of those high leverage activities

  • will make us more effective engineers.

  • I'll be happy to do some Q&A. Thank you all for coming.

  • [APPLAUSE]

  • I also a few limited copies of books

  • that we're going to hand out.

  • May be Cindy or [? Chang ?] can sort of hand them out as people

  • ask questions.

  • AUDIENCE: Unit tests.

  • I kind of read in your book and it kind of

  • presented unit tests as a high leverage kind of activity.

  • But at the same time, kind of like intuitively

  • when I think about writing unit tests,

  • I feel like it's kind of slow.

  • I got to write all these to cover all this code.

  • And if I want to refactor it, I got to change this unit test.

  • So, iteration speed kind of slows down.

  • Maybe you could talk a little bit

  • about exactly why unity tests are really

  • high leverage in spite of that kind of feeling that I get?

  • EDMOND LAU: Sure.

  • Great question, [INAUDIBLE].

  • So the question is, how do you reason about unit tests

  • with this framework of leverage?

  • And really, I think it's important to not be

  • religious about unit tests.

  • I think there are some teams that focus on, OK, we

  • need 100% coverage of our code.

  • And I don't think that's necessarily the best approach.

  • It's a lot better think about which types of tests

  • would be high leverage?

  • Which types of tests would be easy to write, and yet

  • pay off high rewards?

  • And the area of code bases that tend

  • to benefit from a lot more tests are

  • code paths that either see a lot of traffic,

  • code paths that a lot of engineers touch,

  • or code paths that are a lot riskier.

  • And so, if something were to go wrong, data would get corrupted

  • or the cost would be large.

  • In each of those areas, it can be

  • really beneficial to actually have a set of unit tests.

  • On the other hand, if you have a piece of code that's

  • sort of off to the side, not many people use it,

  • it's not touched that often, in those cases,

  • writing a unit test there might not have that strong a payoff.

  • And so, I would sort of break down unit tests

  • into different priority buckets and sort of focus on the ones

  • where there is more traffic, people

  • are changing it a lot more often, or it's a lot riskier.

  • Because those will have sort of a better rate of return

  • on your time.

  • AUDIENCE: So, it seems to me you have a lot of experience

  • with working with startups and small companies.

  • And I wonder actually how does your advice

  • translate to a bigger organization such as Google?

  • As you were talking through strategies,

  • I was thinking in my head about a particular example

  • that illustrates this strategy.

  • And for a big company, for example,

  • for the recent problems, organizational complexity kind

  • of becomes unavoidable.

  • So, it seems to me from your presentation,

  • you give advice for the more bottom

  • up approach, which Google is a lot like.

  • But for a big organization, actually

  • maybe some top down strategies are needed as well.

  • For example, for using product complexity and organization

  • complexity.

  • Do you have any thoughts on this?

  • EDMOND LAU: Yeah.

  • So the question, to rephrase a little bit,

  • is how do these ideas of focusing on complex--

  • or addressing organizational complexity apply to larger

  • companies like Google?

  • And I think it's a great question.

  • I think some of the clarity comes

  • from-- some of the strategies that an individual contributor,

  • an individual engineer where you can sort of influence

  • the complexity in large organizations

  • comes I think a lot from data.

  • So, I know Google is a very data driven company.

  • And a lot of times, if you can ask the right questions

  • and back that up with any data from users, data from activity,

  • you can sort shift organizations or products in a way

  • to sort of streamline it.

  • So, if you see a source of complexity from a feature

  • that you gather data and it seems like it's not actually

  • being used, I think that sort of forms

  • a more compelling case for decision makers

  • that, maybe this is an area of the product that isn't really

  • worth all the engineering effort that's being spent on it.

  • And so, I think data is was definitely

  • one area that can be used to amplify your voice when

  • you are making arguments of that nature.

  • I think another way that you can sort of reduce

  • complexity in these situations is to talk to the decision

  • makers and get clarity on what the focus

  • and what the mission is.

  • And make sure that the projects that you work on

  • are ones that sort of align with that mission and that focus.

  • Because if you're working on something that seems peripheral

  • to that mission or focus, then you're

  • sort of introducing additional sources of complexity

  • to that mission, that focus, that the organization has.

  • So, you want to at least make sure

  • that your own work is aligned with the goals of the rest

  • of the organization has.

  • AUDIENCE: So, I have two questions having

  • to do with the transition between from engineer

  • to engineer manager, so maybe they

  • are within the scope of the book.

  • One is about mentoring, the other is about technical data.

  • So, first would be, what are your thoughts on mentoring

  • in terms of leverage?

  • And the second is, how do you recommend

  • convincing an engineering manager

  • that the code complexity in your project

  • is worth taking a sprint break from delivering to actually

  • refactoring something thing from scratch with a much

  • simpler version?

  • EDMOND LAU: Good question.

  • So the two questions.

  • One is, is mentoring a leverage?

  • Two is how does refactoring and paying off technical debts

  • [INAUDIBLE] into this?

  • So with regards to the first one mentoring,

  • mentoring is definitely I think extremely high leverage.

  • I spent a year and a half when I was at Quora building out

  • the onboarding and mentoring programs

  • because I realize that even if an engineer would have spend

  • and one hour a day training a new hire,

  • that only represents like 1%-- it's like 20 hours.

  • That's like 1% of the new hire's total hours in that year.

  • And yet it can have a dramatic output, a dramatic impact

  • on that engineer's output.

  • And so, it's super valuable, I think,

  • to invest money in training your teammates and making sure

  • that you tell them and teach them

  • what the best practices are before they spend

  • a lot of time writing code that's

  • not following the right guidelines

  • or following bad designs.

  • And so, mentoring is super valuable.

  • And the second question is, how do you

  • convince engineering managers to actually focus

  • on or to budget time for technical debt?

  • And I think some of the best strategies I've seen for teams

  • is to rather than just to have that conversation

  • and spend all that energy convincing your engineering

  • manager after, like say, every project,

  • to instead sort of just set a sort

  • of consistent budget for that.

  • So some teams, for instance, every month

  • will have one week where it's code cleanup week.

  • Or after every sprint, they'll have some number of days

  • where they spend refactoring and cleaning code.

  • That way, it's-- you don't have to have this sort

  • of conversation every time after every project.

  • And in addition, you can use that time and prioritize

  • which areas of the code actually need to be refactored.

  • Which areas of code need to be cleaned up.

  • And so, I think it's more useful to have

  • a more general conversation where

  • to hit the goals for the sprints,

  • we're going to make some trade offs.

  • Those trade offs will lead to some debt.

  • And we want to have a consistent schedule where

  • every so often, we budget some number of days

  • to basically clean up that debt.

  • Yeah, it's a little tricky if you're a new engineer.

  • I would say that even as a new engineer,

  • the way that you should approach technical debt

  • is to focus on the areas where reducing that debt

  • allows you to be more productive.

  • So, if you're reducing debt on errors of the code

  • that you have to deal with yourself,

  • a lot of times doing that making,

  • that investment actually pays off on your own project

  • because you can get your project done sooner.

  • That's sort of, I think, a very easy way

  • to justify that time spent because you can provably

  • demonstrate that it actually accelerates your own project

  • speed.

  • And so, I would start there.

  • AUDIENCE: Some of the advice mentioned

  • tackling unknowns early in the project lifecycle and some

  • of the other advice was focusing on the simple things.

  • I wonder, do you have any advice on how

  • to identify unknowns that could be removed by focusing

  • on simplicity versus unknowns that

  • deserve their own investment and investigation?

  • EDMOND LAU: So, the question is, how do you

  • differentiate between unknowns that need to be investigated

  • and unknowns that you can potentially cut by focusing

  • on a simpler solution?

  • I don't have a simple answer for that but I

  • think some of the approaches that you can take

  • is to think about what are your goals for this certain project?

  • And if you didn't have to design a grand system, what

  • would be the simplest solution that you

  • could think of that could maybe hit most of those goals?

  • Because a lot of times, the complexity

  • comes from trying to address the last 10% or the last 5%.

  • And if you would take a more pragmatic approach,

  • maybe you can ask instead, what covers

  • 80% percent of the use cases?

  • Can I come up with a solution for that?

  • And then maybe for the other cases,

  • can we do something different rather than making the core

  • solution more complicated?

  • And I think that's something that-- that's

  • a theme that I've definitely seen

  • other teams do with success.

  • Because then for the most part, they're

  • dealing with something that is simple to reason about.

  • AUDIENCE: So I have a question, a lot

  • of cases we have dependencies on other teams.

  • For example, my team, sometimes I go,

  • there's a problem in the [INAUDIBLE] Bluetooth stack.

  • Then so I have to make a talk with them or either

  • I'd have to look into the Bluetooth stack by myself.

  • Which sometimes can be harder because I don't really

  • have a lot of expertise on the low level code.

  • So, can you talk a little your experience

  • about how do you deal with team dependencies?

  • How to talk and actually cooperate with other teams?

  • EDMOND LAU: So the question is, how do you

  • deal with interteam dependencies where you're sort of blocked

  • on someone else?

  • So a lot of times when you're blocked on someone else

  • and they're not actually working on this thing

  • that you really care about, that happens because there's

  • a misalignment in incentives.

  • Somehow your team has a certain goal.

  • The other team has a certain goal.

  • And those goals, maybe our priorities don't really align.

  • And so, I think structurally, a good approach

  • is to try to make those goals align.

  • To see if you can agree that a certain focus is

  • a priority for both teams this quarter

  • and sort of agree from that perspective.

  • If they don't align, I think at least

  • having that conversation tells you then

  • where-- the part that you're blocked on,

  • where that fits on their priority list.

  • And so, at least having that conversation,

  • you know that maybe this is only like a medium to low priority

  • for the other team.

  • At that point, then you can make this decision of well,

  • do I wait for them to work on that?

  • Or do I then-- maybe I ramp up on that Bluetooth stack

  • to actually make progress.

  • But I think it really sort of starts

  • from that communication about goals and incentives.

  • If they align, then you can sort of rely more on that team.

  • If they don't align, you do have to make that trade off of,

  • maybe it's worth my time to learn this Bluetooth stack

  • so that I can get the thing out the door sooner rather

  • than waiting for them to get to it on the bottom

  • of their priority list.

  • AUDIENCE: So, you mentioned the 60 to 80

  • hour work weeks not being sustainable.

  • I was wondering what your typical work week is like?

  • And if you ever work weekends anymore?

  • And you also mention learning.

  • I was wondering how much time per week

  • do you set aside for learning.

  • Is it an hour on the weekend that you spend

  • or is it five minutes a day?

  • How do you incorporate that into your daily routine?

  • EDMOND LAU: So nowadays, I still work at a startup.

  • I work at a startup called Quip.

  • And we actually work very normal hours,

  • so we work maybe 40 hour weeks.

  • I do spend a lot of personal time

  • on just sort of investing in things like the book

  • or these talks or other ways I can teach

  • engineers to be more effective.

  • Mainly because that's something I'm excited to do.

  • In terms of how much time I invest in learning,

  • I personally love to read, so I end up

  • just reading a lot of books.

  • And I think books are a really large source and wealth

  • of information for me.

  • I don't know how much time I spend reading,

  • but I [INAUDIBLE] spend a lot of time reading.

  • MALE SPEAKER: Thank you very much for coming [INAUDIBLE].

  • [APPAUSE]

MALE SPEAKER: Thank you for coming to Edmond Lau's talk.

字幕與單字

單字即點即查 點擊單字可以查詢單字解釋

B1 中級 美國腔

Edmond Lau:"有效的工程師"|在谷歌的講座 (Edmond Lau: "The Effective Engineer" | Talks at Google)

  • 454 44
    黃彰衍 發佈於 2021 年 01 月 14 日
影片單字