Google I/O 2009 - The Myth of the Genius Programmer
概要
TLDRBrian Fitzpatrick and Ben Collins-Sussman discuss the myth of the 'Genius Programmer', emphasizing that collaboration is key in software development. They argue that programmers often feel insecure and hide their work, fearing judgment and mistakes. This results in low 'bus factors', which jeopardizes project stability. They advocate for early and frequent collaboration, transparency in sharing progress, and the importance of community in projects. They highlight that knowledge sharing and feedback are crucial for growth and innovation within teams, dispelling the notion that individual brilliance leads to success. The talk encourages embracing failure and iterative learning in programming.
収穫
- 👥 Collaboration is crucial for success in programming.
- 😓 Fear of judgment leads programmers to hide their work.
- 🚌 The 'bus factor' indicates project vulnerability.
- 📜 Documenting failures can prevent future mistakes.
- 🌟 There are very few true 'genius programmers'.
- 📆 Get feedback early to avoid wasted effort.
- 🛠️ Use code reviews to spread knowledge and skills.
- 👀 Transparency helps improve code quality.
- 🤝 Embrace failure as a learning opportunity.
- 📈 Foster a community around projects for better results.
タイムライン
- 00:00:00 - 00:05:00
The speakers, Brian Fitzpatrick and Ben Collins-Sussman, introduce their talk titled 'The Myth of the Genius Programmer,' providing insights based on their extensive experience in version control and open source.
- 00:05:00 - 00:10:00
They engage the audience in a survey to gauge their coding habits and introduce the idea that insecurity in coding leads individuals to hide their mistakes, which hinders collaboration.
- 00:10:00 - 00:15:00
The speakers explore human psychology, explaining how people idolize individuals like celebrity programmers and often associate success with solitary genius, which is a myth.
- 00:15:00 - 00:20:00
They challenge the notion of genius, emphasizing that real progress in technology and software development comes from collaboration rather than from individual, isolated genius efforts.
- 00:20:00 - 00:25:00
The importance of collaboration is highlighted, with references to the 'bus factor'—the risk if key individuals leave a project without shared knowledge among the team.
- 00:25:00 - 00:30:00
The speakers discuss that programming should involve constant feedback like compiler checks, advocating for early involvement of peers to enhance learning and collaboration.
- 00:30:00 - 00:35:00
The talk emphasizes that while some may have exceptional skills, everyone's contributions matter in a team dynamic, leveraging collective intelligence for better outcomes.
- 00:35:00 - 00:40:00
They stress dropping egos, sharing credit for team success, and that community is vital for healthy project development, drawing examples from the Apache Software Foundation.
- 00:40:00 - 00:45:00
Communication and feedback are reiterated as essential tools for improvement, advocating for kindness in criticism and learning from mistakes as necessary parts of the development process.
- 00:45:00 - 00:55:16
The final proposal encourages practicing collaboration routines and a mindset open to learning from others, learning from failures, and adjusting approaches to deepen understanding and growth within teams.
マインドマップ
ビデオQ&A
What is the main myth discussed in the talk?
The myth of the 'Genius Programmer' who works alone and creates masterpieces.
How does fear affect programmers according to the speakers?
Fear of looking stupid leads programmers to hide their work and avoid collaboration.
What is the 'bus factor'?
The bus factor is the number of team members that need to be incapacitated for the project to face serious issues.
What should developers focus on instead of individual genius?
Developers should focus on collaboration and building a community around their projects.
How does ego affect collaboration?
Ego can inhibit teamwork and open communication, leading to territorial behavior.
Why is it important to document failures?
Documenting failures helps others learn, prevents repeated mistakes, and contributes to collective knowledge.
What is the 'sweet spot' in collaboration?
The sweet spot is involving others in your project at the right time—not too early or too late.
How can teams ensure knowledge is shared across members?
Code reviews, documentation, and encouraging multiple team members to work on different parts of the project.
What makes a software project successful according to the speakers?
Successful projects involve collaboration, shared ownership, and an open attitude towards feedback and mistakes.
What should developers do if their project environment hinders collaboration?
They should seek to create or influence a better collaboration culture within their team.
ビデオをもっと見る
Make Thumbnails Like Pro | YouTube Thumbnail Tutorial
DeepSeek, TikTok, Temu: How China is taking the lead in tech - BBC World Service
The Arcade Conundrum
Wayang Cinema Dengan Lakon "Lahirnya Kurawa"
Heredity | Class 10 full Chapter | Class 10 Science Chapter 8 in Animation
How to Last Longer in Bed Naturally: 4 Effective Exercises for Men
- 00:00:01Fitzpatrick: Hello, and this is,
- 00:00:03despite other slides to the contrary,
- 00:00:05"The Myth of the 'Genius Programmer.'"
- 00:00:07And before we get started...
- 00:00:08Collins-Sussman: Should we do some introductions?
- 00:00:10Fitzpatrick: Should we do-- Your mic--can't hear your mic.
- 00:00:12Collins-Sussman: Can't hear my mic at all.
- 00:00:13Well, let's fix that.
- 00:00:14Hey. So let's do some introductions.
- 00:00:16Who are we?
- 00:00:18Fitzpatrick: My name is Brian Fitzpatrick.
- 00:00:19I usually go by Fitz.
- 00:00:21Collins-Sussman: My name is Ben Collins-Sussman.
- 00:00:23I usually go by Ben Collins-Sussman.
- 00:00:25Fitzpatrick: And we're basically a couple
- 00:00:26of long-time Version Control geeks.
- 00:00:28We worked on Subversion years ago.
- 00:00:31Collins-Sussman: And we have a lot of experience
- 00:00:32in the Open Source world,
- 00:00:34so we tend to speak about things that are related to Open Source,
- 00:00:36but not necessarily related to Open Source.
- 00:00:38Fitzpatrick: Right. When we started at Google,
- 00:00:40we worked on code.google.com.
- 00:00:42We still work with Google Code, actually.
- 00:00:44Collins-Sussman: Absolutely. And if you're interested
- 00:00:46in the project-hosting service, which is what my team works on,
- 00:00:49we're doing a talk tomorrow
- 00:00:51about our Mercurial implementation
- 00:00:53on top of Google infrastructure,
- 00:00:55which is a new feature on Google Code.
- 00:00:57So come see that.
- 00:00:58Fitzpatrick: But enough about us.
- 00:01:00Who are you?
- 00:01:01So we have a couple questions for you,
- 00:01:03so we can get an idea about the audience.
- 00:01:05Collins-Sussman: Survey. Fitzpatrick: Survey.
- 00:01:06So how many people in this room write code
- 00:01:08entirely by themselves only?
- 00:01:11Never with other people.
- 00:01:12Collins-Sussman: Or how many people
- 00:01:14like writing code by themselves?
- 00:01:15Fitzpatrick: All right, yeah.
- 00:01:17Collins-Sussman: All right, that's great.
- 00:01:18Fitzpatrick: So how many people work in teams?
- 00:01:20Okay, that's good. Everybody's awake.
- 00:01:22How many people in this room do code reviews
- 00:01:24as part of your development process?
- 00:01:27Collins-Sussman: Wow.
- 00:01:28Fitzpatrick: Is that good or bad?
- 00:01:29Collins-Sussman: I'm impressed. That's great.
- 00:01:31Fitzpatrick: All right, one last question.
- 00:01:33Who is afraid of looking stupid in front of other people?
- 00:01:37All right, we're in the right place.
- 00:01:39Excellent.
- 00:01:40Collins-Sussman: So before we go on,
- 00:01:41we should let you know these are very opinionated talks
- 00:01:43that Fitz and I give every year.
- 00:01:45They're really based on our own subjective experience,
- 00:01:47and that's fine.
- 00:01:49You know, if we say things that upset you or anger you,
- 00:01:51we've done our job. Fitzpatrick: Right.
- 00:01:53Collins-Sussman: And we encourage you,
- 00:01:54if you don't like it, you can...
- 00:01:55Fitzpatrick: If you have different opinions,
- 00:01:57please get your own talk at your own conference.
- 00:01:58[laughter]
- 00:02:00So before we go, though,
- 00:02:01we're gonna have you do a little more work.
- 00:02:03You're gonna have to read a few slides
- 00:02:05and check out some of our quotes here
- 00:02:08that we've got.
- 00:02:09Collins-Sussman: What is this talk about?
- 00:02:10Fitzpatrick: We're not gonna read them to you,
- 00:02:12so here's the first one.
- 00:02:17All right. The second one.
- 00:02:24Okay, and now for a really good one.
- 00:02:30Collins-Sussman: Okay.
- 00:02:31So what do these all have in common?
- 00:02:33You guys, any ideas here?
- 00:02:36All right, it's a rhetorical question, but...
- 00:02:38Right, so what's going on here,
- 00:02:39there's a lot of insecurity going on, right?
- 00:02:41This is a common feeling that we all have.
- 00:02:43So we're gonna go off of this.
- 00:02:46We're actually getting these responses last year at I/O.
- 00:02:48People were coming up to me and saying these sort of things.
- 00:02:50So it got us thinking about,
- 00:02:52"Well, what's going on with psychology here?
- 00:02:53"What's going on in people's heads?
- 00:02:54"Why do they want to hide their code so much?
- 00:02:56What's really at the bottom of this?"
- 00:02:58Which is how we came up with this talk
- 00:03:00and where we get this idea
- 00:03:01of the myth of the genius programmer.
- 00:03:03Let's do one more quote.
- 00:03:05Fitzpatrick: Okay.
- 00:03:10Collins-Sussman: Interesting. "Pervasive elitism."
- 00:03:12Fitzpatrick: This is rooted out of a general desire
- 00:03:14to not look stupid.
- 00:03:15It's sort of a-- you know, everybody, I think,
- 00:03:17wants to look like a smart developer.
- 00:03:19I know I certainly do, to some extent.
- 00:03:22And--but there's a lot of different reasons
- 00:03:25behind why people do this, and we're gonna start
- 00:03:26with something a little almost seemingly unrelated.
- 00:03:29But why do people buy products endorsed by celebrities, okay?
- 00:03:34Michelle Obama wore this dress to the Inauguration, okay?
- 00:03:37Boom, suddenly, it sold out, all right?
- 00:03:39Collins-Sussman: Or Michael Jordan
- 00:03:40wears Nike shoes, right?
- 00:03:42Everyone wants to buy Nikes
- 00:03:43'cause they love Jordan or basketball.
- 00:03:45What's really going on here?
- 00:03:47Like, do you actually believe that if you buy Air Jordans,
- 00:03:49you're gonna be as good as Michael Jordan?
- 00:03:51Fitzpatrick: Yes. Collins-Sussman: No.
- 00:03:52But there's something going on, right?
- 00:03:54There's some nugget of human psychology going on here,
- 00:03:56where it's in our instinct to find celebrities,
- 00:03:59find people to idolize and want to be like those people,
- 00:04:02and we sort of latch on to whatever simple behaviors
- 00:04:06or materialistic pieces that remind us
- 00:04:09of this celebrity or this behavior.
- 00:04:12Fitzpatrick: That's true in the world of programming as well.
- 00:04:14I mean, we have our heroes.
- 00:04:15We have Linus Torvalds, to some extent, Bill Gates even.
- 00:04:18Guido here at Google--
- 00:04:20you know, I mean, he wrote Python himself, right?
- 00:04:22Not quite true, you know?
- 00:04:24Collins-Sussman: Did Linus write Linux all by himself?
- 00:04:25Fitzpatrick: Right. We have Kernighan and Pike
- 00:04:27and Kernighan and Ritchie.
- 00:04:29I mean, these guys don't always deserve all the credit.
- 00:04:31They certainly deserve some of the credit.
- 00:04:33They're the leaders, right?
- 00:04:34Or they sort of started something,
- 00:04:36but they're mythologized.
- 00:04:38So the personas that they become
- 00:04:40are bigger than life, to some extent,
- 00:04:42and, to some extent,
- 00:04:44rooted in a little nugget of truth or fact
- 00:04:46and a whole lot of myth.
- 00:04:48Collins-Sussman: So that's why we have this myth.
- 00:04:50When we say "the myth of the genius programmer,"
- 00:04:52we're talking about the myth of, "Hey, here's a genius,
- 00:04:55"and genius goes off in a cave and writes this brilliant thing
- 00:04:59"and then reveals it to the world
- 00:05:00and, 'Oh, my gosh, this person's famous forever,'" right?
- 00:05:03Reality is, that's not really how it works at all.
- 00:05:06They're--In fact, geniuses...
- 00:05:08they are so incredibly rare that, I mean, it's almost--
- 00:05:11it's kind of a meaningless term, right?
- 00:05:13Fitzpatrick: Right. Collins-Sussman: Those folks--
- 00:05:14That myth just isn't true.
- 00:05:16Fitzpatrick: So, yeah, the ultimate geek fantasy
- 00:05:19is to go off into your cave and work and type in code
- 00:05:22and then shock the world
- 00:05:24with your brilliant new invention, you know?
- 00:05:26You--It's a desire to be seen as a genius by your peers.
- 00:05:29Collins-Sussman: But there's a flip side to that too, right?
- 00:05:31It's not just about, "I want everyone to--
- 00:05:33I want to be a genius and shock the world."
- 00:05:35It's also, "I'm insecure."
- 00:05:38And what I mean by that is, you know,
- 00:05:40"I also don't want people to see my mistakes.
- 00:05:41"All right, maybe I won't be a genius.
- 00:05:43"Maybe I won't shock the world with my brilliance,
- 00:05:45"but at least I don't want them to see my trail
- 00:05:47"of failures and mistakes,
- 00:05:49and I'm gonna cover my tracks," right?
- 00:05:51Fitzpatrick: Well, they want to be seen as being clever, right?
- 00:05:53Collins-Sussman: Clever people don't make mistakes.
- 00:05:55Fitzpatrick: Right, exactly.
- 00:05:56So the result is people wind up working in a cave.
- 00:05:59A classic example of this is,
- 00:06:01how long will you drive around before asking for directions?
- 00:06:04Okay?
- 00:06:05How long are you gonna be completely lost
- 00:06:07before asking for directions, you know?
- 00:06:08I mean, you're not gonna say, "Oh, I'm lost.
- 00:06:10I'm immediately gonna ask for directions."
- 00:06:11Collins-Sussman: Well, it's hard to admit
- 00:06:13that you've made mistakes sometimes,
- 00:06:14especially publicly, right?
- 00:06:16So that's why we showed these quotes in the beginning
- 00:06:19with people saying, you know, "Can you erase my history?
- 00:06:21Can you hide my project until it's perfect?"
- 00:06:24Right? I mean, it's more of this,
- 00:06:25"I don't want to show everybody what I'm doing
- 00:06:27till I think it's perfect."
- 00:06:28Fitzpatrick: Right. So you may be thinking, "Well, big deal."
- 00:06:30Collins-Sussman: Why do we care?
- 00:06:31Fitzpatrick: Why is this a problem?
- 00:06:32Why should I care about this?
- 00:06:33The primary reason is it inhibits progress
- 00:06:36and not just personal progress, but project progress, okay?
- 00:06:40It's sort of the "many eyes make all bugs shallow" quote.
- 00:06:44But if everyone's off working in a cave
- 00:06:47and just occasionally throwing code out to the project,
- 00:06:50code quality remains low,
- 00:06:52and your bus factor remains low.
- 00:06:54How many people here have ever heard of the bus factor?
- 00:06:56Collins-Sussman: We talk about it every year.
- 00:06:58Fitzpatrick: Weren't you here last year?
- 00:07:00No, okay.
- 00:07:01Bus factor is the number of people
- 00:07:03on your software project
- 00:07:04that have to get hit by a bus
- 00:07:06that are gonna leave you in a world of hell, okay?
- 00:07:09All right? So if there's only one person
- 00:07:11that knows that really obscure file-system code
- 00:07:14and they get hit by a bus,
- 00:07:15whether that bus comes in the form of an actual bus,
- 00:07:19or they get married,
- 00:07:20or they have a kid, or they change jobs,
- 00:07:22or they move away, or they get bored...
- 00:07:24Collins-Sussman: It happens all the time.
- 00:07:25So this is one of the things
- 00:07:27we talk about all the time in teams,
- 00:07:29whether it's a team at work or a team on an Open Source,
- 00:07:33is to not get so territorial that you have low bus factor
- 00:07:37on different components, right?
- 00:07:38It's a common thing, right?
- 00:07:39You know, you can't touch that code.
- 00:07:40It belongs to Joe.
- 00:07:42Well, wait a second, you know.
- 00:07:43What happens if Joe's gone, right?
- 00:07:44Now you're in trouble.
- 00:07:45So one of the things you should be watching out for
- 00:07:47is you should have as many people touching
- 00:07:49and getting familiar
- 00:07:50with as many parts of the code as possible.
- 00:07:52You want that redundancy on your team.
- 00:07:54But if you're off working in a cave
- 00:07:56and you're hiding your tracks,
- 00:07:57well, no one knows what you're doing.
- 00:08:00Fitzpatrick: You could be working
- 00:08:01on the wrong thing entirely, actually,
- 00:08:03if you're off doing some really big feature
- 00:08:06or big piece of code.
- 00:08:07Collins-Sussman: Well, here's a nice analogy
- 00:08:08that we like to talk about, which is, you know,
- 00:08:10think about the way you interact with your compiler, right?
- 00:08:12You have a really tight feedback, right?
- 00:08:14You write a function, you compile it,
- 00:08:16make sure it at least compiles, right?
- 00:08:19Maybe you write a UniTest if you're doing great, right?
- 00:08:21But nobody sits down and writes,
- 00:08:24you know, thousands and thousands of lines of code
- 00:08:26and then runs their compiler for the first time.
- 00:08:28It just doesn't happen.
- 00:08:29Fitzpatrick: Not anymore. Collins-Sussman: [laughs]
- 00:08:30Fitzpatrick: Maybe 50 years ago, right?
- 00:08:32Collins-Sussman: Right. In the mainframe days maybe.
- 00:08:34So, you know, it's the same way--
- 00:08:36if you're working on programming in any way,
- 00:08:38you should not be doing it all in a cave
- 00:08:41and then sort of waiting to spring it and see what happens.
- 00:08:43You want other people seeing what you're doing
- 00:08:46as soon as it makes sense, right?
- 00:08:47We'll talk about what that is.
- 00:08:49Fitzpatrick: Right. But I mean, in addition,
- 00:08:50if you're off in the cave, you don't learn as quickly.
- 00:08:53It's harder for you to improve your skills, right?
- 00:08:54There's a balance between spinning your wheels
- 00:08:58and being lost
- 00:08:59and asking the person next to you
- 00:09:01every question that comes into your head, right?
- 00:09:04But I mean, this problem isn't unique to computer science.
- 00:09:07It pervades all sciences, you know, math, anthropology,
- 00:09:10especially when you get into hard research,
- 00:09:12you know, you see this sort of thing.
- 00:09:13Collins-Sussman: Well, I think if any folks
- 00:09:15are in the academic world,
- 00:09:16and computer science is part of this,
- 00:09:17there's this constant tension probably caused
- 00:09:20by the "publish or perish" philosophy, right?
- 00:09:22Where, gee, you're all supposed to be in academia.
- 00:09:25You're supposed to be sharing knowledge
- 00:09:27and collaborating and helping each other
- 00:09:29and cooperatively advancing the state of the art,
- 00:09:32but everybody has to hold their research to their chest
- 00:09:34and not show anybody what they're doing
- 00:09:37until they're published, right?
- 00:09:38And what happens?
- 00:09:39Oh, you end up publishing a paper
- 00:09:41which is redundant with somebody else's paper, right?
- 00:09:44Or maybe you worked on the wrong thing and didn't realize it
- 00:09:46'cause you never told anybody what you were doing.
- 00:09:48Or maybe if you had collaborated with this other person,
- 00:09:50you guys could've written a better paper together, right?
- 00:09:53Same exact tension, just in writing software, right?
- 00:09:56The sooner you get your idea out and other people looking at it,
- 00:09:59you can find out, "Am I working on the right thing?
- 00:10:01"Do I have the right idea?
- 00:10:03"Should I go back to the drawing board?
- 00:10:05"Should I be collaborating with this person
- 00:10:06'cause they're working on it too?"
- 00:10:08I mean, it's the same issue.
- 00:10:09Fitzpatrick: Right. So a little bit of more bad news
- 00:10:11to this for you, okay?
- 00:10:13Is that you're not a one-of-a-kind, right?
- 00:10:16Okay?
- 00:10:19The, uh...
- 00:10:21If you're one-in-a-million, right?
- 00:10:23That means there's over a thousand people just like you
- 00:10:25out there right now, okay? Collins-Sussman: It's true.
- 00:10:27[laughs]
- 00:10:28Fitzpatrick: Glad you guys liked that. Thanks.
- 00:10:30But even if you're a genius,
- 00:10:32working well with others may make or break you, okay?
- 00:10:34Like attracts like.
- 00:10:36And we work hard to hire really smart people at Google.
- 00:10:39And I don't care how smart you are.
- 00:10:41If you can't sit there and communicate with someone else
- 00:10:44or work together in a team and achieve consensus,
- 00:10:47you're not gonna be successful working on a team of people.
- 00:10:50Collins-Sussman: This is one of those things
- 00:10:51that I always try to communicate,
- 00:10:52especially to students
- 00:10:54who are just starting out in computer science
- 00:10:55is that software,
- 00:10:57even though it's fun to write code alone,
- 00:10:59you know, late at night in your basement, whatever,
- 00:11:02actually writing software that's successful--
- 00:11:04it's an inherently collaborative activity.
- 00:11:07And it actually forces you to deal with people
- 00:11:08and talk with people, and that's why we encourage people
- 00:11:10to get involved in Open Source, because it's sort of like,
- 00:11:13"Okay, well, maybe you're still in college,
- 00:11:14but here's your chance to actually work with people
- 00:11:16and work on a team and see what it's gonna be like.
- 00:11:18I mean, one of the things I always ask people is,
- 00:11:21"Can you name a piece of software
- 00:11:23"that's really successful,
- 00:11:25"really widely used by a lot of people,
- 00:11:27and was written by one person?"
- 00:11:29Fitzpatrick: And before anybody yells out Metafont,
- 00:11:31that's not widely used, okay?
- 00:11:34But anyway, so this is a trap, okay?
- 00:11:36Of this sort of wanting to be a genius.
- 00:11:38So how do we avoid this, okay?
- 00:11:40Quite frankly, the first step is to drop the ego, okay?
- 00:11:44Instead of having a large personal ego,
- 00:11:46which actually impedes collaborating on a project,
- 00:11:49have a strong collective ego around your project
- 00:11:52or the piece of software you're working on.
- 00:11:53A great example in the Open Source world
- 00:11:55is the Apache Software Foundation, okay?
- 00:11:58Community is the essence of every project
- 00:12:01in the Apache Software Foundation.
- 00:12:02That's what's most important to them, more so than code.
- 00:12:05Companies call Apache up all the time and say,
- 00:12:07"Hey, we want to give you guys a billion lines of code.
- 00:12:09Blah, blah, blah."
- 00:12:10Collins-Sussman: And then walk away.
- 00:12:11Fitzpatrick: And then, yeah, "Have a nice day."
- 00:12:13And they're like, "We don't want it.
- 00:12:14"We don't want a pile of code by itself
- 00:12:15"that it's just gonna bit rot.
- 00:12:17We want to build a community around this."
- 00:12:18And so, as a result, people working on the projects
- 00:12:21tend to be proud of--I mean, I don't know about you guys,
- 00:12:23but I want to be proud of the stuff that I'm working on.
- 00:12:25Collins-Sussman: Absolutely.
- 00:12:27It's a good way to keep your project healthy too.
- 00:12:28Fitzpatrick: So you don't want to be this guy.
- 00:12:30Collins-Sussman: Not on your project.
- 00:12:31Next thing to think about
- 00:12:33is how you interact with people.
- 00:12:35How do you give each other feedback?
- 00:12:37And it involves, you know, actually being a nice person.
- 00:12:40Fitzpatrick: What? Collins-Sussman: I know.
- 00:12:42It's crazy.
- 00:12:43But it is--actually, it is a learned skill
- 00:12:45to give constructive criticism,
- 00:12:48whether it be a code review or just a design,
- 00:12:50discussion of design.
- 00:12:51And to take criticism as well.
- 00:12:53If you work in Open Source, you learn to be pretty thick-skinned
- 00:12:56so that you can take nonconstructive criticism
- 00:12:58along with the constructive criticism,
- 00:13:00but it's something that we should all aspire to do, right?
- 00:13:02Is how to do it in a nice way.
- 00:13:04Fitzpatrick: Right. The way to look at it is that
- 00:13:07your code isn't part of you, right?
- 00:13:10You want to work for the best piece of software as a whole,
- 00:13:13not to sort of get your one little clever bit in.
- 00:13:15Here's an anecdote.
- 00:13:18A friend of mine left Apple a few years ago,
- 00:13:20went to work at a smaller company
- 00:13:21that had been around for a while as an engineering manager.
- 00:13:24And he went in and saw that they were using Version Control,
- 00:13:27and he set up so it would send out code-review emails,
- 00:13:29'cause they weren't sending out code-review emails.
- 00:13:31And he started doing code reviews.
- 00:13:32And, you know, he thought,
- 00:13:34"Okay, you know, I'm gonna try and get these guys
- 00:13:35"a little, you know, more rigorous engineering.
- 00:13:37We'll have some better practices here."
- 00:13:39And a week and a half later,
- 00:13:40the director of engineering calls him in and says,
- 00:13:43"You know, I'm getting a lot of feedback
- 00:13:45"that you're really bringing people down
- 00:13:47with all this negative criticism of everybody."
- 00:13:50He's like, "What are you talking about?"
- 00:13:52"Yeah, these code-review things you're doing,
- 00:13:53you know, people are getting really upset by that."
- 00:13:56And, you know, how do you respond to that?
- 00:13:58This is something that is really integral, I think,
- 00:14:01to writing good software.
- 00:14:03Collins-Sussman: That's a cultural problem, too,
- 00:14:04in some companies, right?
- 00:14:05Some people really--
- 00:14:06Especially in a lot of corporations,
- 00:14:08you'll see not only territorial--
- 00:14:10You know, "This is my code. You can't touch it."
- 00:14:12But also, "How dare you tell me what to write
- 00:14:15"or make comments on what I just wrote?
- 00:14:17Mind your own business."
- 00:14:19I mean, that is a very common behavior,
- 00:14:20and it's hard to get companies to break out of that cycle,
- 00:14:23increase the bus factor,
- 00:14:24do code review all the time.
- 00:14:26At Google, we actually--
- 00:14:27We're not allow to submit code
- 00:14:29into our Version Control system until there's code review.
- 00:14:31Like, it will reject your change
- 00:14:34until there's proof that some peer
- 00:14:36has looked at what you've done and given it a thumbs-up,
- 00:14:38which is a great thing.
- 00:14:40Fitzpatrick: Right. So criticism is actually good.
- 00:14:43And the next important thing is that you have to learn
- 00:14:44to sort of embrace failure, okay?
- 00:14:47People, I mean-- I'm afraid of failing.
- 00:14:49Certainly, I think most people are, okay?
- 00:14:51But, you know, the whole NASA "failure is not an option" thing
- 00:14:54is a load of crud, right?
- 00:14:55Failure is an option, except in one case.
- 00:14:58It's failing on the same thing repeatedly.
- 00:15:00That's never good, because you're not learning, right?
- 00:15:02Collins-Sussman: And it's embarrassing.
- 00:15:04Fitzpatrick: Well, it's embarrassing,
- 00:15:05but if you're failing-- You try something and fail.
- 00:15:07Try something different and fail,
- 00:15:08and you try something different.
- 00:15:09Every time you fail, you learn something.
- 00:15:10And for many people, that's the best way
- 00:15:12that they learn how to do things.
- 00:15:14Some people learn by sitting in a room
- 00:15:15and hearing two other guys yammer on forever.
- 00:15:17Some people learn by reading a book.
- 00:15:19And some people learn by looking at pictures.
- 00:15:20Some people learn by trying and failing.
- 00:15:21Collins-Sussman: Well, this is also important--
- 00:15:23I mean, it's another cultural issue here,
- 00:15:25is when failure does happen, be ready for it.
- 00:15:27Don't freak out.
- 00:15:28Document what happened, what did you learn from it.
- 00:15:31What are you gonna do different next time, right?
- 00:15:32That's why we do postmortems on--
- 00:15:34you know, when something crashes,
- 00:15:36or there's some-- some bad thing happens.
- 00:15:38We write it up and learn from it.
- 00:15:40Fitzpatrick: Right. And the point is not to assign blame.
- 00:15:43It's to look at what you did,
- 00:15:45have everyone else look at what happened
- 00:15:46so that we don't do this again.
- 00:15:48Collins-Sussman: I think a big issue also around failure
- 00:15:49is just natural human fear.
- 00:15:53I have a--You know, I can relate to this personally.
- 00:15:55I started learning banjo a few years ago,
- 00:15:58playing in bluegrass jams.
- 00:15:59And, you know, they would occasionally try to call on me
- 00:16:03to do banjo solos, right?
- 00:16:05Which is really, really hard to learn,
- 00:16:07and I just wouldn't do it, or I--you know, bow out.
- 00:16:10And someone took me aside, and he said, you know,
- 00:16:11"You realize that 50% of learning to solo
- 00:16:14"is just not caring how good you sound
- 00:16:16and just losing the fear."
- 00:16:18It was totally true.
- 00:16:19I was like, "All right, these are my friends.
- 00:16:20If I sound terrible, who cares?"
- 00:16:22And sure enough, I mean, he was absolutely right.
- 00:16:24I just started playing really bad solos,
- 00:16:26but it got better and better, and I kept learning,
- 00:16:28and that was a huge step.
- 00:16:30So I mean, if you can just make that mental shift
- 00:16:32and say, "It's all right.
- 00:16:33I'm gonna fail, and it's not a big deal."
- 00:16:36No fear. That's fine.
- 00:16:37You move on. You learn.
- 00:16:39You've got a better anecdote, actually.
- 00:16:40Fitzpatrick: Well, this is a complete anecdote.
- 00:16:42It's a story about the executive
- 00:16:44who makes a bad business decision,
- 00:16:46and the company loses $10 million for the company.
- 00:16:48The next morning, comes into work.
- 00:16:50His secretary says, you know,
- 00:16:51"The CEO wants to see you in his office."
- 00:16:53And the guy hangs his head down.
- 00:16:55He's like, "This is it. I'm gonna get fired," you know?
- 00:16:57Walks into the CEO's office, and he's like,
- 00:16:59"So I guess you want my resignation."
- 00:17:01The CEO looks at him and says, "Resignation?
- 00:17:03"I just spent $10 million training you.
- 00:17:05Why would I fire you?"
- 00:17:06[laughter]
- 00:17:08But again, I mean,
- 00:17:10I bet you that's a mistake that guy never will make again.
- 00:17:12I lived in Italy for three years, okay?
- 00:17:15I moved there, and I had been studying Italian,
- 00:17:17and I was really proud to use my Italian.
- 00:17:18I went into a cafe, and I ordered a sandwich,
- 00:17:22and they give me this massive sandwich,
- 00:17:24and I wanted a knife to cut it with.
- 00:17:25So I thought I'd be cool and use my Italian,
- 00:17:27and I promptly asked them for a toothbrush to cut my sandwich.
- 00:17:30[laughter] The guy just looked at me.
- 00:17:32And I'm like, "Toothbrush." And he's like, "No."
- 00:17:34Collins-Sussman: That's true.
- 00:17:35Fitzpatrick: But never made that mistake again.
- 00:17:37Collins-Sussman: Speaking languages
- 00:17:38in a foreign country is very intimidating.
- 00:17:39I mean, you're just so scared of looking like a fool,
- 00:17:41but you don't learn otherwise.
- 00:17:43Fitzpatrick: Well, it's the easiest way to learn, I think.
- 00:17:45That sort of hot-white fear you get going up your neck
- 00:17:48'cause you asked for something embarrassing.
- 00:17:49Collins-Sussman: So failing is--
- 00:17:51It's not just about embracing failure,
- 00:17:53but it's also failing fast, right?
- 00:17:54We're talking about iterating as quickly as we can.
- 00:17:57This is something we actually talk about a lot at Google,
- 00:17:59was don't just fail, fail quickly
- 00:18:01and pick up and try something different as fast as you can.
- 00:18:05And that's why we've got sort of, like--
- 00:18:06We got this Google Labs site now, right?
- 00:18:08Where are people are experimenting
- 00:18:09with different projects.
- 00:18:10And if they fail, that's fine.
- 00:18:11They'll just put something up
- 00:18:13or change it the next day and try it again, right?
- 00:18:15The faster you can fail and the faster you can iterate,
- 00:18:18the faster you will learn and get better.
- 00:18:20Fitzpatrick: And you don't have to hide it if you fail.
- 00:18:22It's okay, you know. You don't have to hide your tracks.
- 00:18:24We talk about, you know, in a Version Control world,
- 00:18:26you know, people use Subversion versus Mercurial
- 00:18:29versus Git, et cetera.
- 00:18:30Git Rebase is something
- 00:18:32that people use often to sort of hide their tracks.
- 00:18:33There are some legitimate uses, I think,
- 00:18:35if you want to clean things up a bit.
- 00:18:36Collins-Sussman: Or maintain a vendor branch.
- 00:18:38Fitzpatrick: Maintain a vendor branch, et cetera.
- 00:18:39But people are typically looking to say,
- 00:18:40"Oh, you know, I was working on all this stuff.
- 00:18:42"I made all these sort of false starts
- 00:18:43"I don't want anybody else to see,
- 00:18:45"you know, my stupid mistake here,
- 00:18:46where I forgot to check the type of something."
- 00:18:48Collins-Sussman: Rewrite my history so it's perfect.
- 00:18:49Fitzpatrick: That's right. Yes, exactly.
- 00:18:51Just like the history of the world.
- 00:18:53But what it comes down to is--
- 00:18:55One of the ways of making this problem better
- 00:18:58is to practice, okay?
- 00:19:00If you practice,
- 00:19:02it makes your iteration-failure cycle faster, okay?
- 00:19:05And it basically--
- 00:19:07it's sort of less scary to fail,
- 00:19:10because you'll tend to have smaller failures.
- 00:19:12Collins-Sussman: This way, the failures
- 00:19:13tend to get smaller over time,
- 00:19:14and the successes tend to get larger,
- 00:19:16and that's a trend you'll see,
- 00:19:17especially if you're learning as you fail fast.
- 00:19:20Fitzpatrick: Right.
- 00:19:21And the next thing is sort of to be a small fish, all right?
- 00:19:24If you were the senior developer
- 00:19:26on a team or in a company or something
- 00:19:29and everyone looks to you and you're sort of the teacher
- 00:19:31or the king/queen bee, whatever,
- 00:19:33if you're only working with people junior to you,
- 00:19:36you are gonna learn things from them,
- 00:19:37but it's gonna be harder to improve your skills
- 00:19:39than it would be if you were working with someone else
- 00:19:43who is smarter than you, who is a better engineer than you.
- 00:19:46Collins-Sussman: Actually, you know,
- 00:19:47in my experience, when you're a big fish in a pond,
- 00:19:50it's very comfortable,
- 00:19:52but you're not really learning very much, right?
- 00:19:54You feel safe, but you don't get much better.
- 00:19:57And when you are a small fish in a huge pond,
- 00:20:01it's very scary, right?
- 00:20:02Fitzpatrick: Sometimes you get eaten, though.
- 00:20:05Just kidding.
- 00:20:06Collins-Sussman: That's what it was like
- 00:20:07when we started at Google, right?
- 00:20:08It was very like, "Aah!"
- 00:20:09You know, it's just so many people.
- 00:20:12But you get better really quickly, right?
- 00:20:13Again, it's all about the reward of facing that fear.
- 00:20:16Fitzpatrick: It's like the old Emacs joke, you know?
- 00:20:17It's got a really steep learning curve,
- 00:20:19but that just means you learn a whole lot
- 00:20:20in a short period of time, right?
- 00:20:21But beyond being a small fish, the other thing is to sort of--
- 00:20:24And this has to do with not only being successful,
- 00:20:28but also being a leader, which is to be influenced, okay?
- 00:20:32'Cause the more that you're open to the influence of other people
- 00:20:34who might have a really good idea
- 00:20:36or a novel way of looking at something
- 00:20:38or accomplishing something--
- 00:20:39The more actual influence that you bank and have on others,
- 00:20:42the more likely they are to listen to you.
- 00:20:45Collins-Sussman: Or it's respect is a two-way street, right?
- 00:20:47I would say it's not just about respect being a two-way street.
- 00:20:50It's about vulnerability,
- 00:20:54in that if you can show yourself
- 00:20:58to be open to change and willing to admit mistake--
- 00:21:01I guess being vulnerable
- 00:21:03is another form of being influenced, right?
- 00:21:04It's an extreme case.
- 00:21:06If you can admit your mistakes in front of your peers
- 00:21:08and say, you know, "I was wrong. I made the wrong choice.
- 00:21:10I had the wrong opinion."
- 00:21:13A lot of people are afraid to admit that,
- 00:21:15'cause they're afraid, you know, in the short term,
- 00:21:17it's gonna make them look weak
- 00:21:18or like they don't know what they're doing.
- 00:21:19But in fact, you know, if you think about people
- 00:21:22that you really admire, you may have worked with,
- 00:21:23they make themselves vulnerable a lot.
- 00:21:25And over the long term, they get perceived
- 00:21:27as big figures, big strength figures, right?
- 00:21:30Wow, that person is so strong
- 00:21:33that they're not afraid to admit mistakes and failures.
- 00:21:36Fitzpatrick: Oh, and it's not just about their ideas
- 00:21:37or their way of doing things.
- 00:21:39It's a way also to sort of cement people's dedication
- 00:21:42to what your project is or what you're doing,
- 00:21:44'cause, you know, we like to talk about buses a lot, I guess,
- 00:21:47but it's the difference between being the person driving a bus
- 00:21:50and a whole bunch of people as passengers
- 00:21:52that are following you
- 00:21:53and taking turns driving the bus, right?
- 00:21:55If you're working on a project,
- 00:21:56whether it's an Open Source project or within a company
- 00:21:59where different people take the lead at different times,
- 00:22:02you're gonna attract a different caliber of person,
- 00:22:05or different type of person,
- 00:22:06who wants to participate and carve out the path
- 00:22:10as opposed to somebody following you.
- 00:22:12Collins-Sussman: Absolutely. So let's talk about--
- 00:22:15A little diversion here and talk about software tools,
- 00:22:17since that's--our background is in software tools--
- 00:22:21and talk about, specifically, how they affect
- 00:22:23your collaboration and your social habits.
- 00:22:25One of the classic Internet sayings, right, is,
- 00:22:30"You can't fix social problems with technical solutions" right?
- 00:22:34And there's all sorts of classic examples of, like--
- 00:22:36For example, you know, the whole DRM issue, right?
- 00:22:40Or if we just keep inventing
- 00:22:41more and more complicated DRM technology restrictions,
- 00:22:44they don't fix the problem, except most people will say,
- 00:22:46"Well, really, there's some kind of social issue here."
- 00:22:48What is intellectual property? What is fair use?
- 00:22:51What is--you know, what is the nature of--
- 00:22:52Fitzpatrick: Isn't that problem solved yet?
- 00:22:54Nobody downloads music anymore, right?
- 00:22:55Collins-Sussman: Clearly, it's a societal, cultural issue, right?
- 00:22:57Not something that can just be papered over
- 00:23:00with evermore complex DRM technologies.
- 00:23:03Or another one I've talked about is, in Version Control,
- 00:23:06I see a lot of people--
- 00:23:07A lot of administrators will start, you know--
- 00:23:09especially in Open Source projects,
- 00:23:10they'll start trying to do path-based access control
- 00:23:13and say, "This person's allowed to commit to this branch,
- 00:23:15"but not this one.
- 00:23:17And this person can only commit to this file, but not this one."
- 00:23:20They start creating all these complicated rules,
- 00:23:22and I sort of say, "All right, well, what's going on here?
- 00:23:25Why are you creating all these technological restrictions?"
- 00:23:27"Oh, we got to make sure people
- 00:23:28don't commit to the wrong places."
- 00:23:30And they're like, "Well, if they did, what would happen?"
- 00:23:33You would all notice it. You'd roll it back, right?
- 00:23:36'Cause it's a Version Control system.
- 00:23:38You can undo, right?
- 00:23:39You'd ask the person what happened.
- 00:23:40If it was a mistake, they apologize.
- 00:23:42If it wasn't a mistake, they're in trouble, right?
- 00:23:45Or you tell them to leave the project or something.
- 00:23:47So it's sort of, like, okay, it's a social problem.
- 00:23:50You don't need this technological restriction
- 00:23:52to solve it.
- 00:23:53It's not a good solution.
- 00:23:55Fitzpatrick: Or the endless spams arm race, right?
- 00:23:57I mean, that's--that's-- it goes back and forth, right?
- 00:24:01Collins-Sussman: The social problem being
- 00:24:03the world is full of jerks.
- 00:24:04Fitzpatrick: Right, exactly. Yeah, exactly, that's the thing.
- 00:24:06You know, the Internet-- That's what I was saying.
- 00:24:08The world is full of jerks, but the Internet makes it seem
- 00:24:10like they all live right next door to you, right?
- 00:24:12[laughter]
- 00:24:14So you can't use technology
- 00:24:15to solve these sociological problems, right?
- 00:24:18Well, not always, okay? Collins-Sussman: Usually.
- 00:24:20This is--this is a--
- 00:24:22It's sort of a-- it's a false truth,
- 00:24:23insofar as there are things you can do to encourage people
- 00:24:26to "do the right thing," right?
- 00:24:29For example, on Google Code,
- 00:24:30if you want to comment on an issue on the issue track,
- 00:24:33if you want to create an issue or something or file a bug,
- 00:24:36you have to sign in, right?
- 00:24:37There's a very simple reason for that.
- 00:24:39First of all, we want to limit spam a little bit,
- 00:24:42but more importantly, if someone reports a bug,
- 00:24:44it's nice to have a way to get back to them.
- 00:24:45I can't tell you how many times in the past
- 00:24:47people have reported bugs out there,
- 00:24:49and they leave no contact information,
- 00:24:52or they screw up their email address or something like that.
- 00:24:54Collins-Sussman: Right. So that's an example
- 00:24:56of a small technological change having a big social impact.
- 00:25:00Fitzpatrick: It doesn't solve the problem.
- 00:25:01Collins-Sussman: But it definitely changes behavior.
- 00:25:03Another example is on Google Code project hosting,
- 00:25:05we only allow a small number of licenses,
- 00:25:08which angers a lot of people, right?
- 00:25:10They want to come in and use some Open Source license
- 00:25:13that's fairly obscure,
- 00:25:15and they say, "Why isn't it on the site?"
- 00:25:17And our answer is, "Well, because we want to stop
- 00:25:20"proliferation of Open Source licenses.
- 00:25:22We think it's bad for the Open Source world."
- 00:25:24And that's fine, you know.
- 00:25:26Either they'll choose one of the standard licenses,
- 00:25:28or they'll go host their code somewhere else,
- 00:25:29which is okay, but we've had a definite impact,
- 00:25:32a social impact, through that small technological choice.
- 00:25:36Fitzpatrick: Right. Collins-Sussman: So, yeah.
- 00:25:37Sometimes you can affect--
- 00:25:38You may not be able to solve gigantic social problems,
- 00:25:41but you can have--
- 00:25:43Small technological choices
- 00:25:44can have big social, behavioral changes, right?
- 00:25:47Fitzpatrick: So defaults are important, okay?
- 00:25:49I mean, you want to examine
- 00:25:51how do tools behave out of the box, okay?
- 00:25:54This doesn't actually fix the core social issue at hand,
- 00:25:56but it does influence people's behavior quite heavily.
- 00:25:59Collins-Sussman: So let's look at some--
- 00:26:01how some software tools behave.
- 00:26:03What's their default behavior,
- 00:26:04and how does it affect the way you collaborate?
- 00:26:07One example is--
- 00:26:09How about, you know--
- 00:26:11On your software team, when somebody commits a change,
- 00:26:14maybe you do code review beforehand,
- 00:26:16but certainly in the Open Source world,
- 00:26:17it's pretty common to do code review
- 00:26:18after somebody submits a change, right?
- 00:26:21In a lot of projects, an email will go out with the diffs,
- 00:26:24and it'll go into all the mailboxes
- 00:26:26of all the participants.
- 00:26:27And what's cool about that is that it makes it
- 00:26:30almost effortless to do code review, right?
- 00:26:32It's like, their changes are being pushed right to your face,
- 00:26:35and you're reading your email, and you're like,
- 00:26:37"Oh, looks like they got a typo here or a bug.
- 00:26:39Let me reply really quick," right?
- 00:26:41As opposed to projects that don't do that,
- 00:26:43there's almost no code review at all, right?
- 00:26:45Big social change for a small technological trick.
- 00:26:49Fitzpatrick: Right.
- 00:26:50So sort of set the Wayback Machine
- 00:26:51before the Internet was really popular
- 00:26:53and Open Source was really huge.
- 00:26:55How many people here have heard of CVS?
- 00:26:57The Version Control system, not the pharmacy.
- 00:26:59Okay, good.
- 00:27:01Collins-Sussman: We actually asked a bunch of students.
- 00:27:03We gave this talk a few weeks ago to a bunch of students,
- 00:27:04and we asked, "How many people have heard of CVS?"
- 00:27:06And they all raised their hands. Fitzpatrick: I was blown away.
- 00:27:08Collins-Sussman: We were like, "Well, you're only, like, 19."
- 00:27:10And they're like--
- 00:27:11"How many people have heard of the Version Control...?
- 00:27:13Nobody raised their... Fitzpatrick: No one at all.
- 00:27:15Which is good, really.
- 00:27:16Collins-Sussman: Change that slide.
- 00:27:18Fitzpatrick: You know, people talk
- 00:27:20about Open Source getting big.
- 00:27:21They talk about Richard Stallman.
- 00:27:23They talk about Linus Torvalds.
- 00:27:24But CVS actually played a really important role,
- 00:27:27insofar as it cre--
- 00:27:28There was a feature created in it in the mid '90s
- 00:27:30called Anonymous Pserver.
- 00:27:32It was anonymous network access,
- 00:27:34where any random one of these jerks on the Internet
- 00:27:36could download your source code
- 00:27:39into a CVS working copy,
- 00:27:42fiddle with it, and then send you a nice, small,
- 00:27:45concise patch that could fix a bug,
- 00:27:48add a new feature, et cetera.
- 00:27:49Collins-Sussman: That was a huge social event, right?
- 00:27:51Fitzpatrick: It had a huge impact,
- 00:27:52insofar as it made it virtually effortless...
- 00:28:08Collins-Sussman: ...Mercurial?
- 00:28:10A few. Okay.
- 00:28:11Darks.
- 00:28:12Fitzpatrick: Bizarre, anyone?
- 00:28:13Collins-Sussman: Monotone. Fitzpatrick: No, just kidding.
- 00:28:16Collins-Sussman: Okay, so...
- 00:28:18But distributed versions was kind of interesting.
- 00:28:20What are the default behaviors of distributed Version Control?
- 00:28:23It's sort of a double-edged sword, right?
- 00:28:24On the one hand, it's kind of not so great,
- 00:28:28because the default behavior, when you start off,
- 00:28:30is to fork, right?
- 00:28:32You start off grabbing the entire history
- 00:28:35and crawling into a cave, right?
- 00:28:37And it's actually a little bit more work
- 00:28:39if you want to contrib-- get your code back.
- 00:28:40You have to find someone else to talk to,
- 00:28:42find a server, do a push, right?
- 00:28:44I mean, it's actually--
- 00:28:45You know, there's a little more effort involved.
- 00:28:47So in one sense, it discourages collaboration,
- 00:28:50but in another sense, it also encourages collaboration,
- 00:28:52because--excuse me--
- 00:28:55it lowers the barrier for everyone to participate, right?
- 00:28:58Instead of just, you know, "the official committers"
- 00:29:00on a project having access to the history,
- 00:29:03having the ability to do checkpoints of their code,
- 00:29:06now everybody in the world has the exact same tool set,
- 00:29:09and everybody can checkpoint their code
- 00:29:11and do whatever they want, and there's no--
- 00:29:13Being a committer really just becomes a social title, right?
- 00:29:17It becomes a branding job rather than
- 00:29:18a "I have special tools, and you don't" kind of thing.
- 00:29:21Fitzpatrick: And I think this is really great,
- 00:29:23but I think it does concern us a little bit
- 00:29:25that, you know--
- 00:29:26What are people gonna do in four or five years?
- 00:29:28Is this gonna sort of tilt the dial
- 00:29:30back in the other direction for collaboration?
- 00:29:33Collins-Sussman: But like you said,
- 00:29:34you know, it lowers the barrier for people walking by
- 00:29:36to participate, right?
- 00:29:38I mean, in the old days, you had to check out the code,
- 00:29:41email a patch,
- 00:29:43wait for somebody on the list to review your patch.
- 00:29:45Maybe they liked it, maybe they didn't.
- 00:29:46And then you were kind of helpless.
- 00:29:47Now you don't have to wait for that,
- 00:29:49so it might be a good thing too.
- 00:29:51Fitzpatrick: Right. So there's a moral to this story, right?
- 00:29:53Which is you need to pay attention
- 00:29:55to the default behaviors of the tools that you have.
- 00:29:57And you need to ask yourself,
- 00:29:58"What is the social behavior of this--
- 00:30:02this tool is encouraging for-- I mean, to use?"
- 00:30:05And that can vastly affect the dynamic of your team, basically.
- 00:30:08Collins-Sussman: So there's one more thing
- 00:30:10we want to talk about, which is how to--
- 00:30:13Right. So we're talking about--
- 00:30:14We want to collaborate. Collaboration's important.
- 00:30:16Don't be afraid. Pay attention to what your tools are doing.
- 00:30:19But here's the big question--
- 00:30:20When is a good time to collaborate, right?
- 00:30:22Do you do it early on? Do you do it late?
- 00:30:25So we have done some wonderful research...
- 00:30:29Fitzpatrick: Minutes of research.
- 00:30:30Collins-Sussman: Minutes of research
- 00:30:31about the evolution of a project, right?
- 00:30:33I mean, it starts out as an idea in your head, right?
- 00:30:37And then after a little while, you make a prototype
- 00:30:40just to sort of show other people
- 00:30:41or maybe just to satisfy yourself that it's gonna work.
- 00:30:44And then you say, "Hey, come take a look at this."
- 00:30:47You show one person or a few friends.
- 00:30:49Aah. Ooh, sorry. Nice.
- 00:30:50And then you write a lot of code--code, code, code.
- 00:30:53And then you dominate the Earth, and everything's fine.
- 00:30:57So the real question is, while you're doing this phase--
- 00:31:02First of all, you don't have to hide, right?
- 00:31:04I mean, you can do all of these phases in the public eye.
- 00:31:07It's really a question of,
- 00:31:08at what point do you start advertising yourself, right?
- 00:31:11Like, even if you've just--
- 00:31:12If you're still working on a mock-up,
- 00:31:13it's not like you need to be in a cave to do that, right?
- 00:31:16Chances are, most people aren't gonna know you're working
- 00:31:18on that mock-up, even if you're doing it
- 00:31:20on an Open Source repository.
- 00:31:22They're not gonna see you until you start screaming
- 00:31:24and mailing lists and saying,
- 00:31:25"Hey, come look at what I'm doing."
- 00:31:26Fitzpatrick: But the real question here is,
- 00:31:28where does the third milestone go, right?
- 00:31:29You don't want to start involving people
- 00:31:31too early or too late.
- 00:31:33For good or for bad,
- 00:31:35people typically involve people too late.
- 00:31:37It's rarely that someone
- 00:31:38involves people too early, you know?
- 00:31:40If you're done, it's too late, okay?
- 00:31:42Collins-Sussman: [laughs]
- 00:31:43Fitzpatrick: But there's a huge risk of wasting your own time.
- 00:31:45You know, you might be trying to come up with a project
- 00:31:49to change the world.
- 00:31:50It might be doing something Open Source.
- 00:31:52You might be just coming up with sort of something
- 00:31:53in your spare time you want to pitch to your team
- 00:31:55that you work with at the office, right?
- 00:31:57But if you go off and you just make a whole lot of progress
- 00:32:00without talking to the people, getting some feedback,
- 00:32:02there's a huge risk of just wasting your own time, you know?
- 00:32:05You could have really bad design choices
- 00:32:07that are undoable without starting over.
- 00:32:09You know, anyone--Those of you guys who do code reviews,
- 00:32:12if you ever get somebody that gives you
- 00:32:13a 5,000-line code review,
- 00:32:14what can you really do with that other than check it for syntax?
- 00:32:18Or check it and say, "Oh, you forgot.
- 00:32:20This is two spaces here. It should be one."
- 00:32:22Collins-Sussman: Well, I mean, it's too late to really go back
- 00:32:24and make significant changes. Fitzpatrick: Right.
- 00:32:25And you're not gonna want to digest all that.
- 00:32:27To digest what that amount of code would do,
- 00:32:30you really want to see a design doc
- 00:32:31or talk to the person about it.
- 00:32:33Collins-Sussman: The other issue is that a lot of people
- 00:32:35aren't gonna be interested in your project,
- 00:32:36because there's no opportunity for them to take a stake, right?
- 00:32:39If your project's 95% finished,
- 00:32:43why would I want to get involved when it's mostly done, right?
- 00:32:45There's very little opportunity
- 00:32:47for me to come in and make a mark
- 00:32:49and feel like I'm really affecting the direction, right?
- 00:32:52So, uh... [laughs]
- 00:32:54Talk about brain crack.
- 00:32:56Fitzpatrick: Brain crack.
- 00:32:57Yeah, so anybody here ever watch the Ze Frank on the Web?
- 00:33:01He had this thing called "The Show" a few years ago.
- 00:33:03He had this one episode where he talked about brain crack.
- 00:33:05It's these ideas people have. People have ideas all the time.
- 00:33:08You have an idea, and you think, "This is a brilliant idea."
- 00:33:10You sort of nurture it in your head,
- 00:33:11and you think about how wonderful it is,
- 00:33:12and there's angels around,
- 00:33:14and it's the greatest thing ever.
- 00:33:15You never act on it,
- 00:33:16because as soon as you try and implement it or act on it,
- 00:33:18you usually find out that most of them are garbage, okay?
- 00:33:21But, you know, you keep these ideas to yourself,
- 00:33:23and they're sort of, like-- He calls them brain crack,
- 00:33:25you know, 'cause you just feed on them.
- 00:33:27So the point is to try to get things out
- 00:33:30as quickly as possible.
- 00:33:31Collins-Sussman: Well, let's look at the opposite scenario.
- 00:33:34What happens if you start getting collaborators
- 00:33:37working with you too early in the process?
- 00:33:39And the answer to that-- I think a good example
- 00:33:41is go look at a huge number of projects
- 00:33:44on SourceForge or Google Code,
- 00:33:46where there's, like, one author, and there's nothing up there
- 00:33:49but, like, maybe a Wiki page that says,
- 00:33:52"Dudes, we should write this cool software
- 00:33:54and take over the world.
- 00:33:55Let's talk about it," right?
- 00:33:56And, like...
- 00:33:57you know, one of two things happens.
- 00:33:59Either nobody cares, and nobody comes, nothing happens,
- 00:34:02'cause there's no prototype.
- 00:34:04There's nothing to look at, right?
- 00:34:05Or, even worse, 50 people come, or 100 people come,
- 00:34:09and they all want to do different things,
- 00:34:11and you end up sort of having this endless discussion
- 00:34:13about what it could be,
- 00:34:15and you get into sort of this design by committee
- 00:34:17where nothing happens, right?
- 00:34:19And the whole thing just kind of stalls.
- 00:34:21Fitzpatrick: Well, you--you're the great--
- 00:34:22You run the risk of attracting a lot of people
- 00:34:24that don't want to do what you want to do, okay?
- 00:34:26You want to go there,
- 00:34:27and somebody shows up and wants to go here.
- 00:34:29And you didn't really communicate
- 00:34:30that you wanted to go there in the first place.
- 00:34:32So they're not wrong.
- 00:34:34You're just gonna waste a lot of time and energy.
- 00:34:36Collins-Sussman: So what you want to do
- 00:34:37is you want to go for the sweet spot.
- 00:34:38What we call the sweet spot is you have a coherent design
- 00:34:42and a mission statement, right?
- 00:34:44Clearly written out on your Website, goals and non-goals.
- 00:34:48What the purpose is-- exactly what you're gonna do.
- 00:34:50So people can't show up and completely derail
- 00:34:52the direction that you've chosen, right?
- 00:34:54And you got to have some amount of running code.
- 00:34:57It doesn't have to be a lot,
- 00:34:59just enough to say that you're serious
- 00:35:01and to get the idea going in other people's heads--
- 00:35:03Just a proof of concept, right?
- 00:35:04Or just a mock-up or something
- 00:35:06so that it's far enough along
- 00:35:08that it feels like there's some inertia, right?
- 00:35:11But not so far enough along that people feel like,
- 00:35:13"Oh, I can still get in and get involved
- 00:35:16and really influence this project," right?
- 00:35:18"Make a mark. There's a lot of work to do still."
- 00:35:20Fitzpatrick: Right, but you have to be ready to make revisions.
- 00:35:22You have to be ready for that, for the criticism
- 00:35:25and, you know, it might be to make some changes
- 00:35:27and discuss and backtrack...
- 00:35:29Collins-Sussman: And document your failures.
- 00:35:31Fitzpatrick: Don't hide the history.
- 00:35:32I mean, that's really-- It's a really important thing.
- 00:35:36One thing that we've noticed a lot in Open Source projects
- 00:35:39is that there's a lot of documentation
- 00:35:41about what they're gonna do and what they'd like to do
- 00:35:44and sort of what they've done that's worked for them.
- 00:35:47But rarely do you find any documentation
- 00:35:49of stuff that they've tried that they failed at, you know?
- 00:35:51People have a design doc that didn't work.
- 00:35:53They just delete it.
- 00:35:54They're like, "Oh, I'm gonna pretend
- 00:35:55like that never happened," right?
- 00:35:56Collins-Sussman: That whole branch never happened.
- 00:35:58Fitzpatrick: Right, exactly.
- 00:36:00But in a lot of cases, this can be a huge time-saver,
- 00:36:02because let's say that you're having a huge discussion
- 00:36:05about something, and you go off and you try it,
- 00:36:07and it doesn't work, so you delete the code and whatnot.
- 00:36:09A year later, someone comes up and has this huge discussion.
- 00:36:11They want to try this great idea
- 00:36:12that you did last year and failed, okay?
- 00:36:14Now, it's easy enough if you can point them
- 00:36:16to the change list where it happened.
- 00:36:17Collins-Sussman: What if you've left the project, right?
- 00:36:19What if you've left the project,
- 00:36:21or the person who tried the experiment is gone?
- 00:36:23They're not there to remember
- 00:36:24or even point you to the deleted branch to read the docs.
- 00:36:27Fitzpatrick: It's good to have that mailing list
- 00:36:29that's read there that that happened.
- 00:36:30It's not bad. It's okay.
- 00:36:33The world is full of false starts
- 00:36:35that eventually rot away.
- 00:36:37But we have a couple case studies here to talk about.
- 00:36:40First of all is Subversion,
- 00:36:42which is--you know, was our project many years ago.
- 00:36:44And, uh--Well, you go ahead and tell it.
- 00:36:46Collins-Sussman: Well, I mean,
- 00:36:48I don't know if this is the model,
- 00:36:49but we think we did a pretty good job
- 00:36:51with starting this project.
- 00:36:53I mean, it started out with three guys in an office
- 00:36:56writing a design doc together, just the three of them.
- 00:36:59Took us maybe two weeks,
- 00:37:01three weeks to actually get it right.
- 00:37:04And I think three's kind of the sweet number.
- 00:37:05Like, one person writing a design doc
- 00:37:07is gonna make a lot of wrong choices.
- 00:37:09Two or three people is great,
- 00:37:10because they can call each other.
- 00:37:12They can say, "That's a bad idea. Here's why."
- 00:37:14And there's enough perspective.
- 00:37:15If you get more than three people,
- 00:37:18then it starts to become a circus, right?
- 00:37:19It's the same reason, like, why meetings
- 00:37:21with more than five people never accomplish anything.
- 00:37:23Yeah, never converge.
- 00:37:25Fitzpatrick: Everybody ever travel with a group of people,
- 00:37:27like travel around Europe or backpack or something?
- 00:37:29You get more than six people, you can't go anywhere.
- 00:37:31[laughter]
- 00:37:33You go to the next corner, and it's a big discussion.
- 00:37:34Collins-Sussman: That's true of a business meeting too.
- 00:37:36Fitzpatrick: Exactly. It's also true about meetings.
- 00:37:38Collins-Sussman: So with design docs,
- 00:37:39I think two or three people is sort of that perfect number.
- 00:37:41And then after we got the design doc,
- 00:37:43we went, and we brought it to a larger forum.
- 00:37:46We gave a presentation about it.
- 00:37:47We invited comments, and we put it up on a web site,
- 00:37:50and we started getting feedback.
- 00:37:51And then we just started coding,
- 00:37:53and, amazingly, about a month or two later,
- 00:37:55we had some working-- very basic working code.
- 00:37:58And suddenly, as soon as we had working code,
- 00:38:01suddenly all these people started showing up.
- 00:38:03We didn't even advertise, but somehow,
- 00:38:05it was like we crossed this magic threshold,
- 00:38:07and we said, "It's okay now. Come on, come on, come on."
- 00:38:09Fitzpatrick: We have to remember nine years ago,
- 00:38:11it was CVS in the Open Source world.
- 00:38:13Collins-Sussman: It was only CVS.
- 00:38:14Fitzpatrick: It was only CVS in the Open Source world.
- 00:38:16That was it.
- 00:38:17But the other thing-- You're erasing history here.
- 00:38:20You forgot to tell them about us going into a cave.
- 00:38:22Collins-Sussman: It never happened.
- 00:38:23Fitzpatrick: There was a lot of people
- 00:38:25that showed up a little bit early almost,
- 00:38:26and we said, "All right, we're gonna create
- 00:38:28"this private mailing list
- 00:38:29"and have our design discussions there,
- 00:38:30because these people are distracting us."
- 00:38:32Collins-Sussman: Well, we were embarrassed.
- 00:38:34Fitzpatrick: Yeah, but Brian Behlendorf
- 00:38:37was outraged.
- 00:38:39Anybody who knows Brian Behlendorf,
- 00:38:41the guy is never outraged.
- 00:38:42But he was very angry,
- 00:38:45and he told us to cut it out, basically,
- 00:38:47and get our butts back out there.
- 00:38:49Collins-Sussman: Stop talking in private, right?
- 00:38:51If they're bored by what we're saying, they can leave.
- 00:38:53Fitzpatrick: Right. And we were pretty indignantly angry
- 00:38:55about it at the time.
- 00:38:56But, you know, four years later,
- 00:38:57you know, we're laughing about it.
- 00:38:59He was totally right.
- 00:39:00Collins-Sussman: So what's our other...?
- 00:39:02Fitzpatrick: Our next case study--
- 00:39:03Collins-Sussman: Well, you talk.
- 00:39:05Fitzpatrick: All right, next case study is the two of us.
- 00:39:07So we've given dozens of talks together
- 00:39:09over the past, I don't know, four years, five years,
- 00:39:12and we've known each other for about 10 or 11,
- 00:39:14but sort of the case study is how we write our talks.
- 00:39:17I mean, what we've done over the past five years is we take--
- 00:39:21we put the phones away, leave the laptops at the office,
- 00:39:24take a couple notebooks, and go to a cafe.
- 00:39:26And then they close the cafe.
- 00:39:27Collins-Sussman: Paper notebooks, made of tree.
- 00:39:29Fitzpatrick: Then they close the cafe, and we find another cafe,
- 00:39:31and they close that cafe.
- 00:39:32So if we show up in your cafe, you might want to throw us out.
- 00:39:34But we sit down there and--
- 00:39:37Oh, I forgot to plug in the laptop.
- 00:39:40Collins-Sussman: Good thing we're almost done.
- 00:39:41Fitzpatrick: Yeah, good thing we're almost done.
- 00:39:43Collins-Sussman: Except we lost our...
- 00:39:45Fitzpatrick: Lost our...
- 00:39:47Is there power? Collins-Sussman: There it is.
- 00:39:50Fitzpatrick: Oh, uh, grab it.
- 00:39:52It's over here, sorry.
- 00:39:54Collins-Sussman: That's it.
- 00:39:56Fitzpatrick: So this is a great example of failure.
- 00:39:57This is why we did this.
- 00:39:59[laughter] This is completely intentional.
- 00:40:02You got the plug over there? Thank you.
- 00:40:05Collins-Sussman: There we go.
- 00:40:06Fitzpatrick: All right, that's much better.
- 00:40:08Collins-Sussman: Awesome.
- 00:40:09Fitzpatrick: Gosh, I feel stupid.
- 00:40:11So case study is forgetting to plug your laptop in.
- 00:40:14But so we sit down with-- on paper and we just brainstorm.
- 00:40:17One of us usually has an idea for what we want to talk about.
- 00:40:20And we'll brainstorm or sort of riff on that idea.
- 00:40:23And we act as filters for each other.
- 00:40:24"Oh, we think that's a good idea.
- 00:40:26Let's go in that direction. Let's not."
- 00:40:29What we wind up with at the end is a whole bunch of ideas,
- 00:40:31and then once we get the ideas together,
- 00:40:33we put it together in an outline
- 00:40:35and try and make it a little bit more coherent
- 00:40:36and group like things together.
- 00:40:38Collins-Sussman: And then someone else goes
- 00:40:39and puts it into slides and then gives it to the other person.
- 00:40:41Then they change the slides.
- 00:40:43It sort of bounces back and forth, right?
- 00:40:45But it's a nice gradual evolution.
- 00:40:47At no point are we hiding from each other or--
- 00:40:50Fitzpatrick: But another thing we learned
- 00:40:52is that if you're gonna give a talk at an event like this,
- 00:40:54you want to actually not walk in here completely fresh
- 00:40:57and never having spoken this before.
- 00:40:59So we can stand at home
- 00:41:01or in the office and do it in a conference room,
- 00:41:03but we decided to give a presentation
- 00:41:05at the local user group in Chicago,
- 00:41:07and we learned some things about what did and what didn't work.
- 00:41:09For example, when you're speaking
- 00:41:11to a room full of 19-year-olds, they don't know what CVS is.
- 00:41:14Then we also gave it to the engineers
- 00:41:16in our office in Chicago,
- 00:41:18and we got some great feedback from them.
- 00:41:20And then we gave it here, and we learned to plug in the laptop.
- 00:41:22Collins-Sussman: Which you're reading quickly.
- 00:41:23Fitzpatrick: Yes, exactly.
- 00:41:24That's the first time I've made that mistake,
- 00:41:25and hopefully I won't fail that way again, at least.
- 00:41:28Collins-Sussman: All right, so let's just back up really quick.
- 00:41:29We have our obligatory summary,
- 00:41:31just in case you forgot what we were saying.
- 00:41:33So there are no geniuses.
- 00:41:36Fitzpatrick: There are very few geniuses.
- 00:41:38Is Jeff Dean here? Collins-Sussman: Okay.
- 00:41:39[laughter] Fitzpatrick: Okay.
- 00:41:41I was told by another Googler
- 00:41:42if Jeff was here, we're gonna be in deep trouble.
- 00:41:44Collins-Sussman: So right. So there's no geniuses.
- 00:41:45It's our natural instinct to try and want to be a genius,
- 00:41:48but we should fight that
- 00:41:49and actually try to collaborate as much as we can, early, often.
- 00:41:53Don't be afraid of collaboration.
- 00:41:55And pay attention to what your tools are doing to you
- 00:41:57and the people you work with,
- 00:41:59'cause they do affect your collaborative behavior.
- 00:42:01And finally, make sure you're paying attention
- 00:42:03to when you collaborate, right?
- 00:42:04Not too early, not too late.
- 00:42:06It all is sort of--
- 00:42:08There's a critical sweet spot for success in collaboration.
- 00:42:10Fitzpatrick: Right.
- 00:42:11And of course, there's actually a secret to all this
- 00:42:15that you probably shouldn't share outside of this room,
- 00:42:17but believe it or not, if you actually do all these things,
- 00:42:19people will think you're a genius.
- 00:42:22So--'Cause it's not the typical thing that people do.
- 00:42:26People don't make themselves vulnerable.
- 00:42:27They don't sort of-- They're not open to influence.
- 00:42:31And, uh...
- 00:42:32Collins-Sussman: That's it.
- 00:42:33Fitzpatrick: But that's it. Thanks.
- 00:42:34[applause]
- 00:42:38Collins-Sussman: We got 15 minutes.
- 00:42:42Fitzpatrick: Yeah, we have some time for questions and answers.
- 00:42:44So if anyone has any questions or preferably answers,
- 00:42:47there are some mics in the center of the room.
- 00:42:49If you could get up there and...
- 00:42:54Collins-Sussman: Uh-oh, two at once.
- 00:42:57Fitzpatrick: Protocol. Okay.
- 00:42:58man: Two questions-- one for the audience, actually.
- 00:43:01Who would consider themselves a pair programmer?
- 00:43:06Fitzpatrick: See, they can't get their hands all the way up.
- 00:43:08[laughter]
- 00:43:10man: And the same question to you guys, really.
- 00:43:13What do you think about pair programming,
- 00:43:14kind of formally?
- 00:43:16Fitzpatrick: I personally think it's ideal
- 00:43:19if you're working on something really difficult.
- 00:43:20When I wrote CVS to SVN,
- 00:43:22which is probably one of the hardest things
- 00:43:24I've ever worked on in my life--
- 00:43:26I learned more about CVS and RCS than I wanted to learn ever.
- 00:43:30Karl Fogel and I did a lot of pair programming.
- 00:43:32It was really good,
- 00:43:33because it was really grungy, difficult problems.
- 00:43:35But for sort of day to day,
- 00:43:37I prefer more of the write-code-review process.
- 00:43:40Collins-Sussman: It creates social stress, right?
- 00:43:42If you're pair-programming with somebody,
- 00:43:44you better be really-- know each other really well
- 00:43:46and be very tolerant of each other's quirks, right?
- 00:43:49Otherwise, it can actually-- you can start arguing
- 00:43:52about whoever's driving, right?
- 00:43:54"Don't format the code that way."
- 00:43:56Or, "Don't you know that shortcut?"
- 00:43:57Or, you know, it can get a little maddening.
- 00:43:59Fitzpatrick: There's a number of really good engineers at Google
- 00:44:01who pair-program all the time, and they do a great job of it,
- 00:44:04and they're amazingly productive.
- 00:44:06man: Thanks. Fitzpatrick: Yeah.
- 00:44:08man: So advice on dealing with egos,
- 00:44:10'cause I agree with you guys,
- 00:44:12but there's definitely people on the team
- 00:44:13that, you know, their ego is always in the way.
- 00:44:16Fitzpatrick: Advice on dealing with egos.
- 00:44:17Collins-Sussman: What is the advice?
- 00:44:19Fitzpatrick: How do you deal with people that have a big ego?
- 00:44:21Is that the question? Wow.
- 00:44:23Um...pass.
- 00:44:25No, I'm kidding. [laughter]
- 00:44:26That's a hard question, because...
- 00:44:29typically if they're running the project, they'll--
- 00:44:32Again, like attracts like, okay?
- 00:44:34People who are sort of the friendlier, nicer,
- 00:44:38consensus-building people
- 00:44:39are gonna attract people that like to work with that.
- 00:44:41People who are the big, you know, ego--
- 00:44:43"It's about me. Let's be aggressive here.
- 00:44:46I'm the alpha male. Let's fight about things."
- 00:44:48Collins-Sussman: They attract other alphas.
- 00:44:49Fitzpatrick: Exactly. They're gonna attract other people
- 00:44:51that either want to follow them and be like,
- 00:44:52"Oh, yes, you're right. Wonderful."
- 00:44:53Or they're people that just want to fight them,
- 00:44:54because that's what they want to do.
- 00:44:56So I don't know I'd have a particular recipe--
- 00:44:58We have another talk that you can find on YouTube,
- 00:45:00if you look for "poisonous people,"
- 00:45:02that talks all about how to protect your project
- 00:45:03from poisonous people.
- 00:45:04So there's a little plug for that.
- 00:45:06We gave it here last year, actually.
- 00:45:08Collins-Sussman: That's actually probably the best prescription
- 00:45:10we have is that talk.
- 00:45:11It's just how to deal with difficult people in general
- 00:45:13on your project.
- 00:45:14Fitzpatrick: Yeah.
- 00:45:15Next question. man: Hello.
- 00:45:16Fitzpatrick: Hello.
- 00:45:18man: Let's see if we can deal
- 00:45:19with some constructive criticism here, if it's okay with you.
- 00:45:22Fitzpatrick: Yeah.
- 00:45:24man: It sounds to me like what you're saying
- 00:45:25is almost like humanistically programming,
- 00:45:29which is fine,
- 00:45:31except what it relates--
- 00:45:36you have to be in a certain kind of environment.
- 00:45:38And maybe your company has set up a certain kind of environment
- 00:45:42at a certain stage in time
- 00:45:43that this kind of way of dealing with things works.
- 00:45:47But in a different kind of environment--
- 00:45:50that is, the majority of the world--
- 00:45:51I feel that a lot of the things you're talking about,
- 00:45:54people are gonna get crucified.
- 00:45:57And I'm not saying that's bad or good.
- 00:45:59I'm just saying that's the reality of things.
- 00:46:01It's like when I talked to Kent Beck,
- 00:46:03what, eight years ago about extreme programming,
- 00:46:05the problem with all the guys in the class was,
- 00:46:07"Nobody's gonna--I'm gonna take this back to my company,
- 00:46:09and nobody's gonna want to do this."
- 00:46:11So my first thing is that you have to be very careful
- 00:46:14about applying these things,
- 00:46:17because you go back and do these things,
- 00:46:20and you're gonna get in a lot of trouble
- 00:46:21in a certain environment.
- 00:46:23Secondly, the no-ego thing is great.
- 00:46:26We'll just send everyone off to a Zen center for a year.
- 00:46:29[laughter] You know?
- 00:46:31People have egos. I'm a psychologist for 30 years.
- 00:46:33I deal with people, and that's real.
- 00:46:35That's an ego thing.
- 00:46:37Thirdly, there's plenty of evidence that there are geniuses
- 00:46:40in the world.
- 00:46:42I think that's obvious.
- 00:46:45And there's plenty of evidence that there's a whole range
- 00:46:48of people that are good at programming.
- 00:46:50Some people are good. There's a fair amount of research
- 00:46:52that talks about the great programmers
- 00:46:54can write 100 times better--
- 00:46:57Fitzpatrick: I'm gonna stop you there.
- 00:46:58I don't disagree with you on that--Can you hold on a second?
- 00:47:01I don't disagree with you.
- 00:47:02I'd be glad to talk to you a little more offline.
- 00:47:04"The genius is a myth" thing
- 00:47:05is definitely a straw man that we're setting up.
- 00:47:07There are geniuses,
- 00:47:08but the point we're trying to make precisely
- 00:47:10is that there are remarkably few.
- 00:47:11There are far fewer than most people realize.
- 00:47:13And I think our talk is much more aimed
- 00:47:17at people who are able to control their project
- 00:47:19or their environment.
- 00:47:20If you're in a corporate environment
- 00:47:22or something where you have no control
- 00:47:25over the actual way the software is developed,
- 00:47:27you're gonna have a very hard time doing that.
- 00:47:28And you're right. You might get crucified.
- 00:47:30And our legal staff has asked me to say
- 00:47:32this is not medical advice.
- 00:47:34[laughter] And please be careful.
- 00:47:36But please, we'd love to talk to you more
- 00:47:37about it afterwards in person. Thanks.
- 00:47:39Collins-Sussman: We're describing the ideal here,
- 00:47:41right?
- 00:47:42Getting from the ideal, actually implementing that,
- 00:47:44making it happen, is a whole separate problem.
- 00:47:46Fitzpatrick: Right. I mean, we deal with the Open Source world,
- 00:47:50for starters.
- 00:47:51And then coming to Google,
- 00:47:52it's run inside like a whole bunch of Open Source projects,
- 00:47:55to some great extent.
- 00:47:56So it's a similar sort of gestalt.
- 00:47:59Collins-Sussman: Right. Fitzpatrick: Next question.
- 00:48:01man: Hi. I hope this will be interesting to many people.
- 00:48:06So you mentioned being a small fish.
- 00:48:09Do you have any advice of--
- 00:48:12So if you're in an environment where you're not a small fish,
- 00:48:16so how to change that,
- 00:48:18without leaving the environment, of course.
- 00:48:21Or how to find other ways
- 00:48:25to improve your skills.
- 00:48:28Collins-Sussman: So the question is, "If you're a small fish,
- 00:48:30how do you deal with-- how do you become a big fish?"
- 00:48:33Sorry, if you're a big fish, how do you become a small fish?
- 00:48:35Fitzpatrick: You hire bigger fish.
- 00:48:37Collins-Sussman: That's it.
- 00:48:38If you're talking about in a corporate environment,
- 00:48:40if I were in that situation,
- 00:48:42I would start looking around for bigger fish, right?
- 00:48:44"Where are the really hard projects?
- 00:48:46"Where are the people who are much more knowledgeable than me?
- 00:48:49How can I somehow get involved with what they're doing," right?
- 00:48:52And maybe it's just slow involvement at first,
- 00:48:55but try to sort of creep your career in that direction,
- 00:48:58because if you're not being challenged,
- 00:49:00if you're not a little bit scared all the time,
- 00:49:02just a little bit, then you're not gonna improve.
- 00:49:04Now, I mean, I--
- 00:49:07That's not a guaranteed solution.
- 00:49:09Sometimes you may be trapped,
- 00:49:11in which case, I guess I might just go look for another job.
- 00:49:13If I were truly bored at my job, right?
- 00:49:16Fitzpatrick: Right. In the Open Source world,
- 00:49:18you know, you typically want to attract
- 00:49:19these kind of people and projects.
- 00:49:21So if you're-- If it's built on consensus
- 00:49:24and other people can still come in and have an influence,
- 00:49:27that's typically what will attract the bigger fish.
- 00:49:30man: So you're saying if you can change
- 00:49:32your corporate environment,
- 00:49:34start an Open Source project, basically.
- 00:49:37Fitzpatrick: Again, corporate environments--
- 00:49:40it's really risky.
- 00:49:41If you are one of the small fish
- 00:49:43or, like, you're just an engineer on a large project,
- 00:49:45you know, you have no power to change that necessarily.
- 00:49:48You can do what you do,
- 00:49:49but you're not gonna be able to guide a project
- 00:49:51from that seat that you're in.
- 00:49:53Collins-Sussman: If you're a big fish in a corporation,
- 00:49:55you probably do have a lot of power
- 00:49:56to start migrating your career
- 00:49:59towards other bigger fish, right?
- 00:50:01Fitzpatrick: Right. Collins-Sussman: It's possible.
- 00:50:03Fitzpatrick: Next question, please.
- 00:50:06man: Hi. You talked about avoiding a low bus factor
- 00:50:10and having as many people look
- 00:50:11at as many pieces of code as possible.
- 00:50:13And you talked about it in the context
- 00:50:15of people being egotistical and wanting to own a piece of code
- 00:50:17and no one else touch it.
- 00:50:19But I think there's a practical factor there.
- 00:50:20When you have a big project with few people,
- 00:50:22that the more proficient someone is with a component,
- 00:50:24the more quickly they can implement features
- 00:50:26or solve bugs.
- 00:50:27And if everyone spreads themselves too thin, maybe...
- 00:50:30maybe development would slow down.
- 00:50:32I don't know.
- 00:50:33I feel like this is true on my project
- 00:50:35and my work experience.
- 00:50:36I feel like when bugs come in, we want to assign it
- 00:50:38to the person who knows that component best.
- 00:50:40They can fix it fastest.
- 00:50:41But we've thought about maybe purposely assigning bugs
- 00:50:43to people who know it less to help spread knowledge.
- 00:50:46Is that a good idea, or is this concern completely false
- 00:50:48and just coming out of ego?
- 00:50:50Collins-Sussman: I think there's a tension there,
- 00:50:51like you said, right?
- 00:50:52The fastest thing to do
- 00:50:54is to have the people who know the code best work on it, right?
- 00:50:58But you need to sort of find a balance, right?
- 00:51:01Where you're balancing short term versus long term.
- 00:51:03In the short term,
- 00:51:05it's best to have the experts work on the code they know,
- 00:51:07'cause it'll get done faster, right?
- 00:51:08In the long term, though, you want to occasionally,
- 00:51:11like you said, maybe have someone
- 00:51:13who doesn't know that code as well
- 00:51:15pair-program a bug fix with somebody who does,
- 00:51:18or give somebody a small task in that foreign area of code,
- 00:51:22which isn't particularly time-critical,
- 00:51:24but will give that person some experience with the code
- 00:51:27so that if the expert does get hit by a bus,
- 00:51:29you'll be covered for the long term.
- 00:51:30So, yeah, it's about risk management, right?
- 00:51:32Short and long term.
- 00:51:33Fitzpatrick: And we're certainly not advocating
- 00:51:35that everyone on your project
- 00:51:36knows how to do absolutely everything in the code base.
- 00:51:38There's ways of improving your bus factor
- 00:51:41without actually making everyone into a generalist,
- 00:51:44and that is good solid documentation
- 00:51:47in code and comments, design docs,
- 00:51:49and then just general documentation.
- 00:51:51Collins-Sussman: And code review, right?
- 00:51:52If one person--If there's code review going on,
- 00:51:55then it's really pretty much impossible for one person
- 00:51:57to know an area of code.
- 00:51:58Somebody must've reviewed that code
- 00:52:01that went in there, right?
- 00:52:02At least have a cursory knowledge.
- 00:52:03Fitzpatrick: Next question, please,
- 00:52:05in front.
- 00:52:07man: Uh, yes.
- 00:52:08You were talking about technological solutions
- 00:52:11for social problems.
- 00:52:12And you mentioned that Git
- 00:52:15and other distributed systems have this problem
- 00:52:18where the first thing you do is fork.
- 00:52:20But I wonder if--And I don't want to put you on the spot,
- 00:52:23'cause I think this must be some sort of competitor of yours,
- 00:52:26but GitHub has taken that model
- 00:52:29and sort of mushed it together, so it's both--
- 00:52:34You fork, but when you fork,
- 00:52:36somebody else can see that you forked their code.
- 00:52:38And we've had cases where I work lately
- 00:52:40where we have fixed something, and the next day
- 00:52:44it would get pulled back into the main branch.
- 00:52:46So I wonder, you know, how you think about that.
- 00:52:48And maybe even if you could-- if Google Code was thinking
- 00:52:52about going somewhere in that direction.
- 00:52:56Collins-Sussman: Well, Google Code
- 00:52:57actually supports Mercurial now.
- 00:53:00And, yes, we are working
- 00:53:01on the whole sort of server-side clones, much like GitHub.
- 00:53:05I think that's gonna be coming.
- 00:53:07[man speaking indistinctly]
- 00:53:09It's not deployed yet, but, yeah, it would be--
- 00:53:11it's definitely on our road map to sort of have, you know--
- 00:53:14having users be able to clone repositories on the site
- 00:53:16and do polls from them the same way GitHub does.
- 00:53:19But I was saying there's a balance, right?
- 00:53:22Yeah, people start out forking, but on the other hand,
- 00:53:26it's a much lower barrier to participation
- 00:53:28than with a centralized system.
- 00:53:30So I think it balances out, right?
- 00:53:33Or maybe it's even better in the long run
- 00:53:35for participation.
- 00:53:38Fitzpatrick: We have one last question it looks like.
- 00:53:41man: Hi.
- 00:53:42You did give a very nice talk--
- 00:53:44Fitzpatrick: Into the microphone, please.
- 00:53:45man: Yeah. You did give a very nice talk
- 00:53:48about how you should be to pick up team enrollment.
- 00:53:51But usually what when you're working on one reserve,
- 00:53:53when you start implementing what you just talked about,
- 00:53:56it's not just someone becoming a genius,
- 00:53:57but you become a guinea pig.
- 00:53:59Your manager wants you to write more code.
- 00:54:01Your peers look up to you, even though you are a small fish.
- 00:54:04Just out of college, you know, they expect you--
- 00:54:06You know all this, and I'll just bring up
- 00:54:08a magical solution and, of course--
- 00:54:09It's like a little bug trying to pull an airplane.
- 00:54:11And then you're kind of in that limbo,
- 00:54:14where you want a code, but you're afraid of coding.
- 00:54:17And the more you code, your manager wants you to code more,
- 00:54:20and then suddenly, you start to dream code.
- 00:54:21Your girlfriend becomes angry at you
- 00:54:23because you forget about her.
- 00:54:24Your mother complains because you're not calling her.
- 00:54:26So all these psychological problems come up.
- 00:54:28So how do you actually think about this?
- 00:54:30Fitzpatrick: We have another talk in five minutes
- 00:54:32on how to replace your manager.
- 00:54:33[laughter] No, I'm just kidding.
- 00:54:37Collins-Sussman: Hmm. I don't think I've seen that situation.
- 00:54:41Are you talking about the general pressure
- 00:54:43to write more code?
- 00:54:44I mean, I guess I don't quite understand.
- 00:54:46Fitzpatrick: I think it's a pressure from management
- 00:54:47to behave in one way
- 00:54:49when it's not necessarily better for the team.
- 00:54:50Is that the general gist of what you're talking about?
- 00:54:52man: It's just a matter of becoming a guinea pig.
- 00:54:55You are the one--
- 00:54:56You become a victim of experimentalization.
- 00:54:59Fitzpatrick: Right. So...
- 00:55:01Collins-Sussman: Wow. I don't know.
- 00:55:03Fitzpatrick: We don't have a solution for that.
- 00:55:05Collins-Sussman: I think we're out of time.
- 00:55:07Fitzpatrick: I think we're out of time.
- 00:55:09Collins-Sussman: Darn. Rats.
- 00:55:11Fitzpatrick: Thanks to everybody for coming.
- 00:55:13[applause]
- Genius Programmer
- Collaboration
- Insecurity
- Bus Factor
- Failure
- Feedback
- Open Source
- Community
- Ego
- Software Development