27.03.2013 Views

Programming Well with Others: Social Skills for Geeks - Google

Programming Well with Others: Social Skills for Geeks - Google

Programming Well with Others: Social Skills for Geeks - Google

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Programming</strong> <strong>Well</strong> <strong>with</strong> <strong>Others</strong>: <strong>Social</strong><br />

<strong>Skills</strong> <strong>for</strong> <strong>Geeks</strong><br />

<strong>Google</strong> I/O 2011: Tuesday, May 10, 2:30-3:30<br />

Speakers<br />

Ben Collins-Sussman and Brian Fitzpatrick, engineering managers at <strong>Google</strong> Chicago<br />

Summary<br />

Advice <strong>for</strong> developers about interacting <strong>with</strong> people, in the <strong>for</strong>m of a call-in radio show (<strong>with</strong><br />

scripted/pre-recorded calls): The Ben and Fitz Show.<br />

Contents<br />

<strong>Programming</strong> <strong>Well</strong> <strong>with</strong> <strong>Others</strong>: <strong>Social</strong> <strong>Skills</strong> <strong>for</strong> <strong>Geeks</strong><br />

Speakers<br />

Summary<br />

Notes: Introduction<br />

1. Individuals<br />

Harlan from Kentucky: I want to hide my code<br />

Dan from Albuquerque: I want to code in solitude<br />

Bill from Peoria: Midichlorians?<br />

2. Teams<br />

Sara from Wilmington: Mission statements?<br />

Tom from Seattle: Which team should I join?<br />

Reginald from Schenectady: I can’t motivate my developers<br />

Robert (Something) from (?): Don’t collaborate too early.<br />

Chronos from (?): Warcraft<br />

Vern from Las Cruces: I’m spending my time giving advice<br />

Scott from Bismarck: Dealing <strong>with</strong> new manager<br />

Lance from Portland: Why aren’t they getting things done?<br />

Todd from Lisle: How to deal <strong>with</strong> jerks?<br />

Mark from Ann Arbor: You’re being elitist<br />

Norman from Winnetka: Sawdust?<br />

3. Working <strong>with</strong> others<br />

Carl from Daly City: Analysts!<br />

4. Interacting <strong>with</strong> users<br />

Connor from Gallifrey: Marketing wants to spam users<br />

Bill from Santa Monica: Users are unclear<br />

Q&A


Notes: Introduction<br />

Having to work <strong>with</strong> other people is hard. They get in the way.<br />

The social stuff is hard; it's squishy and less deterministic than the tech stuff.<br />

Human beings are a giant pile of intermittent bugs.<br />

If you want to be really good, you have to do social stuff as well as engineering; doing social<br />

stuff well also makes things more efficient.<br />

Four main areas in today's show:<br />

1. Individuals<br />

2. <strong>Social</strong> dynamics of being on a team.<br />

3. How your team works <strong>with</strong> outside contributors or people who work closely <strong>with</strong> you.<br />

4. How you interact <strong>with</strong> others, like your users.<br />

In each of the following sections, Q is the caller, and A is Ben and/or Fitz.<br />

1. Individuals<br />

Harlan from Kentucky: I want to hide my code<br />

Q: I’m working on an OS project on <strong>Google</strong> Code; I want to hide my code and wipe my history.<br />

Don't want people to see the screwups I made when starting out.<br />

A: We all make mistakes, but easy to take it too far.<br />

Everyone's insecure, and we think of people as doing miraculous things—the myth of the genius<br />

programmer. Genius programmers do deserve credit, but they may not have done all the work<br />

themselves.<br />

Think about how you work <strong>with</strong> a team, not how to present yourself as a genius.<br />

Dan from Albuquerque: I want to code in solitude<br />

Q: I’ve been working on code <strong>for</strong> month and a half; I want my coworkers to leave me alone so I<br />

can code.<br />

A: He wants to live in a cave. He’s worried about being slowed down by other people.<br />

If you're doing the wrong thing, being fast is no good. Need feedback from others.<br />

You don't write 10k lines of code and then compile; you write some code, then compile. Same<br />

<strong>with</strong> team: write some code, get some feedback.<br />

Any project needs to be in a tight feedback loop: are you working on the right things, making the


ight design decisions, etc. There’s a high risk to working alone <strong>for</strong> too long.<br />

If person in cave dies, nobody can pick up that code.<br />

If it's the wrong code, doesn't matter how much you write.<br />

Bill from Peoria: Midichlorians?<br />

(Joke call.)<br />

Q: Are there social issues from midichlorians in The Phantom Menace?<br />

A: Phantom Menace? There are only 3 Star Wars movies.<br />

