WEBVTT

00:00.360 --> 00:03.300
-: A useful tool for delivering simple results is

00:03.300 --> 00:05.070
something we call working backwards.

00:05.070 --> 00:07.140
And this used to be a really core part

00:07.140 --> 00:08.700
of the culture at Amazon.

00:08.700 --> 00:10.620
Not sure if it still is, but I hope it is.

00:10.620 --> 00:11.580
It's a good way

00:11.580 --> 00:13.650
of really approaching things from a simple standpoint

00:13.650 --> 00:15.510
that just delivers the results that you need.

00:15.510 --> 00:16.800
Here's how it works.

00:16.800 --> 00:18.330
The idea is that you work backwards

00:18.330 --> 00:21.180
from the customer experience that you're trying to deliver,

00:21.180 --> 00:23.550
and then you just figure out the simplest technical solution

00:23.550 --> 00:25.290
to deliver that experience.

00:25.290 --> 00:27.120
That's in contrast to working forwards

00:27.120 --> 00:29.640
from cool technology that you want to use.

00:29.640 --> 00:31.860
Those are solutions in search of a problem.

00:31.860 --> 00:34.020
So if you say, "Hey, deep learning is cool

00:34.020 --> 00:36.240
and we really wanna play with deep learning,"

00:36.240 --> 00:37.530
thinking up ways to use that

00:37.530 --> 00:39.690
and apply that to business problems

00:39.690 --> 00:41.310
is not going to be working backwards.

00:41.310 --> 00:44.220
That's working forwards from trendy technology.

00:44.220 --> 00:45.930
Again in that example we talked about in the

00:45.930 --> 00:48.270
previous lecture if we were working forwards,

00:48.270 --> 00:50.880
we might apply deep learning to this recommender system,

00:50.880 --> 00:51.810
but working backwards

00:51.810 --> 00:53.610
we might have seen that a much simpler solution

00:53.610 --> 00:55.920
like just reviewing well rated products

00:55.920 --> 00:57.120
within the given category

00:57.120 --> 01:00.360
or using a graph database lookup would work just as well

01:00.360 --> 01:02.310
with a lot fewer moving parts.

01:02.310 --> 01:04.500
So you don't wanna have solutions in search of a problem.

01:04.500 --> 01:06.690
You want problems in search of a solution.

01:06.690 --> 01:08.340
So for an example,

01:08.340 --> 01:11.280
let's say that I want to have an achievement system

01:11.280 --> 01:14.370
on some forum or something where I give

01:14.370 --> 01:16.680
people little badges for having the most posts

01:16.680 --> 01:18.990
or the most replies or uploads or something.

01:18.990 --> 01:20.940
I could use blockchain to do that

01:20.940 --> 01:23.310
and store that information using blockchain

01:23.310 --> 01:25.920
because blockchain is fun and cool and trendy

01:25.920 --> 01:28.140
but there's no reason to do that.

01:28.140 --> 01:30.780
So the customer does not care, right? (chuckles)

01:30.780 --> 01:32.700
You need to work backward from the customer experience.

01:32.700 --> 01:34.890
They just wanna get their badge, they wanna show it off.

01:34.890 --> 01:37.170
And you do not need blockchain to do that.

01:37.170 --> 01:38.340
Just because you think it's cool

01:38.340 --> 01:40.200
and trendy doesn't mean that's the right solution.

01:40.200 --> 01:41.700
It might be overly complex.

01:41.700 --> 01:43.830
What happens when blockchain goes outta style,

01:43.830 --> 01:45.390
yada, yada yada.

01:45.390 --> 01:47.220
We talked about the deep learning example already.

01:47.220 --> 01:49.710
A lot of times the database search will do just fine

01:49.710 --> 01:52.785
or using quantum computing for, well, anything right now.

01:52.785 --> 01:53.618
(chuckles)

01:53.618 --> 01:54.960
I mean it's a fun research topic,

01:54.960 --> 01:57.000
but my gosh, don't even go there.

01:57.000 --> 01:58.410
Stay focused on results.

01:58.410 --> 02:01.350
You need to focus on the experience you're delivering,

02:01.350 --> 02:03.270
meeting the requirements you were given,

02:03.270 --> 02:05.850
and developing a technical solution

02:05.850 --> 02:06.870
to meet those end results.

02:06.870 --> 02:09.090
Working backwards from the results you're delivering

02:09.090 --> 02:10.680
instead of forwards from the technology

02:10.680 --> 02:11.943
that you want to use.

02:13.230 --> 02:15.120
Here are some tools for doing that.

02:15.120 --> 02:17.370
So one thing we did at Amazon was starting with actually

02:17.370 --> 02:19.410
writing a press release for every new project.

02:19.410 --> 02:21.420
So we wrote a little press release

02:21.420 --> 02:22.800
and press release format

02:22.800 --> 02:24.060
announcing what we were building

02:24.060 --> 02:27.000
and why customers should be excited about it.

02:27.000 --> 02:28.140
And that allowed us to frame

02:28.140 --> 02:29.700
and think about what we're actually delivering

02:29.700 --> 02:30.810
to the customers,

02:30.810 --> 02:33.330
why the customers would find this helpful and useful.

02:33.330 --> 02:36.180
And then we could think about what sort of technology

02:36.180 --> 02:38.460
we could build to deliver what that press release

02:38.460 --> 02:39.720
was promising.

02:39.720 --> 02:41.310
So if you're building something that the world

02:41.310 --> 02:43.230
will be excited about,

02:43.230 --> 02:44.670
that's what matters at the end of the day.

