One of of the things that I’m very passionate about is collaboration within development teams, within organizations, and in the larger development community as a whole. Of all the places that I’ve worked, and projects that I’ve worked on, I’ve always felt that there was a lot of room for improvement. Communication between groups is always somewhat poor, and this results in a lot of inefficiency. Experts in their areas are not consulted or utilized to solve problems where they should be involved, and learning is much poorer than it could be.
I consider myself quick to learn the levels and skills of people I work with, and who to ask about what. But I could still do better. Improving collaboration is an area for continuous improvement.
This post is a summary of my thoughts on why this is an issue, and some ways to improve it. I focus mostly on the situation for an individual organization, but much of the advice could be applied to small organizations that work in community workspaces surrounded by other small companies.
Every day, you and your team members are doing things that someone else could do better and faster.
Now, this isn’t really as bad as it might sound. These people that could do your work better and faster might be very expensive. They might not have time to help you. They might not be interested in your work. Having them do your work would deprive you of the learning experience that would make you more efficient the next time around. Most commonly, you probably just don’t know where to find these people easily & quickly.
Of course, you could jump on Stack Exchange and ask your question there. In fact, that might just be the best option.
But … what if there is someone that works at the same company, in the same building, that could help? What if there is someone on your team that you already work with every day that knows everything about X, but you had no idea, because you only work on Y together?
It doesn’t get much better than having someone help you out in person, in real time. Having someone within shouting distance, a short walk away, or at the other end of a phone extension or a company IM system is leaps and bounds easier than trying to get personal assistance in other ways.
If your real-time network (phone, IM, IRC) extends beyond your company, or you work in a collaborative workspace surrounded by freelancers or other companies, that extended network is often just as easy to tap as a resource.
The goal of increased collaboration within your network is real-time learning & the benefits of a quick feedback loop, and hopefully the re-use of others’ work. Within a team or organization, there is a higher probability of working on the same or similar thing, and there is less domain learning & explaining required to make it pay off, which is another reason why you should start close to home.
Cost of Collaboration
The problem with collaboration is that it takes time to build relationships, to learn who to ask about which kind of problem or technology, and who is helpful & willing to listen. Collaboration requires investment in getting to know other people, their work, and their areas of expertise. This isn’t free. However, done well, this investment can have huge payoffs.
Some employees may resist collaborating and helping others, because it takes up their valuable time. But what is an interruption to the other person can be an attempt to be more efficient for the first person. On the other hand, it may not make sense to have an expensive or unique expert spending all of their time answering questions for less experienced team members.
It helps to look at it in terms of team productivity and whether it’s promoting learning, and hopefully overall increased efficiency, in the longer term. Individuals & teams need to find their balance together.
The stage where you do your requirements analysis is often the most important time to get together anyone that might have something useful to contribute, or that has been a valuable contributor in the past. Of course you don’t want too many cooks in the kitchen. Keep it small, and have one person that makes the final decisions (Product Owner). Although it’s true that having more people together costs more in terms of man-hours, remember:
Nothing costs more than building the wrong thing.
With collaboration you’re not just trying to make work proceed faster, but aiming to eliminate unnecessary work, as well as discover new options. I am amazed at how many projects that I end up looking at where I see much better ways to have done things, with a tiny fraction of the effort. I sometimes wonder how many things I’ve done that could have been done much more efficiently if I’d had someone right there to give a bit of guidance. Remember, in many cases:
You don’t know what you don’t know
How to Improve
Here a list of ways to increase collaboration that have proved effective for me. The goal is to get the most bang for your buck: keep the cost of collaboration as low as possible.
If your teams aren’t having short (15-minute) daily stand-up meetings or daily scrums, then this is the first place to start. Just having everyone quickly talk about what they’ve done for the past day, what they’re going to do today, and any roadblocks or impediments is a powerful way to increase collaboration.
Where a lot of organizations fall short, however, is in not having a daily “Scrum of Scrums”: a quick meeting across teams with a representative from each team. Just taking it another level up and discussion work across teams can result in some very productive collaboration between teams. Of course, this has to be supported by the organization, and a dysfunctional organization that doesn’t allow members of one team to spend time helping a completely different team, with positive reinforcement and without negative consequences will struggle with this.
Shared Source Code & Files
Within your company - or if possible, outside it as well - your source code repositories should be open for all to view. You can learn a lot about the expertise of people just by reviewing their code and commit histories. In addition, you can find code & work that has already been done by someone else that you can directly re-use, saving you time, and minimizing duplication of work & code.
If you share your code on Github, you may just end up with other people doing some of your work for you.
Work tracking system
One of the biggest things that you can do to promote collaboration is to have a work tracking system, where you keep a track of features, bugs, and tasks being worked on across the organization. Everyone should track their progress on each of these with the right amount of detail, making notes of how they’ve solved problems, open questions, and anything that might be useful to themselves or others later. It is best that such a system is open to all to browse. It also needs to be clear why things are being done - describing work in the form of User Stories can help with this.
Work recorded in such a tool is also easier to follow than source code changes, as it is at a higher level. One can get the big picture or work being done by a team, and - if having the proper knowledge & expertise - might be able to suggest improvements and alternatives to the team. Entries in a work tracking system can be browsed and read quickly, which is often faster than someone explaining the same work. When reading, you can skip over details and take it at own pace. It’s asynchronous, so you can do it without needing the author present to tell the story in person. All this leads to efficient, on-demand situational awareness.
Having a prioritized backlog for your project is an excellent way for someone external to the team to very quickly get a good idea of what is happening on the project. Don’t go without one. The backlog should be integrated with your work/bug/issue tracking software.
Although tracking work with a work tracking system is a great tool, a huge amount of information can end up here, and it’s not practical to read through it all to understand a project if you haven’t been keeping up, or are a new hire. Information kept here is great for history, but not the best way to get a good idea of the current state of things. This is where a wiki comes in.
A wiki is a collaboratively edited set of pages that provide current and accurate information on anything that needs to be documented for reference. Deciding what to put in a wiki can be tricky. You don’t want to duplicate information than can be found elsewhere (unless the wiki version is much easier to consume). There is also a maintenance cost associated with a wiki, because you have to keep it current, or it will lose its usefulness.
Tracking work well in writing - in both a wiki and using a work tracking system - is the best way for someone new to get up to speed quickly and make valuable contributions.
I am a strong proponent of having some sort of company-wide instant messaging solution, that all employees use. For a lot of people, especially programmers, the barrier to sending an IM is much lower than making a phone call or writing an email, which means it’s easier & more natural to collaborate with it.
Uses & Benefits of IM:
- communicate with many people at once, in different locations (multiple conversations)
- more synchronous than email
- can be asynchronous - respond when you want or can; messages can be ignore or postponed
- reduces clutter in email inbox
- written record for later, so don’t have to take separate notes or remember everything
- use it on team even if sitting next to each other, to share URLs, terminal output
If you’re using IM within your team or organization, you should have everyone using a shared roster. Make it as easy as possible to communicate by making it so that each person doesn’t have to manually add every other person they want to communicate with.
One important thing with IM is you need to know when to pick up the phone. Don’t spend a half hour having an IM conversation that might take 10 minutes by voice. To make it easier to switch to voice, your IM software should have voice capability built-in, so that you can just click a button to turn an IM conversation in to a voice chat.
An open workspace is a step beyond IM in terms communication with many people at once, as well as a step up in terms of distraction & interruption: it’s hard to ignore everyone around you, especially if they’re tapping on your shoulder. But, you can still use headphones to help block things out when you want to get in the “zone” - much like just ignoring the flashing IM window.
A couple of benefits of working in a collaborative or open workspace:
- you learn what others are doing, and thus know who to ask for help on a particular topic when it makes sense
- you’ll hear about technologies & tools that will make your life easier, and know who to ask for help when you want to start using them
Having others peer review your code is a great way to enhance learning, improve your code, and promote re-use. Someone that reviews code may give you suggestions on how to do something better, or may learn something that benefits himself. If nothing else, it increases awareness of what others are doing, which helps you remember who is doing what, so that you or others know who to ask when you need someone with experience in X.
Bio pages for Employees
One great way to foster collaboration is by having a web page for each employee that lists their experience and expertise, in a good amount of detail. These pages should be similar to a resume, but you keep the same format for every employee within the organization, so that browsing them provides a consistent experience. Make sure the pages can be searched. By having a place where employees can browse, search, or lookup colleagues, and find out about their skills & expertise, you can make it much easier to find which person you should ask about a particular problem, tool, or technology.
A lot of companies that want to add a personal touch to their public website have Meet the Team pages for the outside world. These are great as well, but internally, and for external collaborators, you’ll want to have something with more detail.
Having a happy hour or social event can help to increase collaboration by helping to build relationships. Even if you’re not talking shop during the happy hour, socializing with others will help make it that much more comfortable and natural when you want to ask them that work-related question next week.
Increasing collaboration is not without difficulties. Some are afraid of someone stealing their job if they reveal too much about their work. For others, collaborating more means that it might become obvious they are incompetent. If you’ve got employees like this, then you’ve got much bigger problems than poor communication.
Like Agile & Scrum, increased collaboration brings with it increased transparency, which often makes it painfully clear where the problems are in an organization.
Some people don’t see the extra work of collaboration as being worth it. They might just not realize the benefits. But they could be right, and the extra work involved won’t benefit them personally. I think this is a very rare case in practice, and by efficiently using the right methods, you can minimize the cost. But, each person has to at least be willing to give some of these methods a try.
It takes self-confidence, self-esteem, and humility to be able to open yourself by asking for help, or sharing your work more openly. I would argue that people will want to work with more you if you are open, and the benefits should outweigh negatives and make you more desirable as an employee.
Interruptions: Good or bad?
I’ve heard it stated that it takes 20-25 minutes to regain the same level of focus you had originally after being interrupted while doing something. In the Social Network there is a scene where a programmer for Facebook is wearing headphones and is focused on writing some code, and Jesse Eisenberg’s character says to not interrupt him, because he’s in the in The Zone.
While it’s true you don’t want your developers to be interrupted while concentrating hard on getting important work done, it’s also much better to have someone interrupt them, ask what they are doing, and then suggest a solution that will save a day’s work, than have them remained uninterrupted and spend 8 hours focused on doing something that doesn’t need to be done.
Some places, like Fog Creek, give their developers private offices so they have somewhere to go when they need to work uninterrupted. Many other Agile software development teams use open workspaces because they believe the benefits of an open workspace outweigh the costs of interruptions.
There is no one right answer to this question. I would suspect many teams & individuals will work out a system naturally over time that works for the team and themselves. Make sure that the importance of both team efficiency and individual preferences are kept in mind.
With the right tools and a healthy attitude throughout the organization towards collaboration, I believe that using these methods across a team and organization can have huge benefits. There may be some discomfort for some, and you may have to change how you think about and evaluate performance in the organization, but the investment can pay off in spades.