Hammock Driven Development - Rich Hickey

ClojureTV
16 Dec 201239:49

Summary

TLDRThe speaker emphasizes the importance of deep, uninterrupted thinking in problem-solving, particularly in software development. They advocate for allocating time to truly understand and analyze problems before seeking solutions, and stress the value of a methodical approach that includes writing down ideas, considering multiple solutions, and being open to change. The speaker also highlights the role of sleep and relaxation in fostering creativity and the ability to make strategic decisions, ultimately leading to better problem-solving outcomes.

Takeaways

  • 🤔 The importance of dedicating time to deep, uninterrupted thinking on a problem is emphasized, as it can lead to valuable insights and solutions.
  • 🛠️ Software development should focus on solving problems rather than just building features, as features are attributes and not the purpose.
  • 🔍 Understanding the problem is crucial; it involves identifying the problem, assessing proposed solutions, and recognizing the difference between features and actual problem-solving.
  • 📚 The speaker recommends George Polya's book 'How to Solve It' for learning problem-solving techniques, although it's math-focused, the principles are applicable to software development.
  • 🔎 Researching existing solutions to similar problems can provide a solid foundation and accelerate the learning process in software development.
  • ✍️ Writing down ideas, requirements, and potential solutions is important for clarity and to aid the problem-solving process.
  • 🧠 The speaker discusses the dual nature of the mind, with the waking mind being analytical and the background mind being strategic and good at synthesizing information.
  • 💤 Sleep plays a significant role in processing information and sorting out ideas, which is beneficial for problem-solving.
  • 📈 The speaker suggests working on multiple projects to avoid getting stuck on one and to allow the brain to process different problems simultaneously.
  • 🔄 Being open to changing your mind and adapting solutions when new facts or requirements arise is part of the iterative nature of problem-solving.
  • 🚫 The speaker encourages not being afraid of being wrong, as it's a natural part of the learning and problem-solving process.

Q & A

  • What is the speaker emphasizing about the importance of thinking deeply about a problem?

    -The speaker emphasizes that deep, uninterrupted thinking about a problem is crucial for solving it effectively. They mention the value of dedicating time to contemplate a problem for an extended period without distractions, which can lead to better solutions and insights.

  • Why does the speaker consider the ability to think about something for an entire hour or a whole day valuable?

    -The speaker considers this ability valuable because it allows for focused, deep thinking, which is less common in today's fast-paced world. This kind of focused thinking can lead to breakthroughs and a better understanding of complex problems.

  • What is the speaker's perspective on the role of analysis and design in software development?

    -The speaker believes that analysis and design are essential steps in software development that are often overlooked. They argue that these steps help in identifying the problem and assessing the proposed solution, which is more important than just building features.

  • How does the speaker address the issue of misconceptions in software development?

    -The speaker points out that misconceptions often arise from not having a clear understanding of the problem before starting the development process. They suggest that problems of misconception are not typically addressed by testing or other defect-correction methods, and instead, require a better initial understanding of the problem.

  • What is the speaker's advice for gaining confidence in tackling something new?

    -The speaker advises that to gain confidence in doing something new, one should understand the problem, assess the proposed solution, and be willing to learn from others' experiences. They also emphasize the importance of practice and learning from mistakes.

  • What is the significance of the book 'How to Solve It' by Polya in the context of the speaker's talk?

    -The speaker mentions 'How to Solve It' as a valuable resource for learning and practicing problem-solving skills. They suggest that the techniques and insights from the book can be applied to software development, despite its mathematical focus.

  • Why does the speaker suggest taking a break from the computer to focus on a problem?

    -The speaker suggests that taking a break from the computer helps to avoid distractions and allows for a more focused, strategic thinking process. This break can be spent in a hammock or in a quiet place, which can lead to better problem-solving and decision-making.

  • What is the speaker's view on the role of sleep in problem-solving?

    -The speaker believes that sleep plays a crucial role in processing information and reinforcing memory. They suggest that the subconscious mind continues to work on problems during sleep, often leading to solutions or insights upon waking.

  • How does the speaker recommend dealing with the limitations of working memory?

    -The speaker recommends writing down all aspects of the problem, which allows one to 'juggle' different parts of the problem in their mind. This process helps in managing the limitations of working memory and enables a more comprehensive understanding of the problem.

  • What is the speaker's approach to handling multiple projects simultaneously?

    -The speaker suggests working on multiple projects at once, switching between them when stuck or when the 'loading time' for a problem is complete. This approach helps in keeping the mind stimulated and can lead to breakthroughs in different areas.

  • How does the speaker address the possibility of being wrong in the problem-solving process?

    -The speaker encourages embracing the possibility of being wrong as a natural part of the problem-solving process. They emphasize the importance of being open to new ideas, adapting to changing facts, and not being afraid to change one's mind when necessary.

Outlines

00:00

🤔 Reflecting on Deep Thought and Confidence

The speaker discusses the importance of dedicating time to deep thought, recalling the last moment of uninterrupted reflection. They emphasize the value of spending an hour or a day contemplating an idea and the rarity of such opportunities. The speaker also explores the concept of confidence, particularly in the context of software development, and the challenges of tackling new problems. They highlight the significance of understanding and addressing misconceptions in software development and the importance of testing and quality assurance.

05:01

📚 The Role of Analysis and Design

The speaker critiques the traditional approach to analysis and design, which was often criticized for being too process-oriented and inflexible. They argue for the importance of spending time on understanding the problem and assessing the proposed solution. The speaker emphasizes that programming should focus on solving problems rather than merely building features. They also discuss the tendency to avoid problems and the need to practice problem-solving skills, referencing Polya's book 'How to Solve It' as a guide.

10:03

🔍 Understanding and Solving Problems

The speaker delves into the process of problem-solving, starting with clearly stating the problem. They stress the importance of understanding the problem's characteristics and constraints, as well as acknowledging what is unknown. The speaker suggests looking at other solutions to similar problems as a way to quickly gain insights. They also advocate for writing down the problem-solving process and being critical of one's own ideas, as well as considering trade-offs and questioning unknowns.

