I have been doing software development for over 30 years and it has been fun to watch how the idea of collaboration has evolved. In the early 80s, in one of my first assignments as a developer I got my very own cubicle. It was in one of the far corners of a cube farm that worked really well as a cave where I could go and get my work done with only a few distractions. I was near the printer and its constant buzzing, chirping, and groaning became a white noise I that I eventually got used to. Back then, we had 3278 terminals and the keyboards were not quiet; the sound of fifty keyboards all clickety-clacking at the same time provided another type of sound that drowned out the all-too-often personal chatter. Yes, we did need to get up occasionally and ask a fellow developer a question and even less frequently brainstorm about an idea. But on a normal day, we all sat in our caves sprinting towards all of our somewhat-connected individual goals.
As the years went by and I progressed in my career, I got to move into an office. The only difference in collaboration was that I could actually close my door if I needed to concentrate on something and those who hadn’t reached my lofty level would more often get up to come see me when they needed something. Back then, in the 90s, most communication was face-to-face or via email systems like PROFS and LOTUS NOTES. The advent of email was important because it meant you could make your point without being interrupted and it made it especially easy to take cheap shots at those you didn’t like since you didn’t have to look them in the eye. It also meant more of what you said was recorded for posterity, just ask Oliver North (if you’re under 40, you might have to look that one up). While email allowed us to communicate with our teams without having to actually get up and walk, we were still a long way from being truly collaborative.
Over the next decade, companies realized that office space was expensive and could be a lot cheaper if we could squeeze more people into less space. Cube farms started to return and people started sitting closer together again. Instant messaging began to arrive in the work environment and individuals had even more opportunity to mix it up with the other individuals that were closing in around them. People still loved having their own space, though, that they could personalize and sometimes hide out in.
But as office space concepts were evolving, so were ideas about producing high quality software on more aggressive schedules. Waterfall processes that were built on “walled off” teams that depended on expansive documentation as communication devices were being thrown out or at least altered in favor of iterative and incremental approaches. Lean practices used for manufacturing were being retrofitted for use in building software. And as the formal processes changed, so did the expectations for development teams and how they communicated with each other and other teams.
The new mantras are “be agile,” “eliminate waste,” and “collaborate.” No longer are individuals being rewarded by being cave dwellers. The concept of team goals over individual achievements has made those of us who were rewarded for outperforming the person in the cube next to us rethink what success means in our new development environment.
So here we are in 2013, no longer hiding out in our cubes waiting on the next assignment but, in some cases, sitting elbow to elbow with team mates. Are we now automatically collaborative? I would suggest we are not. As individuals, we still need our own space and our own time alone. Our skills as development team members are still founded in our problem-solving talents and while some problems lend themselves to brainstorming and team synergy, others require us to sit our desks and figure things out. However, modern-day processes like scrum or kanban expect us to be in constant communication with our team mates.So where is the happy medium?
Here are my recommendations for being the right degree of collaborative:
- Get to know your teammates (even the ones you wouldn’t normally hang out with). Yes, every team has annoying teammates (someone on your team probably thinks YOU are that person). As a team, you have to get over it and figure out how to engage everyone’s talents effectively. Be professional and try to be friendly to everyone.
- Listen up and speak up. Some people on your team have an opinion about everything (I fit this category) and some are quiet and reserved. Give everyone a chance to speak, keep an open mind, and don’t be afraid to offer up ideas.
- Offer help. Not everyone has your skills, experience or perspective. When others are struggling, help out by offering advice or insight, but don’t shove it down people’s throats. And when you are the one that needs help, don’t waste a lot of time. Once you’ve tried to figure out problems on your own, ask for help and don’t wait until the last minute.
- Be selective about interruptions. It’s a two-way street. Don’t ask the person right next to you to figure out every problem just because they are there. It’s good to work things out as a team, but try to consolidate your questions rather than constantly interrupting. If it’s something that two of you really need to conquer together, pair programming (or testing or designing or documenting) works really well.
- Get up out of your chair. Email, instant messaging, phone calls, and texting are good substitutes for face-to-face communications when necessary, but the best way to communicate is to get up and go talk to people. Hopefully, your work environment makes it easy to just turn around or stand up and look to find the person you need to talk to. If it doesn’t, then you have to make an effort. Don’t leave out those who are seated further away.
- Use high quality head phones. We all need our private time to concentrate and get work done. These days we sit in noisier, more interruption-prone environments and finding a quiet corner is impossible. Getting lost in your favorite musical getaway will often provide that solace you are looking for, but leaky head phones disturb those around you.
I doubt we will ever go back to the days when we were encouraged to go off and solve problems on our own, at least on medium or large teams. To that end, always remember, software development is a team sport; continue to play hard and support the team.
This guide will introduce you to the world of Software Architecture!
This 162 page guide will cover topics within the field of software architecture including: software architecture as a solution balancing the concerns of different stakeholders, quality assurance, methods to describe and evaluate architectures, the influence of architecture on reuse, and the life cycle of a system and its architecture. This guide concludes with a comparison between the professions of software architect and software engineer.