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
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.)