15:04

💭 The Power of the Background Mind

The speaker discusses the concept of the background mind and its role in problem-solving. They explain that while the waking mind is good at tactical decisions, the background mind is better at strategy and making connections. The speaker suggests using the waking mind to assign tasks to the background mind, such as thinking about a problem while sitting in a hammock. They also mention the importance of sleep in processing information and sorting out ideas.

20:06

🛠️ Practicing Problem-Solving

The speaker emphasizes the importance of practice in problem-solving. They suggest maintaining focus and using tools like a hammock to facilitate deep thought. The speaker also talks about the need to balance work and personal life, communicating the importance of focused work to those around you. They highlight the importance of engaging both the waking and background mind in the problem-solving process and the value of stepping away from the computer to think.

25:08

🔄 Juggling Complex Problems

The speaker addresses the challenge of working on complex problems with more components than can be held in working memory. They recommend writing down all aspects of the problem and using the background mind to process this information. The speaker suggests visualizing the problem and switching between different components, like juggling balls, to maintain focus. They also stress the importance of giving the brain time to process information, even if it means waiting overnight for solutions to emerge.

30:10

🌟 Capturing and Evaluating Ideas

The speaker talks about the process of capturing ideas that emerge from the background mind, especially upon waking. They emphasize the importance of not getting stuck on a single problem and switching between projects to stimulate the background mind. The speaker also discusses the need to evaluate ideas critically and be open to changing them in light of new information or requirements. They advocate for not being afraid of being wrong and for embracing the iterative nature of problem-solving.

Mindmap

Keywords

💡Problem Solving

The process of identifying, analyzing, and finding solutions to problems. In the video, problem-solving is emphasized as a core skill for software developers, where the speaker discusses the importance of understanding the problem before finding solutions and the value of practice in improving this skill.

💡Analysis and Design

The initial steps in software development that involve understanding the problem and assessing the proposed solution. The speaker argues that these steps are often overlooked but are crucial for quality and avoiding misconceptions about the problem at hand.

💡Misconception

A false or mistaken understanding of a concept or problem. In the context of the video, misconceptions are highlighted as a common issue in software development, where developers may not have a clear idea of what they are trying to achieve before they start coding.

💡Focus

The ability to concentrate on a particular task or problem without distraction. The speaker emphasizes the importance of maintaining focus, especially during the design phase of software development, to avoid being overwhelmed by the complexity of the problem.

💡Abstraction

A concept in which complex information is reduced to simpler, more manageable parts. In software development, abstractions help in creating a more strategic approach to problem-solving by focusing on the big picture rather than the details.

💡Background Mind

A term used to describe the subconscious or unconscious thought processes that occur outside of immediate awareness. The speaker suggests that the background mind is good at making connections and synthesizing information, which is crucial for solving complex problems.

💡Sleep

The natural state of rest for the body and mind, which is essential for cognitive functions like memory and problem-solving. The speaker highlights the role of sleep in reinforcing memory and sorting out information, which aids in finding hidden relations and solutions to problems.

💡Trade-offs

The act of balancing competing needs or desires, often resulting in giving up one thing to gain another. In software development, trade-offs are made when choosing between different solutions, each with its own set of advantages and disadvantages.

💡Quality Assurance

The process of ensuring that a product or service meets certain standards of quality. In the context of software, this involves testing and verifying that the software performs as expected and is free from defects.

💡Practice

The act of repeatedly performing an activity to improve one's skill or proficiency. The speaker emphasizes that problem-solving, like any other skill, can be improved through practice, and recommends resources like Polya's book 'How to Solve It' for learning problem-solving techniques.

Highlights

The importance of dedicating time to deep thinking on a problem without distractions.

The value of spending an entire hour or day contemplating an idea without interruption.

The distinction between features and problems, emphasizing that software development should focus on solving problems, not just adding features.

The necessity of understanding the root of a problem before attempting to solve it, rather than just addressing symptoms.

The concept that most significant software problems stem from misconceptions about what the problem actually is.

The importance of analysis and design in the software development process, as they help identify and assess the problem and proposed solution.

The idea that problem-solving is a skill that can be practiced and improved over time.

The recommendation to write down and analyze the problem, including unknowns and potential trade-offs.

The suggestion to look at other solutions to similar problems to gain insights and avoid starting from scratch.

The importance of being critical and discerning when evaluating potential solutions and trade-offs.

The concept of using the 'background mind' for strategic thinking and making connections, as opposed to the 'waking mind' for tactical decisions.

The idea that sleep and downtime are crucial for processing information and solving problems subconsciously.

The strategy of juggling multiple projects to keep the mind stimulated and avoid getting stuck on a single problem for too long.

The importance of writing down ideas and challenges to solidify them and make them actionable.

The acceptance that being wrong is part of the problem-solving process and should not be feared.

The recommendation to switch between projects to allow the mind to process and find solutions over time.

The idea that testing and iterating on solutions is a crucial part of the problem-solving process.

Transcripts

play00:19

as I said yesterday I swapped the stalks

play00:24

around so this is the more philosophical

play00:26

talk as well to the titles I couldn't

play00:33

decide some of them were semi cranky in

play00:43

those employments and then war can be a

play00:48

great a great feat or line because so

play00:52

this is about step one this is this is

play00:59

just an experience report it's not

play01:01

advocacy there's a little methodology

play01:03

here or science or anything else so I'd

play01:09

like you to try think about when was the

play01:10

last time that you thought about

play01:12

something for an entire hour like nobody

play01:16

bothered you and you had an idea and you

play01:18

sat for an hour thought about how about

play01:23

for a whole day does everybody remember

play01:27

less than a second thought about

play01:28

something for a whole day

play01:32

however over a course of a month we had

play01:35

something you're working on and

play01:38

obviously not spending all the time

play01:41

every day when you start staying into a

