Software developers use more and more tools in their work. Some are directly aimed at creating software, such as IDEs or editors, but many tools play more supportive roles. They help developers communicate, collaborate, and coordinate with others, find new work, or keep up with new technologies.
All these tools and channels are built by people who are software developers themselves.
In one of his pieces on Marshall McLuhan, John M. Culkin wrote:
We become what we behold. We shape our tools and thereafter our tools shape us.
In other words: developers build tools, and they use them to build other tools. The tools they’ve build, however, influence their effectiveness, and even how they think.
How Do The Tool Builders Use Their Tools?
It seems important, then, to understand what tools developers use, how and why they use them, and what challenges they face. That could not only help us build better tools, but also help improve how we build them.
Together with my colleagues Prof. Margaret-Anne Storey, Prof. Fernando Figueira Filho, Alexey Zagalsky, and Prof. Daniel German I conducted a study to better understand how the tool builders use a special class of tools: supportive ones that act as channels for communication, collaboration, coordination, and related activities.
Based on our own research and existing literature on knowledge work, we designed an extensive survey probing these questions. We used it to ask 1,449 GitHub users about their work.
We asked them what tools they use for what kinds of activities. As it turns out, developers do much more than coding: they communicate, coordinate, resolve technical as well as social conflicts, network, joke, and learn.
Note: as any survey-based study, ours is biased towards those who would fill it out. And the survey we used here was pretty long. That doesn’t mean that our results are invalid, but they likely apply only to a certain subset of GitHub users. Still, our study provides a valuable data point on how software developers work and what they struggle with.
Before we delve into the details of what tools developers use and why, let’s look at who answered our survey.
Survey respondents were mostly from North America (43.3%), followed by Asia (24.2%) and Europe (21.1%). 7.1% were from South or Central America, and 4.1% from Africa or Oceania.
77.9% said they were 32 or younger. 3.7% were older than 45, and only 0.4% were older than 60.
Only 3.9% identified as female.
Demographics-wise, this was definitely not a diverse population.
These demographics gave us a rough understanding of our study participants. However, mostly we were interested in the communication tools they use in their work, and for what kinds of activities they need them.
On average, developers said they use 11.7 such tools across all their development-related activities, with a median of 12 and quartiles of [9, 14] (see above).
Most Important Channels
To get a thorough understanding of what tools were used for what activities and why, we asked developers about their three most important channels — and asked them for a reasoning for their answer.
Code hosting sites such as GitHub and Bitbucket are super important. They’re infrastructure: the power grid, the roads developers use and don’t think about too much.
Our study targeted users of GitHub, so it’s completely possible that selection bias skewed the results here.
But there are also reasons to believe that they really deserve the top spot. As the following quote illustrates, they’re not only important for developers — they’re used by many more roles:
All levels of users and employees know how to use it: The hard-core developers use the command-line-based tools, and the ‘end users’ just use the Web interface, without feeling overwhelmed.
Second place: face-to-face interactions. We found it interesting that they were so high up in the list.
Nothing beats being able to sit one-on-one and talk through a topic, plan out a design or just converse while coding. This is also my favorite way to learn from an instructor because of the ability to ask as many questions as possible and have an open conversation.
The above quote may sound obvious. But it contradicts the stereotype of the open source hacker type not interested in direct interaction. Not that there’s anything wrong about being one way or the other, but we were positively surprised to see more diversity here than we had expected.
Some developers said they were using videoconferencing tools as a way to mimic in-person interactions. It would be interesting if we could make a clearer distinction here, but then again blurring these distinctions is pretty much what such tools are trying to achieve.
Site like Stack Overflow came in third, offering a quick way to debug issues while providing access to high-quality answers:
Almost any question that I have, I can get an answer through these sites.
Other respondents mentioned additional uses of Q&A sites, such as staying up to date, learning from code examples, and getting feedback from experts. Those might sound similar, however they’re distinct if interrelated activities.
Search seems so ubiquitous today that it has almost faded into the background. It’s not really a tool for a specific job, but part of the infrastructure. It helps you move around.
It’s essential for finding information:
Good for finding the initial direction; also […] to learn something new.
It also provides quick access to software documentation and supports problem solving. Many survey respondents said they used search engines as their entry point for finding answers on Q&A sites.
Microblogs — well, mostly Twitter if we’re honest — provide just-in-time awareness of the latest advancements in the development community:
Allows me to get up-to-date information on topics I’m interested in — conferences, new releases, new articles / books, etc.
They were also considered important for getting feedback from other developers and for nurturing relationships with like-minded people.
Also see our past study on how software developers use Twitter.
Tools such as Slack, Hipchat, or instant messaging are
essential tools for supporting team communication and collaboration:
It provides a single channel to digest and discuss everything that is going on with the team.
Many survey respondents felt that private chats are the closest replacement for face-to-face interactions when quick feedback is needed and team members are geographically distributed.
Feeds and Blogs
… provide the most up-to-date information on development practices and technologies:
By following several feeds, one can find out how veterans use a tool / technology / language … and it’s easier to know the trends.
Blogs encapsulate a more personalized view on a given topic and are an important channel for documenting techniques while sharing specific coding tips and tweaks that can be used by other developers.
… And Everything Else
Other channels came in in the following order:
Private discussions (e.g. via email), public chats (such as IRC), aggregators (Reddit, Hackernews, …), project coordination tools (Basecamp), books, social network sites (Facebook), and finally rich content (podcasts, screencasts, …).
Our paper (linked below) has more details on why those channels were important to developers.
Coding Is Just One Part Of Being A Developer
Previous research into developer tools has often focused on development tools, such as editors, IDEs, or code review systems. Consequently, those studies also mostly focused on the activities supported by those tools.
Developers care about code quality and velocity, yes. But many also need to coordinate with others, learn to stay current, and network to create opportunities.
As our study has shown, there are many more tools that are either essential to today’s software developers, or at least influence their efficiency, effectiveness, and thinking.
Ultimately, those activities will help improve their work or its impact on their current as well as future projects.
This was the first post in a series of three, in which I try to highlight some core learnings from our study on developer channels. Check back later for the next part, or just get notified.
The journal “Transactions on Software Engineering” has recently published an extensive report on our study; you can read the preprint here.
If you’re a software developer, what channels do you use in your work? And how do you make them work for you? What essential benefit do they provide you?