================================ Fully Distributed & Asynchronous ================================ A new communication model for teams. .. rst-class:: logo .. image:: ./_static/parsely.png :width: 40% :align: right ========== Background ========== What is Parse.ly? ================= Analytics for digital storytellers. .. image:: ./_static/banner_01.png :align: center .. image:: ./_static/banner_02.png :align: center .. image:: ./_static/banner_04.png :align: center A product ========= .. image:: ./_static/glimpse.png :width: 100% :align: center A tech stack ============ .. image:: ./_static/tech_stack.png :width: 100% :align: center A team ====== .. image:: ./_static/team.png :width: 50% :align: center This talk is on our **distributed team**. It's what we've learned about work and communication in a growing tech startup. ======================== Open Plan vs Open Source ======================== 15 years ago ============ .. image:: ./_static/debian_logo.png :align: center :width: 30% Developer Locations =================== .. image:: ./_static/debian_locations.png :align: center :width: 90% Spolsky ======= .. image:: ./_static/spolsky.jpg :align: center :width: 60% **"Hire smart people, and they will produce good stuff that you can sell and make money off. Then everything else follows."** Spolsky on Collaboration ======================== * great programmers work best in *small groups* * every professional programmer needs a *private office* * process is about *ensuring quality*, not cracking a whip * managers are *janitors, not kings* Spolsky's "Bionic Office" (2003) ================================ .. image:: ./_static/bionic_01.jpg :align: center :width: 90% Private Office Floor Plan (2003) ================================ .. image:: ./_static/bionic_02.jpg :align: center :width: 80% New Fog Creek Office (2008) =========================== .. image:: ./_static/spolsky_office.jpg :align: center :width: 90% Parse.ly "Office" (2014) ======================== .. image:: ./_static/my_office.jpg :align: center :width: 90% Home Office Ingredients ======================= - High-speed Internet - HD webcam - A door that closes - Your own gear (Mac / Linux) - A comfy office chair and/or standing desk (optionals: Chromebox, whiteboards, coffee machine, coworking desk rental, shaded outdoor workspace) Team Locations ============== - **Countries**: United States, Canada, Scotland - **States**: Texas, North Carolina, Wisconsin, Massachussets, Virginia, New York, Ontario, Quebec - **Cities**: Edinburg, Edinburgh*, Austin, Houston, Raleigh, Madison, Boston, Charlottesville, Scottsville, Rochester, Brooklyn, Toronto, Quebec City - **Time Zones**: UTC-5, UTC-6, UTC+1* Our Manifesto ============= .. rst-class:: noop * action over experience; * innovation over tradition; * results over potential; * simplicity over intricacy; and * openness over restraint. ============= Scaling Teams ============= Brooks's law ============ "Adding manpower to a late software project makes it later." Software projects are often: .. rst-class:: build - **Irreducible**: "the bearing of a child takes nine months, no matter how many women are assigned." - **Communication-centered**: "an added burden of communication with two parts, training and intercommunication." - **Ill-defined**: "the hardest single part of building a software system is deciding what to build." Brooks's formula ================ Communication in groups scales poorly: .. sourcecode:: python >>> paths = lambda n: n * (n - 1) / 2 In 2012, our 8-person team had: .. sourcecode:: python # 8 * (8 – 1) / 2 >>> paths(8) 28 In 2014, our 24 employee company has: .. sourcecode:: python # 24 * (24 – 1) / 2 >>> paths(24) 276 Takeaway ======== It’s **10X more difficult to communicate**, even though our company is only **3X as big**. Why "surgical" teams? ===================== .. sourcecode:: python # 4 * (4 – 1) / 2 >>> surgical = paths(4) # 16 * (16 – 1) / 2 >>> full = paths(16) >>> full / surgical 20 **A 4-person surgical team communicates 20X more efficiently than the 16-person team of which it is a part.** ================= Distributed Teams ================= Defining "Fully Distributed" ============================ .. rst-class:: build * **Vertically-Scaled**: One office that must get bigger and bigger to house your staff; collaboration is face-to-face preferred; example is Google in 2006. * **Horizontally-Scaled**: Multiple offices opened with independent cultures; collaboration is face-to-face preferred, digital between offices; example is Google in 2014. * **Fully-Distributed**: No "office" -- the web is the office; collaboration is digital-preferred, face-to-face occasional; examples are Automattic, Github. * Parse.ly is a **fully distributed team**. .. note:: I don’t really think any one of these models is “better” than the other. Like their equivalent software designs, they involve a series of trade-offs. Defining "Asynchronous" ======================= .. rst-class:: build * **Synchronous Communication**: daily stand-up meetings, all-hands meetings, brainstorming meetings, pair programming. * **Asynchronous Communication**: daily standup **messages**, team **e-mail** threads, **pull requests**. * Parse.ly prefers **asynchronous communication**. Beating Brooks's Law ==================== An analogy: the CAP Theorem. - **Coordination**: everyone knows what others are doing - **Action**: everyone is making forward progress If everyone is coordinating, no one is acting. All about action ================ "The world responds to action, and not much else." Can we have a proper compromise? An "Eventually Coordinated, Always Acting" team? Yes, I think we can. .. note:: By analogy: I believe you can't beat the CAP Theorem, but you **can** build a system where CAP doesn't matter as much. Likewise, I don't think you can beat Brooks's Law. **But, you can build a team where Brooks's Law matters less.** ========== Guidelines ========== Limit Bad Meetings ================== ================== ================== =================== Purpose Good Meeting Bad Meeting ================== ================== =================== Engage Team 1:1 All-Hands Show Progress Demo Session Iteration Status Fix Prod Issues War Room Post-Mortem Spur Creativity Happy Hour Brainstorming Keep Cadence Retrospective Backlog Review Mentor Code Walkthru Pairing\* Create Clarity Show-and-Tell N/A Reduce Bus Factor Knowledge Share N/A ================== ================== =================== Use Good Tools (1) ================== .. image:: ./_static/github.jpg :align: center :width: 80% Use Good Tools (2) ================== .. image:: ./_static/trello.png :align: center :width: 80% Use Good Tools (3) ================== .. image:: ./_static/flowdock.png :align: center :width: 80% Use Good Tools (4) ================== .. image:: ./_static/aws.png :align: center :width: 80% Have a Daily Cadence ==================== - ``#standup`` and ``#sitdown`` messages - 10am - 3pm ET (working hours) for overlap - Ad-hoc 1:1 or small group meetings - Github, Trello, GDocs, Flowdock, E-mail, GHangout Have a Weekly Cadence ===================== - **Mon**: "bug day" & "plan day". - **Tues**: 30-minute meeting kicks off the week. - **Tues Noon - Fri Noon**: uninterrupted flow time. - **Fri Noon**: "demo day". - **Fri afternoon**: loose ends, hacking, no weekend work. - **Fri 4:30pm**: happy hour! - **Mon**: ``(recur)`` Know Your Company Updates, E-mail Group Threads Know Your Company ================= .. image:: ./_static/know_your_company.png :align: center :width: 90% Demo Day ======== .. image:: ./_static/demo.png :align: center :width: 80% Happy Hour ========== .. image:: ./_static/happy_hour.png :align: center :width: 80% Plan Monthly ============ - **Stories** and **Milestones** - Chunked into 3-4 weeks each - Milestones **with deadlines** used for deliverables - **Surgical teams** own milestones - **Individuals** own stories - **Catalysts** help plan iterations Catalysts ========= "A person that precipitates an event." Engineers or designers who have **management-as-a-skill**. Management-as-a-role **does not exist**. **Help, don't tell.** Catalysts help others do their best work; they don't tell others what to do. - organize - communicate - spot bottlenecks - spur action Optimize for Team Flow ====================== .. image:: ./_static/team_robot.png :align: center :width: 80% ================ The Human Factor ================ Office Pro's ============ * Drive-by mentorship * Dev env osmosis * Sense of urgency .. note:: In vertical teams, "face time" means a pressure to always be "in the office". Encourages a 9-to-5 mentality at odds with creative output. Work-irrelevant personal issues (e.g. hygiene, nervous ticks) are amplified. Face-to-face meetings are often unproductive in real terms, but can feel productive. Employees feel unproductive when not in the office; breeds inflexibility. In horizontal teams, each office location forms a distinct company culture. Breeds "fiefdom" that is often unaligned with organizational purpose. Narrow communication channel between offices is treated as second-class. Real-world artifacts (e.g. whiteboards, hand-written notes, f2f meetings) hidden from other offices. Encourages "out-of-band" communication. Distributed Con's ================= * Building camraderie * Discussing personal issues * Asking for help .. note:: Due to human nature, distributed "technopresence" not an emotional substitute for colocated "physical presence". Harder to build true camraderie. Mentorship is less frequent because in offices, this often happens informally and/or serendipitously. Full-time work-from-home (without adequate social substitutes) can feel isolating despite technopresence. Writing, as a skill, becomes more important than your job description might suggest. Counter-intuitively, distributed employees "kid around" a lot less. Focus on work product fosters an in-the-trenches (tactical) mentality, rather than a blue sky (strategic) one. Employees don't "let their guard down" often, as might happen during a work happy hour or a 1:1 "hallway meeting" with a manager. Collaboration processes will follow the best practices of the open source community, which are admittedly programmer-centric (e.g. Github). Destin Retreat: 4 people (2011) =============================== .. image:: ./_static/retreat_01.jpg :align: center :width: 80% Austin Retreat: 7 people (2011) =============================== .. image:: ./_static/retreat_02.jpg :align: center :width: 80% New York Retreat: 11 people (2012) ================================== .. image:: ./_static/retreat_03.jpg :align: center :width: 80% Savannah Retreat: 13 people (2013) ================================== .. image:: ./_static/retreat_04.jpg :align: center :width: 80% Charleston Retreat: 16 people (2013) ==================================== .. image:: ./_static/retreat_06.jpg :align: center :width: 80% Montreal Retreat: 24 people (2014) ================================== .. image:: ./_static/retreat_07.jpg :align: center :width: 80% Hackathons ========== .. image:: ./_static/retreat_05.jpg :align: center :width: 80% Mixing digital and physical =========================== .. rst-class:: build * Distributed teams are not "cheaper", because you need to allocate the money you save on offices to **travel**. * It's all about **communication**, **collaboration**, and **cadence**. * Humanity matters. Have new hires meet their colleagues face-to-face: **it always helps**. * Realize that on-boarding is traditionally a physical process of "office osmosis"; since you don't have an office, you need **managed on-boarding**. * Turn colleagues into friends through **team retreats**; they work, they're productive, and they're fun! Conclusion ========== **Work is about the product**, not "time in the chair". Overcoming n-to-n communication is a challenge, but **digital tools can help**. **Infrequent meetings** and **asynchronous communication** allow people to focus on their work. **The web is now the office. The physical office is just Yet Another Internet Cafe.** Distributed teams can make **great products** through **radical transparency and human trust**. Interested? =========== .. rst-class:: logo .. image:: ./_static/parsely.png :width: 80% :align: center Questions? ========== Parse.ly: * http://parse.ly/code * http://parse.ly/jobs * http://twitter.com/parsely Me: * http://pixelmonkey.org * http://bit.ly/distributed-teams * http://twitter.com/amontalenti ======== Appendix ======== Books (1) ========= .. image:: ./_static/book_drive.png :align: center :width: 30% **Drive: The Surprising Truth About What Motivates Us** by Daniel H. Pink Books (2) ========= .. image:: ./_static/book_year_without_pants.jpg :align: center :width: 30% **The Year Without Pants: Wordpress and the Future of Work** by Scott Berkun Books (3) ========= .. image:: ./_static/book_remote.png :align: center :width: 30% **Remote: Office Not Required** by Jason Fried .. ifnotslides:: .. raw:: html .. ifslides:: .. raw:: html