play01:43

month or a year these are tremendously

play01:51

valuable moments if you get to have them

play01:54

at all

play01:56

I consider myself extremely lucky to

play01:58

have had the ability to think about

play02:01

probably three different things for a

play02:04

year or more one of them is closure

play02:10

and there's nothing I prize more than

play02:13

that kind of time the other thing I'd

play02:16

ask is what was less than that you felt

play02:17

confident trying to do something you had

play02:20

never done before

play02:21

and what do you think it takes to become

play02:25

confident in turn something you've never

play02:27

done before right obviously a software

play02:29

developers a lot of times we're doing

play02:31

the umpteenth application that takes

play02:33

something out of a database and puts it

play02:35

on the web

play02:36

but the lucky you are luckier you are

play02:38

the more likely you are to encounter

play02:40

problems you've never done before and

play02:43

how do you end up you know how do you

play02:46

start doing that and not feel incredibly

play02:50

at risk so sorry about sit by talking

play02:55

about some software development you know

play02:57

things we all know to be true right we

play03:00

hate bugs and our programs of trying to

play03:01

write quality programs and we know if we

play03:04

let the programs reach the field it's

play03:07

incredibly expensive to you know fix

play03:10

inadequacies and the artists in the

play03:13

program

play03:14

right so we say okay we'll have a big

play03:16

testing process and quality assurance

play03:18

and even that we know is not so great

play03:21

because the sort of has this removal you

play03:24

know this distance from the development

play03:25

effort which is not good so now we know

play03:30

we know what to do in this area right we

play03:33

fix bugs while we're coding by testing

play03:37

and development and this is the best way

play03:39

to avoid bugs in our applications right

play03:46

no answer kids did you notice that I

play03:50

learned how to make each bullet this

play04:04

menu item no definitely absolutely

play04:08

positively not the least expensive place

play04:11

to fix bugs is when you're designing

play04:13

your software which everybody does yes

play04:19

right I will contend of all the things

play04:23

I'm saying here watch it which are very

play04:25

very extremely fuzzy that without a

play04:27

doubt most of the big problems we have

play04:30

with software our problems of

play04:32

misconception we don't have a good idea

play04:35

of what we're doing before we do it and

play04:36

then go go go go and we do everything

play04:38

you know we have practices and all kinds

play04:42

of stuff and we feel really good about

play04:43

ourselves after that point but if you

play04:46

mess it up you know as Mark said in step

play04:48

one it is not going to turn out they're

play04:52

not problems of implementation there are

play04:54

problems of implementation obviously and

play04:56

testing and other things help with those

play04:58

but problems of misconception are not

play05:01

generally addressed by testing or type

play05:05

systems or the things we use to correct

play05:07

defects and implementation right there

play05:11

aren't really type systems I can tell us

play05:13

if we've got a good idea

play05:17

or what we're doing

play05:19

addresses that idea so I'm going to talk

play05:23

a little bit about analysis and design I

play05:25

know that so nineties and ugly and was

play05:30

rightfully you know criticized and

play05:34

really dropped because you know people

play05:38

considered it to be about process and

play05:40

drawing pictures and you know knowing

play05:43

everything about everything and making

play05:44

comprehensive plans and the waterfall

play05:46

model and there was amazing amounts of

play05:49

stuff that was terrible about this but

play05:52

that doesn't mean that the the step

play05:56

before go do it is not an important step

play05:59

and I think we don't spend enough time

play06:02

and energy or or make enough time or get

play06:06

allocated time you know it may not be a

play06:07

matter of our choice if we say we'd like

play06:09

to spend some time thinking about it but

play06:10

we have to ship something next week but

play06:13

we are definitely suffering in quality

play06:15

because we we don't spend the time here

play06:16

and so I'd like to do is sort of just

play06:18

whatever you think analysis in the

play06:20

design is like you just forget for the

play06:22

moment let's try to make a really simple

play06:24

definition analysis and design is about

play06:27

two things identifying some problem that

play06:31

we're trying to solve and assessing our

play06:34

proposed solution in terms of whether or

play06:37

not it solves that problem that's really

play06:40

what it's about

play06:42

about anything else right we should be

play06:46

solving problems but we should not be

play06:48

building features there's nothing about

play06:51

the feature what is feature

play06:53

features just an attribute of something

play06:56

is the shiny you know chrome knob on

play06:59

something it's not the purpose of the

play07:02

car there's no guarantee you if you put

play07:05

together a feature list even if it comes

play07:07

from the customer that is going to solve

play07:10

their own problem or that solves any

play07:12

problem or that the features when you

play07:14

put them together don't introduce a

play07:16

whole ton of other problems right so

play07:18

programming and writing software is not

play07:20

about completing this features in

play07:24

particular features provided by users in

play07:27

spite of their best efforts to satisfy

play07:30

themselves or often really not good

play07:33

ideas and you've got to dig underneath

play07:35

it and figure out what problem they have

play07:37

and what's the best solution to it and

play07:39

then reconcile it with whatever they

play07:41

asked for we also have a tendency

play07:44

because we're we're all smart and we

play07:46

love being smart and sort of figuring

play07:49

out how to make things go that you know

play07:51

figuring out how to make something go is

play07:53

good no matter what it took to do it

play07:56

right so if we can find a way to get

play07:58

around a problem we're like whoo that's

play07:59

great and it's not great right or

play08:02

voiding problems which we're all capable

play08:04

of doing very capable of doing isn't the

play08:07

same as solving them so we should really

play08:08

try to support on solving problems and

play08:10

the thing I'm going to talk about today

play08:12

is really that there there's a bunch of

play08:17

technique and

play08:18

skill to solving problems and the first

play08:22

one is just to make an effort to

play08:25

understand the problem you're working on

play08:26

to recognize identify it put it

play08:29

somewhere and talk about it so problem

play08:33

solving is definitely a skill I think

play08:36

you know you shouldn't take away from

play08:37

this talk that you know there's a