2. Teams<br />

Sara from Wilmington: Mission statements?<br />

Q: My team lead wants a mission statement. And can you get me an interview at <strong>Google</strong>?<br />

A: <strong>Google</strong> is hiring.<br />

Engineers tend to dread mission statements as being meaningless things like “We're focused<br />

on focusing.”<br />

But a mission statement is really a useful way to keep you focused. A direction and a limiter:<br />

going to do this, not going to do that.<br />

Easy to have feature creep.<br />

Fitz: In an Open Source group a while back, I got them to do a mission statement; discovered 2<br />

tech leads disagreed about what they were and weren't working on.<br />

Ben: Need to document mission statement, not just create one. If it's on a web page, it's official.<br />

Fitz: New people in team will argue unless you point them to a web page.<br />

Summary: Not all mission statements are bad.<br />

Tom from Seattle: Which team should I join?<br />

Q: I want to join <strong>Google</strong> Summer of Code. Two projects: in high-profile one, everyone insulting<br />

each other; other one more obscure, but people seem nice.<br />

A: (Explaining to audience:) Summer of Code is a way <strong>for</strong> students to flip bits and not burgers.<br />

Culture is important; can't expect it to change.<br />

Some teams are dysfunctional; others support each other.<br />

Culture needs to be strong enough to resist being taken over by new people.


(After analogy to sourdough starter:) Software developers are like bacteria. What you start <strong>with</strong><br />

is what you get.<br />

Respect & humility among team members tend to attract others of similar demeanor.<br />

Over long term, you may see projects move toward more aggressive.<br />

When picking a team, think about the culture you want to be part of.<br />

Reginald from Schenectady: I can’t motivate my developers<br />

Q: The developers who report to me are ignoring my orders, no matter how much I yell at them.<br />

A: Yelling and ordering may not be motivating.<br />

Programmers want turns driving the bus, want a stake in the project.<br />

Give them an opportunity to drive.<br />

Your role becomes removing roadblocks so they can drive the bus.<br />

Robert (Something) from (?): Don’t collaborate too early.<br />

Q: Collaboration is bad. What kind of hippie freeload crap are you guys dishing out?<br />

A: If you start collaborating from day 1, you may never get anywhere. Maybe nobody shows up,<br />

or everyone shows up and wants to do different things.<br />

Other end of spectrum: if you do everything yourself, you're collaborating too late. Nobody else<br />

will want to get involved. Not much chance <strong>for</strong> people to have effect on outcome. Companies<br />

that open-source big products sometimes have this problem.<br />

Best approach: Design, prototype, then collaborate. Collaborate when you’ve got enough to<br />

show it's not vapor. Still early enough that people can have a stake, but late enough that people<br />

aren't going to be arguing about what to do.<br />

Chronos from (?): Warcraft<br />

(Joke call.)<br />

Q: My girlfriend & I are playing World of Warcraft. [Rest of question garbled.]<br />

A: Red Dragon Dynasty doesn't do any recruiting. Contact officers.<br />

Vern from Las Cruces: I’m spending my time giving advice<br />

Q: I have a "friend" <strong>with</strong> a serious problem: he seems to be writing less code and advising<br />

teammates more, giving advice, etc.


A: Accidental manager, or "leadershipitis." If nobody's assigned to be manager or leader,<br />

someone will fall into that role, whether they want to or not.<br />

Not necessarily bad. Power vacuum, someone sees need & falls into it.<br />

If you call that being a manager, programmers get scared; managers are scary things.<br />

Instead, talk about being leaders, which you can do <strong>with</strong>out being manager or even having a<br />

title.<br />

Scott from Bismarck: Dealing <strong>with</strong> new manager<br />

Q: How get off on right foot <strong>with</strong> new manager?<br />

A: Don't wait <strong>for</strong> orders; take responsibility. Don't come back and say "What do I do next?"<br />

Ben: Act like an adult.<br />

Fitz: “This is what I want to do next, what do you think about that?”<br />

Tell your manager about your roadblocks and successes.<br />

Act like an adult, communicate, and get your work done.<br />

Lance from Portland: Why aren’t they getting things done?<br />

Q: I need people to work faster and longer to meet tight deadline. Why aren't they getting things<br />

done?<br />

A: Carrot & stick approach to management leftover from assembly line days. Stick doesn't work<br />

so well to motivate engineers; engineering is a creative thing, not a rote activity. Carrot and stick<br />

don't get people to be smarter or think more creatively.<br />

Q: What should I do? coddle them?<br />

A: Need to give people a reason to care.<br />

Dan Pink says autonomy, mastery, and purpose. Autonomy: Give them free rein, trust them.<br />