02:44.670 --> 02:46.770
How it gets done under the hood they don't care,

02:46.770 --> 02:48.390
as long as it works reliably

02:48.390 --> 02:50.640
and does what you want it to do.

02:50.640 --> 02:51.990
Again, you should design your systems

02:51.990 --> 02:53.940
from the customer backwards.

02:53.940 --> 02:55.260
So how do you do that?

02:55.260 --> 02:57.600
Well, if you're thinking about the customer experience,

02:57.600 --> 02:59.070
what the customer sees

02:59.070 --> 03:01.410
is usually some sort of user interface, all right?

03:01.410 --> 03:03.840
So start with what builds that user interface.

03:03.840 --> 03:06.240
What sort of web servers are you using to host that?

03:06.240 --> 03:08.100
What platform is it running on?

03:08.100 --> 03:08.940
What services?

03:08.940 --> 03:11.610
Then working backwards a little bit more will power that UI.

03:11.610 --> 03:14.700
So what databases do I need to feed a data?

03:14.700 --> 03:16.380
What services do I need to build

03:16.380 --> 03:17.880
in front of those databases?

03:17.880 --> 03:21.780
What caching layers do I need to power that user experience?

03:21.780 --> 03:22.830
Work backwards further.

03:22.830 --> 03:25.590
Where does that data come from that powers these services?

03:25.590 --> 03:26.423
How do I generate it?

03:26.423 --> 03:28.200
How do I collect it, right?

03:28.200 --> 03:30.870
So working backwards from what you're delivering

03:30.870 --> 03:33.090
will lead you down to those lower level details

03:33.090 --> 03:36.000
and technical decisions as opposed to working forward

03:36.000 --> 03:38.190
from some preconceived notion you have

03:38.190 --> 03:40.500
of the technology that you want to use.

03:40.500 --> 03:42.450
So, very important technique here.

03:42.450 --> 03:45.180
Focus on what you're delivering, meeting your requirements

03:45.180 --> 03:47.220
and you'll be far more likely to deliver a system

03:47.220 --> 03:48.450
that meets your needs

03:48.450 --> 03:50.190
and is not overly complex.

03:50.190 --> 03:54.030
That means you'll deliver it most likely on time

03:54.030 --> 03:55.650
and it will be easy to maintain

03:55.650 --> 03:57.600
and everybody will be happy in the long run.

03:57.600 --> 04:00.630
Yes, engineers want to work on complex systems,

04:00.630 --> 04:02.190
so do you, right?

04:02.190 --> 04:03.990
I've seen situations where we call it

04:03.990 --> 04:05.490
retention driven development,

04:05.490 --> 04:07.680
where people do work forwards from

04:07.680 --> 04:10.410
interesting technologies just to keep their engineers happy

04:10.410 --> 04:12.750
'cause they're so afraid of losing them in this environment.

04:12.750 --> 04:14.400
But you can compensate for that.

04:14.400 --> 04:17.580
Again, if you're the team that gets stuff done,

04:17.580 --> 04:18.510
that's addictive.

04:18.510 --> 04:20.070
People wanna be a part of that team

04:20.070 --> 04:24.127
and maybe you can give your engineers outlets for R&amp;D work.

04:24.127 --> 04:25.740
One thing I used to do

04:25.740 --> 04:27.810
was hold these monthly sessions

04:27.810 --> 04:29.760
where we just read through a latest research paper

04:29.760 --> 04:30.630
and talked about it

04:30.630 --> 04:33.090
and brainstormed ideas about how it might be relevant

04:33.090 --> 04:34.140
to what we're doing.

04:34.140 --> 04:35.400
You wanna make sure that people are staying

04:35.400 --> 04:37.530
on top of the latest developments in their field.

04:37.530 --> 04:39.240
That's always important for people,

04:39.240 --> 04:40.410
but it doesn't mean you need to apply

04:40.410 --> 04:43.020
those latest developments to every project, right?

04:43.020 --> 04:44.310
Maybe you're giving them some little bit of time

04:44.310 --> 04:48.060
on the side too to experiment with these things as well.

04:48.060 --> 04:50.010
If you are that productive,

04:50.010 --> 04:52.140
odds are you can take a few hours a week

04:52.140 --> 04:53.760
to let your engineers experiment with new things

04:53.760 --> 04:55.080
and try new ideas

04:55.080 --> 04:56.640
and maybe experiment with some of these

04:56.640 --> 04:58.290
more complex techniques.

04:58.290 --> 05:00.150
Sometimes it works out.

05:00.150 --> 05:03.660
I remember when I was running recommender systems at Amazon

05:03.660 --> 05:05.430
there was one guy who came up with an idea

05:05.430 --> 05:08.280
of using something called latent semantic analysis

05:08.280 --> 05:09.930
to generate recommendations.

05:09.930 --> 05:11.130
And at the time everyone was like

05:11.130 --> 05:13.110
that's overly complex, that's crazy.

05:13.110 --> 05:14.790
Well, something simpler we'll do.

05:14.790 --> 05:17.040
But he got really interesting results out of it.

05:17.040 --> 05:20.490
And by taking the time to just prototype it on the side,

05:20.490 --> 05:22.890
it was actually very educational for the team

05:22.890 --> 05:25.380
and informed some of our decisions going forward.

05:25.380 --> 05:26.610
So it's not either or,

05:26.610 --> 05:28.980
you don't have to abandon all cool technology

05:28.980 --> 05:31.800
just to favor simple solutions.

05:31.800 --> 05:33.100
Sometimes you can do both.