play08:39

certain kind of person who's like good

play08:40

at problem solving and they get to do

play08:42

this part of the job and then we can

play08:44

practice these other things you can

play08:46

practice this part

play08:48

Polya wrote this amazing book called how

play08:51

to solve it in 1945 or something which

play08:54

is about how to practice how to practice

play08:56

and what are the techniques

play08:58

sobbing math problems in this case and

play09:01

it's a terrific book full of great

play09:04

insight and if you've never read it go

play09:07

on to Amazon right after my talk and

play09:09

order yourself I'm happy

play09:11

one of the things that's not so great

play09:13

about the book is that it is in the math

play09:15

space right and in that space this is

play09:18

really nice thing that happens when

play09:20

you're done and you think you have an

play09:21

answer if you have all the techniques of

play09:23

mathematical proof to determine if you

play09:26

actually have where as a software

play09:28

developers you don't have that right

play09:31

there's no way to prove that you have

play09:33

solution to somebody's ecommerce site

play09:36

problem right there's no mathematical

play09:39

techniques and there's not going to be

play09:41

any anytime soon that will let us do

play09:43

that but it is a skill and it is

play09:46

something you can practice this

play09:46

something you can learn about and and

play09:49

it's worth doing right because as human

play09:52

beings we get good at what we practice

play09:53

it doesn't matter what it is it's

play09:55

amazing examples of people practicing

play09:57

things that they seem to have no

play09:59

potential hope to become good at and

play10:02

they get good at it because they

play10:03

practiced it if you practice problem

play10:07

solving really practice a problem

play10:08

solving you will get good at it if you

play10:11

practice methodology X you will get good

play10:15

at that and I'd like you to ask yourself

play10:20

where do you think there's more leverage

play10:22

I don't care what X is pick any X you

play10:25

want would you rather be good at it or

play10:28

the general skill of solving problems

play10:34

so what do we need to do if we're going

play10:35

to work on solving problems what what is

play10:37

what is the activity like the first

play10:40

thing is to actually say I am solving

play10:42

this problem this problem is this bla

play10:44

bla bla bla bla and therefore a bla I

play10:47

have seen so much software made where no

play10:50

one ever said that no one ever wrote

play10:52

that down and then we have the whole

play10:54

system and no one said what problem is

play10:57

supposed to solve if we're not solving

play10:59

problems I have no idea why we're in

play11:01

this room we absolutely should be

play11:03

working on solving problems which means

play11:04

we should be we should be enumerated our

play11:08

and then from the mental standpoint

play11:10

which I'll talk about a little bit later

play11:11

it is actually important to say them out

play11:13

loud right as the person who's trying to

play11:16

solve a problem say say have a

play11:18

conversation with somebody in your group

play11:20

and say we need to solve this the

play11:22

problem the problem is you know rants or

play11:24

talk and you have a little conversation

play11:25

or write it down but just like you use

play11:29

the you know the practice of repeating

play11:30

somebody's name or introducing them as a

play11:32

mnemonic to help you remember their name

play11:35

it's the same thing this is the seed of

play11:37

solving the problem is stating it so the

play11:42

next the next part which is definitely

play11:44

trigger and Polly's book is great and

play11:46

it's got a lot of practical things

play11:47

many of these are overlap what he said

play11:50

is to understand the problem right so so

play11:53

we said we have this problem I think we

play11:56

need a no single database right there's

play12:00

something missing

play12:03

we have this problem we need a no single

play12:05

day to ransom we haven't actually said

play12:08

you know why what are the

play12:11

characteristics of this problem to lead

play12:12

us to this solution space and and this

play12:15

is where all the interesting work is I

play12:17

think in software development right and

play12:19

so the first step is what do you know

play12:21

about what you're trying to do there's

play12:23

definitely gonna be a bunch of facts

play12:24

there will be customer requirements

play12:26

there will be other things they'll be

play12:28

contact steal the system has run on this

play12:30

kind of box has to run for this long it

play12:32

can consume more more than this many

play12:33

watts or has to support than 10 million

play12:36

users whatever it is there are those

play12:38

kinds of things and constraints all this

play12:41

stuff or facts you know about what

play12:42

you're supposed to do right there will

play12:45

be things that right away you know you

play12:47

don't know right I wonder where we're

play12:53

going to get you know the inference of

play12:56

data as an input to this thing what

play13:00

we're going to do when our main data

play13:01

source word is isn't available do we

play13:02

have a secondary thing there'll be

play13:03

things like that of course there will be

play13:05

things that you don't know or you don't

play13:07

know well that's fair but if there's

play13:11

things you don't know

play13:14

you should think about them now the

play13:15

other thing to do is to say everybody

play13:17

says doing X I have this great idea for

play13:21

X if you know that you're the only

play13:23

person in the world ever had this

play13:25

problem self that's very very unlikely

play13:27

so go find some other solutions to

play13:31

similar problems you know are there any

play13:33

others that you know about and what can

play13:35

you find out about them because looking

play13:37

at other solutions the same problem is

play13:39

the number one way to get up to speed

play13:41

really quickly and start working ahead

play13:44

of you know the best known solutions in

play13:47

this space and then because what you'll

play13:49

have to do that will just be an

play13:51

incremental step above what the last guy

play13:53

did but if you're ignoring what the last

play13:55

guy did you're starting from scratch so

play13:58

you definitely want to look around in

play13:59

the space all right now I'm not

play14:02

advocating a methodology or anything but

play14:05

if you're going to bother to do all this

play14:06

work you should write it down somehow

play14:10

some way I don't care about the other

play14:14

thing you have to do is you have to be

play14:15

discerning yep that you have to be

play14:17

critical and we're at sort of in this

play14:20

world because this Willis community

play14:22

stuff and it's like I just hear awesome

play14:26

it's like awesome happy I just heard

play14:28

like 50 times a day not everything is

play14:31

awesome all right and so it's hard to

play14:37

talk about other people's stuff not

play14:38

