Coding Culture: How To Build Better Products by Building Stronger Teams
Software developers spend a tremendous amount of time and energy focused on how to build the best possible products. We obsess over what web framework to use or whether to go with a NoSQL or SQL database. While these questions are important, they often neglect to address an equally important aspect of software development -- culture. This article shares our experiences at Atlassian on maintaining a strong innovative and collaborative culture.
Products constantly change and evolve. In the next few years, a product that you’ve poured your blood, sweat, and tears into may not exist anymore. However, if you’ve also focused on creating a strong team and coding culture, you will always be poised to take advantage of opportunities (and overcome obstacles) that come your way. Furthermore, developing a strong culture requires a shared understanding of what your team stands for and this cohesion will be reflected positively in the products that your team builds. Great culture contributes to great products.
So what is “great culture?” Too often, the visible trappings of culture -- free food, free drinks, yoga classes, Aeron chairs, video games, office Nerf guns -- are equated with culture, but this is a mistake. Yes, a lot of companies, especially in the technology business, are offering these things,, and they are great, but they have nothing to do with culture. Culture is how we talk, work, organize, win, and lose together. It is not something that you can pinpoint, but that leads to happier, more productive employees. All the free food and office perks in the world are useless if people feel afraid of failure, trapped in a rigid hierarchy, or that their employer values profits over people.
The workplace of today is no longer dominated by a 9-to-5, clock-in clock-out, assembly line-esque mentality. For knowledge workers, like software developers, output isn’t valued by volume or hours, but by creativity and quality. We have now the freedom to work in the office, at home or in a hotel room whenever we want. This creates infinitely exciting opportunities to cultivate a culture that benefits every employee.
A Culture of Innovation
There is a familiar narrative in the tech world of small, innovative companies losing some of their innovative abilities as they grow. By definition, large organizations are more structured and less agile than startups, which can make it difficult for groundbreaking ideas to be conceived of and surfaced. One reason culture is so important is that it can help companies stay innovative, regardless of their size. Creating a culture of innovation requires far more than saying “OK folks, it is time to innovate.” or creating a dedicated “innovation department.” You can’t command innovation, nor should you isolate it to one siloed group.
In my experience, the best way to motivate people to innovate is to give them time to come up with ideas and try them out. Our approach at Atlassian is to bring everyone together every quarter for a 24-hour hackathon called “ShipIt Day.” ShipIt Days include anyone who has great ideas for how to improve their department and the product. Then people form teams around the ideas with the biggest impact potential (or they can work alone) and at Thursday at 3 PM, ShipIt Day starts. There are no rules except that you have to ship something by Friday at 3 PM. This happens in Atlassian offices around the world and everyone votes for a global winner.
It’s amazing what can be achieved in 24 hours. Many great things that came out of a ShipIt Day made into our products. Additionally, the events keep people happy because they have an outlet to bring their ideas to life. ShipIt Days inspire everyone in the company to push themselves constantly and think about different ways to solve problems.
A Culture of Happiness
Over the past year, a weight of research has emerged that proves something we already intuitively know -- happy employees are productive employees – and generally enable more profitable, faster-growing companies. ShipIt Days are part of keeping people happy not only because they get to work on their ideas, but also because they bring people together. Teams, where employees know, respect, and enjoy spending time together, are happy teams. Employers can cultivate happiness by carving out dedicated social time where employees can relax and have fun.
Company happy hours, outdoor summer parties, and themed holiday events are all great options to bring different people from different departments together. Another great idea is to celebrate team wins together, such as by throwing release parties because it is important to recognize great work. Victory feels so much sweeter when it is shared. You can also organize activities like river rafting or rock climbing where employees work as a team and learn more about the strengths and weaknesses of their coworkers. These types of events strengthen relationships between people who work together and forge bonds with people who don’t have much opportunity to interact. This helps people feel more comfortable being honest and communicating with each other, while also emphasizing that they sink or swim as a team, which helps avoid negativity or finger pointing.
These are things many companies do today, thinking that's all they need to do to build a culture of happiness. But not so.
In order to ensure your happiness efforts are working, managers should find ways to check in quickly and conveniently with their employees for fast feedback about how they are doing and what could be done better. Atlassian actually built an iPad app called the MoodApp that is stationed at every exit to the office, so when people leave, they can share how they are feeling, if they feel their manager supports them, etc. Even though we found out that over 90% are happy doing their job, we also saw that around 30% of respondents feel that - if they do something well - they don't get recognized for it. We made the team leads aware of that number and started a campaign promoting our Kudos program: An easy way to tell another employee that you really appreciate something they did. They just have to fill out a ticket in our internal service desk. After a few days the recognized employee gets a small gift card with an Amazon voucher or tickets for the cinema. We had an increase of Kudos tickets but at the same time the number of employees that felt their work weren’t recognized dropped by 10%. Spotify did something similar after finding out that 91% of their employees were happy. 91% is a pretty great number, but they wanted to know why the remaining 9% were unhappy. They talked to those people, made some small tweaks, and that number bumped up to 94%.
Certainly, everyone can’t be happy all the time. Some days are more stressful than others, personal issues may be happening outside of work, and events that are out of our control happen, like a hard drive crashing on the production server leaving hundreds of customers without service. Ups and downs are inevitable, but by building a strong team, you enable employees to share the pain when things aren’t going so well.
A Culture Driven by Values
Culture is both an organization-wide concern, as well as an intra-team one. And, a strong culture is based on strong values that apply to the entire organization. Values guide the culture. Atlassian has built its culture, for example, around five strong values, such as ‘Don't #@!% the customer.’ For our engineering teams it means that everyone should always be aware of the customer.
We’ve all heard this before, but it bears repeating. Everyone should always be aware of the customer, and customers should be involved in the product development process. You can do this through video interviews, open feature requests with a voting system, story mapping, and by posting customer personas around the office, even in the bathroom. Making awareness of the customer central to how your team operates reminds everyone why they are building what they are building. It ensures they understand the problem(s) at hand and that features are directly connected to the products.
Customer awareness also helps teams stay passionate about their products. In addition to passion, another important engineering value is a commitment to excellence. Crappy code should never be acceptable, even for the sake of time. Create an environment where it is OK for a developer or team to say that a project will take a week instead of a day, because work that is rushed won’t be as good, and you will probably have to go back and fix it later anyway.
Another Atlassian value is 'Be the change you seek', which means you as an engineer you should always look for better ways to do things. Remember that change is the only constant and what was a good practice yesterday might not be the case today. Teams should be open to trying new approaches or using different technologies, but don’t fall prey to implementing the newest framework just because you can. Also, beware of prima donnas on your team who may over shoot the goal or do things that aren’t good for the entire team or the product. Keep everyone working in concert to Get Stuff Done. This also requires balancing the need to make architecture changes. If you keep changing the architecture but never release anything, that doesn’t help anyone. Don’t over design your product. It should be nice, but it doesn’t need to be perfect. Get it out, get feedback, and make it better. Balance your passion for code with the needs of the customer.
Engineers are using these values to build software that customers use every day and it's a great feeling for them when something like a release happens to showcase their work. However, not every department in an organization has that privilege. For example, the service department could track their progress and celebrate based on the number of support cases they handle, but that is not quite as gratifying as releasing a product you built. A couple years ago, our service team decided to interpret what our values like 'Don't #@!% the customer' means from them, and put that on a poster that they saw every day when they walked into the office. The poster contains statements like “Look forward to each customer”, “Work through problems while they are small”, “Keep learning”, and “Make the customer awesome”. This fostered a shared sense of purpose and enabled the support team to recognize their “cultural rock stars” who were standing up for and lived by those values.
A Culture of Transparency
It is natural for companies to divide into teams and culture must create an environment where teams are 1) as cohesive and effective as possible while 2) able to fluidly interact with other teams. We shoot for small teams with an average of four to eight people. At this size, every person in a team can know what their coworkers are doing without sophisticated communication tools. The bonds between them hold strong.
However, as companies get bigger and bigger, these teams and departments tend to get divided into silos that can be difficult to breach. Part of building a strong organizational culture is keeping the barriers between groups as low as possible, so people can always learn from and get or offer help when needed. Everyone in an organization, no matter how large, is fundamentally working towards the same goal, and it is important to emphasize that. For example, developers may get frustrated because they think the legal department doesn't allow them to use an open source library just because it's easier for them to say 'no' instead of finding a solution. And, people from the legal department might be thinking that developers don't understand the legal issues by using that specific software license.
The best way to overcome these silos is to enable employees from different departments to connect as people. Events, like those mentioned above, are part of this effort. You can also have new employees write introductory blog posts with information about themselves and implement robust collaboration platforms where people can easily share. Employees should also be able to tune in to what is happening in other departments through blog posts and announcements. For example, if the design team won an award, share that news with the whole organization. Share the fails as well to start discussions -- you never know who may have something valuable to contribute. Transparency is key to keeping culture alive.
We write everything we want to discuss or keep in our collaboration platform Confluence. We discuss ideas, grow them into features, and develop them collectively. This works better than the phone, where what is said is not automatically documented, or email, where things are easily buried. Chats are also a great resource. Using our team communication platform HipChat, chats have become our nerve system. Every team has its HipChat chat room and the history is saved, so someone who is traveling, in a long meeting, or wants to get in-the-zone can turn off notifications and catch up on what was said later. We also connect our chat to other systems. For example, if a build fails, we get a chat notification and can start a discussion right away. There are inter-departmental chat rooms in addition to chats for each team that allows people from different parts of the organization to connect. For example, a legal employee and someone in HR can participate in a football-themed chat room to discuss planning a pickup game or rehash a professional game from the weekend.
Transparency and communication are particularly essential for distributed teams, which are becoming the norm. These chat rooms connect people across time zones, keep them on the same page, and enable them to have discussions. They also tear down hierarchies within the organization. If the CFO publishes a blog post, any employee can comment, and vice versa. All this free-flowing communication involves a lot of opinions, which can be great, but it is also important to keep all conversation respectful.
As companies grow bigger, spreading and maintaining culture through the entire organization can be a challenge. When I joined Atlassian three and a half years ago, we were around 350 people, and now we are more than 1,300. We know that our culture will change as we grow even larger, but we also know that our values will help keep our culture intact if we do the right thing and hold people accountable living them
We scale culture by creating small programmer teams that also include designers and QA people and that are cross-functional, so if we don’t need a designer for the next sprint, he or she can go to another team that needs them, and vice versa. Another challenge is organizing multiple teams that work on one product. I’ve seen companies address this by creating a front-end team, performance team, database team, etc. In my experience, this creates coordination problems because a feature or user story may run across all these teams.
We found that giving each team responsibility for a specific theme works much better for us. For example, our Confluence product has an “easy start” team that focuses on bringing people onto the platform. Then we have an enterprise team that focuses on large customers, not only in terms of performance, but also in how to present 1,000 users in the administrative screen. The teams work autonomously but can get support from each other when necessary. Each team decides how they solve problems and what personal tools they want to use. We like to call this approach a “do-ocracy” where every team is empowered to work in the way that is best for them.
While autonomous, the teams are encouraged to seek support when they need it and share good ideas or features that other teams could implement as well. If the easy start team says, “We’re planning to build this new Confluence page layout functionality," we share that idea with all the other teams. And they can say, "Well, for enterprise, you’d need to take care of this or that." Everything is discussed, which creates an environment of collective ownership. Collectivism requires transparency. To achieve this at a code level we do code reviews in Stash and Bitbucket. But sometimes it is hard to find the best person to review the code changes. So we've written a free add-on for Stash called Stash Reviewer Suggester, which suggests reviewers based on whether people have previously changed or are the original author of the file. They are the best people to review the changes, because the know the code best. We’ve found that this approach scales much better and leads to a flatter organization, which leads to more innovation.
Picking the Right People
Even the greatest efforts to cultivate a culture will fall short if you don’t hire people that are a good fit for your company and each team. It is okay to be picky and refuse to compromise on the people you hire. Picking the right people will help protect the culture you’ve worked so hard to create. Atlassian conducts screening questions, online coding tests, and numerous face-to-face interviews before we decide on a candidate. Each person needs the right skill set and compatibility with the company’s values and employees.
That said, you should not only hire people who fit a certain stereotype. Believe me when I say you don’t want a bunch of brogrammers, and this may happen if you only hire your buddies. Your culture and productivity will grow with diversity. Culture dies if it isn’t invigorated by new influencers. Hire women, hire people of different ages, backgrounds, education and work experience, ethnicities, etc. and make sure that they are welcomed. We do this by giving every new employee a buddy who can introduce them around, fill them in on the important stuff, let them know about weekly get-togethers and more. In our San Francisco office, we have “beer bikes” on Fridays where new hires ride a bike with beer on the back and hand them out as a way to introduce themselves and stimulate conversation. We also organize boot camps where every morning for about four weeks, senior employees teach new hires about things they need to know and new hires can pick their lessons.
To circle back to the beginning -- what creates a great culture? As we’ve explored here, culture comes from allowing people to let their creativity thrive and bringing employees together to have fun. It comes from prioritizing a shared value system that causes everyone to work with purpose and opening up the lines of communication as far as they go. It’s about emphasizing transparency and honesty, respecting autonomy, and encouraging collaboration. It’s about maintaining all these things no matter how large an organization grows and protecting that culture by hiring people who will maintain it. Culture is the foundation from which everything else will grow – so, make sure it’s a strong one.
About the Author
Sven Peters is a technology evangelist for Atlassian, the team collaboration software company.
That said, you should not only hire people who fit a certain stereotype. Believe me when I say you don’t want a bunch of brogrammers, and this may happen if you only hire your buddies. Your culture and productivity will grow with diversity. Culture dies if it isn’t invigorated by new influencers. Hire women, hire people of different ages, backgrounds, education and work experience, ethnicities, etc. and make sure that they are welcomed
Peter, you should read that paragraph that you wrote and think about where you went wrong there. Hint, think about your own stereotypes and how they influenced your writing there.