Mastery: Give them a chance to improve themselves. Let the knife sharpen itself. Purpose: Give<br />

people a reason to care, let them feel like they have a stake.<br />

Give them the tools to motivate themselves.<br />

Intrinsic vs. extrinsic motivation. [Mentioned but not discussed.]<br />

Todd from Lisle: How to deal <strong>with</strong> jerks?<br />

Q: How to deal <strong>with</strong> jerks?<br />

A: Need to protect your culture. Most important things your team has are attention and focus.<br />

Here to write software, not to yell at each other.


You have emotional reactions, want to spend energy fighting back. It's hard when someone<br />

attacks you not to fight back. But that typically won't stop them. Usenet adage: Don't feed the<br />

energy creature.<br />

On one Open Source project, a famous person said product sucks, in bug report full of bile/<br />

insults. Someone else in project responded <strong>with</strong> simple/<strong>for</strong>mal language: "Thanks, we'll look into<br />

it." More bile/anger from famous person; more simple/<strong>for</strong>mal polite responses. They did find the<br />

bug and fix it, instead of arguing.<br />

Mark from Ann Arbor: You’re being elitist<br />

Q: This talk is a recipe <strong>for</strong> [?something]. You talk about building consensus, but you're<br />

screening people who disagree <strong>with</strong> you.<br />

A: We're not saying get rid of the people; instead, get rid of the behavior. Can alienate good<br />

people if you throw out baby w/bathwater.<br />

They had one really good engineer who kept insulting people; Ben said do you realize you're<br />

upsetting people; guy was surprised. Ben said please behave civilly and guy cut back on<br />

behavior. It's not about who's in and who's out, it's about what behavior is tolerated.<br />

Still, you have to know when to flip the bozo bit.<br />

Another project: guy who's friendly but sent stream-of-consciousness emails to list, and wrong<br />

answers, and he didn't understand when they asked him to stop. But he eventually agreed to<br />

stop posting. Even non-trolls and nice people (such as perfectionists) can drain all attention and<br />

energy by preventing progress.<br />

Healthy and important to have a strong team ego, not individual ego.<br />

Apache has policy of no names on documents/code. Contentious practice. Guy wrote a date<br />

parser, they told him to remove his name from file (due to project policy), he said it was his<br />

code, they didn't take his code.<br />

More important to preserve the culture than accept this one particular contribution.<br />

Norman from Winnetka: Sawdust?<br />

(Joke call.)<br />

Q: [Trying to fill something <strong>with</strong> sawdust? Garbled.]<br />

A: I think it's a wrong number.<br />

3. Working <strong>with</strong> others<br />

Carl from Daly City: Analysts!<br />

Q: I’m on an Open Source project; industry analysts want white papers/interviews. Everything's


on the website. How to get people to stop bugging us and read docs?<br />

A: Analysts want you to do a lot of work <strong>for</strong> them. Engineers think analysts should read<br />

documentation just like everyone else. Programmers don't trust marketing.<br />

But perception is 9/10 of the law. If people don't know about your software, it won't do as well.<br />

Possible to do marketing w/o being slimy.<br />

Underpromise but overdeliver.<br />

If you've got substance, OK to have shine.<br />

4. Interacting <strong>with</strong> users<br />

Connor from Gallifrey: Marketing wants to spam users<br />

Q: Our company got user email addresses, <strong>for</strong> license keys; marketing wants to spam users.<br />

A: It's about trust. Things have changed since 15 years ago. Users can switch to other software,<br />

so trust is important. You can spend years building trust, then blow it all at once.<br />

Fitz: People don't trust car mechanics. My father took over a Firestone store that was doing<br />

badly; started to do well because they stopped trying to rip people off.<br />

Other ways to connect to users than sending spam. You can talk to them, listen to them, put up<br />

public bug tracker, use social media, read what they're saying about you in social media.<br />

People love to be heard.<br />

Spamming gives short-term sales bump but long-term hurt.<br />

Bill from Santa Monica: Users are unclear<br />

Q: Users ask obvious questions in <strong>for</strong>ums, and aren't clear.<br />

A: Learning to talk to non-techies is a skill. We do tech support <strong>for</strong> our non-tech families; hard to<br />

understand in both directions; try to translate intentions, hear what they mean instead of what<br />

they say.<br />

Fitz: My grandmother asked if old computer is worth anything; only turns it on when she wants<br />

to sharpen a pencil. Turns out it's attached to same power strip as electric pencil sharpener.<br />

Learned skill. Customer relations is hard work.<br />

Q&A<br />