being awesome so just I mean mainly

play14:40

focus on your own stuff in particular as

play14:43

you're finding solutions I should try to

play14:45

you know enumerate a solution to a

play14:47

problem look for defects in your own

play14:49

solution and of course you have a whole

play14:51

talk about this because there will be

play14:53

there will be technical errors there

play14:55

will be errors in logic they'll also be

play14:57

errors of taste and judgment and

play15:00

abstraction and all those kinds of

play15:02

things it all feeds into this and

play15:03

entire talk in this this area but

play15:05

whatever issues you can find in your own

play15:08

solutions try to solve those two right

play15:11

away upfront if you've added so the

play15:16

other thing you see is we're gonna do

play15:19

this oh he's using Ossie Davis oh that's

play15:21

great it has these Co 10 attributes is

play15:23

awesome it's really easy to get excited

play15:28

about the good parts of what you do but

play15:30

you should be looking for trade-offs the

play15:32

chances of there being no trade-offs in

play15:35

any solution are slim the other thing is

play15:40

just this again this what what don't you

play15:42

know that if if there's stuff you know

play15:44

you don't know there are questions you

play15:46

should be asking in order to find out

play15:48

what you don't know you don't know

play15:52

everything so there should be question

play15:56

marks on the whatever it is you want to

play15:58

use that you're going to write all this

play16:00

stuff down there should be question

play16:02

marks on that page if there are no

play16:04

question marks you're missing the step

play16:08

the other thing is to think about none

play16:13

of us are born knowing how to write

play16:15

software none of us are born knowing

play16:17

about sequel or the characteristics of

play16:20

the web or the protocols or anything

play16:22

else

play16:23

and if you're trying to solve the

play16:25

problem especially in a space where you

play16:27

haven't done it before you're going to

play16:29

have a very limited ability to come up a

play16:31

solution if you don't have a lot of

play16:33

input you're going to need to get a lot

play16:36

of different inputs so that you can let

play16:38

your brain go around between them and

play16:39

say oh yeah this idea and that idea are

play16:42

connected to each other and therefore I

play16:44

can do this other thing

play16:45

if you only take a really narrow slice

play16:47

of I see exactly what I'm doing right

play16:49

now right the second to deliver next

play16:51

week you're not going to have enough

play16:53

inputs to make decisions so you want to

play16:56

read about the kind of space that you're

play16:59

in widely all right very specifically

play17:01

with us other people try to do exactly

play17:03

the same thing and then broadly there's

play17:05

other characteristic problems and maybe

play17:07

even if you want go try to find research

play17:10

papers that are kind of in the same

play17:11

space it's amazing the cool things you

play17:13

can find by searching something like ACM

play17:16

4 papers about the kind of it's like

play17:19

we can get a certain kind of hash code

play17:20

that does whatever you go into google

play17:23

type hash code that does whatever enter

play17:25

and if there's some scholarly and ACM

play17:28

references grab those papers even if you

play17:31

only understand like a tiny fraction of

play17:32

the paper it's likely to contribute to

play17:34

your ability to think about your problem

play17:36

the other thing is even if you're not

play17:38

going to tell the other guy when you're

play17:40

looking at other solutions be extremely

play17:43

critical I can't tell you how often

play17:46

you're going to find the next best idea

play17:48

by completely crucifying the last guy's

play17:51

idea at least in your own head all right

play17:53

take it apart right because when you

play17:57

take it apart you're going to find a

play17:58

couple of things maybe they didn't write

play18:00

down when they were doing it so

play18:04

everybody says designs about trade offs

play18:08

everybody knows this right

play18:12

but usually want to talk about

play18:13

trade-offs in their software let's talk

play18:14

about the parts of their software that

play18:16

suck I had to make these trade-offs that

play18:22

is not what a trade-off it is right you

play18:26

have to look at at least two solutions

play18:29

to your problem at least two and you

play18:32

have to figure out what's good and bad

play18:34

about those things right before you can

play18:37

say I made a trade-off so I really

play18:43

recommend that you do that and when you

play18:45

do it you might want to write that down

play18:48

somewhere okay so let's talk a little

play18:53

bit more about practice a big part of

play18:56

trying to do this work is maintaining

play18:58

your focus we had a really nice talk

play19:03

yesterday about flow and that that is a

play19:05

kind of a focus related concept and when

play19:09

you're trying to do design work you also

play19:12

need I think some of the most extreme

play19:14

focus you're going to ever need and so

play19:18

there's some cool aspects to the havoc

play19:20

one of the cool aspects to a hammock

play19:23

that you can go on a hammock and you can

play19:25

close your eyes and no one knows that

play19:26

you're not sleeping but they won't

play19:29

bother you because they think you might

play19:30

be sleeping so it's it's very cool

play19:36

computers are bad bad sources of

play19:39

distraction they're so bad especially

play19:41

for people like us something else

play19:46

besides what I'm trying to think about

play19:48

you desperately need to get away from

play19:50

the computer if you're trying to focus

play19:52

this it's almost impossible to focus

play19:55

sitting at a computer the other thing

play19:57

about focus is that you are going to be

play19:59

making trade-offs when you try to focus

play20:01

really intensely your gun to drop balls

play20:06

you're going to miss calling people back

play20:08

and responding to emails and doing your

play20:12

slides for conferences and

play20:14

the airport all the way there things

play20:19

like that that's just the game the one

play20:25

thing though is that you should

play20:27

communicate to people that you care

play20:29

about about this process and the fact

play20:32

that when you're doing it you're going

play20:34

to seem pretty far away and that's not a

play20:38

comment about the person that you're you

play20:40

know your care about it's just the

play20:42

nature of doing this kind of work so it

play20:45

is important to sort of do it a lot of

play20:47

people will not get time to do this all

play20:49

day every day or over the course of an

play20:50

entire week or if you're going to get

play20:51

some focus time you define what that is

play20:54

you know everybody knows about timeout

play20:57

time for little kids and what program

