Becoming a PHP Professional: Practical Teamwork
Last time, we discussed social aspects of teamwork, and how working in a team can both benefit and harm you. There's loads to take into consideration when working with other people, and lots to be gained.
This time, let's talk about practical aspects of teamwork, particularly virtual teams or, in other words, teams with remote members.
Time Zone Difference and Broken Bottleneck in Teamwork
When working in a team with remote members, time zone differences can be a huge hindrance. Take for example SitePoint itself – I write for an audience which is, in a large part, US, SitePoint's HQ is in Australia, and I'm based in Croatia. That's three time zones 6-8 hours apart each, which means a full day can elapse before people answer your emails.
When you have a lot of emailing back and forth, not only among the team members but also among the clients, authors and whoever else, things tend to get messy fast. You need a way to stay in sync with everyone at all times.
Another problem is what I like to call a broken bottleneck syndrome. Usually, when only one person is directing requests to the development team (a filter, team lead or the project owner, for example), that person can become a bottleneck if the requests are coming in too strong or the dev team is too slow or small to implement them. The people feeding that person with instructions then tend to go around him/her, and cause a spillage of (often contradictory) information overflowing the dev team.
Yet another frequently encountered issue is multiple people working on the same piece of code. Bad prioritization and organization, in a nutshell. Sometimes, a developer might even end up in bug-jail (that's when you have so many bugs on your previous work, you're forbidden from building anything new until you get out of this jail mode), and this halts further development, especially if other devs depend on your completion of your part.
These issues can slow down development or even, at times, bring it to a complete halt, and there are several remedies for them. We'll divide them into organic and inorganic solutions.
As I mentioned in the previous article, the importance of a capable lead and a capable filter cannot be understated. The capable lead will be able to formulate tasks properly and divide them into smaller units, while the capable filter will make sure requests that don't make sense or just aren't worth implementing never even reach the ears of the developers. A filter's role is absorbing the requests of the rest of the company, and being the only means of communication between the dev team and the non-technical folk. The filter's strength directly influences the time it takes for a broken bottleneck effect to occur.
A capable filter needs your help – you need to refuse orders from unauthorized people. Even if you get approached by the CEO, bring the task to the CTO/project lead/team lead before even considering doing it. Your superiors are usually closer to the person making unreasonable or simply out-of-schedule demands, and can nip it in the bud. Fail to resist once, and you set an unhealthy precedent.
Even if non technical people do somehow breach the barrier, make sure you're tolerant and calm towards them. We all know how utterly frustrating it can be when a marketing person keeps calling a web page a slide, or when a logistics person can't describe an interface in words you'd like them to use and instead compares everything in life to Excel stylesheets, but tolerantly listening and decoding their wishes means you can a) get rid of them faster and b) describe their desires to the lead/filter, so they can approach them, explain things, and maybe formulate a task if it truly is urgent.
An enormous help is making sure there is at least some work hours overlap. Setting up your work time so you can have an overlap of at least 2 working hours with the rest of the team and especially the lead is of utmost importance. An overlap in work hours allows you to catch up in real-time, and lets you perform another incredibly important aspect: video and voice calls. If a picture is worth a thousand words, a call is worth a thousand emails. One call can both help you report on your day, dig deeper into unclear tasks and requests, build a better itinerary, register complaints and it has the added benefit of improving your English.
Under inorganic solutions, there are several applications and web services I'd like to mention. The list is by no means exhaustive, but I've used most if not all of them at times, and I don't recommend something I don't actually stand behind – rest assured that all these do what they're supposed to do, and do it well.
Trello is one of the main tools we use at SitePoint. It's more non-developer oriented, more appropriate for editors and managers, but its excellent todo-ish card layout and markdown support make all tasks easily describable and clearly visible. If you communicate with non technical personnel on a regular basis or like to throw ideas around with teammembers, Trello is a good choice. There's a free option, so give it a go.
Basecamp is a popular alternative to Trello, and is basically a glorified team-enhanced to-do list. Like Trello, it supports nesting, discussions and file uploads. It's not free, though.
Google Apps can host your entire company's email folio and follow it up with closed-door Google Docs and Google Drive, as well as group messaging, Google Groups, company calendar and much more. Google Apps are an entire suite of applications I wish more companies used. What's more, Google Apps for Business supports Hangouts, so you can communicate via IM with your team, and even send messages to and from your mobile phone. In fact, Hangouts even goes so far as allowing you to join a video call from two locations – for example, if you're getting a video call while you're 5 minutes away from the office, you can answer it and talk on your phone. As soon as you reach your computer, simply hitting "Join this call" will open a stream on the computer as well, and you can hang up on your phone (or leave it on and have multiple camera angles of yourself). It's all extremely fluid, and makes for a truly professional communication environment.
FlySpray is a super simple web based open source bug tracking system that can help you handle the simple bugs in day to day work. In my previous company, we used it as a front – we let the non technical people submit bugs and requests there, and then a filter person would weed out the nonsense and describe the proper bugs into more detail. This made sure we never got an incomplete report, which made reproduction and fixing that much faster.
Github is an online social coding network. It's a hub of open source repositories (or closed source if you pay) where everyone in a team can easily collaborate, without the pain of manually setting up a repo on your own servers. BitBucket is a viable alternative, and offers free private repos, as opposed to Github.
Atlassian, the makers of BitBucket, also have various other excellent team collaboration tools like Confluence and JIRA – both allowing you to work with your team in real time and use a single point of data collection. Jetbrains also offers a good set: TeamCity (free professional edition) for continuous integration and YouTrack (unlimited 60 day trial, or 10 user free pack) for issue, request and bug tracking.
If you do Agile Development (more on that in a future article), the best tools for the money are said to be PivotalTracker and GreenHopper (a JIRA Agile plugin) these days. Both tools have some free plans you can try out, but we'll do a more in-depth analysis soon.
Last but not least, if all you need is a good team based todo list, I can't recommend Wedoist enough – being very similar to Todoist (which I use daily), the interface is streamlined and focused on the tasks at hand. It's everything you've ever seen in all the other Todo apps, but much improved.
If you're the member of a dev team, I recommend a healthy mix of Github and TeamCity, and Trello for discussions. If you're in a managerial position and decide on projects and courses to take, I wholeheartedly recommend Google Apps. If you're in a flexible remote team, use Wedoist and see how it suits you. If you practice SCRUM, add PivotalTracker to the mix.
This article offered some practical solutions for improving teamwork and productivity in a team. In a follow-up article, we'll be covering practical team based tools in greater detail.
Do you have a favorite collaboration tool? What approaches does your team use to stay afloat in the ocean of problems? Let me know in the comments below, or on Google+.