Q: Starting a project, but business and IT aren't talking. Business wants everything, IT needs to<br />

limit that. How to get those teams to talk so as not to be in the middle?<br />

A: Hard thing is getting someone w/power in company to drive that conversation. Need a<br />

decision-maker who can bridge the gap. Needs to be solved, though, to get anywhere.


Q: We receive a new "final" set of requirements every few days; super frustrating.<br />

A: Out-organize them. Point out we're glad to do this but we have to cut back on things. Not just<br />

saying yes or no; making clear <strong>with</strong> data what the tradeoffs are.<br />

Q: Thoughts on continuous deployment? (Run automated tests, put it live on website<br />

immediately.)<br />

A: Fitz: scary. Ben: Fantastic.<br />

Fitz: Can blow yourself up,<br />

Ben: Can spend a lot of time getting it to work. Short vs long-term investment.<br />

Q: We have a new developer who jumped in headfirst & is making changes w/o understanding;<br />

is introducing bugs. But he's 25 years older than me, has an attitude of this is how I've always<br />

done things. How can I approach him? There are 5-10 developers on team.<br />

A: Does your team have a strong culture?<br />

Q: We try to adhere to practices.<br />

A: Have they documented the team culture?<br />

Q: Large project, grown over 10 years. Individuals know their parts well. Other guy's not<br />

respecting my experience in that area.<br />

A: He's not respecting the culture overall; multiple people need to point this out to him. And it's<br />

not just the manager's job; everyone should tell him.<br />

Document your culture/processes.<br />

Get more people involved so it's not just you and him; it's him vs group culture.<br />

Q: A developer pulled an app from Android Market 'cause bad reviews went up to the top of the<br />

reviews, and developer got too stressed. How does a team that's emotionally tied to a product<br />

cope <strong>with</strong> bad reviews?<br />

A: You're not your code.<br />

F: "Ben and I worked on Subversion years ago; sorry about that."<br />

You gotta learn how to let go and move on.<br />

Are the complaints legitimate? If it's just trolling and griefing, then it's just noise. But look <strong>for</strong><br />

constructive criticism.<br />

If you’re going to do Open Source software, buy a rhino skin & wear it <strong>for</strong> a while.<br />

Q: I'm the new younger guy coming in to an older team; to them I'm a maverick, to me they're<br />

dinosaurs. I want to move fast, they want to move slow.<br />

A: Culture conflict. Is there respect?<br />

Q: Yes.<br />

A: Then this is resolvable. If there's humility/respect/trust, can be worked out. Sit down and<br />

talk about what the processes should be. If you document why you do things, sometimes it<br />

makes non-obvious stuff clear. Research existing culture be<strong>for</strong>e deciding to overturn it. If you're<br />

disagreeing w/someone, strive to understand their point of view. The more you listen, the more<br />

you're listened to.<br />

Q: A lot of the whys aren't written down anywhere; I need to document it.<br />

A: Good opportunity to help drive bus.


Q: Other tools to define culture?<br />

A: Wikis. Wearing lab coats. There's a lot of stuff in culture; we focus on social aspects, but<br />

there's other stuff. Beers on Friday. Nerf guns. Eating lunch together, and not necessarily<br />

talking about work. You get to know people as people and not just on a tech level. Makes it<br />

easier to have project discussions.<br />

Q: How do you get people to focus attention on details in design? The people I’m working <strong>with</strong><br />

are too basic; you give them a mockup and they give you a mockup back instead of a working<br />

system.<br />

A: When you're most afraid to rock the boat is when you should do it. “This is what I expect of<br />

you and this is where I'm not getting it.” Hard data, at least two examples. They might not know<br />

that they’re not doing what’s needed. Communication is good.<br />

Q: What's right thing to do when the group culture is skewed toward things like spamming? I'm<br />

just an engineer; hard to be persuasive.<br />

A: In other words, how does one engineer change a culture? Find a new company. But you can<br />

make attempts; try to change what you can. Ask people if they've thought about it this way. If<br />

you've tried and failed, you can either stew about it or leave.<br />

Also, reach out to others in company who feel the same way. But remember that companies<br />

aren't democracies. But you can have political movements in them.<br />

Q: Teammate is capable developer who doesn't share things w/rest of team. Boss likes him, he<br />

gets special assignments, etc.<br />

A: Can give boss data—if we could get more info, we could do more. Quantify impact of guy not<br />

collaborating. But if manager and lead want to run things that way, you don't have much option;<br />

they're defining culture top-down.<br />

Also try to figure out psychology of person; are they insecure, egotistical, what? How to get<br />

them to open up? Take social routes if you can.<br />

(End of session.)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!