play20:59

isn't this focused I'm like look kids I

play21:01

need to go sit on the hammock and have

play21:03

nobody bother them

play21:06

so for me personally I think that that

play21:10

the process involves two parts of your

play21:14

mind and this is stuff that you're

play21:15

seeing those books written about this

play21:17

and whatever I haven't read them but but

play21:19

they seem to correspond to my personal

play21:21

experience which is that you sort of

play21:23

have this waking line and background

play21:25

line and you're waking mind is really

play21:28

good at that criticizing part it's

play21:30

extremely analytical and it's very very

play21:34

good at tactics right right now we need

play21:38

to make a decision you know the lion is

play21:40

chasing after us jump left we are really

play21:43

good at that that's what our waking mind

play21:45

is about keeping us alive and making

play21:49

short-term decisions and looking at the

play21:52

immediate leap present information and

play21:54

doing something about it however if you

play21:58

think you're going to sit down and look

play22:00

at a problem for the first time and

play22:01

stare at your computer and do whatever

play22:03

and have a conversation for 10 minutes

play22:05

and make a really great decision I don't

play22:09

think so

play22:09

I know I can't do that definitely not

play22:12

the problem with this kind of thing is

play22:14

it tends to push uphill who I see this

play22:17

movie that always okay here I have a

play22:19

choice left and right okay go right

play22:21

that's more up left to right it's right

play22:23

they left that's more up more up it's

play22:25

this part of your thinking is really

play22:27

good at finding the local maximum but

play22:32

it's not very good and getting off the

play22:34

track it's on and finding the fact that

play22:36

there's another hill over there that

play22:38

really takes you higher

play22:41

but this is a very very printable

play22:43

activity that you have to engage in I

play22:45

think if you want to use your entire

play22:47

brain and become very good at

play22:49

problem-solving and that is to think

play22:51

about using your waking time to assign

play22:54

tasks to your background line to

play22:59

actually think hard about something and

play23:01

create work for your background line

play23:04

that really is the point of the hammock

play23:07

and all this listing and all this we're

play23:09

going to talk about you're going to do

play23:10

when you're awake is actually to to give

play23:13

the other half of you stuff to do the

play23:16

other good thing about your waking mind

play23:17

is when you when you do think you have a

play23:18

great idea that you come up with in your

play23:20

background line your waking line is good

play23:23

at picking the other part saying you

play23:25

know you thought you woke up with this

play23:27

brilliant idea but now I'm seeing this

play23:28

this characteristic of it seems not so

play23:31

bright

play23:32

so let's talk about the background line

play23:34

I'm not going to directly equate it with

play23:36

the sleeping mind but the sleeping line

play23:39

is the number one instance of a

play23:40

background mind you can find access to

play23:43

your wrapper online during the day while

play23:45

you're awake but it's tricky it's good

play23:50

at making connections right the kind of

play23:54

thing like if I leave my if I make a Hut

play23:58

out of mud and it rains hard it will

play24:00

disintegrate is not necessarily the kind

play24:04

of thing that you can tactically figure

play24:05

out you or your background mind is going

play24:07

to know sort of aspects of all those

play24:09

different components that make the

play24:10

connections and synthesize them even

play24:12

when you think you're really hot at

play24:14

making decisions on the fly you're

play24:16

almost always just regurgitating

play24:18

something your background might has

play24:19

already figured out so the background

play24:21

light is good at synthesizing things

play24:23

it's about it's good about strategy

play24:25

right and so when mark talks about new

play24:28

abstractions and things like that

play24:30

abstractions are our software strategy

play24:33

right because the idea there is you're

play24:36

making some super global decision that's

play24:38

going to need to be correcting a whole

play24:40

bunch of contexts in which you can't

play24:41

make tactical decisions yet right what

play24:44

does it mean to make an abstraction

play24:45

you're going to drop drive libraries

play24:47

from you know what does it mean to put

play24:50

something in a programming language well

play24:51

I had no idea what you guys are going to

play24:53

do about you know with it right it's a

play24:55

it's a more strategic kind of thing you

play24:58

don't build a programming layers and say

play25:00

how will this programming language deal

play25:02

with HTTP requests what you want to do

play25:05

is give mark something that he can use

play25:08

and when he's got a tactical decision

play25:11

make about HTTP requests and that's a

play25:13

strategic kind of thinking and your

play25:16

background line is good at strategic

play25:17

thinking if you want to do abstraction

play25:19

you have to find time to do this thing

play25:22

because that's the part of your brain it

play25:24

comes from right it does abstraction it

play25:27

draws analogies right I think this is

play25:32

where you solve most non-trivial

play25:34

problems okay you can make good

play25:36

decisions in the moment otherwise but if

play25:39

you really try to solve something hard

play25:40

you've got to engage the other half of

play25:42

your of your head so I'm not just saying

play25:46

the scientific America say that when

play25:51

we're sleeping we process the

play25:54

information during the day because

play25:55

that's pretty obvious but that sleep

play25:59

reinforces memory which is good I mean

play26:01

it is important to remember what you're

play26:03

working on but more importantly it is a

play26:06

great sorter out of things so we had

play26:10

this whole I say I just advocated taking

play26:12

a lot of input my taking a lot of it but

play26:14

doing all this analysis of the

play26:16

requirements in the space right doing

play26:19

you know all the reading looking at you

play26:21

know competitive solutions and tearing

play26:22

them apart that's this is ton of stuff

play26:26

when you're going to decide what about

play26:28

that is important what is it when you're

play26:30

asleep and that's what happens

play26:34

evolution has solved this problem for us

play26:36

and that's the solution it came up with

play26:39

we can't ignore it we have to use it but

play26:45

the most critical thing is this one

play26:49

finding hidden relations and solving

play26:53

problems we were working on so imagine

play26:57

somebody says I have this problem this

play27:00

that and you look at it for ten minutes

play27:04

and say okay I'm going to go after the

play27:06

movies and do something else then you go

