A team’s culture is an interesting thing, because it’s something that will happen whether you purposely do anything to drive it or not. Culture happens naturally. Without doing anything, though, you might not get the culture you want.
Looking at a lot of tech companies, it might seem like you just need to get a pool table and free beverages and the engineers will be happy. While that’s a great thing to do, that’s just a perk that can help your team’s overall happiness. It won’t change your culture. Or maybe you can get someone to paint a mural with the company’s core values. This doesn’t do much to drive culture either.
So, what can you do?
What would a great engineering culture look like?
Hire the Right People
A great engineering culture is a team of smart people who are empowered and enabled to get the right things done the right way, without unnecessary distractions and processes, working together collaboratively.
This is enormously important for building a great culture. People make or break the culture. Don’t look for keywords on a resume. Look for people who are good at critical thinking, who are problem-solvers and troubleshooters, who are smart and get things done. Joel Spolsky’s book on this is very good and is recommended.
To find out if they’re smart and get things done, have a real conversation with them. Pure technical questions are good, and can help determine if the person knows a technology, however it doesn’t tell you if they can get things done. Ask about how they built something, or how they would build something. Ask them about a technical challenge that you recently solved and see what approach they’d take.
What they do on their own can speak to this as well. What is their stackoverflow.com reputation? Do they contribute to or have their own open-source repositories? Are they active in user groups or meetups? What blogs do they read? What’s the last technology they learned that they weren’t specifically asked to learn?
Create a Good Environment
There’s a lot that goes into this. The biggest impact here is the structure, autonomy, and empowerment of the team and individuals. For example, many technology organizations are structuring into autonomous squads. Spotify was one of the first to do this. Small teams comprised of all the roles needed to implement software and that can manage it themselves are very effective. Good engineers do their best when they are given direction and strategies from their leadership, then are empowered and trusted to implement it in the best way. Leaders in the organization need to keep in mind that people notice more what you do than what you say. The daily actions and behaviors, both big and small, of leaders in the organization have a big impact on the culture of the team. Be careful that your actions are consistent toward the culture you want. Companies, especially large ones, need some processes. However, these processes should be as lightweight as possible.
Another aspect of a good environment is providing what people need to be productive. Providing several different areas for working other than their primary desk helps productivity — such as team rooms with large displays and whiteboards where teams can gather for design sessions, or smaller work rooms where a few people can gather to work through a feature or to troubleshoot an issue. There should be places for heads-down programming and places for collaboration. Ensure they have the hardware and software that they need to do their jobs effectively and efficiently. Provide opportunities for fun and challenges like hackathons.
Build Quality Software
Good engineers care about quality software. The culture of the organization should be one where the expectation is quality software that performs well, and time is given for building quality software and managing technical debt. Quality software includes both low-defect software, but also well-designed and well-written software. Good engineers can and will build this.
While autonomous teams are a great way to organize engineering teams, it’s important to have some shared philosophies and known architectural patterns that teams can utilize. This helps some level of consistency in the software across teams, and encourages cross-team collaboration.
Engineering teams should be able to utilize the best technology for the problem they need to solve. Teams should be allowed to use open source code if that’s the best thing for them. There are some guardrails that are needed here, such as expense or having too many competing technologies. However, it is important that there is decision-making power for the engineering organization to use what makes the most sense, both for new projects or for migrating older projects to newer technologies.
One of the best ways for engineers to build the best software, from a feature standpoint, is to get them some idea of what the user is feeling and what the user needs. This can be done to a degree through user stories. Really, though, ensuring the engineering teams understand how the users use the software and getting feedback directly from the end users, will give them an invaluable perspective on the software and can then enable them to build very valuable features.
This is a Starting Point
There’s certainly more to building a great engineering culture. These are some things, though, that can help organizations drive themselves toward the culture that they want. Ultimately, while you can’t just write down what kind of culture you want and expect people to act that way, you can do things that help move your organization to a great engineering culture.