play27:08

to sleep you're going to solve that

play27:10

problem your sleep no or you're off and

play27:18

you didn't think about it did you no you

play27:21

didn't think about it you didn't think

play27:22

about it hard enough

play27:23

while you were awake for it to become

play27:25

important to your mind when you were

play27:26

asleep and this goes back to that

play27:28

feeding your background mind thing you

play27:30

really do have to work hard just think

play27:33

not typing it in just thinking about a

play27:35

problem during the day so that it

play27:37

becomes an agenda item for your

play27:40

background line that's how it works

play27:42

right it's when people were out there

play27:45

and they're like oh my god how am I

play27:46

going to find food and this is happening

play27:49

there but I know I saw help over there

play27:51

they seem to be by the water sometimes

play27:53

or whatever that's when you wake up as a

play27:55

caveman and say let's go hunt for the

play27:58

animals by the water it's not a logical

play28:02

deduction it seems like that when your

play28:05

foreground - or

play28:06

lysing it but there's no logic for that

play28:08

necessarily it's really a process of

play28:11

this very parallel kind of thinking so

play28:14

this is very important so we have a

play28:17

problem in general because we right

play28:19

we're just being cast right so for those

play28:21

more and more complex as time goes by

play28:25

and and we know there's a seven plus or

play28:28

minus two sort of working memory limit I

play28:33

and as smart as any of us are we all

play28:35

suffer from the same limit but the

play28:39

problems that we're you know called upon

play28:41

to solve are much bigger than that

play28:43

normal so what do we do if we can't fit

play28:46

the whole thing in our head at the same

play28:47

time how can we work on a problem with

play28:50

more than nine components right what I'm

play28:57

going to recommend is that you write all

play28:59

the bits down especially now you've

play29:01

written a lot about the problem right

play29:04

you know what the problem is you know a

play29:06

lot of facts about it you know

play29:08

constraints about where it runs you know

play29:10

you don't know you've asked yourself

play29:11

those questions you wrote them down I

play29:13

wish I do blog you looked at competitive

play29:17

things and said that works great over

play29:18

here but that part of that competitive

play29:20

thing sucks

play29:21

I hate that I wish that wasn't there you

play29:25

gave this huge agenda to your background

play29:27

line and when you're trying to load it

play29:32

up you need to survey and that's the

play29:35

point of writing it all down before if

play29:38

you've written all the stuff down

play29:39

including some sketch of how you want to

play29:42

problem you can go and just sort of jump

play29:45

around and look at that and sort of like

play29:48

you know how many balls can you juggle

play29:49

well you can only gentle something I can

play29:51

juggle at all

play29:52

but if we look at the seven plus or

play29:54

minus two thing to say we can juggle

play29:55

seven to nine balls but if you can

play29:57

imagine having an assistant who every

play30:00

now and then can take one of those out

play30:02

and put a different color in then you

play30:04

could juggle balls of twenty different

play30:06

colors at the same time as long as there

play30:07

were only nine in the air and any one

play30:10

point in time and that's what you're

play30:12

doing you're going to sort of look

play30:13

around at all these pieces and shift

play30:15

arbitrary shapes of seven into your head

play30:19

at different points in time

play30:24

maybe you'll draw pictures don't use

play30:27

that you'll melt it's not a methodology

play30:32

so go over and over but then you must

play30:36

again step away from the computer

play30:38

there's another really important

play30:40

important part of doing this which is to

play30:42

go and sit somewhere and have no input

play30:46

and close your eyes and not go to sleep

play30:49

close your eyes because we have this

play30:52

other thing right everybody knows what

play30:54

it is it's really hard to describe but

play30:55

does everybody have a concept of their

play30:57

own their minds I write what you see

play31:00

when you close your eyes and you start

play31:01

thinking about something it's this weird

play31:03

I mean is that actually technically

play31:04

visual though some people are really

play31:05

vibrantly visual I know for me it's I

play31:09

don't know I can't describe it but it's

play31:11

not

play31:12

realistic but you need to do that that

play31:15

that part is important for your brain

play31:18

because at that point you're switching

play31:21

out of sort of an input reception motor

play31:23

if you're just looking at your lists

play31:24

you're sort of in the mode of I'm

play31:26

getting input but when you're sitting

play31:28

and contemplating something and hashing

play31:31

it over in your head you don't have any

play31:33

other input which means you're

play31:35

exercising the recall I had looked at

play31:37

those 20 points let's say it was just 20

play31:39

I looked at those 20 points over and

play31:41

over and over again and I jumped around

play31:42

with it put between them now I close my

play31:45

eyes and I'm trying to recall them and

play31:47

think about them a little bit more in my

play31:49

head and you're going to find if you've

play31:51

done the last step going over and over

play31:53

you will actually be able to sit on a

play31:55

hammock and pull all the different parts

play31:57

of a fairly large problem in an

play31:59

aggregate admittedly maybe one at a time

play32:00

and think of a thing about them that way

play32:02

that exercise is really really important

play32:05

I don't know why it just is because it

play32:08

forces this recall thing that definitely

play32:10

makes those things agenda items for your

play32:12

background line so we'll call that

play32:15

mind's eye time now you're done

play32:19

cake is in the oven you just have to

play32:23

wait it's so good

play32:26

and and and one of the things I would

play32:30

say is at least wait overnight no matter

play32:32

how ill you you and your buddies talked

play32:34

about it and you like you just feel like

play32:36

such a hotshot today I have got this

play32:39

thing you know sleep on it at least one

play32:43

night at least if it's an important

play32:45

decision now how many people woke up

play32:52

this morning with the answer to a hard

play32:54

problem

play32:57

is a science science at work no it's

play33:02

really kind of an unfortunate thing if

play33:04

you're not thinking about this do you

play33:05

think what happened I worked hard all

play33:08

day right who I've done working time to

play33:12

relax unfortunately if you if you

play33:16

believe in what I'm saying today you're

play33:18

actually doing something kind of

play33:20

important when you're sleeping so

play33:22

occasionally you really have to give

play33:24

your brain a chance to do that other

play33:26

part of the job

play33:27

if you always deny it I don't think

play33:29

you're going to have the best results

play33:34

unfortunately sometimes overnight is not

play33:36

not enough some big problems especially

play33:39

finding really good abstractions or

play33:41

finding answers to things that satisfy a

play33:44

bunch of simultaneous constraints take a

play33:46

long time it just does and I'm I know

play33:51

everybody has to ship and everything

play33:53

else in that case a lot of what I'm

play33:55

saying doesn't apply and like I said

play33:57

before I consider it a huge opportunity

play34:00

when I get an extended amount of time to

play34:02

think about a problem because I know it

play34:04

I'll come up with a better answer but

play34:07

one of the ways you can deal with this

play34:08

and not get stymied by well let me just

play34:11

think about that for three months

play34:12

because most managers are not incredibly

play34:16

receptive to that sentence is to just

play34:22

work on more than one thing right not

play34:24

inside one day okay try to work on one

play34:28

thing each day but if over the course of

play34:31

time you have like three projects right

play34:34

it's quite possible to load one up and

play34:36

work on it for three days and find

play34:39

you're not finding answers to any of

play34:42

your question mark items or able to

play34:43

enumerate new possibilities so you kind

play34:46

of stuck a little bit just switch to

play34:48

another project and do that for a few

play34:50

days you have to advertise the loading

play34:52

up time it can take between an hour and

play34:55

an entire day to load up something so

play34:57

once you've done that you try to get at

play34:59

least the rest of the day or three days

play35:01

or more on it

play35:03

but don't get don't get hung up about

play35:05

the stuck thing just switch don't stay

play35:09

stuck switch or get morning but talk

play35:13

about it more

play35:14

you keep stimulating the pathway don't

play35:16

don't say stuck on but yeah then

play35:20

eventually cake comes out of the other

play35:21

you wake up and you have a great idea

play35:24

you think you know the answer to your

play35:26

problem or you have a good idea for a

play35:29

solution unfortunately sometimes you

play35:34

have an answer to that not the problem

play35:36

you were working on you're working on

play35:37

three projects and you're loaded up the

play35:39

project C and you woke up with the

play35:41

answer to project a that has to be okay

play35:44

right you just just switch and take

play35:47

advantage of it at least capture it

play35:49

right if you wake up with an answer to

play35:51

some other thing that you can't work on

play35:52

that day capture the results of this

play35:56

background process they're really useful

play35:59

finally you do have to take your great

play36:03

ideas and figure out if they're actually

play36:05

great by either analyzing the more which

play36:08

is certainly important but sometimes you

play36:10

have to write them and type them into

play36:11

your computer actually we all have to do

play36:14

this so you do eventually have the code

play36:18

it's fun Stu has this great sense he's

play36:20

seen some of my design

play36:22

sheets and document of despair or

play36:26

something it's like it seemed to be all

play36:28

like hey we can't do this this doesn't

play36:31

work like that question marks blah blah

play36:33

this other thing it was just like a

play36:34

whole it's all negative but it's all

play36:36

challenges to the problem-solving

play36:38

process it's not like it's not

play36:40

despairing it's positive it's saying I

play36:42

know what my challenges are and

play36:44

therefore I can work out but you spit

play36:48

this thing out now you have something so

play36:49

you tried it you try to try to avoid a

play36:53

lot of typing I know I do because if I

play36:58

think I've got an answer and the answer

play37:00

is small that's one of the most telling

play37:05

attributes that is probably good

play37:10

and what I would hope from doing this

play37:13

whole process is that you gain

play37:16

confidence in it after you've seen it

play37:18

work for you

play37:18

so that you say you know what I have

play37:20

never done this before but I really have

play37:22

thought about it and and this solution I

play37:24

came up with overnight feels awesome and

play37:27

whoo

play37:28

let's go it is important to look at what

play37:32

you did and to run it and see and find

play37:34

out new things about the solution and

play37:36

say I you know I had the supposition

play37:37

it's not correct I thought it would have

play37:39

this characteristic it doesn't et cetera

play37:41

et cetera I am not advocating a

play37:43

waterfall model you're going to try

play37:45

stuff and go back that's fine but don't

play37:48

lean on this right test-driven dentistry

play37:53

I don't think I could come up with a

play37:54

better thing right we can't really do

play37:59

that the last thing is you are going to

play38:03

be wrong I'm frequently wrong that's

play38:08

part of the game you're going to think

play38:11

of better ideas I think that's one of

play38:13

the most exciting things I think no

play38:14

matter of what I've ever thought of the

play38:16

fact that I know I'm going to think of

play38:18

something better as much as it will suck

play38:20

a little bit because I

play38:21

sometimes the best means that I'm still

play38:25

going it's still working so you will

play38:29

think of better ideas also the facts

play38:32

change you can change because of two

play38:35

reasons right one you missed some of

play38:38

them early on so they're due to you

play38:40

because you skip them what else do we

play38:42

have changing requirements right this

play38:46

just you know we all know this the facts

play38:49

will change when the facts change do not

play38:51

dig in do it over again and see if your

play38:55

answer is still valid in the context of

play38:57

the new requirements and new facts and

play38:59

if it isn't change your mind and don't

play39:02

apologize sometimes you'll just make

play39:06

mistakes errors in logic or you know

play39:08

miss you know you just you just get it

play39:10

wrong that's fine if I could advocate

play39:14

anything

play39:15

do not be afraid especially do not be

play39:19

afraid of being wrong so in summary this

play39:27

is a ramp

play39:28

there's no sir

play39:43

I have two minutes for questions yes

Rate This

5.0 / 5 (0 votes)

Related Tags
Problem SolvingSoftware DevelopmentDeep ThinkingAnalysisDesignConfidence BuildingStrategic ThinkingQuality AssuranceAbstractionContinuous Learning